funcs.mk 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. define Append_Conditional
  2. $(if $(strip $(foreach V,$(4),$(filter -D$(V),$(CFLAGS)))),, \
  3. $(if \
  4. $(if $(strip $(3)),,x)$(findstring $(foreach U,$(3),-D$(U)),$(foreach U,$(3),$(filter -D$(U),$(CFLAGS)))), \
  5. $(eval $(strip $(1)) += $(2)) \
  6. ) \
  7. )
  8. endef
  9. define Dump_Var
  10. NUM=`echo "$(strip $($(1)))"|awk '{ print NF }'`; \
  11. if (( $${NUM} \> 1 )); then \
  12. printf -- "-----------------------------------------------------------------\n"; \
  13. printf "%-24s| %s\n" ". $(1)" `echo "$(strip $($(1)))"|cut -d' ' -f1|$(SED) 's/^ *//'`; \
  14. for i in `echo "$(strip $($(1)))"|cut -d' ' -f2-`; do \
  15. printf "%-24s| %s\n" "" "$${i}"; \
  16. done; \
  17. printf -- "-----------------------------------------------------------------\n"; \
  18. else \
  19. printf "%-24s| %s\n" ". $(1)" "$(strip $($(1)))"; \
  20. fi;
  21. endef
  22. ifneq (,$(Q))
  23. define Inspect_Env
  24. endef
  25. else
  26. define Inspect_Env
  27. @printf -- "-----------------------------------------------------------------\n"
  28. @printf "%-20s| %s\n" ". BUILDING_TARGET" "$@"
  29. @printf -- "-----------------------------------------------------------------\n"
  30. @printf "%-20s| %s\n" ". BUILDING_DEPEND" "$(filter-out FORCE,$^)"
  31. @printf -- "-----------------------------------------------------------------\n"
  32. @$(foreach var,$(1),$(call Dump_Var,$(var)))
  33. @printf -- "-----------------------------------------------------------------\n"
  34. endef
  35. endif
  36. # 31, red. 32, green. 33, yellow. 34, blue. 35, magenta. 36, cyan. 37, white.
  37. define Brief_Log
  38. ( \
  39. if [ "$1" = "CC" ]; then \
  40. if echo "$@"|grep -q "\.so$$"; then \
  41. COLOR_MARK="\033[1;32m"; \
  42. elif echo "$@"|grep -q "\.ko$$"; then \
  43. COLOR_MARK="\033[1;35m"; \
  44. else \
  45. COLOR_MARK="\033[1;36m"; \
  46. fi \
  47. elif [ "$1" = "AR" ]; then \
  48. COLOR_MARK="\033[1;33m"; \
  49. elif [ "$1" = "LD" ]; then \
  50. COLOR_MARK="\033[1;31m"; \
  51. elif [ "$1" = "ST" ]; then \
  52. COLOR_MARK="\033[0;33m"; \
  53. fi; \
  54. if [ "$(PLAIN_LOG)" != "1" ]; then \
  55. echo -ne "$${COLOR_MARK}"; \
  56. fi; \
  57. if [ "$2" = "" ]; then \
  58. FIRST_DEP="$(firstword $(filter-out FORCE,$?))"; \
  59. SPACE_BAR=" "; \
  60. if [ "$${FIRST_DEP}" != "" ]; then \
  61. FIRST_DEP="$$(basename $${FIRST_DEP})"; \
  62. fi; \
  63. printf "\r%-40s%s%s$(3)\n" "[$1] $$(echo -n "$$(basename $@)" | cut -c1-28)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
  64. else \
  65. printf "\r%-40s%s%s$(3)\n" "[$1] $$(echo -n "$(2)" | cut -c1-28)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
  66. fi; \
  67. if [ "$3" != "..." ]; then \
  68. for i in $(wordlist 2,150,$(filter-out FORCE,$?)); do \
  69. if [ "$$(echo $${i}|cut -c1)" != "/" ]; then \
  70. printf "%-40s%s$(3)\n" "" " $$(basename $${i})"; \
  71. fi \
  72. done; \
  73. fi; \
  74. if [ "$(PLAIN_LOG)" != "1" ]; then \
  75. echo -ne "\033[0m"; \
  76. fi; \
  77. )
  78. endef
  79. define Copy_Headers
  80. $(Q) \
  81. if [ "$(strip $(1))" != "" ]; then \
  82. mkdir -p $(2)/$(3); \
  83. for hdr in $(1); do \
  84. if [ ! -f $(2)/$(3)/$${hdr} ] || [ $${PWD}/$${hdr} -nt $(2)/$(3)/$${hdr} ]; then \
  85. mkdir -p $(2)/$(3); \
  86. cp -f $(TOP_DIR)/$(MODULE_NAME)/$${hdr} $(2)/$(3)/$$(basename $${hdr}); \
  87. fi; \
  88. done \
  89. fi
  90. endef
  91. define Update_Extra_Srcs
  92. ( \
  93. for ELEM in $(strip $(1)); do \
  94. DST=$(OUTPUT_DIR)/$(2)/$$(basename $${ELEM}); \
  95. if [ $${ELEM} -nt $${DST} ]; then \
  96. cp -Lf $${ELEM} $${DST}; \
  97. fi; \
  98. done \
  99. )
  100. endef
  101. define Require_Build
  102. ( \
  103. SW=$$(grep -m 1 "^PKG_SWITCH_$(1) =" $(STAMP_BLD_VAR)|awk '{ print $$NF }'); \
  104. [ "$${SW}" != "y" ] && \
  105. echo "FALSE" && exit; set +x; \
  106. \
  107. [ "$(LIBA_TARGET_$(1))" != "" ] && \
  108. $(foreach L,$(LIBA_TARGET_$(1)),[ -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(L) ] && ) \
  109. echo "FALSE" && exit; \
  110. \
  111. [ "$(LIBSO_TARGET_$(1))" != "" ] && \
  112. [ -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(LIBSO_TARGET_$(1)) ] && \
  113. echo "FALSE" && exit; \
  114. \
  115. echo "TRUE"; \
  116. )
  117. endef
  118. define Build_Depends
  119. ( \
  120. set -o pipefail && \
  121. for i in $(DEPENDS_$(1)); do \
  122. STAMP=$(STAMP_DIR)/$$(echo $${i}|$(SED) 's:/:~:g').build.done; \
  123. if [ -f $${STAMP} ]; then \
  124. continue; \
  125. fi; \
  126. $(MAKE) --no-print-directory $${i} \
  127. $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$${i}/$(COMPILE_LOG)) \
  128. $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(COMPILE_LOG)); \
  129. RETVAL=$$?; \
  130. if [ $${RETVAL} != 0 ]; then \
  131. exit $${RETVAL}; \
  132. fi; \
  133. done \
  134. \
  135. )
  136. endef
  137. #
  138. # ($(foreach d,$(COMP_LIB_COMPONENTS), \
  139. #
  140. # $(RECURSIVE_MAKE) pre-build target-$(d) && \
  141. # $(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$(d) $(LIBA_TARGET_$(d)) \
  142. # $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(d)/$(COMPILE_LOG)) \
  143. # $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(COMPILE_LOG)) \
  144. # ; \
  145. #
  146. # if [ $$? != 0 ]; then \
  147. #
  148. # KEEP SEPA-LIBS:
  149. #
  150. # rm -f $(SYSROOT_LIB)/$(firstword $(LIBA_TARGET_$(d))) $(SYSROOT_LIB)/$(firstword $(LIBSO_TARGET_$(d))) 2>/dev/null; \
  151. #
  152. ifdef COMP_LIB
  153. define Build_CompLib
  154. ( \
  155. if [ "$(strip $(1))" = "FORCE" ] || \
  156. [ "$$(echo $(LDFLAGS_$(strip $(1)))|grep -wo -- '-l$(COMP_LIB_NAME)')" != "" ]; then \
  157. ( \
  158. $(foreach d,$(COMP_LIB_COMPONENTS), \
  159. [ -f $(STAMP_DIR)/$(subst /,~,$(d)).build.done ] || \
  160. set -o pipefail && \
  161. $(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$(d) $(firstword $(LIBA_TARGET_$(d))) $(firstword $(LIBSO_TARGET_$(d))) && set +x; \
  162. RETVAL=$$?; \
  163. if [ $${RETVAL} != 0 ]; then \
  164. exit $${RETVAL}; \
  165. fi; \
  166. ) \
  167. ); \
  168. if [ ! -f $(SYSROOT_LIB)/$(COMP_LIB) ]; then \
  169. $(call Info_CompLib,$(COMP_LIB_NAME),$(COMP_LIB_OBJS)); \
  170. fi; \
  171. $(call Finalize_CompLib,$(COMP_LIB_OBJS),$(SYSROOT_LIB),$(COMP_LIB_NAME)); \
  172. fi \
  173. )
  174. endef
  175. else
  176. define Build_CompLib
  177. true
  178. endef
  179. endif
  180. define Relative_TcPath
  181. ( \
  182. case $(1) in \
  183. xtensa-lx106-elf-gcc ) \
  184. echo "gcc-xtensa-lx106-linux/main/bin" ;; \
  185. arm-none-eabi-gcc ) \
  186. echo "gcc-arm-none-eabi-linux/main/bin" ;; \
  187. esac \
  188. )
  189. endef
  190. define Gitrepo_TcPath
  191. ( \
  192. case $(1) in \
  193. xtensa-lx106-elf-gcc ) \
  194. echo "gcc-xtensa-lx106-linux" ;; \
  195. arm-none-eabi-gcc ) \
  196. echo "gcc-arm-none-eabi-linux" ;; \
  197. esac \
  198. )
  199. endef
  200. define CompLib_Map
  201. $(eval \
  202. COMP_LIB_COMPONENTS += \
  203. $(if \
  204. $(filter y,$($(strip $(1)))),$(foreach M,$(strip $(2)),$(if $(filter $(strip $(M)),$(COMP_LIB_COMPONENTS)),,$(strip $(M)))) \
  205. ) \
  206. )
  207. endef
  208. OMIT_GOALS := distclean clean env help config reconfig menuconfig
  209. ifeq (,$(filter $(OMIT_GOALS),$(MAKECMDGOALS)))
  210. define Conflict_Relation
  211. $(if $(filter y,$($(strip $(1)))), \
  212. $(if $(filter y,$($(strip $(2)))), \
  213. $(error INVALID CONFIG: '$(strip $(1)) = $($(strip $(1)))' conflicts with '$(strip $(2)) = $($(strip $(2)))' at same time!), \
  214. ), \
  215. )
  216. endef
  217. define Present1_Relation
  218. $(if $(filter n,$($(strip $(1)))), \
  219. $(if $(filter n,$($(strip $(2)))), \
  220. $(error INVALID CONFIG: '$(strip $(1)) = $($(strip $(1)))' conflicts with '$(strip $(2)) = $($(strip $(2)))' at same time!), \
  221. ), \
  222. )
  223. endef
  224. define Requires_Relation
  225. $(if $(filter y,$($(strip $(1)))), \
  226. $(if $(filter y,$($(strip $(2)))),, \
  227. $(error INVALID CONFIG: '$(strip $(2)) = $($(strip $(2)))' breaks dependency since '$(strip $(1)) = $($(strip $(1)))'!), \
  228. ), \
  229. )
  230. endef
  231. else # ifeq (,$(filter $(OMIT_GOALS),$(MAKECMDGOALS)))
  232. define Conflict_Relation
  233. endef
  234. define Present1_Relation
  235. endef
  236. define Requires_Relation
  237. endef
  238. endif # ifeq (,$(filter $(OMIT_GOALS),$(MAKECMDGOALS)))