rules.mk 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. include $(RULE_DIR)/settings.mk
  2. sinclude $(CONFIG_TPL)
  3. export PATH := $(PATH):$(TOOLCHAIN_DLDIR)/main/bin
  4. unexport VERBOSE
  5. unexport DEBUG
  6. TOPDIR_NAME := $(shell $(SHELL_DBG) basename $(TOP_DIR))
  7. LIBOBJ_TMPDIR := $(OUTPUT_DIR)/lib$(TOPDIR_NAME).objs
  8. SYSROOT_BIN := $(OUTPUT_DIR)${bindir}
  9. SYSROOT_INC := $(OUTPUT_DIR)${incdir}
  10. SYSROOT_LIB := $(OUTPUT_DIR)${libdir}
  11. CONFIG_VENDOR := $(shell grep -m 1 "VENDOR *:" $(CONFIG_TPL) 2>/dev/null|awk '{ print $$NF }')
  12. IMPORT_VDRDIR := $(IMPORT_DIR)/$(CONFIG_VENDOR)
  13. HOST_ARCH_BITS := $(shell [ "$$(uname -m)" = "x86_64" ] && echo -n "64" || echo -n "32")
  14. PREBUILT_LIBDIR := $(if $(strip $(filter 64,$(HOST_ARCH_BITS)) $(CROSS_PREFIX)),libs,32bit-libs)
  15. PREBUILT_BINDIR := $(if $(strip $(filter 64,$(HOST_ARCH_BITS)) $(CROSS_PREFIX)),bin,32bit-bin)
  16. CONFIG_VSP_WEBSITE ?= http://gitlab.alibaba-inc.com/yusheng.yx/alink-vendor-support-package
  17. ifeq ($(shell uname), Linux)
  18. RPATH_CFLAGS += -Wl,-rpath='$$''ORIGIN/../lib'
  19. endif
  20. # CFLAGS contains '$' causes ./configure failure in ORIGIN packages
  21. #
  22. # Instead of:
  23. #
  24. # ifeq ($(shell uname), Linux)
  25. # CFLAGS += -Wl,-rpath='$$''ORIGIN/../lib'
  26. # CFLAGS := $(sort $(CFLAGS))
  27. # endif
  28. #
  29. # Write @ package's makefile:
  30. #
  31. # ./configure \
  32. # CFLAGS='$(CFLAGS) -Wl,-rpath='\''$$$$'\''ORIGIN/../lib' \
  33. # --prefix=...
  34. #
  35. # To pass in RPATH related link flags
  36. COMP_LIB_NAME := $(subst lib,,$(subst .so,,$(subst .a,,$(COMP_LIB))))
  37. COMP_LIB_OBJS = $(foreach d,$(COMP_LIB_COMPONENTS),$(LIBOBJ_TMPDIR)/$(d)/*.o)
  38. RECURSIVE_MAKE := $(MAKE) $(if $(TOP_Q),-s) -C $(TOP_DIR) -f $(TOP_MAKEFILE)
  39. ALL_SUB_DIRS := $(shell find -L $(TOP_DIR) \
  40. ! -path "$(OUTPUT_DIR)/*" \
  41. ! -path "$(TOP_DIR)/$(SHADOW_DIR)/*" \
  42. -name "$(MAKE_SEGMENT)" 2>/dev/null \
  43. | $(SED) 's,$(TOP_DIR)[/]*,,;s,[/]*$(MAKE_SEGMENT),,')
  44. SHOW_ENV_VARS := \
  45. MODULE_NAME SUBDIRS PKG_NAME PKG_RPATH PKG_SOURCE PKG_SWITCH_V PKG_SWITCH \
  46. HOST_ARCH_BITS PREBUILT_LIBDIR RPATH_CFLAGS EXTRA_INCLUDE_DIRS \
  47. CROSS_PREFIX DEPENDS CFLAGS CCLD LDFLAGS \
  48. CC LD AR STRIP OBJCOPY COMP_LIB ALL_SUB_DIRS LIBOBJ_TMPDIR \
  49. MAKE_ENV_VARS DEFAULT_BLD EXTRA_CFLAGS \
  50. LIBA_TARGET LIBSO_TARGET TARGET KMOD_TARGET \
  51. SRCS OBJS LIB_SRCS LIB_OBJS LIB_HDRS_DIR LIB_HEADERS EXTRA_SRCS \
  52. $(foreach M,$(LIBA_TARGET),LIB_SRCS_$(subst .a,,$(subst lib,,$(M)))) \
  53. INTERNAL_INCLUDES TOP_DIR PRJ_NAME PRJ_VERSION COMP_LIB_COMPONENTS \
  54. IMPORT_DIR IMPORT_VDRDIR CONFIG_DIR PACKAGE_DIR EXTERNAL_INCLUDES \
  55. CONFIG_LIB_EXPORT OBJCOPY_FLAGS CONFIG_VENDOR COVERAGE_PROGS COVERAGE_CMD \
  56. INFO_ENV_VARS := $(SHOW_ENV_VARS) \
  57. ALL_SUB_DIRS SED RULE_DIR OUTPUT_DIR MAKE_SEGMENT COMP_LIB_NAME LIBOBJ_TMPDIR \
  58. COMP_LIB_FILES STAMP_BLD_ENV STAMP_BLD_VAR EXTRA_INSTALL_HDRS FINAL_DIR DIST_DIR \
  59. WIN32_CMAKE_SKIP EXTRA_INCLUDE_DIRS NOEXEC_CMAKE_DIRS COMP_LIB \
  60. WITH_LCOV LCOV_DIR UTEST_PROG COVERAGE_CMD STAMP_LCOV CMAKE_EXPORT_LIBS \
  61. INFO_ENV_VARS := $(filter-out CFLAGS,$(INFO_ENV_VARS))
  62. ifndef CONFIG_LIB_EXPORT
  63. ifeq (y,$(strip $(CONFIG_EMB_GATEWAY_SDK)))
  64. CONFIG_LIB_EXPORT := dynamic
  65. else
  66. ifeq (y,$(strip $(CONFIG_EMB_BASIC_SDK)))
  67. CONFIG_LIB_EXPORT := static
  68. else
  69. ifeq (y,$(strip $(CONFIG_EMB_ROUTER_SDK)))
  70. CONFIG_LIB_EXPORT := dynamic
  71. endif # ROUTER
  72. endif # BASIC
  73. endif # GATEWAY
  74. else
  75. ifneq (static,$(CONFIG_LIB_EXPORT))
  76. ifneq (dynamic,$(CONFIG_LIB_EXPORT))
  77. $(error CONFIG_LIB_EXPORT($(CONFIG_LIB_EXPORT)) is neither 'static' or 'dynamic')
  78. endif # dynamic
  79. endif # static
  80. endif # CONFIG_LIB_EXPORT
  81. ifneq (,$(shell ls $(STAMP_BLD_VAR) 2>/dev/null))
  82. ifeq (,$(filter reconfig distclean,$(MAKECMDGOALS)))
  83. ifeq (0,$(strip $(shell $(SED) '/[-_/a-zA-Z0-9]* = *..*/d' $(STAMP_BLD_VAR)|wc -l)))
  84. include $(STAMP_BLD_VAR)
  85. endif
  86. endif
  87. endif
  88. .PHONY: all clean FORCE
  89. ifdef SUBDIRS
  90. include $(RULE_DIR)/_rules-top.mk
  91. include $(RULE_DIR)/_rules-prefix.mk
  92. include $(RULE_DIR)/_rules-repo.mk
  93. CROSS_CANDIDATES := CC CXX AR LD STRIP OBJCOPY
  94. export CC := $(strip $(if $(OVERRIDE_CC), $(OVERRIDE_CC), $(CROSS_PREFIX)gcc))
  95. export CXX := $(strip $(if $(OVERRIDE_CXX), $(OVERRIDE_CXX), $(CROSS_PREFIX)g++))
  96. export AR := $(strip $(if $(OVERRIDE_AR), $(OVERRIDE_AR), $(CROSS_PREFIX)ar))
  97. export LD := $(strip $(if $(OVERRIDE_LD), $(OVERRIDE_LD), $(CROSS_PREFIX)ld))
  98. export OBJCOPY := $(strip $(if $(OVERRIDE_OBJCOPY),$(OVERRIDE_OBJCOPY),$(CROSS_PREFIX)objcopy))
  99. ifneq (,$(OVERRIDE_STRIP))
  100. export STRIP := $(OVERRIDE_STRIP)
  101. else
  102. ifneq (,$(CROSS_PREFIX))
  103. export STRIP := $(CROSS_PREFIX)strip
  104. else
  105. export STRIP := true
  106. endif
  107. endif
  108. ifeq (gcc,$(strip $(CC)))
  109. export STRIP := strip
  110. endif
  111. ifneq (y,$(shell which $(CC) > /dev/null 2>&1 && echo 'y'))
  112. LOCAL_TCDIR := $(TOOLCHAIN_DLDIR)/$(shell $(call Relative_TcPath,$(CC)))
  113. export CC := $(LOCAL_TCDIR)/$(CC)
  114. export AR := $(LOCAL_TCDIR)/$(AR)
  115. export LD := $(LOCAL_TCDIR)/$(LD)
  116. export OBJCOPY := $(LOCAL_TCDIR)/$(OBJCOPY)
  117. export STRIP := $(LOCAL_TCDIR)/$(STRIP)
  118. endif
  119. ifneq (,$(filter -m32,$(strip $(CFLAGS))))
  120. PREBUILT_LIBDIR := 32bit-libs
  121. PREBUILT_BINDIR := 32bit-bin
  122. endif
  123. include $(RULE_DIR)/_rules-dist.mk
  124. include $(RULE_DIR)/_rules-complib.mk
  125. include $(RULE_DIR)/_rules-submods.mk
  126. env:
  127. $(TOP_Q)echo ""
  128. $(TOP_Q)printf -- "-----------------------------------------------------------------\n"
  129. $(TOP_Q)$(foreach var,$(SHOW_ENV_VARS),$(call Dump_Var,$(var)))
  130. $(TOP_Q)printf -- "-----------------------------------------------------------------\n"
  131. $(TOP_Q)echo ""
  132. $(TOP_Q)$(call $(POST_ENV_HOOK))
  133. else # ifdef SUBDIRS
  134. PKG_RPATH := $(shell echo $(CURDIR)|$(SED) 's,$(OUTPUT_DIR)/*,,g')
  135. PKG_NAME ?= $(shell basename $(CURDIR))
  136. PKG_SOURCE ?= $(shell [ -d $(PACKAGE_DIR) ] && find $(PACKAGE_DIR) -name "$(PKG_NAME)*" | head -1)
  137. DEPENDS += $(DEPENDS_$(MODULE_NAME))
  138. DEPENDS := $(sort $(strip $(DEPENDS)))
  139. ifdef CONFIG_SWITCH
  140. PKG_SWITCH_V = $(CONFIG_SWITCH)
  141. else
  142. PKG_SWITCH_V := CONFIG_$(PKG_RPATH)
  143. endif
  144. PKG_SWITCH = $($(PKG_SWITCH_V))
  145. ifdef ORIGIN
  146. include $(RULE_DIR)/_rules-origin.mk
  147. else # ifdef ORIGIN
  148. ifneq (,$(filter -m32,$(strip $(CFLAGS))))
  149. PREBUILT_LIBDIR := 32bit-libs
  150. PREBUILT_BINDIR := 32bit-bin
  151. endif
  152. include $(RULE_DIR)/_rules-flat.mk
  153. endif # ifdef ORIGIN
  154. include $(RULE_DIR)/_rules-modinfo.mk
  155. endif # ifdef SUBDIRS
  156. sinclude $(STAMP_POST_RULE)
  157. ifdef UTEST_PROG
  158. COVERAGE_LIST += \"./$(strip $(UTEST_PROG) --list)\"
  159. COVERAGE_LIST += \"./$(strip $(UTEST_PROG) --verbose=4)\"
  160. include $(RULE_DIR)/_rules-coverage.mk
  161. endif