rtthread.mk 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. $(if $(strip $(TARGET)),,$(error TARGET not defined))
  2. $(if $(strip $(SRC_FILES)),,$(error No source files))
  3. $(if $(strip $(BSP_ROOT)),,$(error BSP_ROOT not defined))
  4. ifneq ($(MAKE_LIB),1)
  5. BUILD_DIR := $(BSP_ROOT)/build
  6. endif
  7. $(if $(strip $(BUILD_DIR)),,$(error BUILD_DIR not defined))
  8. RTT_BUILD_DIR := RT-THREAD_OBJS
  9. BSP_BUILD_DIR := BSP_OBJS
  10. #################
  11. define add_c_file
  12. $(eval COBJ := $(1:%.c=%.o)) \
  13. $(eval COBJ := $(COBJ:$(RTT_ROOT)/%=$(RTT_BUILD_DIR)/%)) \
  14. $(eval COBJ := $(COBJ:$(BSP_ROOT)/%=$(BSP_BUILD_DIR)/%)) \
  15. $(eval VPATH += $(dir $1)) \
  16. $(eval CSRCS += $1) \
  17. $(eval LOCALC := $(addprefix $(BUILD_DIR)/,$(COBJ))) \
  18. $(eval OBJS += $(LOCALC)) \
  19. $(if $(strip $(LOCALC)),$(eval $(LOCALC): $1
  20. @if [ ! -d $$(@D) ]; then mkdir -p $$(@D); fi
  21. @echo cc $$@
  22. @$(CROSS_COMPILE)gcc $$(CFLAGS) -c $$< -o $$@))
  23. endef
  24. define add_cxx_file
  25. $(eval CXXOBJ := $(1:%.cpp=%.o)) \
  26. $(eval CXXOBJ := $(CXXOBJ:$(RTT_ROOT)/%=$(RTT_BUILD_DIR)/%)) \
  27. $(eval CXXOBJ := $(CXXOBJ:$(BSP_ROOT)/%=$(BSP_BUILD_DIR)/%)) \
  28. $(eval VPATH += $(dir $1)) \
  29. $(eval CXXSRCS += $1) \
  30. $(eval LOCALCXX := $(addprefix $(BUILD_DIR)/,$(CXXOBJ))) \
  31. $(eval OBJS += $(LOCALCXX)) \
  32. $(if $(strip $(LOCALCXX)),$(eval $(LOCALCXX): $1
  33. @if [ ! -d $$(@D) ]; then mkdir -p $$(@D); fi
  34. @echo cc $$@
  35. @$(CROSS_COMPILE)g++ $$(CXXFLAGS) -c $$< -o $$@))
  36. endef
  37. define add_S_file
  38. $(eval SOBJ := $(1:%.S=%.o)) \
  39. $(eval SOBJ := $(SOBJ:$(RTT_ROOT)/%=$(RTT_BUILD_DIR)/%)) \
  40. $(eval SOBJ := $(SOBJ:$(BSP_ROOT)/%=$(BSP_BUILD_DIR)/%)) \
  41. $(eval VPATH += $(dir $1)) \
  42. $(eval SSRCS += $(1)) \
  43. $(eval LOCALS := $(addprefix $(BUILD_DIR)/,$(SOBJ))) \
  44. $(eval OBJS += $(LOCALS)) \
  45. $(if $(strip $(LOCALS)),$(eval $(LOCALS): $1
  46. @if [ ! -d $$(@D) ]; then mkdir -p $$(@D); fi
  47. @echo cc $$@
  48. @$(CROSS_COMPILE)gcc $$(AFLAGS) -c $$< -o $$@))
  49. endef
  50. add_flg = $(eval CFLAGS += $1) \
  51. $(eval AFLAGS += $1) \
  52. $(eval CXXFLAGS += $1)
  53. add_inc = $(eval CFLAGS += -I$1) \
  54. $(eval AFLAGS += -I$1) \
  55. $(eval CXXFLAGS += -I$1)
  56. add_def = $(eval CFLAGS += -D$1) \
  57. $(eval AFLAGS += -D$1) \
  58. $(eval CXXFLAGS += -D$1)
  59. OBJS :=
  60. CSRCS :=
  61. CXXSRCS :=
  62. SSRCS :=
  63. VPATH :=
  64. CONFIG_FLG := $(strip $(EXTERN_FLAGS))
  65. $(if $(CONFIG_FLG),$(foreach f,$(CONFIG_FLG),$(call add_flg,$(f))))
  66. CONFIG_DEF := $(strip $(PROJECT_DEFS))
  67. $(if $(CONFIG_DEF),$(foreach d,$(CONFIG_DEF),$(call add_def,$(d))))
  68. CONFIG_INC := $(strip $(INCLUDE_PATH))
  69. $(if $(CONFIG_INC),$(foreach i,$(CONFIG_INC),$(call add_inc,$(i))))
  70. SRCS := $(strip $(filter %.c,$(SRC_FILES)))
  71. $(if $(SRCS),$(foreach f,$(SRCS),$(call add_c_file,$(f))))
  72. SRCS := $(strip $(filter %.cpp,$(SRC_FILES)))
  73. $(if $(SRCS),$(foreach f,$(SRCS),$(call add_cxx_file,$(f))))
  74. SRCS := $(strip $(filter %.S,$(SRC_FILES)))
  75. $(if $(SRCS),$(foreach f,$(SRCS),$(call add_S_file,$(f))))
  76. CFLAGS += $(CPPPATHS)
  77. CXXFLAGS += $(CPPPATHS)
  78. AFLAGS += $(CPPPATHS)
  79. CFLAGS += $(DEFINES)
  80. CXXFLAGS += $(DEFINES)
  81. AFLAGS += $(DEFINES)
  82. all: $(TARGET)
  83. ifeq ($(MAKE_LIB),1)
  84. $(TARGET): $(OBJS)
  85. @echo ------------------------------------------------
  86. @echo ar $(TARGET)
  87. @$(CROSS_COMPILE)ar -rv $@ $(OBJS)
  88. else
  89. $(TARGET): $(OBJS) $(EXTERN_LIB)
  90. @echo ------------------------------------------------
  91. @echo link $(TARGET)
  92. @$(CROSS_COMPILE)g++ -o $@ $(LFLAGS) $(OBJS) $(EXTERN_LIB) -lc -lm
  93. @echo ------------------------------------------------
  94. @$(CROSS_COMPILE)objcopy -O binary $@ rtthread.bin
  95. @$(CROSS_COMPILE)size $@
  96. endif
  97. phony += clean
  98. clean:
  99. @echo clean
  100. @rm -rf $(TARGET) $(BUILD_DIR)
  101. .PHONY: $(phony)