makefile.mk 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. #
  2. # Usege : make -f <proj_root>/Build/makefile -C <proj_root>
  3. #
  4. BUILD_SCRIPT_VERSION := 1.2.3
  5. .PHONY : app_version app_clean build_version
  6. all : app_build
  7. clean : app_clean
  8. version : build_version
  9. #PROJ_ROOT := $(call BSLASH2SLASH,$(PROJ_PATH))
  10. PROJ_ROOT := .
  11. BUILD_ROOT := $(PROJ_ROOT)/Build
  12. include $(BUILD_ROOT)/basedef.mk
  13. include $(PROJ_ROOT)/project_def.prop
  14. -include $(PROJ_ROOT)/build_def.prop
  15. include $(BUILD_ROOT)/funcs.mk
  16. -include $(BUILD_ROOT)/tooldef.mk
  17. -include $(BUILD_ROOT)/flags.mk
  18. -include $(BUILD_ROOT)/platform.mk
  19. APPTYPE := $(type)
  20. OUTPUT_DIR := $(PROJ_ROOT)/$(BUILD_CONFIG)
  21. OBJ_OUTPUT := $(OUTPUT_DIR)/${BUILD_ARCH}/objs
  22. LOWER_APPNAME := $(call LOWER_CASE,$(APPNAME))
  23. APPID2 := $(subst $(basename $(APPID)).,,$(APPID))
  24. ifeq ($(strip $(APPTYPE)),app)
  25. APPFILE := $(OUTPUT_DIR)/$(LOWER_APPNAME)
  26. endif
  27. ifeq ($(strip $(APPTYPE)),staticLib)
  28. APPFILE := $(OUTPUT_DIR)/${BUILD_ARCH}/lib$(LOWER_APPNAME).a
  29. endif
  30. ifeq ($(strip $(APPTYPE)),sharedLib)
  31. APPFILE := $(OUTPUT_DIR)/${BUILD_ARCH}/lib$(LOWER_APPNAME).so
  32. endif
  33. ifneq ($(strip $(PLATFORM_INCS)),)
  34. PLATFORM_INCS_FILE := $(OBJ_OUTPUT)/platform_incs_file.inc
  35. endif
  36. include $(BUILD_ROOT)/build_c.mk
  37. ifeq ($(strip $(APPTYPE)),app)
  38. EXT_OP := -fPIE
  39. endif
  40. ifeq ($(strip $(APPTYPE)),staticLib)
  41. EXT_OP := -fPIE
  42. endif
  43. ifeq ($(strip $(APPTYPE)),sharedLib)
  44. EXT_OP := -fPIC
  45. endif
  46. C_OPT := $(COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) $(EXT_OP) --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT)
  47. CPP_OPT := $(CPP_COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) $(EXT_OP) --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT)
  48. C_OPT_FILE := $(PLATFORM_INCS_FILE)
  49. OBJS := #
  50. # Global C/C++
  51. ifeq ($(strip $(USER_ROOT)),)
  52. USER_ROOT := $(PROJ_ROOT)
  53. endif
  54. $(eval $(call C_PROC_RAW,$(OBJ_OUTPUT),$(USER_SRCS),$(USER_INC_DIRS),$(USER_INC_FILES),$(USER_DEFS),$(USER_UNDEFS),$(C_OPT),$(C_OPT_FILE),C,c,$(CC),OBJS))
  55. $(foreach ext,cpp cxx cc c++ C,$(eval $(call C_PROC_RAW,$(OBJ_OUTPUT),$(USER_SRCS),$(USER_INC_DIRS),$(USER_CPP_INC_FILES),$(USER_CPP_DEFS),$(USER_CPP_UNDEFS),$(CPP_OPT),$(C_OPT_FILE),C++,$(ext),$(CXX),OBJS)))
  56. # Individual C/C++
  57. ifneq ($(strip $(USER_EXT_C_KEYS)),)
  58. $(foreach var,$(USER_EXT_C_KEYS),$(eval $(call C_PROC_RAW,$(OBJ_OUTPUT),$(USER_EXT_$(var)_SRCS),$(USER_EXT_$(var)_INC_DIRS),$(USER_EXT_$(var)_INC_FILES),$(USER_EXT_$(var)_DEFS),$(USER_EXT_$(var)_UNDEFS),$(C_OPT),$(C_OPT_FILE),C,c,$(CC),OBJS)))
  59. $(foreach ext,cpp cxx cc c++ C,$(foreach var,$(USER_EXT_C_KEYS),$(eval $(call C_PROC_RAW,$(OBJ_OUTPUT),$(USER_EXT_$(var)_SRCS),$(USER_EXT_$(var)_INC_DIRS),$(USER_EXT_$(var)_CPP_INC_FILES),$(USER_EXT_$(var)_CPP_DEFS),$(USER_EXT_$(var)_CPP_UNDEFS),$(C_OPT),$(C_OPT_FILE),C++,$(ext),$(CXX),OBJS))))
  60. endif
  61. ifneq ($(strip $(USER_LIB_DIRS)),)
  62. _ENC_USER_LIB_DIRS := $(call ENCODE_4MAKE,$(USER_LIB_DIRS))
  63. _ENC_USER_LIB_DIRS := $(addprefix -L,$(_ENC_USER_LIB_DIRS))
  64. LIBPATHS := $(call DECODE_4MAKE,$(_ENC_USER_LIB_DIRS))
  65. endif
  66. LIBS += $(addprefix -l,$(USER_LIBS))
  67. UOBJS += $(USER_OBJS)
  68. M_OPT = -MMD -MP -MF"$(@:%.o=%.d)"
  69. DEPS := $(OBJS:.o=.d)
  70. ifneq ($(strip $(DEPS)),)
  71. -include $(PROJ_ROOT)/Build/$(DEPS)
  72. endif
  73. ifeq ($(strip $(APPTYPE)),app)
  74. $(APPFILE) : $(OBJS) $(UOBJS)
  75. @echo ' Building target: $@'
  76. @echo ' Invoking: C/C++ Linker'
  77. $(call MAKEDIRS,$(@D))
  78. $(CXX) -o $(APPFILE) $(OBJS) $(UOBJS) $(LIBPATHS) -Xlinker --as-needed $(LIBS) $(LINK_FLAGS) $(TC_LINKER_MISC) $(RS_LINKER_MISC) -pie -lpthread --sysroot="$(SYSROOT)" -Xlinker --version-script="$(PROJ_ROOT)/.exportMap" $(RS_LIB_PATHS) $(RS_LIBRARIES) -Xlinker -rpath="/opt/usr/apps/$(APPID)/lib" -Werror-implicit-function-declaration
  79. @echo ' Finished building target: $@'
  80. endif
  81. ifeq ($(strip $(APPTYPE)),staticLib)
  82. $(APPFILE) : $(OBJS) $(UOBJS)
  83. @echo ' Building target: $@'
  84. @echo ' Invoking: Archive utility'
  85. $(call MAKEDIRS,$(@D))
  86. $(AR) -r $(APPFILE) $(OBJS) $(UOBJS) $(AR_FLAGS)
  87. @echo ' Finished building target: $@'
  88. endif
  89. ifeq ($(strip $(APPTYPE)),sharedLib)
  90. $(APPFILE) : $(OBJS) $(UOBJS)
  91. @echo ' Building target: $@'
  92. @echo ' Invoking: C/C++ Linker'
  93. $(call MAKEDIRS,$(@D))
  94. $(CXX) -o $(APPFILE) $(OBJS) $(UOBJS) $(LIBPATHS) -Xlinker --as-needed $(LIBS) $(LINK_FLAGS) $(TC_LINKER_MISC) $(RS_LINKER_MISC) -shared -lpthread --sysroot="$(SYSROOT)" $(RS_LIB_PATHS) $(RS_LIBRARIES)
  95. @echo ' Finished building target: $@'
  96. endif
  97. $(OBJ_OUTPUT) :
  98. $(call MAKEDIRS,$@)
  99. $(OUTPUT_DIR) :
  100. $(call MAKEDIRS,$@)
  101. ifneq ($(strip $(PLATFORM_INCS)),)
  102. $(PLATFORM_INCS_FILE) : $(OBJ_OUTPUT)
  103. @echo ' Building inc file: $@'
  104. ifneq ($(findstring Windows,$(OS)),)
  105. ifneq ($(findstring 3.82,$(MAKE_VERSION)),)
  106. $(file > $@,$(PLATFORM_INCS))
  107. else
  108. @echo $(PLATFORM_INCS) > $@
  109. endif
  110. else
  111. @echo $(PLATFORM_INCS) > $@
  112. endif
  113. endif
  114. include $(BUILD_ROOT)/build_edc.mk
  115. #ifeq ($(strip $(ENVENTOR_SHARED_RES_PATH)),)
  116. ENVENTOR_SHARED_RES_PATH ?= $(ENVENTOR_PATH)/share/enventor
  117. #endif
  118. EDJ_FILES :=
  119. # Global EDCs
  120. ifneq ($(strip $(USER_EDCS)),)
  121. $(eval $(call EDJ_PROC_RAW,$(OUTPUT_DIR),$(USER_EDCS),$(USER_EDCS_IMAGE_DIRS),$(USER_EDCS_SOUND_DIRS),$(USER_EDCS_FONT_DIRS),EDJ_FILES))
  122. endif
  123. # Individual EDCs
  124. ifneq ($(strip $(USER_EXT_EDC_KEYS)),)
  125. $(foreach var,$(USER_EXT_EDC_KEYS),$(eval $(call EDJ_PROC_RAW,$(OUTPUT_DIR),$(USER_EXT_$(var)_EDCS),$(USER_EXT_$(var)_EDCS_IMAGE_DIRS),$(USER_EXT_$(var)_EDCS_SOUND_DIRS),$(USER_EXT_$(var)_EDCS_FONT_DIRS),EDJ_FILES)))
  126. endif
  127. include $(BUILD_ROOT)/build_po.mk
  128. MO_FILES :=
  129. # Global POs
  130. ifneq ($(strip $(USER_POS)),)
  131. $(eval $(call MO_PROC_RAW,$(OUTPUT_DIR),$(USER_POS),$(APPID2),MO_FILES))
  132. endif
  133. secondary-outputs : $(EDJ_FILES) $(MO_FILES)
  134. -include appendix.mk
  135. app_build : $(OUTPUT_DIR) $(APPFILE) secondary-outputs
  136. @echo ========= done =========
  137. app_clean :
  138. rm -f $(APPFILE)
  139. rm -rf $(OUTPUT_DIR)
  140. build_version :
  141. @echo makefile.mk : $(BUILD_SCRIPT_VERSION)