Makefile 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. # copyright (c) 2010 Espressif System
  2. #
  3. ifndef PDIR
  4. endif
  5. ifeq ($(COMPILE), gcc)
  6. AR = xtensa-lx106-elf-ar
  7. CC = xtensa-lx106-elf-gcc
  8. NM = xtensa-lx106-elf-nm
  9. CPP = xtensa-lx106-elf-cpp
  10. OBJCOPY = xtensa-lx106-elf-objcopy
  11. OBJDUMP = xtensa-lx106-elf-objdump
  12. else
  13. AR = xt-ar
  14. CC = xt-xcc
  15. NM = xt-nm
  16. CPP = xt-cpp
  17. OBJCOPY = xt-objcopy
  18. OBJDUMP = xt-objdump
  19. endif
  20. BOOT?=none
  21. APP?=0
  22. SPI_SPEED?=40
  23. SPI_MODE?=QIO
  24. SPI_SIZE_MAP?=0
  25. ifeq ($(BOOT), new)
  26. boot = new
  27. else
  28. ifeq ($(BOOT), old)
  29. boot = old
  30. else
  31. boot = none
  32. endif
  33. endif
  34. ifeq ($(APP), 1)
  35. app = 1
  36. else
  37. ifeq ($(APP), 2)
  38. app = 2
  39. else
  40. app = 0
  41. endif
  42. endif
  43. ifeq ($(SPI_SPEED), 26.7)
  44. freqdiv = 1
  45. else
  46. ifeq ($(SPI_SPEED), 20)
  47. freqdiv = 2
  48. else
  49. ifeq ($(SPI_SPEED), 80)
  50. freqdiv = 15
  51. else
  52. freqdiv = 0
  53. endif
  54. endif
  55. endif
  56. ifeq ($(SPI_MODE), QOUT)
  57. mode = 1
  58. else
  59. ifeq ($(SPI_MODE), DIO)
  60. mode = 2
  61. else
  62. ifeq ($(SPI_MODE), DOUT)
  63. mode = 3
  64. else
  65. mode = 0
  66. endif
  67. endif
  68. endif
  69. addr = 0x01000
  70. ifeq ($(SPI_SIZE_MAP), 1)
  71. size_map = 1
  72. flash = 256
  73. else
  74. ifeq ($(SPI_SIZE_MAP), 2)
  75. size_map = 2
  76. flash = 1024
  77. ifeq ($(app), 2)
  78. addr = 0x81000
  79. endif
  80. else
  81. ifeq ($(SPI_SIZE_MAP), 3)
  82. size_map = 3
  83. flash = 2048
  84. ifeq ($(app), 2)
  85. addr = 0x81000
  86. endif
  87. else
  88. ifeq ($(SPI_SIZE_MAP), 4)
  89. size_map = 4
  90. flash = 4096
  91. ifeq ($(app), 2)
  92. addr = 0x81000
  93. endif
  94. else
  95. ifeq ($(SPI_SIZE_MAP), 5)
  96. size_map = 5
  97. flash = 2048
  98. ifeq ($(app), 2)
  99. addr = 0x101000
  100. endif
  101. else
  102. ifeq ($(SPI_SIZE_MAP), 6)
  103. size_map = 6
  104. flash = 4096
  105. ifeq ($(app), 2)
  106. addr = 0x101000
  107. endif
  108. else
  109. size_map = 0
  110. flash = 512
  111. ifeq ($(app), 2)
  112. addr = 0x41000
  113. endif
  114. endif
  115. endif
  116. endif
  117. endif
  118. endif
  119. endif
  120. LD_FILE = $(LDDIR)/eagle.app.v6.ld
  121. ifneq ($(boot), none)
  122. ifneq ($(app),0)
  123. ifeq ($(size_map), 6)
  124. LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).2048.ld
  125. else
  126. ifeq ($(size_map), 5)
  127. LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).2048.ld
  128. else
  129. ifeq ($(size_map), 4)
  130. LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).1024.app$(app).ld
  131. else
  132. ifeq ($(size_map), 3)
  133. LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).1024.app$(app).ld
  134. else
  135. ifeq ($(size_map), 2)
  136. LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).1024.app$(app).ld
  137. else
  138. ifeq ($(size_map), 0)
  139. LD_FILE = $(LDDIR)/eagle.app.v6.$(boot).512.app$(app).ld
  140. endif
  141. endif
  142. endif
  143. endif
  144. endif
  145. endif
  146. BIN_NAME = user$(app).$(flash).$(boot).$(size_map)
  147. endif
  148. else
  149. app = 0
  150. endif
  151. CSRCS ?= $(wildcard *.c)
  152. ASRCs ?= $(wildcard *.s)
  153. ASRCS ?= $(wildcard *.S)
  154. SUBDIRS ?= $(patsubst %/,%,$(dir $(wildcard */Makefile)))
  155. ODIR := .output
  156. OBJODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/obj
  157. OBJS := $(CSRCS:%.c=$(OBJODIR)/%.o) \
  158. $(ASRCs:%.s=$(OBJODIR)/%.o) \
  159. $(ASRCS:%.S=$(OBJODIR)/%.o)
  160. DEPS := $(CSRCS:%.c=$(OBJODIR)/%.d) \
  161. $(ASRCs:%.s=$(OBJODIR)/%.d) \
  162. $(ASRCS:%.S=$(OBJODIR)/%.d)
  163. LIBODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/lib
  164. OLIBS := $(GEN_LIBS:%=$(LIBODIR)/%)
  165. IMAGEODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/image
  166. OIMAGES := $(GEN_IMAGES:%=$(IMAGEODIR)/%)
  167. BINODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/bin
  168. OBINS := $(GEN_BINS:%=$(BINODIR)/%)
  169. CCFLAGS += \
  170. -g \
  171. -Wpointer-arith \
  172. -Wundef \
  173. -Werror \
  174. -Wl,-EL \
  175. -fno-inline-functions \
  176. -nostdlib \
  177. -mlongcalls \
  178. -mtext-section-literals \
  179. -ffunction-sections \
  180. -fdata-sections
  181. # -Wall
  182. CFLAGS = $(CCFLAGS) $(DEFINES) $(EXTRA_CCFLAGS) $(INCLUDES)
  183. DFLAGS = $(CCFLAGS) $(DDEFINES) $(EXTRA_CCFLAGS) $(INCLUDES)
  184. #############################################################
  185. # Functions
  186. #
  187. define ShortcutRule
  188. $(1): .subdirs $(2)/$(1)
  189. endef
  190. define MakeLibrary
  191. DEP_LIBS_$(1) = $$(foreach lib,$$(filter %.a,$$(COMPONENTS_$(1))),$$(dir $$(lib))$$(LIBODIR)/$$(notdir $$(lib)))
  192. DEP_OBJS_$(1) = $$(foreach obj,$$(filter %.o,$$(COMPONENTS_$(1))),$$(dir $$(obj))$$(OBJODIR)/$$(notdir $$(obj)))
  193. $$(LIBODIR)/$(1).a: $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1)) $$(DEPENDS_$(1))
  194. @mkdir -p $$(LIBODIR)
  195. $$(if $$(filter %.a,$$?),mkdir -p $$(EXTRACT_DIR)_$(1))
  196. $$(if $$(filter %.a,$$?),cd $$(EXTRACT_DIR)_$(1); $$(foreach lib,$$(filter %.a,$$?),$$(AR) xo $$(UP_EXTRACT_DIR)/$$(lib);))
  197. $$(AR) ru $$@ $$(filter %.o,$$?) $$(if $$(filter %.a,$$?),$$(EXTRACT_DIR)_$(1)/*.o)
  198. $$(if $$(filter %.a,$$?),$$(RM) -r $$(EXTRACT_DIR)_$(1))
  199. endef
  200. define MakeImage
  201. DEP_LIBS_$(1) = $$(foreach lib,$$(filter %.a,$$(COMPONENTS_$(1))),$$(dir $$(lib))$$(LIBODIR)/$$(notdir $$(lib)))
  202. DEP_OBJS_$(1) = $$(foreach obj,$$(filter %.o,$$(COMPONENTS_$(1))),$$(dir $$(obj))$$(OBJODIR)/$$(notdir $$(obj)))
  203. $$(IMAGEODIR)/$(1).out: $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1)) $$(DEPENDS_$(1))
  204. @mkdir -p $$(IMAGEODIR)
  205. $$(CC) $$(LDFLAGS) $$(if $$(LINKFLAGS_$(1)),$$(LINKFLAGS_$(1)),$$(LINKFLAGS_DEFAULT) $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1))) -o $$@
  206. endef
  207. $(BINODIR)/%.bin: $(IMAGEODIR)/%.out
  208. @mkdir -p $(BINODIR)
  209. ifeq ($(APP), 0)
  210. @$(RM) -r ../bin/eagle.S ../bin/eagle.dump
  211. @$(OBJDUMP) -x -s $< > ../bin/eagle.dump
  212. @$(OBJDUMP) -S $< > ../bin/eagle.S
  213. else
  214. @$(RM) -r ../bin/upgrade/$(BIN_NAME).S ../bin/upgrade/$(BIN_NAME).dump
  215. @$(OBJDUMP) -x -s $< > ../bin/upgrade/$(BIN_NAME).dump
  216. @$(OBJDUMP) -S $< > ../bin/upgrade/$(BIN_NAME).S
  217. endif
  218. @$(OBJCOPY) --only-section .text -O binary $< eagle.app.v6.text.bin
  219. @$(OBJCOPY) --only-section .data -O binary $< eagle.app.v6.data.bin
  220. @$(OBJCOPY) --only-section .rodata -O binary $< eagle.app.v6.rodata.bin
  221. @$(OBJCOPY) --only-section .irom0.text -O binary $< eagle.app.v6.irom0text.bin
  222. @echo ""
  223. @echo "!!!"
  224. ifeq ($(app), 0)
  225. @python ../tools/gen_appbin.py $< 0 $(mode) $(freqdiv) $(size_map)
  226. @mv eagle.app.flash.bin ../bin/eagle.flash.bin
  227. @mv eagle.app.v6.irom0text.bin ../bin/eagle.irom0text.bin
  228. @rm eagle.app.v6.*
  229. @echo "No boot needed."
  230. @echo "Generate eagle.flash.bin and eagle.irom0text.bin successully in folder bin."
  231. @echo "eagle.flash.bin-------->0x00000"
  232. @echo "eagle.irom0text.bin---->0x40000"
  233. else
  234. ifneq ($(boot), new)
  235. @python ../tools/gen_appbin.py $< 1 $(mode) $(freqdiv) $(size_map)
  236. @echo "Support boot_v1.1 and +"
  237. else
  238. @python ../tools/gen_appbin.py $< 2 $(mode) $(freqdiv) $(size_map)
  239. ifeq ($(size_map), 6)
  240. @echo "Support boot_v1.4 and +"
  241. else
  242. ifeq ($(size_map), 5)
  243. @echo "Support boot_v1.4 and +"
  244. else
  245. @echo "Support boot_v1.2 and +"
  246. endif
  247. endif
  248. endif
  249. @mv eagle.app.flash.bin ../bin/upgrade/$(BIN_NAME).bin
  250. @rm eagle.app.v6.*
  251. @echo "Generate $(BIN_NAME).bin successully in folder bin/upgrade."
  252. @echo "boot.bin------------>0x00000"
  253. @echo "$(BIN_NAME).bin--->$(addr)"
  254. endif
  255. @echo "!!!"
  256. #############################################################
  257. # Rules base
  258. # Should be done in top-level makefile only
  259. #
  260. all: .subdirs $(OBJS) $(OLIBS) $(OIMAGES) $(OBINS) $(SPECIAL_MKTARGETS)
  261. clean:
  262. $(foreach d, $(SUBDIRS), $(MAKE) -C $(d) clean;)
  263. $(RM) -r $(ODIR)/$(TARGET)/$(FLAVOR)
  264. clobber: $(SPECIAL_CLOBBER)
  265. $(foreach d, $(SUBDIRS), $(MAKE) -C $(d) clobber;)
  266. $(RM) -r $(ODIR)
  267. .subdirs:
  268. @set -e; $(foreach d, $(SUBDIRS), $(MAKE) -C $(d);)
  269. #.subdirs:
  270. # $(foreach d, $(SUBDIRS), $(MAKE) -C $(d))
  271. ifneq ($(MAKECMDGOALS),clean)
  272. ifneq ($(MAKECMDGOALS),clobber)
  273. ifdef DEPS
  274. sinclude $(DEPS)
  275. endif
  276. endif
  277. endif
  278. $(OBJODIR)/%.o: %.c
  279. @mkdir -p $(OBJODIR);
  280. $(CC) $(if $(findstring $<,$(DSRCS)),$(DFLAGS),$(CFLAGS)) $(COPTS_$(*F)) -o $@ -c $<
  281. $(OBJODIR)/%.d: %.c
  282. @mkdir -p $(OBJODIR);
  283. @echo DEPEND: $(CC) -M $(CFLAGS) $<
  284. @set -e; rm -f $@; \
  285. $(CC) -M $(CFLAGS) $< > $@.$$$$; \
  286. sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
  287. rm -f $@.$$$$
  288. $(OBJODIR)/%.o: %.s
  289. @mkdir -p $(OBJODIR);
  290. $(CC) $(CFLAGS) -o $@ -c $<
  291. $(OBJODIR)/%.d: %.s
  292. @mkdir -p $(OBJODIR); \
  293. set -e; rm -f $@; \
  294. $(CC) -M $(CFLAGS) $< > $@.$$$$; \
  295. sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
  296. rm -f $@.$$$$
  297. $(OBJODIR)/%.o: %.S
  298. @mkdir -p $(OBJODIR);
  299. $(CC) $(CFLAGS) -D__ASSEMBLER__ -o $@ -c $<
  300. $(OBJODIR)/%.d: %.S
  301. @mkdir -p $(OBJODIR); \
  302. set -e; rm -f $@; \
  303. $(CC) -M $(CFLAGS) $< > $@.$$$$; \
  304. sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
  305. rm -f $@.$$$$
  306. $(foreach lib,$(GEN_LIBS),$(eval $(call ShortcutRule,$(lib),$(LIBODIR))))
  307. $(foreach image,$(GEN_IMAGES),$(eval $(call ShortcutRule,$(image),$(IMAGEODIR))))
  308. $(foreach bin,$(GEN_BINS),$(eval $(call ShortcutRule,$(bin),$(BINODIR))))
  309. $(foreach lib,$(GEN_LIBS),$(eval $(call MakeLibrary,$(basename $(lib)))))
  310. $(foreach image,$(GEN_IMAGES),$(eval $(call MakeImage,$(basename $(image)))))
  311. #############################################################
  312. # Recursion Magic - Don't touch this!!
  313. #
  314. # Each subtree potentially has an include directory
  315. # corresponding to the common APIs applicable to modules
  316. # rooted at that subtree. Accordingly, the INCLUDE PATH
  317. # of a module can only contain the include directories up
  318. # its parent path, and not its siblings
  319. #
  320. # Required for each makefile to inherit from the parent
  321. #
  322. INCLUDES := $(INCLUDES) -I $(PDIR)include -I $(PDIR)include/$(TARGET)
  323. PDIR := ../$(PDIR)
  324. sinclude $(PDIR)Makefile