1 # Embedded Coder Template Makefile
3 # This is just standard Embedded Coder Template Makefile, provided by Matlab. It was slightly
4 # modified to support \textsc{armcl} particularities and added template rules for assembler files
5 # (which were included by the \textsc{rpp\_lib\_support.m} script, but is no longer the case).
8 # /refs/rtw_ug.pdf p. 1130 and 1183.
10 # - You can use this template makefile as the basis for your own
11 # custom target including support for Processor-in-the-Loop (PIL).
12 # - The intent is that you should not have to modify this example
13 # template makefile to create your own PIL implementation.
14 # - The embedded tooling information is abstracted into a separate
15 # file, target_tools.mk.
16 # - To create a custom target for your own processor, you will
17 # need to modify the target_tools.mk to specify the appropriate
18 # embedded tools and options.
20 # Copyright 2009-2011 The MathWorks, Inc.
22 #------------------------ Macros read by make_rtw ------------------------------
23 MAKECMD = "|>MATLAB_BIN<|/|>ARCH<|/gmake"
27 COMPILER_TOOL_CHAIN = default
29 #---------------------- Tokens expanded by make_rtw ----------------------------
30 MODEL = |>MODEL_NAME<|
31 MODULES = |>MODEL_MODULES<|
32 MAKEFILE = |>MAKEFILE_NAME<|
33 MATLAB_ROOT = |>MATLAB_ROOT<|
34 ALT_MATLAB_ROOT = |>ALT_MATLAB_ROOT<|
35 MASTER_ANCHOR_DIR = |>MASTER_ANCHOR_DIR<|
36 START_DIR = |>START_DIR<|
37 S_FUNCTIONS = |>S_FUNCTIONS<|
38 S_FUNCTIONS_LIB = |>S_FUNCTIONS_LIB<|
40 NCSTATES = |>NCSTATES<|
41 COMPUTER = |>COMPUTER<|
42 BUILDARGS = |>BUILDARGS<|
43 MULTITASKING = |>MULTITASKING<|
44 INTEGER_CODE = |>INTEGER_CODE<|
45 MAT_FILE = |>MAT_FILE<|
46 ONESTEPFCN = |>COMBINE_OUTPUT_UPDATE_FCNS<|
47 TERMFCN = |>INCLUDE_MDL_TERMINATE_FCN<|
48 B_ERTSFCN = |>GENERATE_ERT_S_FUNCTION<|
50 EXT_MODE = |>EXT_MODE<|
51 TMW_EXTMODE_TESTING = |>TMW_EXTMODE_TESTING<|
52 EXTMODE_TRANSPORT = |>EXTMODE_TRANSPORT<|
53 EXTMODE_STATIC = |>EXTMODE_STATIC_ALLOC<|
54 EXTMODE_STATIC_SIZE = |>EXTMODE_STATIC_ALLOC_SIZE<|
55 MULTI_INSTANCE_CODE = |>MULTI_INSTANCE_CODE<|
56 TGT_FCN_LIB = |>TGT_FCN_LIB<|
57 MODELREFS = |>MODELREFS<|
58 SHARED_SRC = |>SHARED_SRC<|
59 SHARED_SRC_DIR = |>SHARED_SRC_DIR<|
60 SHARED_BIN_DIR = |>SHARED_BIN_DIR<|
61 SHARED_LIB = |>SHARED_LIB<|
62 GEN_SAMPLE_MAIN = |>GEN_SAMPLE_MAIN<|
63 TARGET_LANG_EXT = |>TARGET_LANG_EXT<|
64 PORTABLE_WORDSIZES = |>PORTABLE_WORDSIZES<|
65 SHRLIBTARGET = |>SHRLIBTARGET<|
66 OPTIMIZATION_FLAGS = |>OPTIMIZATION_FLAGS<|
67 ADDITIONAL_LDFLAGS = |>ADDITIONAL_LDFLAGS<|
68 MAKEFILEBUILDER_TGT = |>MAKEFILEBUILDER_TGT<|
69 STANDALONE_SUPPRESS_EXE = |>STANDALONE_SUPPRESS_EXE<|
71 RPP_STACK_SIZE = |>RPP_STACK_SIZE<|
72 RPP_HEAP_SIZE = |>RPP_HEAP_SIZE<|
73 RPP_MODEL_TASK_STACK = |>RPP_MODEL_TASK_STACK<|
74 RPP_DOWNLOAD = |>RPP_DOWNLOAD<|
75 RPP_PRINT_META = |>RPP_PRINT_META<|
77 #--------------------------- Model and reference models ------------------------
78 MODELLIB = |>MODELLIB<|
79 MODELREF_LINK_LIBS = |>MODELREF_LINK_LIBS<|
80 MODELREF_INC_PATH = |>START_MDLREFINC_EXPAND_INCLUDES<|-I|>MODELREF_INC_PATH<| |>END_MDLREFINC_EXPAND_INCLUDES<|
81 RELATIVE_PATH_TO_ANCHOR = |>RELATIVE_PATH_TO_ANCHOR<|
82 MODELREF_TARGET_TYPE = |>MODELREF_TARGET_TYPE<|
84 #-- In the case when directory name contains space ---
85 ifneq ($(MATLAB_ROOT),$(ALT_MATLAB_ROOT))
86 MATLAB_ROOT := $(ALT_MATLAB_ROOT)
89 #----------------------------- External mode -----------------------------------
90 # Uncomment -DVERBOSE to have information printed to stdout
91 # To add a new transport layer, see the comments in
92 # <matlabroot>/toolbox/simulink/simulink/extmode_transports.m
94 EXT_CC_OPTS = -DEXT_MODE -D$(COMPUTER) #-DVERBOSE
96 EXT_SRC = ext_svr.c updown.c ext_work.c
99 ifeq ($(EXTMODE_TRANSPORT),0) #tcpip
100 EXT_SRC += rtiostream_interface.c rtiostream_tcpip.c
101 LINT_EXT_COMMON_SRC = ext_svr.c updown.c ext_work.c
102 LINT_EXT_TCPIP_SRC = rtiostream_interface.c rtiostream_tcpip.c
104 ifeq ($(EXTMODE_TRANSPORT),1) #serial
105 EXT_SRC += ext_svr_serial_transport.c ext_serial_pkt.c
106 EXT_SRC += rtiostream_serial_interface.c rtiostream_serial.c
108 ifeq ($(TMW_EXTMODE_TESTING),1)
109 EXT_SRC += ext_test.c
110 EXT_CC_OPTS += -DTMW_EXTMODE_TESTING
112 ifeq ($(EXTMODE_STATIC),1)
114 LINT_EXT_COMMON_SRC += mem_mgr.c
115 EXT_CC_OPTS += -DEXTMODE_STATIC -DEXTMODE_STATIC_SIZE=$(EXTMODE_STATIC_SIZE)
117 ifeq ($(COMPUTER),SOL64)
118 EXT_LIB = -lsocket -lnsl
122 #------------------ Include a tool specification settings ----------------------
123 # TARGET_INCS - include options for the target source files (e.g. -I$(TARGET_INC_DIR))
124 # TARGET_SRCS - a list of the target source files
125 # CC - C compiler command
126 # CFLAGS - C compiler options
127 # CDEBUG - C compiler debug option
128 # CCOUTPUTFLAG - C compiler output option (e.g. -o)
129 # OBJ_EXT - object file extension
130 # CXX - C++ compiler command
131 # CXXFLAGS - C++ compiler options
132 # CXXDEBUG - C++ compiler debug option
133 # LD - linker command
134 # LDFLAGS - linker options
135 # LDDEBUG - linker debug option
136 # LDOUTPUTFLAG - linker output option (e.g. -o)
137 # PROGRAM_FILE_EXT - linker output file extension (e.g .elf)
138 # AR - Archiver command
139 # ARFLAGS - Archiver options
140 # OBJCOPY - Binary file format converter command
141 # OBJCOPYFLAGS - Binary file format converter options
142 # BINARY_FILE_EXT - Binary file extension (e.g. .hex or .mot)
143 # EXE_FILE_EXT = $(BINARY_FILE_EXT) or $(PROGRAM_FILE_EXT) - build product ext.
145 include $(START_DIR)/slprj/target_tools.mk
147 #------------------------------ Includes ---------------------------------------
148 # Place -I options here
150 -I$(MATLAB_ROOT)/rtw/c/ert \
151 -I$(MATLAB_ROOT)/extern/include \
152 -I$(MATLAB_ROOT)/simulink/include \
153 -I$(MATLAB_ROOT)/rtw/c/src \
154 -I$(MATLAB_ROOT)/rtw/c/src/ext_mode/common \
155 -I$(MATLAB_ROOT)/toolbox/shared/can/src/scanutil
157 # Additional includes
159 |>START_EXPAND_INCLUDES<| -I|>EXPAND_DIR_NAME<| \
160 |>END_EXPAND_INCLUDES<|
163 ifneq ($(SHARED_SRC_DIR),)
164 SHARED_INCLUDES = -I$(SHARED_SRC_DIR)
167 INCLUDES = -I. -I$(RELATIVE_PATH_TO_ANCHOR) $(MATLAB_INCLUDES) \
168 $(ADD_INCLUDES) $(MODELREF_INC_PATH) $(SHARED_INCLUDES) \
175 CFLAGS += $(INCLUDES)
176 CXXFLAGS += $(INCLUDES)
178 ifeq ($(DEBUG_BUILD),1)
179 # Set flags for debugging
181 CXXFLAGS += $(CXXDEBUG)
182 LDFLAGS += $(LDDEBUG)
184 #-------------------------- Target application ---------------------------------
185 # Define the type of build
188 ifeq ($(MODELREF_TARGET_TYPE), NONE)
189 ifeq ($(MAKEFILEBUILDER_TGT), 0)
190 ifeq ($(STANDALONE_SUPPRESS_EXE), 1)
191 # Build object code only for top level model (preliminary step for building
193 BUILD_MODE=pil_prebuild
194 PRODUCT=ObjectModules
195 BUILD_PRODUCT_TYPE = object modules
197 # Building executable for real-time deployment
199 PRODUCT = $(MODEL)$(EXE_FILE_EXT)
200 BUILD_PRODUCT_TYPE = executable
203 # Building executable for deployment as PIL application (non-real-time
205 BUILD_MODE=pil_application
206 PRODUCT = $(MODEL)$(EXE_FILE_EXT)
207 BUILD_PRODUCT_TYPE = executable
210 # Building a library for a referenced model
211 BUILD_MODE = model_reference
212 PRODUCT = $(MODELLIB)
213 BUILD_PRODUCT_TYPE = library
216 #-------------- Source Files, Object Files and Dependency Files ----------------
218 SRCS = $(ADD_SRCS) $(S_FUNCTIONS) $(EXT_SRC)
220 ifeq ($(BUILD_MODE), pil_prebuild)
221 SRCS += $(MODULES) $(MODEL).$(TARGET_LANG_EXT) $(EXT_SRC)
224 ifeq ($(BUILD_MODE), pil_application)
225 SRCS += $(TARGET_SRCS)
226 PREBUILT_SRCS = $(MODULES)
227 PREBUILT_OBJS = $(addsuffix $(OBJ_EXT), $(basename $(PREBUILT_SRCS)))
230 ifeq ($(BUILD_MODE), real_time)
231 SRCS += $(MODULES) $(MODEL).$(TARGET_LANG_EXT) $(EXT_SRC) ert_main.c
232 SRCS += $(TARGET_SRCS)
235 ifeq ($(BUILD_MODE), model_reference)
241 USER_OBJS = $(addsuffix $(OBJ_EXT), $(basename $(USER_SRCS)))
242 LOCAL_USER_OBJS = $(notdir $(USER_OBJS))
244 OBJS = $(addsuffix $(OBJ_EXT), $(basename $(SRCS))) $(USER_OBJS)
245 LINK_OBJS = $(addsuffix $(OBJ_EXT), $(basename $(SRCS))) $(LOCAL_USER_OBJS) $(PREBUILT_OBJS)
247 LIBS = $(S_FUNCTIONS_LIB)
249 SHARED_SRC := $(wildcard $(SHARED_SRC))
250 SHARED_OBJS = $(addsuffix $(OBJ_EXT), $(basename $(SHARED_SRC)))
252 #---------------------------- Default target -----------------------------------
257 # Need a rule to generate the build success string if product was already up to date
260 @echo "### Created $(PRODUCT) successfully (or it was already up to date)"
262 #----------------------------- Dependencies ------------------------------------
264 $(OBJS) : $(MAKEFILE) rtw_proj.tmw
266 $(SHARED_LIB) : $(SHARED_OBJS)
267 @echo "### Creating $@ "
268 $(AR) $(ARFLAGS) $@ $(SHARED_OBJS)
269 @echo "### $@ Created "
271 ##-------------------------- Support for building modules ----------------------
273 ifeq ($(BUILD_MODE), pil_prebuild)
274 $(PRODUCT) : $(OBJS) $(SHARED_LIB)
275 @echo "### BUILD_MODE $(BUILD_MODE)"
276 @echo "### Created $(PRODUCT)"
279 ifeq ($(BUILD_MODE), real_time)
280 $(PRODUCT) : $(MODEL)$(PROGRAM_FILE_EXT)
281 @echo "### BUILD_MODE $(BUILD_MODE)"
282 $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
283 @echo "### Generated $(PRODUCT)"
286 ifeq ($(BUILD_MODE), pil_application)
287 $(PRODUCT) : $(MODEL)$(PROGRAM_FILE_EXT)
288 @echo "### BUILD_MODE $(BUILD_MODE)"
289 $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
290 @echo "### Generated $(PRODUCT)"
293 ifeq ($(BUILD_MODE), model_reference)
294 $(PRODUCT) : $(OBJS) $(SHARED_LIB) $(LIBS)
295 @echo "### BUILD_MODE $(BUILD_MODE)"
296 @echo "### Linking ..."
297 $(AR) $(ARFLAGS) $@ $(OBJS)
298 @echo "### Generated $@"
301 ifeq ($(BUILD_MODE), pil_application)
302 $(MODEL)$(PROGRAM_FILE_EXT): $(PREBUILT_OBJS) $(OBJS) $(MODELLIB) $(MODELREF_LINK_LIBS) $(SHARED_LIB) $(LIBS)
303 @echo "### BUILD_MODE $(BUILD_MODE)"
304 $(LD) $^ $(LDFLAGS) $(LDOUTPUTFLAG)$@
305 @echo "### Generated $@"
308 ifeq ($(BUILD_MODE), real_time)
309 $(OBJS): $(RPP_LIB_ROOT)/$(RPP_STATIC_LIB) $(RPP_LIB_ROOT)/build/$(TARGET)/$(TARGET_LDCMD)
311 $(MODEL)$(PROGRAM_FILE_EXT): $(OBJS) $(MODELREF_LINK_LIBS) $(SHARED_LIB) $(LIBS)
312 @echo "### BUILD_MODE $(BUILD_MODE)"
313 $(LD) $^ $(LDFLAGS) $(LDOUTPUTFLAG)$@
314 @echo "### Generated $@"
317 %$(OBJ_EXT): $(RELATIVE_PATH_TO_ANCHOR)/%.cpp
318 $(CXX) -c $(CXXFLAGS) $< $(CCOUTPUTFLAG)$@
320 %$(OBJ_EXT) : $(RELATIVE_PATH_TO_ANCHOR)/%.c
321 $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
323 %$(OBJ_EXT) : $(RELATIVE_PATH_TO_ANCHOR)/%.asm
324 $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
327 $(CXX) -c $(CXXFLAGS) $< $(CCOUTPUTFLAG)$@
330 $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
333 $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
335 %$(OBJ_EXT): $(TARGET_SRC_DIR)/%.cpp
336 $(CXX) -c $(CXXFLAGS) $< $(CCOUTPUTFLAG)$@
338 %$(OBJ_EXT): $(TARGET_SRC_DIR)/%.c
339 $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
341 %$(OBJ_EXT): $(TARGET_SRC_DIR)/%.asm
342 $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
344 |>START_EXPAND_RULES<|%$(OBJ_EXT) : |>EXPAND_DIR_NAME<|/%.cpp
345 $(CXX) -c $(CXXFLAGS) $<
349 |>START_EXPAND_RULES<|%$(OBJ_EXT) : |>EXPAND_DIR_NAME<|/%.c
350 $(CC) -c $(CFLAGS) $<
354 |>START_EXPAND_RULES<|%$(OBJ_EXT) : |>EXPAND_DIR_NAME<|/%.asm
355 $(CC) -c $(CFLAGS) $<
359 %$(OBJ_EXT): $(TARGET_ROOT)/%.c
360 $(CC) -c $< $(CFLAGS) $(CCOUTPUTFLAG)$@
362 %$(OBJ_EXT) : $(TARGET_ROOT)/rtw/c/src/ext_mode/common/%.c
363 $(CC) -c $< $(CFLAGS) $(CCOUTPUTFLAG)$@
365 %$(OBJ_EXT): $(MATLAB_ROOT)/rtw/c/src/ext_mode/serial/%.c
366 $(CC) -c $< $(CFLAGS) $(CCOUTPUTFLAG)$@
368 %$(OBJ_EXT): $(MATLAB_ROOT)/rtw/c/src/ext_mode/custom/%.c
369 $(CC) -c $< $(CFLAGS) $(CCOUTPUTFLAG)$@