_rules-submods.mk 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. SUB_LOG_OPTION := $(if $(Q),,| tee -a $(OUTPUT_DIR)/$${i}/$(COMPILE_LOG))
  2. ALL_LOG_OPTION := $(if $(Q),,| tee -a $(COMPILE_LOG))
  3. sub-mods: toolchain config
  4. $(Q) \
  5. if [ -f $(STAMP_ONE_MK) ] && [ "$(MAKECMDGOALS)" = "" ]; then \
  6. CORE_NUM=$$(cat /proc/cpuinfo 2>/dev/null| grep processor | tail -1 | awk '{ print $$NF }'); \
  7. JOBS_NUM=32; \
  8. if [ "$${CORE_NUM}" != "" ]; then JOBS_NUM=$${CORE_NUM}; fi; \
  9. if [ "$(Q)" != "@" ]; then JOBS_NUM=0; fi; \
  10. rm -rf $(OUTPUT_DIR)${bindir}/* && \
  11. if [ -f $(STAMP_LCOV) ] && [ "$(WITH_LCOV)" != "1" ]; then \
  12. $(MAKE) --no-print-directory clean; \
  13. fi && \
  14. if ([ ! -f $(STAMP_LCOV) ] && [ "$(WITH_LCOV)" = "1" ]) || [ $(TOP_DIR)/make.settings -nt $(DIST_DIR) ]; then \
  15. $(MAKE) --no-print-directory clean; \
  16. fi && \
  17. $(MAKE) --no-print-directory -j$$((JOBS_NUM + 1)) -f $(STAMP_ONE_MK) && \
  18. TMPD=$$(mktemp -d) && \
  19. rm -rf $(LIBOBJ_TMPDIR) $${TMPD} && \
  20. cp -rf $(OUTPUT_DIR) $${TMPD} && \
  21. rm -rf $${TMPD}/{usr,stamps} && \
  22. mv $${TMPD} $(LIBOBJ_TMPDIR); \
  23. else \
  24. if [ -f $(STAMP_PRJ_CFG) ]; then true; else \
  25. set -o pipefail; \
  26. for i in \
  27. $(SUBDIRS); do \
  28. if [ ! -d $${i} ]; then continue; fi; \
  29. $(MAKE) --no-print-directory Q=$(Q) $${i} 2>&1 $(SUB_LOG_OPTION); \
  30. RETVAL=$$?; \
  31. if [ $${RETVAL} != 0 ]; then exit $${RETVAL}; fi; \
  32. done 2>&1 $(ALL_LOG_OPTION); \
  33. fi; \
  34. fi
  35. TOP_BUILD_VARS := \
  36. CC LD AR \
  37. CFLAGS LDFLAGS \
  38. PACKAGE_DIR \
  39. IMPORT_DIR \
  40. EXPORT_DIR \
  41. TOP_DIR \
  42. RULE_DIR \
  43. CONFIG_VENDOR \
  44. COMP_LIB \
  45. COMP_LIB_COMPONENTS \
  46. $(CROSS_CANDIDATES) \
  47. $(MAKE_ENV_VARS) \
  48. INSTALL_DIR \
  49. INSTALL_LIB_DIR \
  50. SYSROOT_INC \
  51. KERNEL_DIR \
  52. MAKE_ENV_VARS \
  53. CROSS_PREFIX \
  54. CROSS_CANDIDATES \
  55. ALL_SUB_DIRS \
  56. WIN32_CMAKE_SKIP \
  57. NOEXEC_CMAKE_DIRS \
  58. CMDLINE_VARS := \
  59. HD_MAKEFILE \
  60. MAKE_SEGMENT \
  61. OUTPUT_DIR \
  62. PACKAGE_DIR \
  63. STAMP_BLD_ENV \
  64. STAMP_UNPACK \
  65. TOP_DIR \
  66. RULE_DIR \
  67. # When TOP_BUILD_VARS like $(CFLAGS) contains special character '$'
  68. # simply echo its value into 'Makefile' will cause '$' lost when GNU make read in again
  69. #
  70. $(STAMP_BLD_ENV): $(TOP_DIR)/makefile $(shell ls $(CONFIG_TPL) 2>/dev/null) \
  71. $(wildcard $(RULE_DIR)/*.mk) \
  72. $(shell grep "^ *include" $(TOP_DIR)/$(TOP_MAKEFILE)|awk '{ print $$NF }'|$(SED) '/^\$$/d')
  73. @rm -f $@
  74. @$(foreach V, \
  75. $(sort $(TOP_BUILD_VARS)), \
  76. echo "$(V) := $(sort $($(V)))"|$(SED) 's:\$$:$$$$:g' >> $(STAMP_BLD_ENV); \
  77. )
  78. @echo "COMP_LIB_FILES := $(foreach V,$(COMP_LIB_COMPONENTS), $(LIBA_TARGET_$(V)))" >> $@
  79. # note:
  80. # $(SED) -i "/CONFIG_$${i//\//\\/}.*/d" $(CONFIG_TPL);
  81. # above
  82. # $(SED) -i "1iCONFIG_$${i} = y" $(CONFIG_TPL)
  83. # was removed since modules will be skipped in some cases
  84. $(STAMP_BLD_VAR): $(foreach d,$(ALL_SUB_DIRS),$(d)/$(MAKE_SEGMENT)) $(STAMP_BLD_ENV) $(wildcard $(RULE_DIR)/*.mk)
  85. $(TOP_Q) \
  86. ( \
  87. if [ ! -f $(STAMP_BLD_VAR) ]; then echo ""; VERBOSE=1; fi; \
  88. rm -f $(STAMP_BLD_VAR); \
  89. for i in $(shell echo "$(ALL_SUB_DIRS)"|tr ' ' '\n'|sort -u); do \
  90. if [ "$${VERBOSE}" != "" ]; then \
  91. printf "CONFIGURE .............................. [%s]\n" $${i}; \
  92. $(SED) -i "1iCONFIG_$${i} = y" $(CONFIG_TPL); \
  93. if ! grep -q "target-$${i}:" $(STAMP_POST_RULE) 2>/dev/null; then \
  94. echo "target-$${i}:; @true" >> $(STAMP_POST_RULE); \
  95. fi; \
  96. fi; \
  97. $(foreach V, $(CMDLINE_VARS), $(V)="$($(V))") \
  98. bash $(RULE_DIR)/pre-build.sh $${i} makefile-only > /dev/null; \
  99. if [ -d $(OUTPUT_DIR)/$${i} ]; then \
  100. $(MAKE) -s -C $(OUTPUT_DIR)/$${i} modinfo > /dev/null; \
  101. if [ $$? = 0 ]; then \
  102. $(MAKE) --no-print-directory -s -C $(OUTPUT_DIR)/$${i} modinfo >> $(STAMP_BLD_VAR); \
  103. else \
  104. echo ""; \
  105. echo "ERROR detected in '$${i}/$(MAKE_SEGMENT)'..."|grep --color '.*'; \
  106. echo ""; \
  107. rm -f $(STAMP_BLD_VAR) $(STAMP_PRJ_CFG); \
  108. exit 13; \
  109. fi \
  110. fi \
  111. done; \
  112. sort -o $(STAMP_BLD_VAR) $(STAMP_BLD_VAR); \
  113. if [ "$${VERBOSE}" != "" ]; then echo ""; fi; \
  114. )
  115. pre-build: MOD = $(subst target-,,$(filter-out $@,$(MAKECMDGOALS)))
  116. pre-build: $(STAMP_BLD_ENV)
  117. $(TOP_Q)rm -f $(OUTPUT_DIR)/$(MOD)/$(STAMP_UNPACK)
  118. $(if $(filter 0,$(MAKELEVEL)),,@) \
  119. $(strip $(foreach V, $(CMDLINE_VARS), $(V)="$($(V))") \
  120. PKG_SOURCE="$(PKG_SOURCE_$(MOD))" \
  121. PKG_BRANCH="$(PKG_BRANCH_$(MOD))" \
  122. PKG_REVISION="$(PKG_REVISION_$(MOD))" \
  123. PKG_UPSTREAM="$(PKG_UPSTREAM_$(MOD))" \
  124. PKG_SWITCH="$(PKG_SWITCH_$(MOD))" \
  125. ) \
  126. $(if $(filter 0,$(MAKELEVEL)),VERBOSE_PRE_BLD=1) \
  127. bash $(RULE_DIR)/pre-build.sh $(subst target-,,$(filter-out $@,$(MAKECMDGOALS)))
  128. .PHONY: $(ALL_SUB_DIRS)
  129. $(ALL_SUB_DIRS): ALL_LOG_OPT = $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(COMPILE_LOG))
  130. $(ALL_SUB_DIRS): SUB_LOG_OPT = $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$@/$(COMPILE_LOG))
  131. $(ALL_SUB_DIRS): $(if $(filter 0,$(MAKELEVEL)),toolchain) $(STAMP_BLD_VAR)
  132. $(TOP_Q)rm -f $(STAMP_PRJ_CFG)
  133. $(TOP_Q)$(MAKE) --no-print-directory pre-build target-$@
  134. ifeq (0,$(MAKELEVEL))
  135. $(Q)$(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$@ clean
  136. endif
  137. $(Q) \
  138. if [ "$$( $(call Require_Build,$@) )" = "TRUE" ]; then \
  139. $(call Build_Depends,$@) && \
  140. $(call Build_CompLib,$@) && \
  141. $(call Update_Extra_Srcs,$(EXTRA_SRCS_$@),$@) && \
  142. $(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$@ all $(SUB_LOG_OPT) $(ALL_LOG_OPT) && \
  143. if [ "$$(echo $(ORIGIN_$@))" != "" ]; then \
  144. touch $(OUTPUT_DIR)/$@/{$(STAMP_UNPACK),$(STAMP_CONFIG),$(STAMP_BUILD),$(STAMP_INSTALL)}; \
  145. fi \
  146. else \
  147. echo -ne "\r$$(printf '%40s' '')\r"; \
  148. fi
  149. @mkdir -p $(STAMP_DIR) && touch $(STAMP_DIR)/$$(echo "$@"|$(SED) 's:/:~:g').build.done