_rules-top.mk 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. .PHONY: doc detect config reconfig toolchain sub-mods final-out env cmake one help
  2. all: detect config toolchain sub-mods final-out
  3. $(TOP_Q) \
  4. if [ -f $(STAMP_PRJ_CFG) ]; then \
  5. $(RECURSIVE_MAKE) toolchain; \
  6. rm -f $(STAMP_PRJ_CFG); \
  7. fi
  8. @rm -rf $(STAMP_DIR)
  9. RESET_ENV_VARS := \
  10. CROSS_PREFIX \
  11. CFLAGS \
  12. HOST \
  13. LDFLAGS \
  14. help:
  15. @echo -e "\033[1;37m[$(RULE_DIR)/docs]\e[0m"
  16. @echo ""
  17. @cat $(RULE_DIR)/docs/Help.md
  18. @echo ""
  19. doc:
  20. $(TOP_Q)rm -rf $(DOXYGEN_DIR)/html; mkdir -p $(DOXYGEN_DIR)
  21. $(TOP_Q) \
  22. $(SED) \
  23. -e 's:^PROJECT_NAME.*:PROJECT_NAME = $(PRJ_NAME):g;' \
  24. -e 's:^PROJECT_NUMBER.*:PROJECT_NUMBER = $(PRJ_VERSION):g;' \
  25. -e 's:^OUTPUT_DIRECTORY.*:OUTPUT_DIRECTORY = $(DOXYGEN_DIR):g;' \
  26. build-rules/misc/Doxyfile.tpl > $(OUTPUT_DIR)/.doxygen.cfg
  27. $(TOP_Q)doxygen $(OUTPUT_DIR)/.doxygen.cfg
  28. detect:
  29. @if [ -d .git ]; then \
  30. mkdir -p .git/hooks; \
  31. for i in $(RULE_DIR)/hooks/*; do \
  32. cp -f $$i .git/hooks && chmod a+x .git/hooks/$$(basename $$i); \
  33. done; \
  34. fi
  35. prune:
  36. @echo "$(TOP_DIR).pkgs directory removed!"|grep --color ".*"
  37. @rm -rf $(TOP_DIR).pkgs
  38. @$(MAKE) --no-print-directory distclean
  39. unzip: config $(STAMP_BLD_VAR)
  40. @echo "Components: "
  41. @echo ""
  42. @for i in $(ALL_SUB_DIRS); do \
  43. $(MAKE) --no-print-directory pre-build target-$${i} ; \
  44. echo -ne "\r. $${i}"; \
  45. echo -e " "; \
  46. done
  47. @echo ""
  48. cmake:
  49. $(TOP_Q)$(MAKE) -s distclean
  50. $(TOP_Q)$(MAKE) -s DEFAULT_BLD=$(RULE_DIR)/misc/config.generic.cmake config
  51. $(TOP_Q)$(foreach V,$(INFO_ENV_VARS),$(V)="$($(V))") CFLAGS=$(CFLAGS) \
  52. SEP_LIBS="$$(grep -m 1 '^COMP_LIB_FILES' $(STAMP_BLD_ENV) | cut -d' ' -f3-)" \
  53. bash $(if $(TOP_Q),,-x) $(RULE_DIR)/scripts/gen_top_cmake.sh $(TOP_DIR)/CMakeLists.txt
  54. $(TOP_Q)for D in $(ALL_SUB_DIRS); do \
  55. echo "+ $${D}"; \
  56. $(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$${D} cmake; \
  57. done
  58. $(TOP_Q)echo ""
  59. one: COMP_LIB_OBJS = $(foreach V,$(COMP_LIB_COMPONENTS),$(foreach U,$(LIB_OBJS_$(V)),$(V)/$(U)))
  60. one:
  61. $(TOP_Q)$(foreach V,$(INFO_ENV_VARS),$(V)="$($(V))") \
  62. CFLAGS="$(subst ",,$(CFLAGS))" \
  63. ALL_LIBS="$(strip $(foreach V,$(SUBDIRS),$(LIBA_TARGET_$(V))))" \
  64. ALL_PROG="$(strip $(foreach V,$(SUBDIRS) $(COMP_LIB_COMPONENTS),$(TARGET_$(V))))" \
  65. COMP_LIB_OBJS="$(COMP_LIB_OBJS)" \
  66. bash $(RULE_DIR)/scripts/gen_one_makefile.sh
  67. config:
  68. @mkdir -p $(OUTPUT_DIR) $(STAMP_DIR) $(INSTALL_DIR)
  69. @mkdir -p $(SYSROOT_BIN) $(SYSROOT_INC) $(SYSROOT_LIB)
  70. $(TOP_Q) \
  71. if [ -f $(STAMP_BLD_VAR) ]; then \
  72. if [ "$$($(SED) '/[-_/a-zA-Z0-9]* = *..*/d' $(STAMP_BLD_VAR)|wc -l|$(SED) 's:^ *::g')" != "0" ]; then \
  73. rm -vf $(STAMP_BLD_VAR); \
  74. fi \
  75. fi
  76. $(TOP_Q)+( \
  77. if [ -f $(CONFIG_TPL) ]; then \
  78. if [ "$(filter comp-lib,$(MAKECMDGOALS))" = "" ]; then \
  79. printf "BUILDING WITH EXISTING CONFIGURATION:\n\n"; \
  80. command grep -m 1 "VENDOR *:" $(CONFIG_TPL)|cut -c 3-; \
  81. command grep -m 1 "MODEL *:" $(CONFIG_TPL)|cut -c 3-; \
  82. echo ""; \
  83. fi \
  84. else \
  85. if ([ "$(MAKECMDGOALS)" = "all" ]) || ([ "$(DEFAULT_BLD)" != "" ] && [ -f $(DEFAULT_BLD) ] && \
  86. ([ "$(DEFAULT_BLD)" = "$(RULE_DIR)/misc/config.generic.default" ] \
  87. || [ "$(MAKECMDGOALS)" = "" ] || [ "$(MAKECMDGOALS)" = "config" ])); then \
  88. printf "# Automatically Generated Section End\n\n" >> $(CONFIG_TPL); \
  89. printf "# %-10s %s\n" "VENDOR :" $$(basename $(DEFAULT_BLD)|cut -d. -f2) >> $(CONFIG_TPL); \
  90. printf "# %-10s %s\n" "MODEL :" $$(basename $(DEFAULT_BLD)|cut -d. -f3) >> $(CONFIG_TPL); \
  91. cat $(DEFAULT_BLD) >> $(CONFIG_TPL); \
  92. else \
  93. printf "SELECT A CONFIGURATION:\n\n"; \
  94. LIST=$$(for i in $(CONFIG_DIR)/config.*.*; do basename $${i}; done|sort); \
  95. select V in $${LIST}; do \
  96. echo ""; \
  97. printf "# Automatically Generated Section End\n\n" >> $(CONFIG_TPL); \
  98. printf "# %-10s %s\n" "VENDOR :" $$(echo $${V}|cut -d. -f2) >> $(CONFIG_TPL); \
  99. printf "# %-10s %s\n" "MODEL :" $$(echo $${V}|cut -d. -f3) >> $(CONFIG_TPL); \
  100. cp -f -P $(IMPORT_DIR)/$$(echo $${V}|cut -d. -f2)/$(PREBUILT_LIBDIR)/*.so* $(SYSROOT_LIB) 2>/dev/null; \
  101. cat $(CONFIG_DIR)/$${V} >> $(CONFIG_TPL); \
  102. break; \
  103. done; \
  104. fi && \
  105. printf "SELECTED CONFIGURATION:\n\n" && \
  106. command grep -m 1 "VENDOR *:" $(CONFIG_TPL)|cut -c 3- && \
  107. command grep -m 1 "MODEL *:" $(CONFIG_TPL)|cut -c 3- && \
  108. echo ""; \
  109. if [ "$(MAKECMDGOALS)" = "config" ]; then true; else \
  110. if [ "$(DEFAULT_BLD)" = "" ]; then \
  111. touch $(STAMP_PRJ_CFG); \
  112. fi; \
  113. fi; \
  114. for i in $(RESET_ENV_VARS); do unset $${i}; done; \
  115. $(MAKE) --no-print-directory -f $(TOP_MAKEFILE) $(STAMP_BLD_VAR) unzip; \
  116. fi)
  117. @$(MAKE) --no-print-directory one
  118. DL_TOOLCHAIN_VARS = \
  119. TOOLCHAIN_DLDIR \
  120. OUTPUT_DIR \
  121. toolchain:
  122. @$(foreach V,$(DL_TOOLCHAIN_VARS),$(V)=$($(V))) \
  123. CC=$(shell basename $(CC)) \
  124. AR=$(shell basename $(AR)) \
  125. RELPATH=` $(call Relative_TcPath,$(shell basename $(CC))) ` \
  126. GITPATH=` $(call Gitrepo_TcPath,$(shell basename $(CC))) ` \
  127. bash $(RULE_DIR)/scripts/gen_cross_toolchain.sh
  128. reconfig: distclean
  129. $(TOP_Q)+( \
  130. if [ -d $(CONFIG_DIR) ]; then \
  131. $(RECURSIVE_MAKE) config DEFAULT_BLD=not-exist-actually; \
  132. else \
  133. $(RECURSIVE_MAKE) config; \
  134. fi)
  135. $(TOP_Q)rm -f $(STAMP_PRJ_CFG)
  136. clean:
  137. $(TOP_Q) \
  138. $(TOP_Q) \
  139. rm -rf \
  140. $(LIBOBJ_TMPDIR) \
  141. $(COMPILE_LOG) \
  142. $(DIST_DIR)/* \
  143. $(STAMP_DIR) \
  144. $(STAMP_LCOV) \
  145. $(SYSROOT_INC)/* $(SYSROOT_LIB)/* $(SYSROOT_LIB)/../bin/* \
  146. $(shell $(SHELL_DBG) find $(OUTPUT_DIR) -name "$(COMPILE_LOG)" \
  147. -or -name "$(WARNING_LOG)" \
  148. -or -name "$(STAMP_BUILD)" \
  149. -or -name "$(STAMP_INSTALL)" \
  150. -or -name "$(STAMP_POSTINS)" \
  151. -or -name "*.so" \
  152. -or -name "*.a" \
  153. -or -name "*.o" \
  154. -or -name "*.d" \
  155. -or -name "*.gc*" \
  156. | grep -v '$(OUTPUT_DIR)/compiler' \
  157. 2>/dev/null)
  158. distclean:
  159. $(TOP_Q) \
  160. rm -rf \
  161. $(CONFIG_TPL) $(COMPILE_LOG) \
  162. $(STAMP_PRJ_CFG) $(STAMP_BLD_ENV) $(STAMP_BLD_VAR) $(STAMP_POST_RULE) $(STAMP_LCOV) \
  163. $(DIST_DIR) $(STAMP_DIR) *.gcda \
  164. $(TOP_Q) \
  165. if [ -d $(OUTPUT_DIR) ]; then \
  166. cd $(OUTPUT_DIR); \
  167. if [ "$(CONFIG_TOOLCHAIN_NAME)" = "" ]; then \
  168. rm -rf *; \
  169. else \
  170. rm -rf $$(ls -I $(CONFIG_TOOLCHAIN_NAME)); \
  171. fi \
  172. fi
  173. ifeq ($(shell uname),Darwin)
  174. KCONFIG_MCONF := tools/prebuilt/macos/kconfig-frontends-mac/kconfig-mconf
  175. else
  176. KCONFIG_MCONF := tools/prebuilt/ubuntu/bin/kconfig-mconf
  177. endif
  178. COMMON_CONFIG_ENV = \
  179. KCONFIG_CONFIG=mconf.config \
  180. KCONFIG_AUTOCONFIG=$(OUTPUT_DIR)/auto.conf \
  181. KCONFIG_AUTOHEADER=$(OUTPUT_DIR)/autoconf.h \
  182. CONFIG_=FEATURE_ \
  183. menuconfig: $(KCONFIG_MCONF)
  184. $(TOP_Q)chmod a+x $(KCONFIG_MCONF) $(if $(TOP_Q),2>/dev/null) || true
  185. $(TOP_Q)$(COMMON_CONFIG_ENV) $^ -s $(TOP_DIR)/tools/Config.in $(if $(TOP_Q),2>/dev/null)
  186. $(TOP_Q) \
  187. ( \
  188. if [ ! -f mconf.config ]; then exit 0; fi; \
  189. \
  190. cp -Lf mconf.config make.settings; \
  191. rm -f mconf.config*; \
  192. )