Control Library Location and Naming During Build - MATLAB & Simulink (original) (raw)
When you generate precompiled, non-precompiled, and model reference libraries, you can control the library location and library name by using configuration parameters. These parameters control values in generated makefiles during model builds:
- For build processes that use the toolchain approach, control the generated library location by using the
TargetPreCompLibLocation
configuration parameter. - For build processes that use the template makefile approach, control the generated library location by using the
TargetPreCompLibLocation
configuration parameter and control the generated library name by using theTargetLibSuffix
configuration parameter.
Library Control Parameters
Use the library control parameters to:
- Specify the location of precompiled libraries, such as blockset libraries or the Simulink® Coder™ block library. Typically, a target has cross-compiled versions of these libraries and places them in a target-specific folder.
- Control the suffix applied to library file names (for example,
_target.a
or_target.lib
).
Targets can set the parameters inside the system target file (STF) select callback. For example:
function mytarget_select_callback_handler(varargin) hDig=varargin{1}; hSrc=varargin{2}; slConfigUISetVal(hDig, hSrc, 'TargetPreCompLibLocation',... 'c:\mytarget\precomplibs'); slConfigUISetVal(hDig, hSrc, 'TargetLibSuffix',... '_target.library');
The TMF has corresponding expansion tokens:
|>EXPAND_LIBRARY_LOCATION<|
|>EXPAND_LIBRARY_SUFFIX<|
Alternatively, you can use a call to the set_param
function. For example:
set_param(model,'TargetPreCompLibLocation',... 'c:\mytarget\precomplibs');
Note
If your model contains referenced models, you can use the make optionUSE_MDLREF_LIBPATHS
to control whether libraries used by the referenced models are copied to the build folder of the parent model. For more information, see Location of Model Reference Libraries.
Identify Library File Type for Toolchain Approach
The toolchain approach for model builds does not use the value of theTargetLibSuffix
configuration parameter to select the library file name _`suffix`_
and_`extension`_
.
With the toolchain approach, the final binary name is composed of the_`modelname`_
, the_`compilername`_
, and the_`extension`_
provided by the build tool description in the toolchain definition:
model_compilername.extension
You can identify the static library file name extension from the build tool description in the toolchain definition. To get this information for the default toolchain, use this procedure:
- Get the default toolchain name. For example, enter:
tc_name = coder.make.getDefaultToolchain()
- Get the default toolchain handle. For example, enter:
tc = coder.make.getToolchainInfoFromRegistry(tc_name) - Get the handle to the toolchain object. For example, enter:
tool_archiver = tc.getBuildTool('Archiver'); - Get the extension. For example, enter:
ext_archiver = tool_archiver.getFileExtension('Static Library');
Note
If you do not set the TargetLibSuffix
parameter, template makefile and toolchain approaches produce the same static library file name _`extension`_
.
Specify the Location of Precompiled Libraries
Use the TargetPreCompLibLocation
configuration parameter to:
- Override the precompiled library location specified in the
rtwmakecfg.m
file (see Use rtwmakecfg.m API to Customize Generated Makefiles for details) - Precompile and distribute target-specific versions of product libraries (for example, the DSP System Toolbox™ product)
For a precompiled library, such as a blockset library or the Simulink Coder block library, the location specified inrtwmakecfg.m
is typically a location specific to the blockset or the Simulink Coder product. The code generator expects that the library exists in this location and links against the library during builds.
For some applications, such as custom targets, it is preferable to locate the precompiled libraries in a target-specific or other alternate location rather than in the location specified in rtwmakecfg.m
. For a custom target, the code generator expects that the target-specific cross-compiler creates the library, and you place the library in the target-specific location. Compile and place libraries supported by the target in the target-specific location, so they can be used during the build process.
You can set up the TargetPreCompLibLocation
parameter in its select callback. The path that you specify for the parameter must be a fully qualified, absolute path to the library location. Relative paths are not supported. For example:
slConfigUISetVal(hDlg, hSrc, 'TargetPreCompLibLocation',... 'c:\mytarget\precomplibs');
Alternatively, you set the parameter with a call to theset_param
function. For example:
set_param(model,'TargetPreCompLibLocation',... 'c:\mytarget\precomplibs');
During makefile generation, the build process replaces the tokens with the location from the rtwmakecfg.m
file. For example, if the library name in the rtwmakecfg.m
file is 'rtwlib'
, the template makefile build approach expands the token from:
LIBS += |>EXPAND_LIBRARY_LOCATION<||>EXPAND_LIBRARY_NAME<|
_target.library
to:
LIBS += c:\mytarget\precomplibs\rtwlib_target.library
By default, TargetPreCompLibLocation
is an empty character vector. The build process uses the location in rtwmakecfg.m
for the token replacement.
Location of Model Reference Libraries
The build process assigns a path such as../slprj/grt/sub/sub_rtwlib.lib
toMODELREF_LINK_LIBS
. The build process uses the path to gain access to the library file at link time.
Control the Suffix Applied to Library File Names
With the template makefile approach for model builds, use theTargetLibSuffix
configuration parameter to control the suffix applied to library names (for example, _target.lib
or_target.a
). The specified suffix scheme must include a period (.). You can apply TargetLibSuffix
to the following libraries:
- Libraries on which a target depends, as specified in the
rtwmakecfg.m
API. You can useTargetLibSuffix
to change the suffix of both precompiled and non-precompiled libraries configured from thertwmakecfg
API. For details, see Use rtwmakecfg.m API to Customize Generated Makefiles.
In this case, a target can set the parameter in its select callback. For example:
slConfigUISetVal(hDlg, hSrc, 'TargetLibSuffix',...
'_target.library');
Alternatively, you can use a call to theset_param
function. For example:
set_param(model,'TargetLibSuffix','_target.library');
During the TMF-to-makefile conversion, the build process replaces the token|>EXPAND_LIBRARY_SUFFIX<|
with the specified suffix. For example, if the library name specified in thertwmakecfg.m
file is'rtwlib'
, the TMF expands from:
LIBS += |>EXPAND_LIBRARY_LOCATION<||>EXPAND_LIBRARY_NAME<|\
|>EXPAND_LIBRARY_SUFFIX<|
to:
LIBS += c:\mytarget\precomplibs\rtwlib_target.library
By default,TargetLibSuffix
is set to an empty character vector. In this case, the build process replaces the token|>EXPAND_LIBRARY_SUFFIX<|
with an empty character vector. - Model libraries created with model reference. For these cases, associated makefile variables do not require the
|>EXPAND_LIBRARY_SUFFIX<|
token. Instead, the build process includesTargetLibSuffix
implicitly. For example, for a top model namedtopmodel
with referenced models namedrefmodel1
andrefmodel2
, the TMF of the top model is expanded from:
MODELLIB = |>MODELLIB<|
MODELREF_LINK_LIBS = |>MODELREF_LINK_LIBS<|
to:
MODELLIB = topmodellib_target.library
MODELREF_LINK_LIBS = \
refmodel1_rtwlib_target.library refmodel2_rtwlib_target.library
By default, theTargetLibSuffix
parameter is an empty character vector. In this case, the build process chooses a default suffix for these three tokens using a file extension of.lib
on Windows® hosts and.a
on UNIX® hosts. For model reference libraries, the default suffix also includes_rtwlib
. For example, on a Windows host, the expanded makefile values are:
MODELLIB = topmodellib.lib
MODELREF_LINK_LIBS = refmodel1_rtwlib.lib refmodel2_rtwlib.lib