1 # Embedded Coder Template Makefile
3 # - You can use this template makefile as the basis for your own
4 # custom target including support for Processor-in-the-Loop (PIL).
5 # - The intent is that you should not have to modify this example
6 # template makefile to create your own PIL implementation.
7 # - The embedded tooling information is abstracted into a separate
8 # file, target_tools.mk.
9 # - To create a custom target for your own processor, you will
10 # need to modify the target_tools.mk to specify the appropriate
11 # embedded tools and options.
13 # Copyright 2009-2011 The MathWorks, Inc.
15 #------------------------ Macros read by make_rtw ------------------------------
16 MAKECMD = "|>MATLAB_BIN<|/|>ARCH<|/gmake"
20 COMPILER_TOOL_CHAIN = default
22 #---------------------- Tokens expanded by make_rtw ----------------------------
23 MODEL = |>MODEL_NAME<|
24 MODULES = |>MODEL_MODULES<|
25 MAKEFILE = |>MAKEFILE_NAME<|
26 MATLAB_ROOT = |>MATLAB_ROOT<|
27 ALT_MATLAB_ROOT = |>ALT_MATLAB_ROOT<|
28 MASTER_ANCHOR_DIR = |>MASTER_ANCHOR_DIR<|
29 START_DIR = |>START_DIR<|
30 S_FUNCTIONS = |>S_FUNCTIONS<|
31 S_FUNCTIONS_LIB = |>S_FUNCTIONS_LIB<|
33 NCSTATES = |>NCSTATES<|
34 COMPUTER = |>COMPUTER<|
35 BUILDARGS = |>BUILDARGS<|
36 MULTITASKING = |>MULTITASKING<|
37 INTEGER_CODE = |>INTEGER_CODE<|
38 MAT_FILE = |>MAT_FILE<|
39 ONESTEPFCN = |>COMBINE_OUTPUT_UPDATE_FCNS<|
40 TERMFCN = |>INCLUDE_MDL_TERMINATE_FCN<|
41 B_ERTSFCN = |>GENERATE_ERT_S_FUNCTION<|
43 EXT_MODE = |>EXT_MODE<|
44 TMW_EXTMODE_TESTING = |>TMW_EXTMODE_TESTING<|
45 EXTMODE_TRANSPORT = |>EXTMODE_TRANSPORT<|
46 EXTMODE_STATIC = |>EXTMODE_STATIC_ALLOC<|
47 EXTMODE_STATIC_SIZE = |>EXTMODE_STATIC_ALLOC_SIZE<|
48 MULTI_INSTANCE_CODE = |>MULTI_INSTANCE_CODE<|
49 TGT_FCN_LIB = |>TGT_FCN_LIB<|
50 MODELREFS = |>MODELREFS<|
51 SHARED_SRC = |>SHARED_SRC<|
52 SHARED_SRC_DIR = |>SHARED_SRC_DIR<|
53 SHARED_BIN_DIR = |>SHARED_BIN_DIR<|
54 SHARED_LIB = |>SHARED_LIB<|
55 GEN_SAMPLE_MAIN = |>GEN_SAMPLE_MAIN<|
56 TARGET_LANG_EXT = |>TARGET_LANG_EXT<|
57 PORTABLE_WORDSIZES = |>PORTABLE_WORDSIZES<|
58 SHRLIBTARGET = |>SHRLIBTARGET<|
59 OPTIMIZATION_FLAGS = |>OPTIMIZATION_FLAGS<|
60 ADDITIONAL_LDFLAGS = |>ADDITIONAL_LDFLAGS<|
61 MAKEFILEBUILDER_TGT = |>MAKEFILEBUILDER_TGT<|
62 STANDALONE_SUPPRESS_EXE = |>STANDALONE_SUPPRESS_EXE<|
64 #--------------------------- Model and reference models ------------------------
65 MODELLIB = |>MODELLIB<|
66 MODELREF_LINK_LIBS = |>MODELREF_LINK_LIBS<|
67 MODELREF_INC_PATH = |>START_MDLREFINC_EXPAND_INCLUDES<|-I|>MODELREF_INC_PATH<| |>END_MDLREFINC_EXPAND_INCLUDES<|
68 RELATIVE_PATH_TO_ANCHOR = |>RELATIVE_PATH_TO_ANCHOR<|
69 MODELREF_TARGET_TYPE = |>MODELREF_TARGET_TYPE<|
71 #-- In the case when directory name contains space ---
72 ifneq ($(MATLAB_ROOT),$(ALT_MATLAB_ROOT))
73 MATLAB_ROOT := $(ALT_MATLAB_ROOT)
76 #------------------ Include a tool specification settings ----------------------
77 # TARGET_INCS - include options for the target source files (e.g. -I$(TARGET_INC_DIR))
78 # TARGET_SRCS - a list of the target source files
79 # CC - C compiler command
80 # CFLAGS - C compiler options
81 # CDEBUG - C compiler debug option
82 # CCOUTPUTFLAG - C compiler output option (e.g. -o)
83 # OBJ_EXT - object file extension
84 # CXX - C++ compiler command
85 # CXXFLAGS - C++ compiler options
86 # CXXDEBUG - C++ compiler debug option
88 # LDFLAGS - linker options
89 # LDDEBUG - linker debug option
90 # LDOUTPUTFLAG - linker output option (e.g. -o)
91 # PROGRAM_FILE_EXT - linker output file extension (e.g .elf)
92 # AR - Archiver command
93 # ARFLAGS - Archiver options
94 # OBJCOPY - Binary file format converter command
95 # OBJCOPYFLAGS - Binary file format converter options
96 # BINARY_FILE_EXT - Binary file extension (e.g. .hex or .mot)
97 # EXE_FILE_EXT = $(BINARY_FILE_EXT) or $(PROGRAM_FILE_EXT) - build product ext.
99 include $(START_DIR)/slprj/target_tools.mk
101 #------------------------------ Includes ---------------------------------------
102 # Place -I options here
104 -I$(MATLAB_ROOT)/rtw/c/ert \
105 -I$(MATLAB_ROOT)/extern/include \
106 -I$(MATLAB_ROOT)/simulink/include \
107 -I$(MATLAB_ROOT)/rtw/c/src \
108 -I$(MATLAB_ROOT)/rtw/c/src/ext_mode/common
110 # Additional includes
112 |>START_EXPAND_INCLUDES<| -I|>EXPAND_DIR_NAME<| \
113 |>END_EXPAND_INCLUDES<|
116 ifneq ($(SHARED_SRC_DIR),)
117 SHARED_INCLUDES = -I$(SHARED_SRC_DIR)
120 INCLUDES = -I. -I$(RELATIVE_PATH_TO_ANCHOR) $(MATLAB_INCLUDES) \
121 $(ADD_INCLUDES) $(MODELREF_INC_PATH) $(SHARED_INCLUDES) \
128 CFLAGS += $(INCLUDES)
129 CXXFLAGS += $(INCLUDES)
131 ifeq ($(DEBUG_BUILD),1)
132 # Set flags for debugging
134 CXXFLAGS += $(CXXDEBUG)
135 LDFLAGS += $(LDDEBUG)
137 #-------------------------- Target application ---------------------------------
138 # Define the type of build
141 ifeq ($(MODELREF_TARGET_TYPE), NONE)
142 ifeq ($(MAKEFILEBUILDER_TGT), 0)
143 ifeq ($(STANDALONE_SUPPRESS_EXE), 1)
144 # Build object code only for top level model (preliminary step for building
146 BUILD_MODE=pil_prebuild
147 PRODUCT=ObjectModules
148 BUILD_PRODUCT_TYPE = object modules
150 # Building executable for real-time deployment
152 PRODUCT = $(MODEL)$(EXE_FILE_EXT)
153 BUILD_PRODUCT_TYPE = executable
156 # Building executable for deployment as PIL application (non-real-time
158 BUILD_MODE=pil_application
159 PRODUCT = $(MODEL)$(EXE_FILE_EXT)
160 BUILD_PRODUCT_TYPE = executable
163 # Building a library for a referenced model
164 BUILD_MODE = model_reference
165 PRODUCT = $(MODELLIB)
166 BUILD_PRODUCT_TYPE = library
169 #-------------- Source Files, Object Files and Dependency Files ----------------
171 SRCS = $(ADD_SRCS) $(S_FUNCTIONS)
173 ifeq ($(BUILD_MODE), pil_prebuild)
174 SRCS += $(MODULES) $(MODEL).$(TARGET_LANG_EXT) $(EXT_SRC)
177 ifeq ($(BUILD_MODE), pil_application)
178 SRCS += $(TARGET_SRCS)
179 PREBUILT_SRCS = $(MODULES)
180 PREBUILT_OBJS = $(addsuffix $(OBJ_EXT), $(basename $(PREBUILT_SRCS)))
183 ifeq ($(BUILD_MODE), real_time)
184 SRCS += $(MODULES) $(MODEL).$(TARGET_LANG_EXT) $(EXT_SRC) ert_main.c
185 SRCS += $(TARGET_SRCS)
188 ifeq ($(BUILD_MODE), model_reference)
194 USER_OBJS = $(addsuffix $(OBJ_EXT), $(basename $(USER_SRCS)))
195 LOCAL_USER_OBJS = $(notdir $(USER_OBJS))
197 OBJS = $(addsuffix $(OBJ_EXT), $(basename $(SRCS))) $(USER_OBJS)
198 LINK_OBJS = $(addsuffix $(OBJ_EXT), $(basename $(SRCS))) $(LOCAL_USER_OBJS) $(PREBUILT_OBJS)
200 LIBS = $(S_FUNCTIONS_LIB)
202 SHARED_SRC := $(wildcard $(SHARED_SRC))
203 SHARED_OBJS = $(addsuffix $(OBJ_EXT), $(basename $(SHARED_SRC)))
205 #---------------------------- Default target -----------------------------------
210 # Need a rule to generate the build success string if product was already up to date
213 @echo "### Created $(PRODUCT) successfully (or it was already up to date)"
215 #----------------------------- Dependencies ------------------------------------
217 $(OBJS) : $(MAKEFILE) rtw_proj.tmw
219 $(SHARED_LIB) : $(SHARED_OBJS)
220 @echo "### Creating $@ "
221 $(AR) $(ARFLAGS) $@ $(SHARED_OBJS)
222 @echo "### $@ Created "
224 ##-------------------------- Support for building modules ----------------------
225 ifeq ($(BUILD_MODE), pil_prebuild)
226 $(PRODUCT) : $(OBJS) $(SHARED_LIB)
227 @echo "### BUILD_MODE $(BUILD_MODE)"
228 @echo "### Created $(PRODUCT)"
231 # Commented to remove warning when PROGRAM_FILE_EXT = EXE_FILE_EXT
232 # But actually useful. Consider convert to final binary form here if needed.
233 #ifeq ($(BUILD_MODE), real_time)
234 #$(PRODUCT) : $(MODEL)$(PROGRAM_FILE_EXT)
235 # @echo "### BUILD_MODE $(BUILD_MODE)"
236 # $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
237 # @echo "### Generated $(PRODUCT)"
240 ifeq ($(BUILD_MODE), pil_application)
241 $(PRODUCT) : $(MODEL)$(PROGRAM_FILE_EXT)
242 @echo "### BUILD_MODE $(BUILD_MODE)"
243 $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
244 @echo "### Generated $(PRODUCT)"
247 ifeq ($(BUILD_MODE), model_reference)
248 $(PRODUCT) : $(OBJS) $(SHARED_LIB) $(LIBS)
249 @echo "### BUILD_MODE $(BUILD_MODE)"
250 @echo "### Linking ..."
251 $(AR) $(ARFLAGS) $@ $(OBJS)
252 @echo "### Generated $@"
255 ifeq ($(BUILD_MODE), pil_application)
256 $(MODEL)$(PROGRAM_FILE_EXT): $(PREBUILT_OBJS) $(OBJS) $(MODELLIB) $(MODELREF_LINK_LIBS) $(SHARED_LIB) $(LIBS)
257 @echo "### BUILD_MODE $(BUILD_MODE)"
258 $(LD) $^ $(LDFLAGS) $(LDOUTPUTFLAG) $@
259 @echo "### Generated $@"
262 ifeq ($(BUILD_MODE), real_time)
263 $(MODEL)$(PROGRAM_FILE_EXT): $(OBJS) $(MODELREF_LINK_LIBS) $(SHARED_LIB) $(LIBS)
264 @echo "### BUILD_MODE $(BUILD_MODE)"
265 $(LD) $^ $(LDFLAGS) $(LDOUTPUTFLAG) $@
266 @echo "### Generated $@"
269 %$(OBJ_EXT) : $(RELATIVE_PATH_TO_ANCHOR)/%.c
270 $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG) $@
272 %$(OBJ_EXT): $(RELATIVE_PATH_TO_ANCHOR)/%.cpp
273 $(CXX) -c $(CXXFLAGS) $< $(CCOUTPUTFLAG) $@
276 $(CXX) -c $(CXXFLAGS) $< $(CCOUTPUTFLAG) $@
279 $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG) $@
281 %$(OBJ_EXT): $(TARGET_SRC_DIR)/%.cpp
282 $(CXX) -c $(CXXFLAGS) $< $(CCOUTPUTFLAG) $@
284 %$(OBJ_EXT): $(TARGET_SRC_DIR)/%.c
285 $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG) $@
287 |>START_EXPAND_RULES<|%$(OBJ_EXT) : |>EXPAND_DIR_NAME<|/%.cpp
288 $(CXX) -c $(CXXFLAGS) $<
292 |>START_EXPAND_RULES<|%$(OBJ_EXT) : |>EXPAND_DIR_NAME<|/%.c
293 $(CC) -c $(CFLAGS) $<