build.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #!/bin/bash
  2. CURR_DIR=$PWD
  3. WAMR_DIR=${PWD}/../..
  4. OUT_DIR=${PWD}/out
  5. BUILD_DIR=${PWD}/build
  6. IWASM_ROOT=${PWD}/../../core/iwasm
  7. APP_FRAMEWORK_DIR=${PWD}/../../core/app-framework
  8. NATIVE_LIBS=${APP_FRAMEWORK_DIR}/app-native-shared
  9. APP_LIB_SRC="${APP_FRAMEWORK_DIR}/base/app/*.c ${APP_FRAMEWORK_DIR}/sensor/app/*.c \
  10. ${APP_FRAMEWORK_DIR}/connection/app/*.c ${NATIVE_LIBS}/*.c"
  11. WASM_APPS=${PWD}/wasm-apps
  12. CLEAN=
  13. CM_BUILD_TYPE="-DCMAKE_BUILD_TYPE=Release"
  14. CM_TOOLCHAIN=""
  15. usage ()
  16. {
  17. echo "build.sh [options]"
  18. echo " -p [profile]"
  19. echo " -d [target]"
  20. echo " -c, rebuild SDK"
  21. exit 1
  22. }
  23. while getopts "p:dch" opt
  24. do
  25. case $opt in
  26. p)
  27. PROFILE=$OPTARG
  28. ;;
  29. d)
  30. CM_BUILD_TYPE="-DCMAKE_BUILD_TYPE=Debug"
  31. ;;
  32. c)
  33. CLEAN="TRUE"
  34. ;;
  35. h)
  36. usage
  37. exit 1;
  38. ;;
  39. ?)
  40. echo "Unknown arg: $arg"
  41. usage
  42. exit 1
  43. ;;
  44. esac
  45. done
  46. if [ "$CLEAN" = "TRUE" ]; then
  47. rm -rf $CURR_DIR/cmake_build
  48. fi
  49. while [ ! -n "$PROFILE" ]
  50. do
  51. support_profiles=`ls -l "profiles/" |grep '^d' | awk '{print $9}'`
  52. read -p "Enter build target profile (default=host-interp) -->
  53. $support_profiles
  54. \>:" read_platform
  55. if [ ! -n "$read_platform" ]; then
  56. PROFILE="host-interp"
  57. else
  58. PROFILE=$read_platform
  59. fi
  60. done
  61. ARG_TOOLCHAIN=""
  62. TOOL_CHAIN_FILE=$CURR_DIR/profiles/$PROFILE/toolchain.cmake
  63. if [ -f $TOOL_CHAIN_FILE ]; then
  64. CM_TOOLCHAIN="-DCMAKE_TOOLCHAIN_FILE=$TOOL_CHAIN_FILE"
  65. ARG_TOOLCHAIN="-t $TOOL_CHAIN_FILE"
  66. echo "toolchain file: $TOOL_CHAIN_FILE"
  67. fi
  68. SDK_CONFIG_FILE=$CURR_DIR/profiles/$PROFILE/wamr_config_simple.cmake
  69. if [ ! -f $SDK_CONFIG_FILE ]; then
  70. echo "SDK config file [$SDK_CONFIG_FILE] doesn't exit. quit.."
  71. exit 1
  72. fi
  73. rm -rf ${OUT_DIR}
  74. mkdir ${OUT_DIR}
  75. mkdir ${OUT_DIR}/wasm-apps
  76. cd ${WAMR_DIR}/core/shared/mem-alloc
  77. if [ ! -d "tlsf" ]; then
  78. git clone https://github.com/mattconte/tlsf
  79. fi
  80. PROFILE="simple-$PROFILE"
  81. echo "#####################build wamr sdk"
  82. cd ${WAMR_DIR}/wamr-sdk
  83. ./build_sdk.sh -n $PROFILE -x $SDK_CONFIG_FILE $ARG_TOOLCHAIN
  84. [ $? -eq 0 ] || exit $?
  85. echo "#####################build simple project"
  86. cd ${CURR_DIR}
  87. mkdir -p cmake_build/$PROFILE
  88. cd cmake_build/$PROFILE
  89. cmake ../.. -DWAMR_BUILD_SDK_PROFILE=$PROFILE $CM_TOOLCHAIN $CM_BUILD_TYPE
  90. make
  91. if [ $? != 0 ];then
  92. echo "BUILD_FAIL simple exit as $?\n"
  93. exit 2
  94. fi
  95. cp -a simple ${OUT_DIR}
  96. echo "#####################build simple project success"
  97. echo -e "\n\n"
  98. echo "#####################build host-tool"
  99. cd ${WAMR_DIR}/test-tools/host-tool
  100. mkdir -p bin
  101. cd bin
  102. cmake .. $CM_TOOLCHAIN $CM_BUILD_TYPE
  103. make
  104. if [ $? != 0 ];then
  105. echo "BUILD_FAIL host tool exit as $?\n"
  106. exit 2
  107. fi
  108. cp host_tool ${OUT_DIR}
  109. echo "#####################build host-tool success"
  110. echo -e "\n\n"
  111. echo "#####################build wasm apps"
  112. cd ${WASM_APPS}
  113. for i in `ls *.c`
  114. do
  115. APP_SRC="$i"
  116. OUT_FILE=${i%.*}.wasm
  117. /opt/wasi-sdk/bin/clang \
  118. -I${WAMR_DIR}/wamr-sdk/out/$PROFILE/app-sdk/wamr-app-framework/include \
  119. -L${WAMR_DIR}/wamr-sdk/out/$PROFILE/app-sdk/wamr-app-framework/lib \
  120. -lapp_framework \
  121. --target=wasm32 -O3 -z stack-size=4096 -Wl,--initial-memory=65536 \
  122. --sysroot=${WAMR_DIR}/wamr-sdk/out/$PROFILE/app-sdk/libc-builtin-sysroot \
  123. -Wl,--allow-undefined-file=${WAMR_DIR}/wamr-sdk/out/$PROFILE/app-sdk/libc-builtin-sysroot/share/defined-symbols.txt \
  124. -Wl,--no-threads,--strip-all,--no-entry -nostdlib \
  125. -Wl,--export=on_init -Wl,--export=on_destroy \
  126. -Wl,--export=on_request -Wl,--export=on_response \
  127. -Wl,--export=on_sensor_event -Wl,--export=on_timer_callback \
  128. -Wl,--export=on_connection_data \
  129. -o ${OUT_DIR}/wasm-apps/${OUT_FILE} ${APP_SRC}
  130. if [ -f ${OUT_DIR}/wasm-apps/${OUT_FILE} ]; then
  131. echo "build ${OUT_FILE} success"
  132. else
  133. echo "build ${OUT_FILE} fail"
  134. fi
  135. done
  136. echo "#####################build wasm apps done"