How to use batch files to create an executable for a model which has model references?

Technical Source
3 min readOct 8, 2021

Let’s say we have models r1 and r2 where r1 is a model reference inside r2. When we generate code (Simulink coder — Generate code only) for r2, everything works fine and we get the artifacts. In the artifacts, we have a ‘r2.bat’ file in ‘r2_grt_rtw\’.

When we run ‘r2_grt_rtw\r2.bat’ the make process fails as it does not know how to make or find ‘r1’ model libs. Now, the ‘r2_grt_rtw\r2.bat’ build will pass if we manually make ‘r1.bat’ found in ‘slprj\grt\r1’ and we also need to build the shared lib using ‘slprj\grt\_sharedutils\rtwshared.bat’. (See reproduction steps for more clarity)

Questions:

  • How to automate this such that the making of model references & shared libs i.e. executing ‘slprj\grt\r1\r1.bat’ & ‘slprj\grt\_sharedutils\rtwshared.bat’ becomes part of ‘r2_grt_rtw\r2.bat’ ??
  • If the first question is not feasible then how can we add custom hooks into ‘r2_grt_rtw\r2.bat’ or ‘r2_grt_rtw\r2.mk’ through Simulink Coder, to achieve the execution of ‘slprj\grt\r1\r1.bat’, ‘slprj\grt\_sharedutils\rtwshared.bat’ & may be more model references batch scripts ?? My assumption is that hooks in a makefile can help us in executing make commands for referenced models.

ANSWER

Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.

Please see the following points:

  • Through a suitable hook — like postCodeGen — you can programmatically construct a master script to call the individual makefiles / bat scripts.
  • You can access the list of referenced models by querying ‘buildInfo.ModelRefs’. BuildInfo is one of the auto-generated artifacts in the form of a MAT file, which you can load and access its data.
  • Here’s some pseudocode that will compose paths of Model Reference libraries (and rtwsharedlib)
% Extract referenced model info
mdls = args.buildInfo.ModelRefs;
% Find the path of the directory code generation was started from
startDir = args.buildInfo.Settings.LocalAnchorDir;
% Initialize empty cell for path info
paths = cell(size(mdls));
% Additional Code for the Relative Directory
% Determine your current working directory
currentDir = pwd;
% Remove the starting directory from the current directory, this will leave
% only the path from the starting directory to the current folder.
pathFromAnchor = currentDir(2+length(startDir):end);
% Extract all the folders between the starting directory and the current
% directory
folders = strsplit(pathFromAnchor,'\');
% Create the relative path to the start directory based on the number of
% folders between the start and current directories.
relativePath = repmat('../',1,length(folders));
% If there are model references loop over them and construct the path for
% each reference
if ~isempty(mdls)
for i = 1:length(mdls)
libname = mdls(i).Name;
fullpath = replace(mdls(i).Path,'$(START_DIR)\', relativePath);
paths{i} = [fullpath,'\',libname];
end
end

So, to conclude, using the above script as reference, you should be able to compose a script to build the generate code.

SEE COMPLETE ANSWER CLICK THE LINK

--

--

Technical Source

Simple! That is me, a simple person. I am passionate about knowledge and reading. That’s why I have decided to write and share a bit of my life and thoughts to.