Makefile 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. # copyright (c) 2010 Espressif System
  2. #
  3. ifndef PDIR
  4. endif
  5. AR = xt-ar
  6. CC = xt-xcc
  7. NM = xt-nm
  8. CPP = xt-cpp
  9. OBJCOPY = xt-objcopy
  10. #MAKE = xt-make
  11. CSRCS ?= $(wildcard *.c)
  12. ASRCs ?= $(wildcard *.s)
  13. ASRCS ?= $(wildcard *.S)
  14. SUBDIRS ?= $(patsubst %/,%,$(dir $(wildcard */Makefile)))
  15. ODIR := .output
  16. OBJODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/obj
  17. OBJS := $(CSRCS:%.c=$(OBJODIR)/%.o) \
  18. $(ASRCs:%.s=$(OBJODIR)/%.o) \
  19. $(ASRCS:%.S=$(OBJODIR)/%.o)
  20. DEPS := $(CSRCS:%.c=$(OBJODIR)/%.d) \
  21. $(ASRCs:%.s=$(OBJODIR)/%.d) \
  22. $(ASRCS:%.S=$(OBJODIR)/%.d)
  23. LIBODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/lib
  24. OLIBS := $(GEN_LIBS:%=$(LIBODIR)/%)
  25. IMAGEODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/image
  26. OIMAGES := $(GEN_IMAGES:%=$(IMAGEODIR)/%)
  27. BINODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/bin
  28. OBINS := $(GEN_BINS:%=$(BINODIR)/%)
  29. CCFLAGS += \
  30. -g \
  31. -O2 \
  32. -Wpointer-arith \
  33. -Wundef \
  34. -Werror \
  35. -Wl,-EL \
  36. -fno-inline-functions \
  37. -nostdlib \
  38. -mlongcalls \
  39. -mtext-section-literals
  40. # -Wall
  41. CFLAGS = $(CCFLAGS) $(DEFINES) $(EXTRA_CCFLAGS) $(INCLUDES)
  42. DFLAGS = $(CCFLAGS) $(DDEFINES) $(EXTRA_CCFLAGS) $(INCLUDES)
  43. #############################################################
  44. # Functions
  45. #
  46. define ShortcutRule
  47. $(1): .subdirs $(2)/$(1)
  48. endef
  49. define MakeLibrary
  50. DEP_LIBS_$(1) = $$(foreach lib,$$(filter %.a,$$(COMPONENTS_$(1))),$$(dir $$(lib))$$(LIBODIR)/$$(notdir $$(lib)))
  51. DEP_OBJS_$(1) = $$(foreach obj,$$(filter %.o,$$(COMPONENTS_$(1))),$$(dir $$(obj))$$(OBJODIR)/$$(notdir $$(obj)))
  52. $$(LIBODIR)/$(1).a: $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1)) $$(DEPENDS_$(1))
  53. @mkdir -p $$(LIBODIR)
  54. $$(if $$(filter %.a,$$?),mkdir -p $$(EXTRACT_DIR)_$(1))
  55. $$(if $$(filter %.a,$$?),cd $$(EXTRACT_DIR)_$(1); $$(foreach lib,$$(filter %.a,$$?),$$(AR) xo $$(UP_EXTRACT_DIR)/$$(lib);))
  56. $$(AR) ru $$@ $$(filter %.o,$$?) $$(if $$(filter %.a,$$?),$$(EXTRACT_DIR)_$(1)/*.o)
  57. $$(if $$(filter %.a,$$?),$$(RM) -r $$(EXTRACT_DIR)_$(1))
  58. endef
  59. define MakeImage
  60. DEP_LIBS_$(1) = $$(foreach lib,$$(filter %.a,$$(COMPONENTS_$(1))),$$(dir $$(lib))$$(LIBODIR)/$$(notdir $$(lib)))
  61. DEP_OBJS_$(1) = $$(foreach obj,$$(filter %.o,$$(COMPONENTS_$(1))),$$(dir $$(obj))$$(OBJODIR)/$$(notdir $$(obj)))
  62. $$(IMAGEODIR)/$(1).out: $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1)) $$(DEPENDS_$(1))
  63. @mkdir -p $$(IMAGEODIR)
  64. $$(CC) $$(LDFLAGS) $$(if $$(LINKFLAGS_$(1)),$$(LINKFLAGS_$(1)),$$(LINKFLAGS_DEFAULT) $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1))) -o $$@
  65. endef
  66. $(BINODIR)/%.bin: $(IMAGEODIR)/%.out
  67. @mkdir -p $(BINODIR)
  68. $(OBJCOPY) -O binary $< $@
  69. #############################################################
  70. # Rules base
  71. # Should be done in top-level makefile only
  72. #
  73. all: .subdirs $(OBJS) $(OLIBS) $(OIMAGES) $(OBINS) $(SPECIAL_MKTARGETS)
  74. clean:
  75. $(foreach d, $(SUBDIRS), $(MAKE) -C $(d) clean;)
  76. $(RM) -r $(ODIR)/$(TARGET)/$(FLAVOR)
  77. clobber: $(SPECIAL_CLOBBER)
  78. $(foreach d, $(SUBDIRS), $(MAKE) -C $(d) clobber;)
  79. $(RM) -r $(ODIR)
  80. .subdirs:
  81. @set -e; $(foreach d, $(SUBDIRS), $(MAKE) -C $(d);)
  82. #.subdirs:
  83. # $(foreach d, $(SUBDIRS), $(MAKE) -C $(d))
  84. ifneq ($(MAKECMDGOALS),clean)
  85. ifneq ($(MAKECMDGOALS),clobber)
  86. ifdef DEPS
  87. sinclude $(DEPS)
  88. endif
  89. endif
  90. endif
  91. $(OBJODIR)/%.o: %.c
  92. @mkdir -p $(OBJODIR);
  93. $(CC) $(if $(findstring $<,$(DSRCS)),$(DFLAGS),$(CFLAGS)) $(COPTS_$(*F)) -o $@ -c $<
  94. $(OBJODIR)/%.d: %.c
  95. @mkdir -p $(OBJODIR);
  96. @echo DEPEND: $(CC) -M $(CFLAGS) $<
  97. @set -e; rm -f $@; \
  98. $(CC) -M $(CFLAGS) $< > $@.$$$$; \
  99. sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
  100. rm -f $@.$$$$
  101. $(OBJODIR)/%.o: %.s
  102. @mkdir -p $(OBJODIR);
  103. $(CC) $(CFLAGS) -o $@ -c $<
  104. $(OBJODIR)/%.d: %.s
  105. @mkdir -p $(OBJODIR); \
  106. set -e; rm -f $@; \
  107. $(CC) -M $(CFLAGS) $< > $@.$$$$; \
  108. sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
  109. rm -f $@.$$$$
  110. $(OBJODIR)/%.o: %.S
  111. @mkdir -p $(OBJODIR);
  112. $(CC) $(CFLAGS) -D__ASSEMBLER__ -o $@ -c $<
  113. $(OBJODIR)/%.d: %.S
  114. @mkdir -p $(OBJODIR); \
  115. set -e; rm -f $@; \
  116. $(CC) -M $(CFLAGS) $< > $@.$$$$; \
  117. sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
  118. rm -f $@.$$$$
  119. $(foreach lib,$(GEN_LIBS),$(eval $(call ShortcutRule,$(lib),$(LIBODIR))))
  120. $(foreach image,$(GEN_IMAGES),$(eval $(call ShortcutRule,$(image),$(IMAGEODIR))))
  121. $(foreach bin,$(GEN_BINS),$(eval $(call ShortcutRule,$(bin),$(BINODIR))))
  122. $(foreach lib,$(GEN_LIBS),$(eval $(call MakeLibrary,$(basename $(lib)))))
  123. $(foreach image,$(GEN_IMAGES),$(eval $(call MakeImage,$(basename $(image)))))
  124. #############################################################
  125. # Recursion Magic - Don't touch this!!
  126. #
  127. # Each subtree potentially has an include directory
  128. # corresponding to the common APIs applicable to modules
  129. # rooted at that subtree. Accordingly, the INCLUDE PATH
  130. # of a module can only contain the include directories up
  131. # its parent path, and not its siblings
  132. #
  133. # Required for each makefile to inherit from the parent
  134. #
  135. INCLUDES := $(INCLUDES) -I $(PDIR)include -I $(PDIR)include/$(TARGET)
  136. PDIR := ../$(PDIR)
  137. sinclude $(PDIR)Makefile