gen_top_cmake.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #! /bin/bash
  2. TARGET_FILE=$1
  3. PKG_RPATH=$(echo ${PACKAGE_DIR}|${SED} "s:${TOP_DIR}/*::g")
  4. W32_LIBSD=$(echo ${IMPORT_DIR}/win7/${PREBUILT_LIBDIR}|${SED} "s:${TOP_DIR}/*::g")
  5. rm -f ${TARGET_FILE}
  6. ALL_CFLAGS="$(grep -m 1 '^CFLAGS\>' ${STAMP_BLD_ENV}|cut -d' ' -f3-)"
  7. REM_CFLAGS=""
  8. DEF_CFLAGS=""
  9. for i in ${ALL_CFLAGS}; do
  10. j=$(echo ${i}|cut -c1,2)
  11. if [ "${j}" = "-D" ]; then
  12. DEF_CFLAGS="${DEF_CFLAGS} ${i}"
  13. else
  14. REM_CFLAGS="${REM_CFLAGS} ${i}"
  15. fi
  16. done
  17. cat << EOB >> ${TARGET_FILE}
  18. if(\${CMAKE_SOURCE_DIR} STREQUAL \${CMAKE_BINARY_DIR})
  19. MESSAGE (FATAL_ERROR "in-tree build not allowded")
  20. endif(\${CMAKE_SOURCE_DIR} STREQUAL \${CMAKE_BINARY_DIR})
  21. CMAKE_MINIMUM_REQUIRED (VERSION 2.8)
  22. PROJECT (${PRJ_NAME}-${PRJ_VERSION} C)
  23. SET (EXECUTABLE_OUTPUT_PATH \${PROJECT_BINARY_DIR}/bin)
  24. SET (LIBRARY_OUTPUT_PATH \${PROJECT_BINARY_DIR}/lib)
  25. SET (CMAKE_C_FLAGS "${REM_CFLAGS} -fPIC")
  26. IF (WIN32)
  27. SET (CMAKE_EXE_LINKER_FLAGS "-L\${PROJECT_SOURCE_DIR}/${W32_LIBSD}")
  28. ENDIF (WIN32)
  29. MESSAGE ("---------------------------------------------------------------------")
  30. MESSAGE ("Project Name : " \${PROJECT_NAME})
  31. MESSAGE ("Source Dir : " \${PROJECT_SOURCE_DIR})
  32. MESSAGE ("Binary Dir : " \${PROJECT_BINARY_DIR})
  33. MESSAGE ("System Processor : " \${CMAKE_SYSTEM_PROCESSOR})
  34. MESSAGE ("System Platform : " \${CMAKE_SYSTEM})
  35. MESSAGE ("C Compiler : " \${CMAKE_C_COMPILER})
  36. MESSAGE ("Executable Dir : " \${EXECUTABLE_OUTPUT_PATH})
  37. MESSAGE ("Library Dir : " \${LIBRARY_OUTPUT_PATH})
  38. MESSAGE ("SDK Version : " ${PRJ_VERSION})
  39. MESSAGE ("")
  40. IF (WIN32)
  41. MESSAGE ("Building on WINDOWS ...")
  42. ELSE (WIN32)
  43. MESSAGE ("Building on LINUX ...")
  44. ENDIF (WIN32)
  45. MESSAGE ("---------------------------------------------------------------------")
  46. $(for i in $(grep 'PKG_SOURCE' \
  47. $(find ${TOP_DIR} -name ${MAKE_SEGMENT} -not -path "*.O*") \
  48. | ${SED} "s:${TOP_DIR}/\(.*\)/${MAKE_SEGMENT}.*= *\(.*\):\1~\2:g"); do
  49. UNZIP_DIR=${i%%~*}
  50. GREPO_DIR=${i##*~}
  51. GREPO_PRE=${GREPO_DIR%%.git}
  52. echo "FILE (REMOVE_RECURSE \${PROJECT_SOURCE_DIR}/${UNZIP_DIR}/${GREPO_PRE})"
  53. echo "EXECUTE_PROCESS (COMMAND git clone -q \${PROJECT_SOURCE_DIR}/${PKG_RPATH}/${GREPO_DIR} \${PROJECT_SOURCE_DIR}/${UNZIP_DIR}/${GREPO_PRE})"
  54. echo ""
  55. done)
  56. EOB
  57. cat << EOB >> ${TARGET_FILE}
  58. $(for i in ${DEF_CFLAGS}; do
  59. echo "ADD_DEFINITIONS (${i})"
  60. done)
  61. EOB
  62. if [ "${COMP_LIB_NAME}" != "" ]; then
  63. cat << EOB >> ${TARGET_FILE}
  64. $(for i in ${COMP_LIB_COMPONENTS}; do
  65. echo "ADD_SUBDIRECTORY (${i})"
  66. done)
  67. EOB
  68. cat << EOB >> ${TARGET_FILE}
  69. $(for i in ${SUBDIRS}; do
  70. if [ ! -d ${TOP_DIR}/${i} ]; then
  71. continue
  72. fi
  73. if echo ${COMP_LIB_COMPONENTS} | grep -qw ${i}; then
  74. continue
  75. fi
  76. if [ "$i" = "tests" ]; then
  77. continue
  78. fi
  79. echo "ADD_SUBDIRECTORY (${i})"
  80. done)
  81. EOB
  82. cat << EOB >> ${TARGET_FILE}
  83. ADD_LIBRARY (${COMP_LIB_NAME} SHARED
  84. $(for i in ${SEP_LIBS}; do
  85. j=${i%.a}
  86. j=${j#lib}
  87. echo " \$<TARGET_OBJECTS:${j}>"
  88. done)
  89. )
  90. if(WIN32)
  91. TARGET_LINK_LIBRARIES (${COMP_LIB_NAME} ws2_32)
  92. endif(WIN32)
  93. TARGET_LINK_LIBRARIES (${COMP_LIB_NAME} iot_hal)
  94. SET (LIBRARY_OUTPUT_PATH ./out)
  95. EOB
  96. fi