PWM.mk 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. # Copyright 1994-2020 The MathWorks, Inc.
  2. #
  3. #
  4. # Abstract:
  5. # Template makefile for building a Windows-based stand-alone embedded
  6. # real-time version of Simulink model using generated C code and the
  7. # Microsoft Visual C/C++ compiler for x64.
  8. #
  9. # Note that this template is automatically customized by the build
  10. # procedure to create "<model>.mk"
  11. #
  12. # The following defines can be used to modify the behavior of the
  13. # build:
  14. # OPT_OPTS - Optimization option. See DEFAULT_OPT_OPTS in
  15. # vctools.mak for default.
  16. # OPTS - User specific options.
  17. # CPP_OPTS - C++ compiler options.
  18. # USER_SRCS - Additional user sources, such as files needed by
  19. # S-functions.
  20. # USER_INCLUDES - Additional include paths
  21. # (i.e. USER_INCLUDES="-Iwhere-ever -Iwhere-ever2")
  22. #
  23. # To enable debugging:
  24. # set DEBUG_BUILD = 1, which will trigger OPTS=-Zi (may vary with
  25. # compiler version, see compiler doc)
  26. #
  27. # This template makefile is designed to be used with a system target
  28. # file that contains 'rtwgensettings.BuildDirSuffix' see ert.tlc
  29. #------------------------ Macros read by make_rtw -----------------------------
  30. #
  31. # The following macros are read by the build procedure:
  32. #
  33. # MAKECMD - This is the command used to invoke the make utility
  34. # HOST - What platform this template makefile is targeted for
  35. # (i.e. PC or UNIX)
  36. # BUILD - Invoke make from the build procedure (yes/no)?
  37. # SYS_TARGET_FILE - Name of system target file.
  38. MAKECMD = nmake
  39. HOST = PC
  40. BUILD = yes
  41. SYS_TARGET_FILE = any
  42. BUILD_SUCCESS = ^#^#^# Created
  43. # Opt in to simplified format by specifying compatible Toolchain
  44. TOOLCHAIN_NAME = [\
  45. "Microsoft Visual C++ 2019 v16.0 | nmake (64-bit Windows)", \
  46. "Microsoft Visual C++ 2017 v15.0 | nmake (64-bit Windows)", \
  47. "Microsoft Visual C++ 2015 v14.0 | nmake (64-bit Windows)"]
  48. #---------------------- Tokens expanded by make_rtw ---------------------------
  49. #
  50. # The following tokens, when wrapped with "|>" and "<|" are expanded by the
  51. # build procedure.
  52. #
  53. # MODEL_NAME - Name of the Simulink block diagram
  54. # MODEL_MODULES - Any additional generated source modules
  55. # MAKEFILE_NAME - Name of makefile created from template makefile <model>.mk
  56. # MATLAB_ROOT - Path to where MATLAB is installed.
  57. # MATLAB_BIN - Path to MATLAB executable.
  58. # S_FUNCTIONS_LIB - List of S-functions libraries to link.
  59. # NUMST - Number of sample times
  60. # NCSTATES - Number of continuous states
  61. # BUILDARGS - Options passed in at the command line.
  62. # MULTITASKING - yes (1) or no (0): Is solver mode multitasking
  63. # INTEGER_CODE - yes (1) or no (0): Is generated code purely integer
  64. # MAT_FILE - yes (1) or no (0): Should mat file logging be done,
  65. # if 0, the generated code runs indefinitely
  66. # MULTI_INSTANCE_CODE - Is the generated code multi instantiable (1/0)?
  67. # MODELREFS - List of referenced models
  68. # SHRLIBTARGET - Is this build intended for generation of a shared library instead
  69. # of executable (1/0)?
  70. # MAKEFILEBUILDER_TGT - Is this build performed by the MakefileBuilder class
  71. # e.g. to create a PIL executable?
  72. # STANDALONE_SUPPRESS_EXE - Build the standalone target but only create object code modules
  73. # and do not build an executable
  74. MODEL = PWM
  75. MODULES =
  76. PRODUCT = PWM_sf.lib
  77. MAKEFILE = PWM.mk
  78. MATLAB_ROOT = D:\Program Files\R2020b
  79. ALT_MATLAB_ROOT = D:\Program Files\R2020b
  80. MATLAB_BIN = D:\Program Files\R2020b\bin
  81. ALT_MATLAB_BIN = D:\Program Files\R2020b\bin
  82. START_DIR = E:\works\mcu\MC100\Simulink
  83. S_FUNCTIONS_LIB =
  84. NUMST = 2
  85. NCSTATES = 0
  86. BUILDARGS = MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% CREATEMODEL=1 USEPARAMVALUES=0 OPTS="-DTID01EQ=0"
  87. MULTITASKING = 1
  88. INTEGER_CODE = 0
  89. MAT_FILE = 0
  90. ALLOCATIONFCN = 0
  91. ONESTEPFCN = 0
  92. TERMFCN = 1
  93. ENABLE_SLEXEC_SSBRIDGE = 0
  94. MULTI_INSTANCE_CODE = 0
  95. CLASSIC_INTERFACE = 1
  96. MODELREFS =
  97. TARGET_LANG_EXT = c
  98. SHRLIBTARGET = 0
  99. MAKEFILEBUILDER_TGT = 0
  100. STANDALONE_SUPPRESS_EXE = 0
  101. OPTIMIZATION_FLAGS = /DNDEBUG /Od /Oy-
  102. ADDITIONAL_LDFLAGS =
  103. INTERLEAVED_COMPLEX_FLAGS = -R2018a
  104. DEFINES_CUSTOM =
  105. DEFINES_OTHER = -DHAVESTDIO
  106. COMPILE_FLAGS_OTHER =
  107. SYSTEM_LIBS = /LIBPATH:"D:\Program Files\R2020b\extern\lib\win64\microsoft" libut.lib libfixedpoint.lib
  108. MODEL_HAS_DYNAMICALLY_LOADED_SFCNS = 0
  109. # To enable debugging:
  110. # set DEBUG_BUILD = 1
  111. DEBUG_BUILD = 0
  112. #--------------------------- Model and reference models -----------------------
  113. MODELLIB =
  114. MODELREF_LINK_LIBS =
  115. MODELREF_LINK_RSPFILE = PWM_ref.rsp
  116. COMPILER_COMMAND_FILE = PWM_comp.rsp
  117. RELATIVE_PATH_TO_ANCHOR = ..
  118. MODELREF_TARGET_TYPE = SIM
  119. !if "$(MATLAB_ROOT)" != "$(ALT_MATLAB_ROOT)"
  120. MATLAB_ROOT = $(ALT_MATLAB_ROOT)
  121. !endif
  122. !if "$(MATLAB_BIN)" != "$(ALT_MATLAB_BIN)"
  123. MATLAB_BIN = $(ALT_MATLAB_BIN)
  124. !endif
  125. MATLAB_ARCH_BIN = $(MATLAB_BIN)\win64
  126. #--------------------------- Tool Specifications ------------------------------
  127. !include $(MATLAB_ROOT)\rtw\c\tools\vctools.mak
  128. CMD_FILE = $(MODEL).rsp
  129. #------------------------------ Include/Lib Path ------------------------------
  130. INCLUDE = .;$(RELATIVE_PATH_TO_ANCHOR);$(INCLUDE)
  131. #----------------- Compiler and Linker Options --------------------------------
  132. # Optimization Options
  133. OPT_OPTS = $(DEFAULT_OPT_OPTS)
  134. # General User Options
  135. !if "$(DEBUG_BUILD)" == "0"
  136. DBG_FLAG =
  137. !else
  138. # Set OPT_OPTS=-Zi and any additional flags for debugging
  139. DBG_FLAG = -Zi
  140. !endif
  141. !if "$(MODELREF_TARGET_TYPE)" == "SIM"
  142. MDLREF_FLAG = -DMDL_REF_SIM_TGT=1
  143. !if "$(ENABLE_SLEXEC_SSBRIDGE)" != "0"
  144. MDLREF_FLAG = $(MDLREF_FLAG) -DENABLE_SLEXEC_SSBRIDGE=$(ENABLE_SLEXEC_SSBRIDGE)
  145. !endif
  146. !else
  147. MDLREF_FLAG =
  148. !endif
  149. !if "$(OPTIMIZATION_FLAGS)" != ""
  150. CC_OPTS = $(OPTS) $(COMPILE_FLAGS_OTHER) $(OPTIMIZATION_FLAGS)
  151. !else
  152. CC_OPTS = $(OPTS) $(COMPILE_FLAGS_OTHER) $(OPT_OPTS)
  153. !endif
  154. CPP_REQ_DEFINES = -DMODEL=$(MODEL) -DNUMST=$(NUMST) -DNCSTATES=$(NCSTATES) \
  155. -DMAT_FILE=$(MAT_FILE) -DINTEGER_CODE=$(INTEGER_CODE) \
  156. -DONESTEPFCN=$(ONESTEPFCN) -DTERMFCN=$(TERMFCN) \
  157. -DHAVESTDIO -DMULTI_INSTANCE_CODE=$(MULTI_INSTANCE_CODE) \
  158. -DCLASSIC_INTERFACE=$(CLASSIC_INTERFACE) \
  159. -DALLOCATIONFCN=$(ALLOCATIONFCN) \
  160. $(DEFINES_CUSTOM) $(DEFINES_OTHER)
  161. !if "$(MODELREF_TARGET_TYPE)" == "SIM"
  162. CPP_REQ_DEFINES = $(CPP_REQ_DEFINES) $(MDLREF_FLAG)
  163. !else
  164. CPP_REQ_DEFINES = $(CPP_REQ_DEFINES) -DMT=$(MULTITASKING)
  165. !endif
  166. CPP_REQ_DEFINES = $(CPP_REQ_DEFINES) -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=$(MODEL_HAS_DYNAMICALLY_LOADED_SFCNS)
  167. CVARSFLAG = $(cvarsdll)
  168. CFLAGS = $(cflags) @$(COMPILER_COMMAND_FILE) $(CVARSFLAG) \
  169. -D_CRT_SECURE_NO_WARNINGS $(DBG_FLAG) $(CC_OPTS) $(CPP_REQ_DEFINES) \
  170. $(USER_INCLUDES)
  171. CPPFLAGS = $(cflags) @$(COMPILER_COMMAND_FILE) $(CVARSFLAG) \
  172. -EHs -D_CRT_SECURE_NO_WARNINGS $(DBG_FLAG) $(CPP_OPTS) $(CC_OPTS) \
  173. $(CPP_REQ_DEFINES) $(USER_INCLUDES)
  174. LDFLAGS = $(ldebug) $(conflags) $(conlibs) $(ADDITIONAL_LDFLAGS)
  175. #----------------------------- Source Files -----------------------------------
  176. ADD_SRCS =
  177. SRCS = $(ADD_SRCS) $(MODULES) $(USER_SRCS)
  178. USER_SRCS =
  179. OBJS_CPP_UPPER = $(SRCS:.CPP=.obj)
  180. OBJS_CPP_LOWER = $(OBJS_CPP_UPPER:.cpp=.obj)
  181. OBJS_C_UPPER = $(OBJS_CPP_LOWER:.C=.obj)
  182. OBJS = $(OBJS_C_UPPER:.c=.obj)
  183. #-------------------------- Additional Libraries -------------------------------
  184. LIBS =
  185. LIBS = $(LIBS) $(S_FUNCTIONS_LIB)
  186. #--------------------------------- Rules --------------------------------------
  187. all: set_environment_variables $(PRODUCT)
  188. !if "$(MODELREF_TARGET_TYPE)" == "NONE"
  189. #--- Shared library target (.dll) ---
  190. !if $(SHRLIBTARGET)==1
  191. $(PRODUCT) : $(LIBS) $(OBJS) $(LIBS) $(MODELREF_LINK_LIBS)
  192. @cmd /C "echo ### Linking ..."
  193. $(LD) $(LDFLAGS) $(LIBS) \
  194. @$(CMD_FILE) @$(MODELREF_LINK_RSPFILE) -dll -def:$(MODEL).def -out:$@
  195. @cmd /C "echo $(BUILD_SUCCESS) dynamically linked library $(PRODUCT)"
  196. !else
  197. !if $(MAKEFILEBUILDER_TGT)==1
  198. PREBUILT_SRCS = $(MODULES)
  199. PREBUILT_OBJS_CPP_UPPER = $(PREBUILT_SRCS:.CPP=.obj)
  200. PREBUILT_OBJS_CPP_LOWER = $(PREBUILT_OBJS_CPP_UPPER:.cpp=.obj)
  201. PREBUILT_OBJS_C_UPPER = $(PREBUILT_OBJS_CPP_LOWER:.C=.obj)
  202. PREBUILT_OBJS = $(PREBUILT_OBJS_C_UPPER:.c=.obj)
  203. $(PRODUCT) : $(LIBS) $(PREBUILT_OBJS) $(OBJS) $(MODELLIB) $(LIBS) $(MODELREF_LINK_LIBS)
  204. @cmd /C "echo ### Linking ..."
  205. @cmd /C "echo $(BUILD_SUCCESS) executable $(PRODUCT)"
  206. !else
  207. !if $(STANDALONE_SUPPRESS_EXE)==1
  208. # Build object code only for top level model
  209. .PHONY: $(PRODUCT)
  210. $(PRODUCT) : $(LIBS) $(OBJS) $(LIBS)
  211. @cmd /C "echo $(BUILD_SUCCESS) object modules $(PRODUCT)"
  212. !else
  213. #--- Stand-alone model (.exe) ---
  214. $(PRODUCT) : $(LIBS) $(OBJS) $(LIBS) $(MODELREF_LINK_LIBS)
  215. @cmd /C "echo ### Linking ..."
  216. $(LD) $(LDFLAGS) $(LIBS) @$(CMD_FILE) @$(MODELREF_LINK_RSPFILE) $(SYSTEM_LIBS) -out:$@
  217. @cmd /C "echo $(BUILD_SUCCESS) executable $(PRODUCT)"
  218. !endif
  219. !endif
  220. !endif
  221. !else
  222. #--- Library target ---
  223. $(PRODUCT) : $(LIBS) $(OBJS)
  224. @cmd /C "echo ### Linking ..."
  225. !endif
  226. #-------------------------- Support for building modules ----------------------
  227. {$(MATLAB_ROOT)\rtw\c\src}.c.obj :
  228. @cmd /C "echo ### Compiling $<"
  229. $(CC) $(CFLAGS) $<
  230. {$(MATLAB_ROOT)\simulink\src}.c.obj :
  231. @cmd /C "echo ### Compiling $<"
  232. $(CC) $(CFLAGS) $<
  233. {$(MATLAB_ROOT)\rtw\c\src}.cpp.obj :
  234. @cmd /C "echo ### Compiling $<"
  235. $(CC) $(CPPFLAGS) $<
  236. {$(MATLAB_ROOT)\simulink\src}.cpp.obj :
  237. @cmd /C "echo ### Compiling $<"
  238. $(CC) $(CPPFLAGS) $<
  239. # Put these rules last, otherwise nmake will check toolboxes first
  240. {$(RELATIVE_PATH_TO_ANCHOR)}.c.obj :
  241. @cmd /C "echo ### Compiling $<"
  242. $(CC) $(CFLAGS) $<
  243. {$(RELATIVE_PATH_TO_ANCHOR)}.cpp.obj :
  244. @cmd /C "echo ### Compiling $<"
  245. $(CC) $(CPPFLAGS) $<
  246. .c.obj :
  247. @cmd /C "echo ### Compiling $<"
  248. $(CC) $(CFLAGS) $<
  249. .cpp.obj :
  250. @cmd /C "echo ### Compiling $<"
  251. $(CC) $(CPPFLAGS) $<
  252. set_environment_variables:
  253. @set INCLUDE=$(INCLUDE)
  254. @set LIB=$(LIB)
  255. # Libraries:
  256. #----------------------------- Dependencies -----------------------------------