_rules-libs.mk 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. ifndef LIBA_TARGET
  2. ifndef LIBSO_TARGET
  3. LIB_SRCS :=
  4. endif
  5. endif
  6. VPATH := $(TOP_DIR)/$(MODULE_NAME)
  7. LIB_SRCS ?= $(foreach M,*.c */*.c */*/*.c,$(wildcard $(TOP_DIR)/$(MODULE_NAME)/$(M))) $(wildcard *.c)
  8. .PHONY : cmake
  9. cmake:
  10. $(Q)$(foreach V,$(INFO_ENV_VARS),$(subst -,_,$(V))="$($(V))") \
  11. $(foreach V,$(TARGET),$(subst -,_,SRCS_$(V))="$(SRCS_$(V))") \
  12. bash $(if $(TOP_Q),,-x) $(RULE_DIR)/scripts/gen_sub_cmake.sh $(TOP_DIR)/${MODULE_NAME}/CMakeLists.txt
  13. ifdef Extra_CMake_Head
  14. @rm -f $(OUTPUT_DIR)/$(STAMP_CMAKE)
  15. @$(call Extra_CMake_Head, >> $(OUTPUT_DIR)/$(STAMP_CMAKE))
  16. @cat $(TOP_DIR)/${MODULE_NAME}/CMakeLists.txt >> $(OUTPUT_DIR)/$(STAMP_CMAKE)
  17. @$(call Extra_CMake_Foot, >> $(OUTPUT_DIR)/$(STAMP_CMAKE))
  18. @mv $(OUTPUT_DIR)/$(STAMP_CMAKE) $(TOP_DIR)/${MODULE_NAME}/CMakeLists.txt
  19. endif
  20. ifdef LIB_SRCS_PATTERN
  21. SRC_LIST := $(foreach M,$(LIB_SRCS_PATTERN),$(shell ls $(TOP_DIR)/$(MODULE_NAME)/$(M) 2>/dev/null))
  22. LIB_SRCS := $(SRC_LIST)
  23. endif
  24. LIB_SRCS := $(filter-out $(foreach M,$(LIB_SRCS_EXCLUDE),$(TOP_DIR)/$(MODULE_NAME)/$(M)),$(LIB_SRCS))
  25. LIB_OBJS := $(LIB_SRCS:.c=.o)
  26. LIB_OBJS := $(subst $(TOP_DIR)/$(MODULE_NAME)/,,$(LIB_OBJS))
  27. sinclude $(LIB_OBJS:.o=.d)
  28. ifdef LIBA_TARGET
  29. .PHONY: StaticLib_Install
  30. ifeq (1,$(words $(LIBA_TARGET)))
  31. $(LIBA_TARGET) :: $(LIB_OBJS)
  32. @$(call Brief_Log,"AR")
  33. $(call Inspect_Env,$(WATCHED_VARS))
  34. $(Q)rm -f $@
  35. ifdef CONFIG_LIBOBJ_STRIP
  36. @$(call Brief_Log,"ST")
  37. $(TOP_Q)$(STRIP) $(STRIP_DBGOPT) $(LIB_OBJS)
  38. endif
  39. $(TOP_Q) \
  40. if [ "$$(echo "$(LIB_OBJS)"|awk '{ print NF }')" != "0" ]; then \
  41. $(AR) -rcs $@ $(LIB_OBJS); \
  42. fi
  43. $(LIBA_TARGET) :: StaticLib_Install
  44. $(Q)mkdir -p $(LIBOBJ_TMPDIR)/$(MODULE_NAME)
  45. ifneq (,$(strip $(LIB_OBJS)))
  46. ifneq ($(LIBA_TARGET),$(LIBA_SKIP_COMBO))
  47. $(Q)cp -f $(LIB_OBJS) $(LIBOBJ_TMPDIR)/$(MODULE_NAME) 2>/dev/null || true
  48. endif
  49. endif
  50. $(Q)mkdir -p $(SYSROOT_LIB)
  51. $(Q)if [ -f $@ ]; then cp -f $@ $(SYSROOT_LIB); fi
  52. $(call Copy_Headers, $(LIB_HEADERS),$(SYSROOT_INC),$(LIB_HDRS_DIR))
  53. else
  54. $(foreach t,$(sort $(LIBA_TARGET)),$(t)): FORCE
  55. $(Q) \
  56. $(MAKE) LIBA_TARGET=$@ \
  57. LIB_SRCS="$(LIB_SRCS_$(subst .a,,$(subst lib,,$@)))" \
  58. LIB_SRCS_PATTERN="$(LIB_SRCS_PATTERN_$(subst .a,,$(subst lib,,$@)))" \
  59. endif # ifeq (1,$(words $(LIBA_TARGET)))
  60. endif # ifdef LIBA_TARGET
  61. ifdef LIBSO_TARGET
  62. .PHONY: DynamicLib_Install
  63. $(LIBSO_TARGET) :: SELF_LIBNAME = $(subst lib,,$(subst .so,,$(LIBSO_TARGET)))
  64. $(LIBSO_TARGET) :: LDFLAGS := $(filter-out -l$(SELF_LIBNAME), $(LDFLAGS))
  65. $(LIBSO_TARGET) :: $(LIB_OBJS) $(foreach d,$(DEPENDS_$(MODULE_NAME)),$(SYSROOT_LIB)/$(LIBA_TARGET_$(d)))
  66. @$(call Brief_Log,"CC")
  67. $(call Inspect_Env,$(WATCHED_VARS))
  68. $(Q)$(CC) -shared -Os \
  69. $(CFLAGS) \
  70. $(RPATH_CFLAGS) \
  71. -o $@ \
  72. $(LIB_OBJS) \
  73. -Wl,--start-group $(LDFLAGS) -Wl,--end-group
  74. $(LIBSO_TARGET) :: DynamicLib_Install
  75. $(Q)mkdir -p $(LIBOBJ_TMPDIR)/$(shell $(SHELL_DBG) basename $(CURDIR))
  76. $(Q)cp -f $(LIB_OBJS) $(LIBOBJ_TMPDIR)/$(shell $(SHELL_DBG) basename $(CURDIR))
  77. $(Q)mkdir -p $(SYSROOT_LIB)
  78. $(Q)install -m 0755 $@ $(SYSROOT_LIB)
  79. $(call Copy_Headers, $(LIB_HEADERS),$(SYSROOT_INC),$(LIB_HDRS_DIR))
  80. endif # ifdef LIBSO_TARGET