]> rtime.felk.cvut.cz Git - jenkicar/rpp-simulink.git/blob - rpp/rpp/rpp.tmf
64628992ec9f6c46796c6157e07ec48f8bce31f1
[jenkicar/rpp-simulink.git] / rpp / rpp / rpp.tmf
1 # Embedded Coder Template Makefile
2 #
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).
6 #
7 # Reference:
8 #       /refs/rtw_ug.pdf p. 1130 and 1183.
9 #
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.
19 #
20 # Copyright 2009-2011 The MathWorks, Inc.
21
22 #------------------------ Macros read by make_rtw ------------------------------
23 MAKECMD         = "|>MATLAB_BIN<|/|>ARCH<|/gmake"
24 HOST                = ANY
25 BUILD               = yes
26 SYS_TARGET_FILE     = any
27 COMPILER_TOOL_CHAIN = default
28 MAKEFILE_FILESEP = /
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<|
39 NUMST                   = |>NUMST<|
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<|
49 MEXEXT                  = |>MEXEXT<|
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<|
70
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<|
76
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<|
83
84 #-- In the case when directory name contains space ---
85 ifneq ($(MATLAB_ROOT),$(ALT_MATLAB_ROOT))
86 MATLAB_ROOT := $(ALT_MATLAB_ROOT)
87 endif
88
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
93 ifeq ($(EXT_MODE),1)
94   EXT_CC_OPTS = -DEXT_MODE -D$(COMPUTER) #-DVERBOSE
95   EXT_LIB     =
96   EXT_SRC     = ext_svr.c updown.c ext_work.c
97   LINT_EXT_COMMON_SRC =
98   LINT_EXT_TCPIP_SRC  =
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
103   endif
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
107   endif
108   ifeq ($(TMW_EXTMODE_TESTING),1)
109     EXT_SRC     += ext_test.c
110     EXT_CC_OPTS += -DTMW_EXTMODE_TESTING
111   endif
112   ifeq ($(EXTMODE_STATIC),1)
113     EXT_SRC             += mem_mgr.c
114     LINT_EXT_COMMON_SRC += mem_mgr.c
115     EXT_CC_OPTS         += -DEXTMODE_STATIC -DEXTMODE_STATIC_SIZE=$(EXTMODE_STATIC_SIZE)
116   endif
117   ifeq ($(COMPUTER),SOL64)
118     EXT_LIB = -lsocket -lnsl
119   endif
120 endif
121
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.
144
145 include $(START_DIR)/slprj/target_tools.mk
146
147 #------------------------------ Includes ---------------------------------------
148 # Place -I options here
149 MATLAB_INCLUDES = \
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
156
157 # Additional includes
158 ADD_INCLUDES = \
159 |>START_EXPAND_INCLUDES<|       -I|>EXPAND_DIR_NAME<| \
160 |>END_EXPAND_INCLUDES<|
161
162 SHARED_INCLUDES =
163 ifneq ($(SHARED_SRC_DIR),)
164 SHARED_INCLUDES = -I$(SHARED_SRC_DIR)
165 endif
166
167 INCLUDES = -I. -I$(RELATIVE_PATH_TO_ANCHOR) $(MATLAB_INCLUDES) \
168            $(ADD_INCLUDES) $(MODELREF_INC_PATH) $(SHARED_INCLUDES) \
169            $(TARGET_INCS)
170
171 OPTS=
172 CFLAGS += $(OPTS)
173 CXXFLAGS += $(OPTS)
174
175 CFLAGS += $(INCLUDES)
176 CXXFLAGS += $(INCLUDES)
177
178 ifeq ($(DEBUG_BUILD),1)
179 # Set flags for debugging
180 CFLAGS += $(CDEBUG)
181 CXXFLAGS += $(CXXDEBUG)
182 LDFLAGS += $(LDDEBUG)
183 endif
184 #-------------------------- Target application ---------------------------------
185 # Define the type of build
186
187
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
192 # PIL application)
193 BUILD_MODE=pil_prebuild
194 PRODUCT=ObjectModules
195 BUILD_PRODUCT_TYPE = object modules
196 else
197 # Building executable for real-time deployment
198 BUILD_MODE=real_time
199 PRODUCT = $(MODEL)$(EXE_FILE_EXT)
200 BUILD_PRODUCT_TYPE = executable
201 endif
202 else
203 # Building executable for deployment as PIL application (non-real-time
204 # simulation)
205 BUILD_MODE=pil_application
206 PRODUCT = $(MODEL)$(EXE_FILE_EXT)
207 BUILD_PRODUCT_TYPE = executable
208 endif
209 else
210 # Building a library for a referenced model
211 BUILD_MODE = model_reference
212 PRODUCT = $(MODELLIB)
213 BUILD_PRODUCT_TYPE = library
214 endif
215
216 #-------------- Source Files, Object Files and Dependency Files ----------------
217
218 SRCS = $(ADD_SRCS) $(S_FUNCTIONS) $(EXT_SRC)
219
220 ifeq ($(BUILD_MODE), pil_prebuild)
221   SRCS += $(MODULES) $(MODEL).$(TARGET_LANG_EXT) $(EXT_SRC)
222 endif
223
224 ifeq ($(BUILD_MODE), pil_application)
225   SRCS += $(TARGET_SRCS)
226   PREBUILT_SRCS      = $(MODULES)
227   PREBUILT_OBJS      = $(addsuffix $(OBJ_EXT), $(basename $(PREBUILT_SRCS)))
228 endif
229
230 ifeq ($(BUILD_MODE), real_time)
231   SRCS += $(MODULES) $(MODEL).$(TARGET_LANG_EXT) $(EXT_SRC) ert_main.c
232   SRCS += $(TARGET_SRCS)
233 endif
234
235 ifeq ($(BUILD_MODE), model_reference)
236   SRCS += $(MODULES)
237 endif
238
239 USER_SRCS =
240
241 USER_OBJS       = $(addsuffix $(OBJ_EXT), $(basename $(USER_SRCS)))
242 LOCAL_USER_OBJS = $(notdir $(USER_OBJS))
243
244 OBJS      = $(addsuffix $(OBJ_EXT), $(basename $(SRCS))) $(USER_OBJS)
245 LINK_OBJS = $(addsuffix $(OBJ_EXT), $(basename $(SRCS))) $(LOCAL_USER_OBJS) $(PREBUILT_OBJS)
246
247 LIBS = $(S_FUNCTIONS_LIB)
248
249 SHARED_SRC := $(wildcard $(SHARED_SRC))
250 SHARED_OBJS = $(addsuffix $(OBJ_EXT), $(basename $(SHARED_SRC)))
251
252 #---------------------------- Default target -----------------------------------
253 TARGETS = $(PRODUCT)
254
255 all: $(TARGETS)
256
257 # Need a rule to generate the build success string if product was already up to date
258 .PHONY : all
259 all : $(PRODUCT)
260         @echo "### Created $(PRODUCT) successfully (or it was already up to date)"
261
262 #----------------------------- Dependencies ------------------------------------
263
264 $(OBJS) : $(MAKEFILE) rtw_proj.tmw
265
266 $(SHARED_LIB) : $(SHARED_OBJS)
267         @echo "### Creating $@ "
268         $(AR) $(ARFLAGS) $@ $(SHARED_OBJS)
269         @echo "### $@ Created "
270
271 ##-------------------------- Support for building modules ----------------------
272
273 ifeq ($(BUILD_MODE), pil_prebuild)
274 $(PRODUCT) : $(OBJS) $(SHARED_LIB)
275         @echo "### BUILD_MODE $(BUILD_MODE)"
276         @echo "### Created $(PRODUCT)"
277 endif
278
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)"
284 endif
285
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)"
291 endif
292
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 $@"
299 endif
300
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 $@"
306 endif
307
308 ifeq ($(BUILD_MODE), real_time)
309 $(OBJS): $(RPP_LIB_ROOT)/$(RPP_STATIC_LIB) $(RPP_LIB_ROOT)/build/$(TARGET)/$(TARGET_LDCMD)
310
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 $@"
315 endif
316
317 %$(OBJ_EXT): $(RELATIVE_PATH_TO_ANCHOR)/%.cpp
318         $(CXX) -c $(CXXFLAGS) $< $(CCOUTPUTFLAG)$@
319
320 %$(OBJ_EXT) : $(RELATIVE_PATH_TO_ANCHOR)/%.c
321         $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
322
323 %$(OBJ_EXT) : $(RELATIVE_PATH_TO_ANCHOR)/%.asm
324         $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
325
326 %$(OBJ_EXT): %.cpp
327         $(CXX) -c $(CXXFLAGS) $< $(CCOUTPUTFLAG)$@
328
329 %$(OBJ_EXT): %.c
330         $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
331
332 %$(OBJ_EXT): %.asm
333         $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
334
335 %$(OBJ_EXT): $(TARGET_SRC_DIR)/%.cpp
336         $(CXX) -c $(CXXFLAGS) $< $(CCOUTPUTFLAG)$@
337
338 %$(OBJ_EXT): $(TARGET_SRC_DIR)/%.c
339         $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
340
341 %$(OBJ_EXT): $(TARGET_SRC_DIR)/%.asm
342         $(CC) -c $(CFLAGS) $< $(CCOUTPUTFLAG)$@
343
344 |>START_EXPAND_RULES<|%$(OBJ_EXT) : |>EXPAND_DIR_NAME<|/%.cpp
345         $(CXX) -c $(CXXFLAGS) $<
346
347 |>END_EXPAND_RULES<|
348
349 |>START_EXPAND_RULES<|%$(OBJ_EXT) : |>EXPAND_DIR_NAME<|/%.c
350         $(CC) -c $(CFLAGS) $<
351
352 |>END_EXPAND_RULES<|
353
354 |>START_EXPAND_RULES<|%$(OBJ_EXT) : |>EXPAND_DIR_NAME<|/%.asm
355         $(CC) -c $(CFLAGS) $<
356
357 |>END_EXPAND_RULES<|
358
359 %$(OBJ_EXT): $(TARGET_ROOT)/%.c
360         $(CC) -c $< $(CFLAGS) $(CCOUTPUTFLAG)$@
361
362 %$(OBJ_EXT) : $(TARGET_ROOT)/rtw/c/src/ext_mode/common/%.c
363         $(CC) -c $< $(CFLAGS) $(CCOUTPUTFLAG)$@
364
365 %$(OBJ_EXT): $(MATLAB_ROOT)/rtw/c/src/ext_mode/serial/%.c
366         $(CC) -c $< $(CFLAGS) $(CCOUTPUTFLAG)$@
367
368 %$(OBJ_EXT): $(MATLAB_ROOT)/rtw/c/src/ext_mode/custom/%.c
369         $(CC) -c $< $(CFLAGS) $(CCOUTPUTFLAG)$@