gusucode.com > private工具箱matlab源码程序 > private/code_interface_and_support_files.m
function code_interface_and_support_files(fileNameInfo) % Copyright 1995-2016 The MathWorks, Inc. global gTargetInfo gMachineInfo if(~gTargetInfo.codingSFunction) return; end if(gTargetInfo.codingDebug) debugInfo.fileName = fullfile(fileNameInfo.targetDirName,fileNameInfo.sfDebugMacrosFile); debugInfo.machineNumberVariableName = gMachineInfo.machineNumberVariableName; debugInfo.debugInstanceStructName = gMachineInfo.debugInstanceStructName; debugInfo.tString = '_sfTime_'; sf_echo_generating('Coder',debugInfo.fileName); sf('Cg', 'dump_code_debug_macros', debugInfo); end % Generate the interface files only when there are no codegen errors msgString = sprintf('\nInterface and Support files:\n'); sfprivate('sf_display',msgString); if(~gTargetInfo.codingLibrary && gTargetInfo.codingSFunction) if gTargetInfo.codingDebug assert(isfield(gMachineInfo, 'debugInstanceStructName')); machineInfo.debugInstanceStructName = gMachineInfo.debugInstanceStructName; end if ~isfield(gMachineInfo, 'debugInstanceStructName') machineInfo.debugInstanceStructName = ''; end machineInfo.machineName = gMachineInfo.machineName; machineInfo.fileName = fullfile(fileNameInfo.targetDirName, fileNameInfo.machineRegistryFile); machineInfo.linkMachines = fileNameInfo.linkMachines; machineInfo.machineHeaderFile = fileNameInfo.machineHeaderFile; machineInfo.codingExtMode = gTargetInfo.codingExtMode; if(gTargetInfo.codingDebug) machineInfo.codingDebug= true; else machineInfo.codingDebug= false; end machineInfo.codingSFunction= gTargetInfo.codingSFunction; machineInfo.gencpp = gTargetInfo.gencpp; sf_echo_generating('Coder',machineInfo.fileName); sf('Cg', 'dump_code_machine_registry_file', machineInfo ); try_indenting_file(machineInfo.fileName); end code_rtwtypesdoth(fileNameInfo); buildInfo = create_build_info(fileNameInfo); %Query third party library information and add it to the buildInfo. %The "thirdPartyUses" variable contains classes derived from %coder.ExternalDependency and implements the static method updateBuildInfo. thirdPartyUses = gMachineInfo.thirdPartyUses; %When inccodegen is enabled if ~isempty(thirdPartyUses) cs = getActiveConfigSet(gMachineInfo.mainMachineName); SLHWImp = getHardwareImplementation(cs); tci = getToolChainInfo(buildInfo); context = coder.BuildConfig('sfun',SLHWImp,'C', tci, cs); for itp = 1:numel(thirdPartyUses) method = [thirdPartyUses{itp} '.isSupportedContext']; if ~feval(method, context) method = [thirdPartyUses{itp} '.getDescriptiveName']; construct_coder_error([],sprintf('The library %s is not supported by the current target, language or compiler.',feval(method,context)),1); end feval([thirdPartyUses{itp} '.updateBuildInfo'],buildInfo,context); end end %Update BuildInfo using the buildInfo method and args provided by %coder.updateBuildInfo updateBuildInfoArgs = gMachineInfo.updateBuildInfoArgs; %When inccodegen is enabled if ~isempty(updateBuildInfoArgs) for i = 1:numel(updateBuildInfoArgs) methodName = updateBuildInfoArgs{i}{1}; methodArgs = updateBuildInfoArgs{i}{2}; feval(methodName,buildInfo,methodArgs{:}); end end if gTargetInfo.codingMSVCMakefile code_msvc_make_file(fileNameInfo,buildInfo,gMachineInfo.machineName); end if sf('Feature','Developer') if(strcmp(computer,'PCWIN64')) code_msvc_vcproj_file(fileNameInfo); else code_msvc_dspfile(fileNameInfo); code_msvc_dswfile(fileNameInfo); end end if gTargetInfo.codingUnixMakefile code_unix_make_file(fileNameInfo,buildInfo,gMachineInfo.machineName); end if gTargetInfo.codingMinGWMakefile CGXE.Coder.code_mingw_make_file(fileNameInfo, buildInfo, ... gMachineInfo.machineName, gMachineInfo.targetName, ... gTargetInfo); end if (~isunix && gTargetInfo.codingLccMakefile && ... ~gTargetInfo.codingMSVCMakefile) code_lcc_make_file(fileNameInfo,buildInfo,gMachineInfo.machineName); end sfprivate('sf_display',sprintf('\n')); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function code_rtwtypesdoth(fileNameInfo) global gTargetInfo gMachineInfo hardwareImp = rtwhostwordlengths(); hardwareImpProps = rtw_host_implementation_props(); fNames = fieldnames(hardwareImpProps); for i=1:length(fNames) hardwareImp.(fNames{i}) = hardwareImpProps.(fNames{i}); end hardwareImp.HWDeviceType = 'Generic->MATLAB Host Computer'; hardwareDeploy = []; hardwareDeploy.CharNumBits = get_param(gMachineInfo.mainMachineName, 'ProdBitPerChar'); hardwareDeploy.ShortNumBits = get_param(gMachineInfo.mainMachineName, 'ProdBitPerShort'); hardwareDeploy.IntNumBits = get_param(gMachineInfo.mainMachineName, 'ProdBitPerInt'); hardwareDeploy.LongNumBits = get_param(gMachineInfo.mainMachineName, 'ProdBitPerLong'); hardwareDeploy.LongLongNumBits = get_param(gMachineInfo.mainMachineName, 'ProdBitPerLongLong'); hardwareDeploy.LongLongMode = int32(strcmp(get_param(gMachineInfo.mainMachineName, 'ProdLongLongMode'), 'on')); hardwareDeploy.FloatNumBits = hardwareImp.FloatNumBits; hardwareDeploy.DoubleNumBits = hardwareImp.DoubleNumBits; hardwareDeploy.PointerNumBits = hardwareImp.PointerNumBits; configInfo = []; configInfo.GenDirectory = fileNameInfo.targetDirName; configInfo.PurelyIntegerCode = gTargetInfo.codingIntegerCodeOnly; configInfo.SupportComplex = ~gTargetInfo.codingRealCodeOnly; configInfo.MaxMultiwordBits = 1024; % Uncomment to support complex type alignment in stateflow % configInfo.ModelName = gMachineInfo.mainMachineName; simulinkInfo = []; simulinkInfo.Style = 'full'; simulinkInfo.SharedLocation = false; simulinkInfo.ExistingSharedCode = ''; simulinkInfo.IsERT = false; simulinkInfo.PortableWordSizes = false; simulinkInfo.SupportNonInlinedSFcns = false; simulinkInfo.GRTInterface = false; simulinkInfo.ReplacementTypesOn = false; simulinkInfo.ReplacementTypesStruct = []; simulinkInfo.DesignDataLocation = 'base'; simulinkInfo.GenChunkDefs = false; simulinkInfo.GenBuiltInDTEnums = false; simulinkInfo.GenTimingBridge = false; simulinkInfo.GenErtSFcnRTWTypes = false; ansiDataTypeName = genRTWTYPESDOTH(hardwareImp,hardwareDeploy,configInfo,simulinkInfo); assert(ansiDataTypeName.multiword_types); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function tci = getToolChainInfo(buildInfo) global gTargetInfo tci = []; try tci = buildInfo.getBuildToolInfo('ToolchainInfo'); catch end if isempty(tci) %Synthesize a ToolchainInfo tci = coder.make.ToolchainInfo(); try compilerInfo = sfprivate('compilerman','get_compiler_info', true, gTargetInfo.gencpp); tci.Name = compilerInfo.compilerFullName; catch end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function hwi = getHardwareImplementation(cs) %Synthesize a Hardware Implementation. hw_model = cs.getComponent('Hardware Implementation'); hwi = hw_model.copy(); if ~hwi.getPropEnabled('ProdHWDeviceType') hwi.setPropEnabled('ProdHWDeviceType',true); end hwi.ProdHWDeviceType = 'Generic->MATLAB Host Computer';