www.gusucode.com > private工具箱matlab源码程序 > private/compute_target_info.m
function compute_target_info % Copyright 1995-2016 The MathWorks, Inc. global gTargetInfo gMachineInfo gTargetInfo.codingLibrary = sf('get',sf('get',gTargetInfo.target,'target.machine'),'machine.isLibrary'); targetName = sf('get',gMachineInfo.parentTarget,'target.name'); gTargetInfo.codingMakeDebug = coder_options('debugBuilds'); gTargetInfo.codingSFunction = strcmp(targetName,'sfun'); gTargetInfo.codingRTW = strcmp(targetName,'rtw'); gTargetInfo.codingIRConstructionForRTW = false; gTargetInfo.codingHDL = strcmp(targetName,'slhdlc'); gTargetInfo.codingMEX = 0; gTargetInfo.codingOpenMP = 0; gTargetInfo.codingCustom = ~gTargetInfo.codingSFunction && ... ~gTargetInfo.codingRTW && ... ~gTargetInfo.codingHDL && ... ~gTargetInfo.codingMEX; mainMachineName = sf('get', gMachineInfo.mainMachineId, '.name'); gTargetInfo.codingDeveloper = sf('Feature','Developer'); gTargetInfo.codingExportChartNames = 0; gTargetInfo.codingPreserveNames = 0; gTargetInfo.codingPreserveNamesWithParent=0; relevantMachineName = sf('get',get_relevant_machine,'machine.name'); gTargetInfo.mdlrefInfo = get_model_reference_info(relevantMachineName); gTargetInfo.isErtMultiInstanced = is_ert_multi_instance(relevantMachineName) || gTargetInfo.mdlrefInfo.isMultiInst; gTargetInfo.ertMultiInstanceErrCode = get_ert_multi_instance_errcode(relevantMachineName); gTargetInfo.gencpp = sfprivate('compute_target_cpp_flag', relevantMachineName, gMachineInfo.target, gMachineInfo.parentTarget); allFlags = all_flags(gMachineInfo.parentTarget); gTargetInfo.codingDebug = ~sfc('coder_options', 'forceDebugOff'); gTargetInfo.codingOverflow = flag_value(allFlags,'overflow'); gTargetInfo.codingNoEcho = ~flag_value(allFlags,'echo'); gTargetInfo.codingBLAS = true; gTargetInfo.codingIntelIPP = false; gTargetInfo.codingPreserveConstantNames = 0; gTargetInfo.codingFasterRun = CGXE.Utils.isSimOptimizationsOn(mainMachineName); gTargetInfo.codingMultiInstance = flag_value(allFlags,'multiinstanced'); gTargetInfo.codingNoInitializer = ~flag_value(allFlags,'initializer'); gTargetInfo.codingStateBitsets = flag_value(allFlags,'statebitsets'); gTargetInfo.codingDataBitsets = flag_value(allFlags,'databitsets'); gTargetInfo.codingComments = flag_value(allFlags,'comments'); gTargetInfo.codingAutoComments = flag_value(allFlags,'autocomments'); gTargetInfo.codingEmitObjectDescriptions = flag_value(allFlags,'emitdescriptions'); gTargetInfo.codingEmitTestSequenceDescriptions = flag_value(allFlags,'emitdescriptions'); gTargetInfo.codingLogicalOps = flag_value(allFlags,'emitlogicalops'); gTargetInfo.codingElseIfDetection = flag_value(allFlags,'elseifdetection'); gTargetInfo.codingConstantFolding = flag_value(allFlags,'constantfolding'); gTargetInfo.codingRedundantElim = flag_value(allFlags,'redundantloadelimination'); gTargetInfo.codingEmitObjectRequirements = 0; gTargetInfo.codingIntegerCodeOnly = 0; gTargetInfo.codingRealCodeOnly = 0; gTargetInfo.codingExtMode = 0; gTargetInfo.xpcExtModeAnimation = 0; gTargetInfo.maximumIdentifierLength = 64; gTargetInfo.parenthesesLevel = 1; gTargetInfo.codingBlockComments = 0; gTargetInfo.codingMATLABSourceComments = 0; gTargetInfo.codingMATLABFcnDesc = 0; gTargetInfo.ignoreTestpoints = 0; gTargetInfo.leavingIntegrityChecks = flag_value(allFlags,'integrity'); gTargetInfo.leavingExtrinsicCalls = flag_value(allFlags,'extrinsic'); gTargetInfo.leavingCtrlCChecks = flag_value(allFlags,'ctrlc'); gTargetInfo.genImportedTypeDefs = 0; gTargetInfo.codingSupportVariableSizeSignals = true; ioformat = flag_value(allFlags,'ioformat'); switch(ioformat) case 0 gTargetInfo.codingGlobalIO = 1; gTargetInfo.codingPackedIO = 0; case 1 gTargetInfo.codingGlobalIO = 0; gTargetInfo.codingPackedIO = 1; case 2 gTargetInfo.codingGlobalIO = 0; gTargetInfo.codingPackedIO = 0; otherwise gTargetInfo.codingGlobalIO = 1; gTargetInfo.codingPackedIO = 0; end gTargetInfo.modelReferenceSimTarget = 0; gTargetInfo.modelReferenceRTWTarget = 0; gTargetInfo.codingMemcpy = 0; gTargetInfo.codingMemcpyThreshold = 0; gTargetInfo.codingMemsetDouble = 0; gTargetInfo.codingGenerateSFunction = 0; gTargetInfo.codingConvertIfToSwitch = 0; gTargetInfo.codingSupressUnreachableDefaultCases = 0; gTargetInfo.codingUseSpecifiedMinMax = false; if gTargetInfo.codingRTW targetProps = rtw_target_props(relevantMachineName); gTargetInfo.codingDebug = 0; gTargetInfo.codingOverflow = 0; gTargetInfo.codingNoEcho = 1; gTargetInfo.codingBLAS = 0; gTargetInfo.codingOpenMP = 0; gTargetInfo.codingPreserveConstantNames = true; gTargetInfo.codingMultiInstance = 0; gTargetInfo.codingNoInitializer = 0; gTargetInfo.codingStateBitsets = targetProps.codingStateBitsets; gTargetInfo.codingDataBitsets = targetProps.codingDataBitsets; gTargetInfo.codingComments = targetProps.codingComments; gTargetInfo.codingAutoComments = targetProps.codingAutoComments; gTargetInfo.codingEmitObjectDescriptions = targetProps.codingEmitObjectDescriptions; gTargetInfo.codingEmitTestSequenceDescriptions = targetProps.codingEmitTestSequenceDescriptions; gTargetInfo.codingRedundantElim = targetProps.codingRedundantElim; gTargetInfo.codingLogicalOps = 1; gTargetInfo.codingElseIfDetection = 1; gTargetInfo.codingConstantFolding = 1; gTargetInfo.codingEmitObjectRequirements = targetProps.codingEmitObjectRequirements; gTargetInfo.codingExtMode = targetProps.codingExtMode; gTargetInfo.xpcExtModeAnimation = targetProps.xpcExtModeAnimation; gTargetInfo.codingConvertIfToSwitch = targetProps.codingConvertIfToSwitch; gTargetInfo.codingSupressUnreachableDefaultCases = targetProps.codingSupressUnreachableDefaultCases; % Bitsets have to be disabled for extmode, which requires all dwork data to be addressable if gTargetInfo.codingExtMode && (gTargetInfo.codingStateBitsets || gTargetInfo.codingDataBitsets) gTargetInfo.codingStateBitsets = 0; gTargetInfo.codingDataBitsets = 0; DAStudio.warning('Stateflow:cdr:ExternalModeBitSet'); end gTargetInfo.rtwProps = targetProps; gTargetInfo.modelReferenceSimTarget = model_reference_sim_target(relevantMachineName); gTargetInfo.modelReferenceRTWTarget = model_reference_rtw_target(relevantMachineName); gTargetInfo.codingIntegerCodeOnly = targetProps.codingIntegerCodeOnly; gTargetInfo.codingRealCodeOnly = targetProps.codingRealCodeOnly; gTargetInfo.maximumIdentifierLength = targetProps.maximumIdentifierLength; gTargetInfo.parenthesesLevel = targetProps.parenthesesLevel; gTargetInfo.codingBlockComments = targetProps.codingBlockComments; gTargetInfo.codingMATLABSourceComments = targetProps.codingMATLABSourceComments; gTargetInfo.codingMATLABFcnDesc = targetProps.codingMATLABFcnDesc; gTargetInfo.codingMemcpy = targetProps.codingMemcpy; gTargetInfo.codingMemcpyThreshold = targetProps.codingMemcpyThreshold; gTargetInfo.codingMemsetDouble = targetProps.codingMemsetDouble; gTargetInfo.ignoreTestpoints = targetProps.ignoreTestpoints && ... ~gTargetInfo.modelReferenceSimTarget && ... ~gTargetInfo.codingExtMode && ... strcmpi(get_param(relevantMachineName, 'RapidAcceleratorSimStatus'), 'inactive'); gTargetInfo.codingUseSpecifiedMinMax = targetProps.codingUseSpecifiedMinMax; modelH = get_param(relevantMachineName, 'Handle'); hModelCodegenMgr = coder.internal.ModelCodegenMgr.getInstance(modelH); if ~isempty(hModelCodegenMgr) && ~isempty(hModelCodegenMgr.BuildOpts) if(strcmp(hModelCodegenMgr.BuildOpts.codeFormat,'S-Function')) gTargetInfo.codingGenerateSFunction = 1; end end if ~gTargetInfo.modelReferenceSimTarget gTargetInfo.codingSupportVariableSizeSignals = targetProps.codingSupportVariableSizeSignals; end elseif gTargetInfo.codingSFunction gTargetInfo.codingNoInitializer = 0; gTargetInfo.codingNoComments = 1; gTargetInfo.codingEmitObjectDescriptions = 0; gTargetInfo.codingEmitTestSequenceDescriptions = 0; gTargetInfo.codingRedundantElim = 1; gTargetInfo.codingLogicalOps = 1; gTargetInfo.codingElseIfDetection = 1; gTargetInfo.codingConstantFolding = 1; [gTargetInfo.codingExtMode, gTargetInfo.xpcExtModeAnimation] = get_machine_extmode_setting(relevantMachineName); gTargetInfo.genImportedTypeDefs = strcmp(get_param(relevantMachineName, 'SimGenImportedTypeDefs'), 'on'); elseif gTargetInfo.codingHDL gTargetInfo.codingDebug = 0; gTargetInfo.codingNoInitializer = 0; else gTargetInfo.codingDebug = 0; end % Set some target specific flags for use with the verify keyword transforms gTargetInfo.codingRapidAccel = ~strcmpi(get_param(mainMachineName, 'RapidAcceleratorSimStatus'), 'inactive'); gTargetInfo.codingSIL = gTargetInfo.codingRTW && strcmpi(get_param(mainMachineName, 'SimulationMode'), 'software-in-the-loop (sil)'); gTargetInfo.codingPIL = gTargetInfo.codingRTW && strcmpi(get_param(mainMachineName, 'SimulationMode'), 'processor-in-the-loop (pil)'); gTargetInfo.codingSLRT = (gTargetInfo.codingRTW || gTargetInfo.codingExtMode) && (strcmpi(get_param(mainMachineName, 'SystemTargetFile'), 'slrt.tlc') || strcmpi(get_param(mainMachineName, 'SystemTargetFile'), 'slrtert.tlc')); gTargetInfo.codingSLCI = (gTargetInfo.codingRTW && sf('Feature', 'SLCIInlineInfo') && ~isempty(regexp(get_param(mainMachineName, 'AdvancedOptControl'), '(\W|^)\-SLCI(\W|$)', 'once'))); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Option to indicate this is an SLDV code generation % (replaces old gTargetInfo.codingForTestGen) if ~gTargetInfo.codingSFunction && (get_param(relevantMachineName, 'RTWExternMdlXlate') == 1) gTargetInfo.codingForAutoVerifier = 1; % If SLDV is being invoked, set the flags regarding analysis options in gTargetInfo. These % flags will be copied to ctxInfo in private/construct_context_for_machine.m, which in turn % will be used to initialize CdrCtxInfo->ctx.fSldvOptions in cdr/cdr_semantics_vars.cpp. if isfield(targetProps, 'DVoptMinmaxConstr') gTargetInfo.DVoptMinmaxConstr = targetProps.DVoptMinmaxConstr; end if isfield(targetProps, 'DVoptMode') gTargetInfo.DVoptMode = targetProps.DVoptMode; end if isfield(targetProps, 'DVoptRelBoundary') gTargetInfo.DVoptRelBoundary = targetProps.DVoptRelBoundary; end if isfield(targetProps, 'DVoptCoverageObj') gTargetInfo.DVoptCoverageObj = targetProps.DVoptCoverageObj; end if isfield(targetProps, 'DVoptDeadLogic') gTargetInfo.DVoptDeadLogic = targetProps.DVoptDeadLogic; end if isfield(targetProps, 'DVoptActiveLogic') gTargetInfo.DVoptActiveLogic = targetProps.DVoptActiveLogic; end if isfield(targetProps, 'DVoptDivByZero') gTargetInfo.DVoptDivByZero = targetProps.DVoptDivByZero; end if isfield(targetProps, 'DVoptIntOvf') gTargetInfo.DVoptIntOvf = targetProps.DVoptIntOvf; end if isfield(targetProps, 'DVoptMinmaxCheck') gTargetInfo.DVoptMinmaxCheck = targetProps.DVoptMinmaxCheck; end if isfield(targetProps, 'DVoptOutOfBound') gTargetInfo.DVoptOutOfBound = targetProps.DVoptOutOfBound; end if isfield(targetProps, 'DVoptDetectDSMHazards') gTargetInfo.DVoptDetectDSMHazards = targetProps.DVoptDetectDSMHazards; end if isfield(targetProps, 'DVoptFloatOvf') gTargetInfo.DVoptFloatOvf = targetProps.DVoptFloatOvf; end gTargetInfo.codingForRangeAnalysis = targetProps.codingForRangeAnalysis ; else gTargetInfo.codingForAutoVerifier = 0; gTargetInfo.codingForRangeAnalysis = 0; end if( ~gTargetInfo.codingSFunction && get_param(relevantMachineName,'RTWExternMdlXlate') == 2) gTargetInfo.codingPLC = 1; plcOptions = plcprivate('plc_options', relevantMachineName); gTargetInfo.codingPLCTargetIDE = plcOptions.TargetIDE; else gTargetInfo.codingPLC = 0; gTargetInfo.codingPLCTargetIDE = ''; end if(gTargetInfo.codingPreserveNamesWithParent) gTargetInfo.codingPreserveNames = 1; end if(gTargetInfo.codingLibrary && (gTargetInfo.codingSFunction || gTargetInfo.codingRTW)) gTargetInfo.codingMultiInstance = 1; end gTargetInfo.codingTMW = 0; compute_compiler_info; compilerInfo = sfprivate('compilerman', 'get_compiler_info', true, gTargetInfo.gencpp); gTargetInfo.codingIntelIPP = coderprivate.compiler_supports_eml_ipp(compilerInfo.compilerName); if gTargetInfo.codingBLAS && ... ~coderprivate.compiler_supports_eml_blas(compilerInfo.compilerName) gTargetInfo.codingBLAS = false; DAStudio.warning('Coder:reportGen:noCompilerBlasSupport',compilerInfo.compilerName); end if gTargetInfo.codingOpenMP if ~coderprivate.compiler_supports_eml_openmp(compilerInfo.compilerName) gTargetInfo.codingOpenMP = false; else % xxx: disabling debugging when parallelization is enabled. Bound checks, ctrl-c % checks and echo are disabled internally. Parallelization is disabled by default. gTargetInfo.codingDebug = false; gTargetInfo.codingNoEcho = true; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function result = all_flags(target) result = sfprivate('target_methods','codeflags',target); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function result = flag_value(flags,str) flagNames = {flags.name}; index = find(strcmp(flagNames,str)); if(~isempty(index)) result = flags(index).value; else result = 0; end