rules.mak 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. CC ?= gcc
  2. STRIP := strip
  3. NM := nm
  4. SRCTYPE ?= c
  5. OBJS = $(patsubst %.$(SRCTYPE),objs/%.o,$(notdir $(SRCS_LIST)))
  6. OBJS_P = $(patsubst %.o,%.P,$(OBJS))
  7. APSDIR = $(shell echo `pwd` | sed 's/drivers\/.*\|aps\/.*/aps/g')
  8. #this path TOOLDIR only used by aps, so ignore driver path replacement;
  9. TOOLDIR = $(shell echo `pwd` | sed 's/aps\/.*/tools/')
  10. ifeq ($(CONFIG_ENABLE_UMF_MODULES), y)
  11. ifeq ($(CONFIG_MOD_PACK_MEDIA), y)
  12. modsegs += .media
  13. modsrc += $(MM_APP) $(MM_UIRESRCS) $(MM_MID)
  14. endif
  15. ifeq ($(CONFIG_MOD_PACK_RUNAV), y)
  16. modsegs += .ffmpeg
  17. endif
  18. ifeq ($(CONFIG_MOD_PACK_PICLIB), y)
  19. modsegs += .picture
  20. modsrc += $(PICTURE_MOD)
  21. endif
  22. ifeq ($(CONFIG_MOD_PACK_ATV), y)
  23. modsegs += .atv
  24. modsrc += $(ATV_APP)
  25. endif
  26. ifeq ($(CONFIG_MOD_PACK_DTV), y)
  27. modsegs += .dtv
  28. modsrc += $(DTV_APP) $(DTV_MID)
  29. endif
  30. ifeq ($(CONFIG_MOD_PACK_TT), y)
  31. modsegs += .teletext
  32. modsrc += $(TT_MOD)
  33. endif
  34. ifeq ($(CONFIG_MOD_PACK_SUB), y)
  35. modsegs += .subtitle
  36. modsrc += $(SUB_MOD)
  37. endif
  38. ifeq ($(CONFIG_ENABLE_UMF_LANGUAGE_MODULES), y)
  39. #langMode begin(This context is auto generated by ./tools/gen_LangMode.py please don't modify.)
  40. modsegs += .TV_IDL_Spanish
  41. modsegs += .TV_IDL_French
  42. modsegs += .TV_IDL_German
  43. modsegs += .TV_IDL_Italian
  44. modsegs += .TV_IDL_Portuguese
  45. modsegs += .TV_IDL_Polish
  46. modsegs += .TV_IDL_Russian
  47. modsegs += .TV_IDL_Finnish
  48. modsegs += .TV_IDL_Swedish
  49. modsegs += .TV_IDL_Greek
  50. modsegs += .TV_IDL_Dutch
  51. modsegs += .TV_IDL_English
  52. modsegs += .TV_IDL_Schinese
  53. #langMode end (please don't delete)
  54. endif
  55. endif
  56. $(TARGET_EXE): check_dir_objs $(OBJS) BUILD_MODULE
  57. @echo Building $@
  58. ifeq (yy, $(findstring yy, ${BUILD_UMF}${CONFIG_ENABLE_UMF_MODULES}))
  59. @rm -fr umflink.ld
  60. @cpp -P umflink.ld.S -o umflink.ld
  61. ifeq ($(CONFIG_STATIC_UCLIBC),y)
  62. @echo 111111111111111
  63. $(CROSS)$(CC) $(LDFLAGS) -Wl,-Map,$@.map -o $@ $(OBJS) $(EXTRA_OBJS) $(UCLIBCDIR)/usr/lib/libc.a -Tumflink.ld
  64. else
  65. $(CROSS)$(CC) $(LDFLAGS) -Wl,-Map,$@.map -o $@ $(OBJS) $(EXTRA_OBJS) -Tumflink.ld
  66. endif
  67. else
  68. ifeq ($(CONFIG_STATIC_UCLIBC),y)
  69. @echo 111111111111111
  70. $(CROSS)$(CC) $(LDFLAGS) -o $@ $(OBJS) $(EXTRA_OBJS) $(UCLIBCDIR)/usr/lib/libc.a
  71. else
  72. $(CROSS)$(CC) $(LDFLAGS) -o $@ $(OBJS) $(EXTRA_OBJS)
  73. endif
  74. endif
  75. ifeq ($(CONFIG_CORE_DUMP),y)
  76. @cp $@ $@.gdb
  77. endif
  78. ifeq ($(CONFIG_CALL_TRACE),y)
  79. @$(CROSS)$(NM) -n $@ > $(APSDIR)/middleware/trace/$@.symbol
  80. endif
  81. ifeq (yy, $(findstring yy, ${BUILD_UMF}${CONFIG_ENABLE_UMF_MODULES}))
  82. @mv $@ $@.full
  83. @$(CROSS)objdump -Chpr $@.full > $@.txt
  84. @rm -fr mod.info
  85. @$(PURECROSS)objcopy $(patsubst .%,--remove-section=.%,$(modsegs)) $@.full $@
  86. @for modseg in $(modsegs); do \
  87. $(PURECROSS)objcopy --only-section=$$modseg -O binary $@.full $@$$modseg || exit 1; \
  88. $(TOOLDIR)/gen_compressmod.pl $(TOOLDIR)/lzma460/lzma $@$$modseg ./$@$$modseg.bin || exit 1; \
  89. grep -nr $$modseg ./$@.txt | awk '{printf $$3" "$$4" "$$5}' >> ./mod.info; \
  90. grep $${modseg}data_start ./$@.map | awk '{printf " "$$1}' >> ./mod.info; \
  91. grep $${modseg}data_end ./$@.map | awk '{print " "$$1}' >> ./mod.info; \
  92. done
  93. @$(CROSS)$(STRIP) $@.full
  94. endif
  95. @$(CROSS)$(STRIP) $@
  96. $(TARGET_STATIC): check_dir_objs $(OBJS)
  97. @echo Building $@
  98. @$(CROSS)ar cr $@ $(OBJS) $(EXTRA_OBJS)
  99. @$(CROSS)ranlib $@
  100. $(TARGET_DYNAMIC): check_dir_objs $(OBJS)
  101. @echo Building $@
  102. $(CROSS)$(CC) $(LDFLAGS) -shared -Wl,-soname,$@ -o $@ $(OBJS) $(EXTRA_OBJS)
  103. BUILD_MODULE:
  104. objs/%.o: %.$(SRCTYPE)
  105. @echo Compiling $<
  106. @$(CROSS)$(CC) -MMD -c -o $@ $(EXTRA_CFLAGS) $(CMPFLAGS) $(WRNFLAGS) $(CFLAGS) $(INCLUDE) $<
  107. ifeq ($(CONFIG_GCOV_APPLICATION),y)
  108. echo $< >> gcov_source_list
  109. endif
  110. # @cp $(*D)/objs/$(*F).d $(*D)/objs/$(*F).P; \
  111. # sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
  112. # -e '/^$$/ d' -e 's/$$/ :/' < $(*D)/objs/$(*F).d >> $(*D)/objs/$(*F).P; \
  113. # rm $(*D)/objs/$(*F).d
  114. modobjs = $(patsubst %.c,objs/%.o,$(modsrc))
  115. $(modobjs):objs/%.o: %.c
  116. @echo Compiling $(MODULE_NAME) file: $<
  117. @$(CROSS)$(CC) -MMD -c -o $@ $(EXTRA_CFLAGS) $(CMPFLAGS) $(WRNFLAGS) $(CFLAGS) $(INCLUDE) $<
  118. @$(TOOLDIR)/rename_section $(PURECROSS)objdump $(PURECROSS)objcopy .text .$(MODULE_NAME).text ./objs/$*.o
  119. @$(TOOLDIR)/rename_section $(PURECROSS)objdump $(PURECROSS)objcopy .rodata .$(MODULE_NAME).rodata ./objs/$*.o
  120. @$(TOOLDIR)/rename_section $(PURECROSS)objdump $(PURECROSS)objcopy .data .$(MODULE_NAME).data ./objs/$*.o
  121. @$(TOOLDIR)/rename_section $(PURECROSS)objdump $(PURECROSS)objcopy .bss .$(MODULE_NAME).bss ./objs/$*.o
  122. modlanobjs = $(patsubst %.c,objs/%.o,$(modlansrc))
  123. $(modlanobjs):objs/%.o: %.c
  124. $(CROSS)$(CC) -MMD -c -o $@ $(EXTRA_CFLAGS) $(CMPFLAGS) $(WRNFLAGS) $(CFLAGS) $(INCLUDE) $<
  125. echo kai $(basename $(<F))
  126. $(TOOLDIR)/rename_section $(PURECROSS)objdump $(PURECROSS)objcopy .text .$(basename $(<F)).text ./objs/$(basename $(<F)).o
  127. $(TOOLDIR)/rename_section $(PURECROSS)objdump $(PURECROSS)objcopy .rodata .$(basename $(<F)).rodata ./objs/$(basename $(<F)).o
  128. $(TOOLDIR)/rename_section $(PURECROSS)objdump $(PURECROSS)objcopy .data .$(basename $(<F)).data ./objs/$(basename $(<F)).o
  129. $(TOOLDIR)/rename_section $(PURECROSS)objdump $(PURECROSS)objcopy .bss .$(basename $(<F)).bss ./objs/$(basename $(<F)).o
  130. clean: remove_dir_objs clean_link clean_extra
  131. @$(RM) $(TARGET_EXE) $(TARGET_STATIC) $(TARGET_STATIC_A) $(TARGET_DYNAMIC)
  132. @$(RM) $(OBJS_P) $(OBJS)
  133. ifeq ($(CONFIG_CORE_DUMP),y)
  134. @$(RM) $(TARGET_EXE).gdb
  135. endif
  136. clean_link:
  137. @$(RM) $(OBJS_LINK)
  138. clean_extra:
  139. check_dir_objs:
  140. @if [ ! -d "objs" ] ; then mkdir objs; fi
  141. remove_dir_objs:
  142. @if [ -d "objs" ]; then rm -rf objs; fi
  143. ifeq ($(CONFIG_GCOV_APPLICATION),y)
  144. -rm gcov_source_list
  145. -rm *.gcov
  146. endif
  147. #-include $(OBJS:objs/%.o=objs/%.P)
  148. -include $(OBJS:objs/%.o=objs/%.d)