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';