gen_one_makefile.sh 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. #! /bin/bash
  2. TARGET_FILE=${OUTPUT_DIR}/.one_makefile
  3. rm -f ${TARGET_FILE}
  4. CONFIG_VERNDOR=$(grep -m 1 "VENDOR *:" .config|awk '{ print $NF }')
  5. EXT_IFLAGS=$( \
  6. for iter in \
  7. $(find -L \
  8. tools/build-rules/misc \
  9. include \
  10. tests \
  11. src \
  12. ${IMPORT_DIR}/${CONFIG_VENDOR}/include \
  13. -type d -not -path "*.git*" -not -path "*.O*" 2>/dev/null); do \
  14. echo " -I${iter} \\"; \
  15. done)
  16. IFLAGS=$( \
  17. for iter in \
  18. $(find -L \
  19. ${COMP_LIB_COMPONENTS} \
  20. ${EXPORT_DIR} \
  21. ${SUBDIRS} \
  22. ${EXTRA_INCLUDE_DIRS} \
  23. ${IMPORT_DIR}/${CONFIG_VENDOR}/include \
  24. -type d -not -path "*.git*" -not -path "*.O*" 2>/dev/null); do \
  25. echo " -I${iter} \\"; \
  26. done)
  27. if [ "${WITH_LCOV}" = "1" ]; then
  28. CFLAGS=$( \
  29. echo "${CFLAGS}" \
  30. | xargs -n 1 \
  31. | awk '{ printf(" %s \\\n", $0); }' \
  32. )
  33. else
  34. CFLAGS=$( \
  35. echo "${CFLAGS}" \
  36. | xargs -n 1 \
  37. | grep -v '\-\-coverage' \
  38. | awk '{ printf(" %s \\\n", $0); }' \
  39. )
  40. fi
  41. ETC_OBJS=$(
  42. for i in ${ALL_LIBS}; do
  43. j=$(grep "${i}$" ${STAMP_BLD_VAR} | cut -d' ' -f1 | sed 's|LIBA_TARGET_|LIB_OBJS_|g')
  44. k=$(grep "${j}" ${STAMP_BLD_VAR} | cut -d' ' -f3-)
  45. for l in ${k}; do
  46. echo "${j//LIB_OBJS_/}/${l}"
  47. done
  48. done)
  49. ALL_LIBS=$(for iter in ${ALL_LIBS}; do echo -n "${OUTPUT_DIR}/usr/lib/${iter} "; done)
  50. ALL_BINS=$(for iter in ${ALL_PROG}; do echo -n "${OUTPUT_DIR}/usr/bin/${iter} "; done)
  51. OUTPUT_D=$(basename ${OUTPUT_DIR})
  52. if [ "$(echo ${CFLAGS}|grep -w '\-D_PLATFORM_IS_LINUX_')" = "" ]; then
  53. ALL_BINS=""
  54. fi
  55. cat << EOB >> ${TARGET_FILE}
  56. include ${RULE_DIR}/funcs.mk
  57. SHELL := bash
  58. Q ?= @
  59. VPATH := $(for iter in ${COMP_LIB_COMPONENTS}; do echo -n "${OUTPUT_DIR}/${iter} "; done)
  60. EXT_IFLAGS := \\
  61. ${EXT_IFLAGS}
  62. IFLAGS := \\
  63. ${IFLAGS}
  64. CFLAGS := \\
  65. ${EXTRA_CFLAGS} \\
  66. ${CFLAGS}
  67. STAMP_LCOV := ${STAMP_LCOV}
  68. .PHONY: all
  69. all: ${OUTPUT_DIR}/usr/lib/${COMP_LIB} ${ALL_LIBS} ${ALL_BINS}
  70. \$(Q)cp -rf ${EXTRA_INSTALL_HDRS} ${OUTPUT_DIR}/usr/include 2>/dev/null || true
  71. @rm -f *.gcda *.gcno \$\$(find ${RULE_DIR} -name "*.o")
  72. @if [ "\$(WITH_LCOV)" = "1" ]; then \\
  73. mkdir -p \$\$(dirname \$(STAMP_LCOV)); \\
  74. touch \$(STAMP_LCOV); \\
  75. else \\
  76. rm -f \$(STAMP_LCOV); \\
  77. fi
  78. ifneq (,\$(findstring gcc,\$(CC)))
  79. $(for iter in ${COMP_LIB_OBJS}; do
  80. echo "sinclude ${OUTPUT_DIR}/${iter/.o/.d}"
  81. done
  82. )
  83. endif
  84. ${OUTPUT_DIR}/usr/lib/${COMP_LIB}: \\
  85. $(for iter in ${COMP_LIB_OBJS}; do
  86. echo " ${OUTPUT_DIR}/${iter} \\"
  87. done
  88. )
  89. \$(Q)mkdir -p \$\$(dirname \$@)
  90. \$(Q)\$(call Brief_Log,"AR",\$\$(basename \$@),"...")
  91. \$(Q)${AR} -rcs \$@ \$^ 2>/dev/null
  92. %.o:
  93. \$(Q)\$(call Brief_Log,"CC",\$\$(basename \$@),"...")
  94. \$(Q)mkdir -p \$\$(dirname \$@)
  95. \$(Q)S=\$\$(echo \$@|sed 's,${OUTPUT_DIR},${TOP_DIR},1'); \\
  96. if echo \$\${S//.o/.c} | grep -q 'mbedtls\|HAL_\|hal-impl'; then \\
  97. ${CC} -c \\
  98. -o \$@ \\
  99. \$(filter-out -ansi,\$(CFLAGS)) \\
  100. \$(IFLAGS) \\
  101. \$\${S//.o/.c}; \\
  102. else \\
  103. ${CC} -c \\
  104. -o \$@ \\
  105. \$(CFLAGS) \\
  106. \$(IFLAGS) \\
  107. \$\${S//.o/.c}; \\
  108. fi
  109. ifneq (,\$(findstring gcc,\$(CC)))
  110. %.d:
  111. @\\
  112. ( \\
  113. D=\$\$(dirname \$@|sed 's,${OUTPUT_DIR},${TOP_DIR},1'); \\
  114. F=\$\$(basename \$@); \\
  115. F=\$\${F/.d/.c}; \\
  116. mkdir -p \$\$(dirname \$@); \\
  117. ${CC} -MM -I\$(CURDIR) \\
  118. \$(IFLAGS) \\
  119. \$(filter-out -ansi,\$(CFLAGS)) \\
  120. \$\${D}/\$\${F} > \$@.\$\$\$\$; \\
  121. sed -i 's!\$(shell basename \$*)\.o[ :]!\$*.o:!1' \$@.\$\$\$\$; \\
  122. mv \$@.\$\$\$\$ \$@; \\
  123. )
  124. endif
  125. EOB
  126. for i in ${ALL_LIBS}; do
  127. n=$(basename ${i})
  128. j=$(grep "${n}$" ${STAMP_BLD_VAR}|cut -d' ' -f1|sed 's:LIBA_TARGET_::1')
  129. k=$(echo 'LIB_OBJS_'"${j}")
  130. k=$(grep -m 1 "^${k}" ${STAMP_BLD_VAR}|cut -d' ' -f3-)
  131. k=$(for l in ${k}; do echo -n "${OUTPUT_DIR}/${j}/${l} "; done)
  132. for m in ${k}; do
  133. echo "sinclude ${m/.o/.d}" >> ${TARGET_FILE}
  134. done
  135. echo "" >> ${TARGET_FILE}
  136. cat << EOB >> ${TARGET_FILE}
  137. ${OUTPUT_DIR}/usr/lib/${n}: \\
  138. $(for m in ${k}; do
  139. echo " ${m} \\";
  140. done)
  141. \$(Q)mkdir -p \$\$(dirname \$@)
  142. \$(Q)\$(call Brief_Log,"AR",\$\$(basename \$@),"...")
  143. \$(Q)${AR} -rcs \$@ \$^ 2>/dev/null
  144. EOB
  145. done
  146. for i in ${ALL_PROG}; do
  147. j=$(grep -w -m 1 "^SRCS_${i}" ${STAMP_BLD_VAR}|cut -d' ' -f3-)
  148. k=$(grep -w -m 1 "TARGET_.* = .*${i}" ${STAMP_BLD_VAR}|cut -d' ' -f1|sed 's:TARGET_::1')
  149. q=${k}
  150. if [ "$(grep -w -m 1 "^TARGET_${k}" ${STAMP_BLD_VAR}|cut -d' ' -f3-|awk '{ print NF }')" = "1" ]; then
  151. k=""
  152. fi
  153. LFLAGS=$(grep -w -m 1 "^LDFLAGS_${q}" ${STAMP_BLD_VAR}|cut -d' ' -f3-)
  154. if [ "${CC}" = "gcc" ]; then
  155. if [ "$(uname)" != "Darwin" ]; then
  156. LFLAGS="${LFLAGS} -lgcov"
  157. fi
  158. fi
  159. j=$(for n in ${j}; do p=$(echo ${n}|cut -c1); [ "${p}" = "/" ] && echo -n "${n}" || echo -n "${TOP_DIR}/${q}/${n} "; done)
  160. EXTRA_SRCS=$(grep -w -m 1 "^EXTRA_SRCS_${q}" ${STAMP_BLD_VAR}|cut -d' ' -f3-)
  161. cat << EOB >> ${TARGET_FILE}
  162. ${OUTPUT_DIR}/usr/bin/${i}: \\
  163. ${EXTRA_SRCS} \\
  164. $(for m in ${j} ${OUTPUT_DIR}/usr/lib/${COMP_LIB} ${ALL_LIBS}; do
  165. echo " ${m} \\"|sed 's!//*!/!g';
  166. done)
  167. \$(Q)\$(call Brief_Log,"LD",\$\$(basename \$@),"...")
  168. \$(Q)${CC} \\
  169. -o \$@ \\
  170. $([ "$i" != "sdk-testsuites" ] && echo "\$(IFLAGS)" || echo "\$(EXT_IFLAGS)") \\
  171. \$(filter-out -Wdeclaration-after-statement -ansi,\$(CFLAGS)) \\
  172. \$(filter-out %.a,\$^) \\
  173. $( if [ "${i}" = "sdk-testsuites" ] && uname -a|grep -qw Ubuntu; then echo "${TOP_DIR}/${IMPORT_VDRDIR}/${PREBUILT_LIBDIR}/libcurl.a"; fi ) \\
  174. -L${OUTPUT_DIR}/usr/lib \\
  175. ${LFLAGS} $( if [ "${i}" = "sdk-testsuites" ] && ! uname -a|grep -qw Ubuntu; then echo "-lcurl"; fi )
  176. EOB
  177. done