_rules-flat.mk 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. ifneq ($(TOP_DIR),$(CURDIR))
  2. INTERNAL_INCLUDES += -I$(SYSROOT_INC)
  3. INTERNAL_INCLUDES += $(foreach d, $(shell find $(SYSROOT_INC) -type d), -I$(d))
  4. INTERNAL_INCLUDES += -I$(TOP_DIR)
  5. INTERNAL_INCLUDES += $(foreach d, $(shell find -L $(TOP_DIR)/$(EXPORT_DIR) -type d -not -path "*/.*" -not -path "$(TOP_DIR)/$(SHADOW_DIR)*"), -I$(d))
  6. INTERNAL_INCLUDES += \
  7. $(foreach d, \
  8. $(shell [ -d $(IMPORT_DIR)/$(CONFIG_VENDOR)/include ] && find -L $(IMPORT_DIR)/$(CONFIG_VENDOR)/include -type d), \
  9. -I$(d) \
  10. )
  11. INTERNAL_INCLUDES += $(foreach mod, $(MODULE_NAME) $(HDR_REFS), \
  12. $(foreach d, \
  13. $(shell [ -d $(TOP_DIR)/$(mod) ] && \
  14. find -L $(TOP_DIR)/$(mod)/ -type d \
  15. -a -name "[^.]*" \
  16. -not -path "*.git*"), \
  17. -I$(d) \
  18. ) \
  19. )
  20. # INTERNAL_INCLUDES += \
  21. $(foreach d, \
  22. $(shell find $(OUTPUT_DIR)/$(MODULE_NAME) -type d -a -name "[^.]*"), \
  23. -I$(d) \
  24. )
  25. INTERNAL_INCLUDES := $(strip $(sort $(INTERNAL_INCLUDES)))
  26. EXTERNAL_INCLUDES += $(foreach mod, $(DEPENDS), \
  27. $(foreach d, \
  28. $(shell $(SHELL_DBG) find \
  29. $(SYSROOT_INC)/$(mod)/ -maxdepth 2 -type d 2>/dev/null) \
  30. $(shell $(SHELL_DBG) find \
  31. $(IMPORT_VDRDIR)/include/$(mod)/ -maxdepth 2 -type d 2>/dev/null), \
  32. -I$(d) \
  33. ) \
  34. )
  35. EXTERNAL_INCLUDES := $(strip $(EXTERNAL_INCLUDES))
  36. endif # ifneq ($(TOP_DIR),$(CURDIR))
  37. ifeq (dynamic,$(strip $(CONFIG_LIB_EXPORT)))
  38. CFLAGS += -fPIC
  39. endif
  40. #CFLAGS := $(sort $(strip $(CFLAGS)))
  41. LDFLAGS += -L$(SYSROOT_LIB)
  42. ifeq (y,$(shell [ -e $(TOP_DIR)/$(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR) ] && echo y))
  43. LDFLAGS += -L$(TOP_DIR)/$(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)
  44. endif
  45. LDFLAGS += $(foreach d,$(DEPENDS_$(MODULE_NAME)),$(REF_LDFLAGS_$(d)))
  46. WATCHED_VARS = \
  47. TARGET \
  48. CFLAGS \
  49. CC \
  50. LDFLAGS \
  51. CURDIR \
  52. INTERNAL_INCLUDES \
  53. DEPENDS \
  54. MAKECMDGOALS \
  55. EXTERNAL_INCLUDES \
  56. LIBA_TARGET \
  57. LIBSO_TARGET \
  58. ALL_TARGETS := $(TARGET) $(LIBSO_TARGET) $(LIBA_TARGET) $(firstword $(KMOD_TARGET))
  59. ifneq (,$(strip $(PKG_SWITCH)))
  60. all: $(ALL_TARGETS)
  61. else
  62. all:
  63. $(Q)true
  64. endif
  65. clean:
  66. $(Q)rm -f \
  67. $(strip \
  68. $(ALL_TARGETS) $(OBJS) $(LIB_OBJS) \
  69. $(OBJS:.o=.d) $(LIB_OBJS:.o=.d) \
  70. $(LIB_OBJS:.o=.gcno) $(LIB_OBJS:.o=.gcda) \
  71. ) \
  72. *.o.e *.d *.o *.a *.so *.log *.gc*
  73. %.o: %.c $(HD_MAKEFILE)
  74. @$(call Brief_Log,"CC")
  75. $(call Inspect_Env,$(WATCHED_VARS))
  76. $(Q) \
  77. set -o pipefail; \
  78. $(CC) -I$(CURDIR) \
  79. $(INTERNAL_INCLUDES) \
  80. $(EXTERNAL_INCLUDES) \
  81. $(CFLAGS) \
  82. -c -o $@ $<
  83. ifneq (,$(OBJCOPY_FLAGS))
  84. $(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) $@
  85. endif
  86. NODEP_LIST = \
  87. $(SYSROOT_INC)/git_version.h \
  88. $(SYSROOT_INC)/platform.h \
  89. $(SYSROOT_INC)/product.h \
  90. $(SYSROOT_INC)/product_config.h \
  91. ifneq (,$(findstring gcc,$(CC)))
  92. ifeq (,$(filter modinfo,$(MAKECMDGOALS)))
  93. %.d: %.c
  94. @ \
  95. ( \
  96. D=$$(dirname $<|$(SED) 's,$(TOP_DIR),$(OUTPUT_DIR),1'); \
  97. F=$$(basename $<); \
  98. mkdir -p $${D}; \
  99. $(CC) -MM -I$(CURDIR) \
  100. $(INTERNAL_INCLUDES) \
  101. $(EXTERNAL_INCLUDES) \
  102. $(CFLAGS) \
  103. $< > $${D}/$${F}.$$$$; \
  104. $(SED) -i 's!$(shell basename $*)\.o[ :]!$*.o:!1' $${D}/$${F}.$$$$; \
  105. mv $${D}/$${F}.$$$$ $@; \
  106. )
  107. endif
  108. endif
  109. %.o: %.cpp
  110. @$(call Brief_Log,"CC")
  111. $(call Inspect_Env,$(WATCHED_VARS))
  112. $(Q)$(CXX) -I$(CURDIR) \
  113. $(INTERNAL_INCLUDES) \
  114. $(EXTERNAL_INCLUDES) \
  115. $(CFLAGS) \
  116. -c -o $@ $<
  117. ifneq (,$(findstring gcc,$(CC)))
  118. %.d: %.cpp
  119. @ \
  120. $(CXX) -MM -I$(CURDIR) \
  121. $(INTERNAL_INCLUDES) \
  122. $(EXTERNAL_INCLUDES) \
  123. $(CFLAGS) \
  124. $< > $@.$$$$; \
  125. $(foreach D,$(NODEP_LIST),$(SED) -i 's,$(D),,g' $@.$$$$;) \
  126. $(SED) 's,\($*\)\.o[ :]*,\1.o $@: ,g' < $@.$$$$ > $@; \
  127. rm -f $@.$$$$;
  128. endif
  129. include $(RULE_DIR)/_rules-libs.mk
  130. include $(RULE_DIR)/_rules-prog.mk
  131. include $(RULE_DIR)/_rules-kmod.mk