Makefile.fpc 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. #
  2. # Makefile.fpc for Free Pascal FreeRTOS RTL
  3. #
  4. [package]
  5. main=rtl
  6. [target]
  7. loaders=$(LOADERS)
  8. # not all targets include enough features to build all units so
  9. # the common units which are not compiled for all CPUs are stored in
  10. # CPU_SPECIFIC_COMMON_UNITS
  11. units=$(SYSTEMUNIT) $(CPU_UNITS) $(UUCHARUNIT) $(OBJPASUNIT) $(ISO7185UNIT) $(EXTPASUNIT) heapmgr consoleio $(CPU_SPECIFIC_COMMON_UNITS) \
  12. # $(MACPASUNIT) $(ISO7185UNIT) $(STRINGSUNIT)
  13. $(STRINGSUNIT) \
  14. $(SORTBASEUNIT) \
  15. $(DOSUNIT) \
  16. $(CTYPESUNIT) \
  17. $(CHARSETUNIT) $(CPALLUNIT) \
  18. $(SYSCONSTUNIT) \
  19. $(CHARACTERUNIT)
  20. implicitunits=$(EXEINFOUNIT) $(CP_UNITS) $(UNICODEDATAUNIT)
  21. #rsts=$(MATHUNIT) $(RTLCONSTSUNIT) $(TYPINFOUNIT) $(CLASSESUNIT) $(SYSCONSTUNIT)
  22. [require]
  23. nortl=y
  24. [install]
  25. fpcpackage=y
  26. [default]
  27. target=freertos
  28. [compiler]
  29. includedir=$(INC) $(PROCINC)
  30. sourcedir=$(INC) $(PROCINC) $(COMMON) $(ARCH)
  31. [prerules]
  32. RTL=..
  33. INC=$(RTL)/inc
  34. COMMON=$(RTL)/common
  35. PROCINC=$(RTL)/$(CPU_TARGET)
  36. UNITPREFIX=rtl
  37. LOADERS=
  38. ifeq ($(ARCH),mipsel)
  39. ifeq ($(SUBARCH),pic32mx)
  40. override LOADERS=startup
  41. endif
  42. endif
  43. ifdef RELEASE
  44. override FPCOPT+=-Ur
  45. endif
  46. # Always include rtl.cfg config file for i8086
  47. ifeq ($(ARCH),i8086)
  48. override [email protected]
  49. endif
  50. CPU_UNITS=
  51. SYSINIT_UNITS=
  52. CPU_SPECIFIC_COMMON_UNITS=
  53. # Dos unit, local source
  54. DOSDIR=.
  55. # Dos unit uses objfpc mode
  56. DOS_DEPS_OS=$(OBJPASUNIT)$(PPUEXT)
  57. ifeq ($(ARCH),arm)
  58. CPU_SPECIFIC_COMMON_UNITS=$(SYSUTILSUNIT) $(MATHUNIT) $(CLASSESUNIT) $(FGLUNIT) $(MACPASUNIT) $(TYPINFOUNIT) $(TYPESUNIT) $(RTLCONSTSUNIT) $(GETOPTSUNIT) $(LINEINFOUNIT)
  59. ifeq ($(SUBARCH),armv7m)
  60. CPU_UNITS=stm32f103xe cortexm3 cortexm4 # thumb2_bare
  61. CPU_UNITS_DEFINED=1
  62. endif
  63. ifeq ($(SUBARCH),armv7em)
  64. CPU_UNITS=stm32f401xe cortexm3 cortexm4 cortexm7 # thumb2_bare
  65. CPU_UNITS_DEFINED=1
  66. endif
  67. ifeq ($(SUBARCH),armv4t)
  68. CPU_UNITS=lpc21x4 at91sam7x256 sc32442b
  69. CPU_UNITS_DEFINED=1
  70. endif
  71. ifeq ($(SUBARCH),armv4)
  72. CPU_UNITS=lpc21x4 at91sam7x256 sc32442b
  73. CPU_UNITS_DEFINED=1
  74. endif
  75. ifeq ($(SUBARCH),armv6m)
  76. CPU_UNITS=stm32g071xx cortexm0
  77. CPU_UNITS_DEFINED=1
  78. endif
  79. ifeq ($(SUBARCH),armv7a)
  80. CPU_UNITS=allwinner_a20 raspi2
  81. CPU_UNITS_DEFINED=1
  82. endif
  83. ifeq ($(CPU_UNITS_DEFINED),)
  84. $(error No CPUs enabled for given SUBARCH, pass either a SUBARCH or set CPU_UNITS_DEFINED=1 if you know what you are doing)
  85. endif
  86. endif
  87. ifeq ($(ARCH),avr)
  88. CPU_SPECIFIC_COMMON_UNITS=intrinsics
  89. ifeq ($(SUBARCH),avrtiny)
  90. CPU_UNITS=attiny4 attiny5 attiny9 attiny10 attiny20 attiny40 attiny102 attiny104
  91. CPU_UNITS_DEFINED=1
  92. endif
  93. ifeq ($(SUBARCH),avr1)
  94. CPU_UNITS=attiny11 attiny12 attiny15 attiny28
  95. CPU_UNITS_DEFINED=1
  96. endif
  97. ifeq ($(SUBARCH),avr2)
  98. CPU_UNITS=attiny26
  99. CPU_UNITS_DEFINED=1
  100. endif
  101. ifeq ($(SUBARCH),avr25)
  102. CPU_UNITS=attiny13 attiny13a attiny24 attiny24a attiny25 attiny43u \
  103. attiny44 attiny44a attiny45 attiny48 attiny84a attiny84 attiny85 \
  104. attiny87 attiny88 attiny261 attiny261a attiny441 attiny461 attiny461a attiny828 \
  105. attiny841 attiny861 attiny861a attiny2313 attiny2313a attiny4313
  106. CPU_UNITS_DEFINED=1
  107. endif
  108. ifeq ($(SUBARCH),avr35)
  109. CPU_UNITS=at90usb82 at90usb162 atmega8u2 atmega16u2 atmega32u2 attiny167 attiny1634
  110. CPU_UNITS_DEFINED=1
  111. endif
  112. ifeq ($(SUBARCH),avr4)
  113. CPU_UNITS=at90pwm1 at90pwm2b at90pwm3b at90pwm81 ata6285 ata6286 atmega8 \
  114. atmega8a atmega8hva atmega48 atmega48a atmega48p atmega48pa \
  115. atmega48pb atmega88 atmega88a atmega88p atmega88pa atmega88pb \
  116. atmega8515 atmega8535
  117. CPU_UNITS_DEFINED=1
  118. endif
  119. ifeq ($(SUBARCH),avr5)
  120. CPU_UNITS=avrsim at90can32 at90can64 at90pwm161 at90pwm216 at90pwm316 \
  121. at90usb646 at90usb647 atmega16 atmega16a atmega16hva atmega16hvb atmega16hvbrevb atmega16m1 \
  122. atmega16u4 atmega32 atmega32a atmega32c1 atmega32hvb atmega32hvbrevb atmega32m1 \
  123. atmega32u4 atmega64 atmega64a atmega64c1 atmega64hve2 atmega64m1 atmega64rfr2 atmega162 \
  124. atmega164a atmega164p atmega164pa atmega165a atmega165p atmega165pa \
  125. atmega168 atmega168a atmega168p atmega168pa atmega168pb atmega169a atmega169p \
  126. atmega169pa atmega324a atmega324p atmega324pa atmega324pb atmega325 atmega325a \
  127. atmega325p atmega325pa atmega328 atmega328p atmega328pb atmega329 atmega329a \
  128. atmega329p atmega329pa atmega406 atmega640 atmega644 atmega644a atmega644p \
  129. atmega644pa atmega644rfr2 atmega645 atmega645a atmega645p atmega649 atmega649a \
  130. atmega649p atmega3250 atmega3250a atmega3250p atmega3250pa atmega3290 \
  131. atmega3290a atmega3290p atmega3290pa atmega6450 atmega6450a \
  132. atmega6450p atmega6490 atmega6490a atmega6490p
  133. CPU_UNITS_DEFINED=1
  134. endif
  135. ifeq ($(SUBARCH),avr51)
  136. CPU_UNITS=at90can128 at90usb1286 at90usb1287 atmega128 atmega128a atmega128rfa1 atmega128rfr2 \
  137. atmega1280 atmega1281 atmega1284 atmega1284p atmega1284rfr2
  138. CPU_UNITS_DEFINED=1
  139. endif
  140. ifeq ($(SUBARCH),avr6)
  141. CPU_UNITS=avrsim atmega256rfr2 atmega2560 atmega2561 atmega2564rfr2
  142. CPU_UNITS_DEFINED=1
  143. endif
  144. ifeq ($(SUBARCH),avrxmega3)
  145. CPU_UNITS=atmega808 atmega809 atmega1608 atmega1609 atmega3208 atmega3209 \
  146. atmega4808 atmega4809 attiny202 attiny204 attiny212 attiny214 \
  147. attiny402 attiny404 attiny406 attiny412 attiny414 attiny416 \
  148. attiny416auto attiny417 attiny804 attiny806 attiny807 attiny814 \
  149. attiny816 attiny817 attiny1604 attiny1606 attiny1607 attiny1614 \
  150. attiny1616 attiny1617 attiny1624 attiny1626 attiny1627 attiny3214 attiny3216 attiny3217
  151. CPU_UNITS_DEFINED=1
  152. ifeq ($(CPU_UNITS_DEFINED),)
  153. $(error No CPUs enabled for given SUBARCH, pass either a SUBARCH or set CPU_UNITS_DEFINED=1 if you know what you are doing)
  154. endif
  155. endif
  156. endif
  157. ifeq ($(ARCH),i386)
  158. CPU_SPECIFIC_COMMON_UNITS=$(SYSUTILSUNIT) $(MATHUNIT) $(CLASSESUNIT) $(FGLUNIT) $(MACPASUNIT) $(TYPINFOUNIT) $(TYPESUNIT) $(RTLCONSTSUNIT) $(GETOPTSUNIT) $(LINEINFOUNIT)
  159. CPU_UNITS=multiboot
  160. CPU_UNITS_DEFINED=1
  161. ifeq ($(CPU_UNITS_DEFINED),)
  162. $(error No CPUs enabled for given SUBARCH, pass either a SUBARCH or set CPU_UNITS_DEFINED=1 if you know what you are doing)
  163. endif
  164. endif
  165. ifeq ($(ARCH),x86_64)
  166. CPU_SPECIFIC_COMMON_UNITS=$(SYSUTILSUNIT) $(MATHUNIT) $(CLASSESUNIT) $(FGLUNIT) $(MACPASUNIT) $(TYPINFOUNIT) $(TYPESUNIT) $(RTLCONSTSUNIT) $(GETOPTSUNIT) $(LINEINFOUNIT)
  167. # CPU_UNITS=multiboot
  168. endif
  169. ifeq ($(ARCH),m68k)
  170. CPU_SPECIFIC_COMMON_UNITS=$(SYSUTILSUNIT) $(MATHUNIT)
  171. # CPU_UNITS=multiboot
  172. endif
  173. ifeq ($(ARCH),mipsel)
  174. CPU_SPECIFIC_COMMON_UNITS=$(SYSUTILSUNIT) $(MATHUNIT) $(CLASSESUNIT) $(FGLUNIT) $(MACPASUNIT) $(TYPINFOUNIT) $(TYPESUNIT) $(RTLCONSTSUNIT) $(GETOPTSUNIT) $(LINEINFOUNIT)
  175. ifeq ($(SUBARCH),pic32mx)
  176. CPU_UNITS=pic32mx1xxfxxxb pic32mx2xxfxxxb pic32mx1xxfxxxc pic32mx2xxfxxxc pic32mx1xxfxxxd pic32mx2xxfxxxd pic32mx7x5fxxxl pic32mx7x5fxxxh
  177. CPU_UNITS_DEFINED=1
  178. endif
  179. ifeq ($(CPU_UNITS_DEFINED),)
  180. $(error No CPUs enabled for given SUBARCH, pass either a SUBARCH or set CPU_UNITS_DEFINED=1 if you know what you are doing)
  181. endif
  182. endif
  183. ifeq ($(ARCH),riscv32)
  184. CPU_SPECIFIC_COMMON_UNITS=$(SYSUTILSUNIT) $(MATHUNIT) $(CLASSESUNIT) $(FGLUNIT) $(MACPASUNIT) $(TYPINFOUNIT) $(TYPESUNIT) $(RTLCONSTSUNIT) $(GETOPTSUNIT) $(LINEINFOUNIT)
  185. ifeq ($(SUBARCH),rv32imc)
  186. override FPCOPT+=-Cprv32imc
  187. CPU_UNITS=esp32c3 esp32c3idf_50000
  188. CPU_UNITS_DEFINED=1
  189. endif
  190. ifeq ($(CPU_UNITS_DEFINED),)
  191. $(error No CPUs enabled for given SUBARCH, pass either a SUBARCH or set CPU_UNITS_DEFINED=1 if you know what you are doing)
  192. endif
  193. endif
  194. ifeq ($(ARCH),riscv64)
  195. CPU_SPECIFIC_COMMON_UNITS=$(SYSUTILSUNIT) $(MATHUNIT) $(CLASSESUNIT) $(FGLUNIT) $(MACPASUNIT) $(TYPINFOUNIT) $(TYPESUNIT) $(RTLCONSTSUNIT) $(GETOPTSUNIT) $(LINEINFOUNIT)
  196. CPU_UNITS=
  197. CPU_UNITS_DEFINED=1
  198. ifeq ($(CPU_UNITS_DEFINED),)
  199. $(error No CPUs enabled for given SUBARCH, pass either a SUBARCH or set CPU_UNITS_DEFINED=1 if you know what you are doing)
  200. endif
  201. endif
  202. ifeq ($(ARCH),xtensa)
  203. CPU_SPECIFIC_COMMON_UNITS=$(SYSUTILSUNIT) $(MATHUNIT) $(CLASSESUNIT) $(FGLUNIT) $(MACPASUNIT) $(TYPINFOUNIT) $(TYPESUNIT) $(RTLCONSTSUNIT) $(GETOPTSUNIT) $(LINEINFOUNIT)
  204. ifeq ($(SUBARCH),lx6)
  205. CPU_UNITS=esp32 espidf_40100 espidf_40200 espidf_40400
  206. CPU_UNITS_DEFINED=1
  207. endif
  208. ifeq ($(SUBARCH),lx106)
  209. CPU_UNITS=esp8266 esp8266rtos_30300 esp8266rtos_30400
  210. CPU_UNITS_DEFINED=1
  211. endif
  212. ifeq ($(CPU_UNITS_DEFINED),)
  213. $(error No CPUs enabled for given SUBARCH, pass either a SUBARCH or set CPU_UNITS_DEFINED=1 if you know what you are doing)
  214. endif
  215. endif
  216. # Paths
  217. OBJPASDIR=$(RTL)/objpas
  218. [rules]
  219. # .NOTPARALLEL:
  220. # Get the system independent include file names.
  221. # This will set the following variables :
  222. # SYSINCNAMES
  223. include $(INC)/makefile.inc
  224. SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES))
  225. # Get the processor dependent include file names.
  226. # This will set the following variables :
  227. # CPUINCNAMES
  228. include $(PROCINC)/makefile.cpu
  229. SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
  230. # Put system unit dependencies together.
  231. SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS) $(INC)/softfpu.pp
  232. override FPC_SYSTEM_OPT += @system.cfg
  233. #
  234. # Loaders
  235. #
  236. startup$(OEXT) : $(CPU_TARGET)/startup.s
  237. $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)startup$(OEXT) $(CPU_TARGET)/startup.s -mabi=32 -march=pic32mx -mtune=pic32mx -W -EL -msym32
  238. #
  239. # Base Units (System, $(STRINGSUNIT), os-dependent-base-unit)
  240. #
  241. consoleio$(PPUEXT) : consoleio.pp $(SYSTEMUNIT)$(PPUEXT)
  242. $(COMPILER) $<
  243. heapmgr$(PPUEXT) : heapmgr.pp $(SYSTEMUNIT)$(PPUEXT)
  244. $(COMPILER) $<
  245. #
  246. # Unit specific rules
  247. #
  248. define CPU_UNITS_RULE
  249. ifeq ($(ARCH),avr)
  250. $(1)$(PPUEXT): $(ARCH)/$(1).pp intrinsics$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
  251. else
  252. ifeq ($(ARCH),xtensa)
  253. $(1)$(PPUEXT): $(ARCH)/$(1).pp consoleio$(PPUEXT) heapmgr$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
  254. else
  255. $(1)$(PPUEXT): $(ARCH)/$(1).pp $(SYSTEMUNIT)$(PPUEXT)
  256. endif
  257. endif
  258. endef
  259. $(foreach unit,$(CPU_UNITS),$(eval $(call CPU_UNITS_RULE,$(unit))))
  260. $(addsuffix $(PPUEXT),$(CPU_UNITS)):
  261. $(COMPILER) -g $<