Explorar el Código

multiple profile for simple sample

Wang Xin hace 6 años
padre
commit
90c7580283

+ 4 - 3
samples/simple/CMakeLists.txt

@@ -6,6 +6,7 @@ cmake_minimum_required (VERSION 2.8)
 project (simple)
 
 ################  wamr runtime settings  ################
+message(STATUS "WAMR_BUILD_SDK_PROFILE=${WAMR_BUILD_SDK_PROFILE}")
 
 # Reset default linker flags
 set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
@@ -14,9 +15,9 @@ set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
 set (WAMR_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
 
 ## use library and headers in the SDK
-link_directories(${WAMR_ROOT_DIR}/wamr-sdk/out/simple/runtime-sdk/lib)
+link_directories(${WAMR_ROOT_DIR}/wamr-sdk/out/${WAMR_BUILD_SDK_PROFILE}/runtime-sdk/lib)
 include_directories(
-    ${WAMR_ROOT_DIR}/wamr-sdk/out/simple/runtime-sdk/include
+    ${WAMR_ROOT_DIR}/wamr-sdk/out/${WAMR_BUILD_SDK_PROFILE}/runtime-sdk/include
 )
 
 ################  application related  ################
@@ -27,6 +28,6 @@ include_directories(${CMAKE_CURRENT_LIST_DIR}/src)
 #add_definitions (-DCONNECTION_UART)
 
 add_executable (simple src/main.c src/iwasm_main.c src/ext_lib_export.c)
-target_link_libraries (simple vmlib -lm -ldl -lpthread)
+target_link_libraries (simple vmlib -lm -ldl -lpthread -lrt)
 
 

+ 31 - 2
samples/simple/README.md

@@ -80,8 +80,37 @@ To run the UART based test, you have to set up a UART hardware connection betwee
 
 Build the sample
 ==============
-Execute the build.sh script then all binaries including wasm application files would be generated in 'out' directory.
-`./build.sh`
+Execute the build.sh script then all binaries including wasm application files would be generated in 'out' directory. 
+
+```
+$ ./build.sh 
+Enter build target profile (default=host-interp) -->
+arm-interp
+host-aot
+host-interp
+\>:
+
+```
+
+Enter the profile name for starting your build. "host-***" profiles build the sample for executing on your development machine, and "arm-interp" profile will do cross building for ARM target platform. If "arm-interp" is entered, please ensure the ARM cross compiler toolchain is already installed in your development machine. Your should set *ARM_A7_COMPILER_DIR* and *ARM_A7_SDKTARGETSYSROOT* environment variable in your ~/.bashrc correctly. refer to the file [profiles/arm-interp/toolchain.cmake](./profiles/arm-interp/toolchain.cmake).
+
+```
+export ARM_A7_COMPILER_DIR="/home/beihai/cross-toolchains/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin"
+export ARM_A7_SDKTARGETSYSROOT="/home/beihai/cross-toolchains/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/arm-linux-gnueabihf/libc"
+
+```
+
+If you need to create additional profile for customizing your runtime, application framework or the target platforms, a new subfolder can be created under the *profiles* folder, and place your own version of "toolchain.cmake" and "wamr_config_simple.cmake" in it.
+
+```
+~/wamr/samples/simple/profiles$ ls
+arm-interp  host-aot  host-interp
+~/wamr/samples/simple/profiles$ ls arm-interp/
+toolchain.cmake  wamr_config_simple.cmake
+
+```
+
+
 
 
 

+ 58 - 15
samples/simple/build.sh

@@ -12,25 +12,27 @@ APP_LIB_SRC="${APP_FRAMEWORK_DIR}/base/app/*.c ${APP_FRAMEWORK_DIR}/sensor/app/*
              ${APP_FRAMEWORK_DIR}/connection/app/*.c ${NATIVE_LIBS}/*.c"
 WASM_APPS=${PWD}/wasm-apps
 CLEAN=
+CM_BUILD_TYPE="-DCMAKE_BUILD_TYPE=Release"
+CM_TOOLCHAIN=""
 
 usage ()
 {
     echo "build.sh [options]"
-    echo " -p [platform]"
-    echo " -t [target]"
+    echo " -p [profile]"
+    echo " -d [target]"
     echo " -c, rebuild SDK"
     exit 1
 }
 
 
-while getopts "p:t:ch" opt
+while getopts "p:dch" opt
 do
     case $opt in
         p)
-        PLATFORM=$OPTARG
+        PROFILE=$OPTARG
         ;;
-        t)
-        TARGET=$OPTARG
+        d)
+        CM_BUILD_TYPE="-DCMAKE_BUILD_TYPE=Debug"
         ;;
         c)
         CLEAN="TRUE"
@@ -48,6 +50,41 @@ do
 done
 
 
+if [ "$CLEAN" = "TRUE" ]; then
+    rm -rf $CURR_DIR/cmake_build
+fi
+
+
+while  [ ! -n "$PROFILE" ]
+do
+    support_profiles=`ls -l "profiles/" |grep '^d' | awk '{print $9}'`
+    read -p "Enter build target profile (default=host-interp) -->
+$support_profiles
+\>:" read_platform
+    if [ ! -n "$read_platform" ]; then
+        PROFILE="host-interp"
+    else
+        PROFILE=$read_platform
+    fi
+done
+
+ARG_TOOLCHAIN=""
+TOOL_CHAIN_FILE=$CURR_DIR/profiles/$PROFILE/toolchain.cmake
+if [  -f $TOOL_CHAIN_FILE ]; then
+    CM_TOOLCHAIN="-DCMAKE_TOOLCHAIN_FILE=$TOOL_CHAIN_FILE"
+    ARG_TOOLCHAIN="-t $TOOL_CHAIN_FILE"
+    echo "toolchain file: $TOOL_CHAIN_FILE"
+fi
+
+
+SDK_CONFIG_FILE=$CURR_DIR/profiles/$PROFILE/wamr_config_simple.cmake
+if [ ! -f $SDK_CONFIG_FILE ]; then
+    echo "SDK config file [$SDK_CONFIG_FILE] doesn't exit. quit.."
+    exit 1
+fi
+
+
+
 rm -rf ${OUT_DIR}
 mkdir ${OUT_DIR}
 mkdir ${OUT_DIR}/wasm-apps
@@ -57,15 +94,21 @@ if [ ! -d "tlsf" ]; then
     git clone https://github.com/mattconte/tlsf
 fi
 
+
+PROFILE="simple-$PROFILE"
+
+
 echo "#####################build wamr sdk"
 cd ${WAMR_DIR}/wamr-sdk
-./build_sdk.sh -n simple -x ${CURR_DIR}/wamr_config_simple.cmake $*
+./build_sdk.sh -n $PROFILE -x $SDK_CONFIG_FILE $ARG_TOOLCHAIN $*
+[ $? -eq 0 ] || exit $?
+
 
 echo "#####################build simple project"
 cd ${CURR_DIR}
-mkdir -p cmake_build
-cd cmake_build
-cmake .. -DWAMR_BUILD_SDK_PROFILE=simple
+mkdir -p cmake_build/$PROFILE
+cd cmake_build/$PROFILE
+cmake ../.. -DWAMR_BUILD_SDK_PROFILE=$PROFILE $CM_TOOLCHAIN $CM_BUILD_TYPE
 make
 if [ $? != 0 ];then
     echo "BUILD_FAIL simple exit as $?\n"
@@ -79,7 +122,7 @@ echo "#####################build host-tool"
 cd ${WAMR_DIR}/test-tools/host-tool
 mkdir -p bin
 cd bin
-cmake ..
+cmake .. $CM_TOOLCHAIN $CM_BUILD_TYPE
 make
 if [ $? != 0 ];then
         echo "BUILD_FAIL host tool exit as $?\n"
@@ -99,12 +142,12 @@ APP_SRC="$i"
 OUT_FILE=${i%.*}.wasm
 
 /opt/wasi-sdk/bin/clang                                              \
-        -I${WAMR_DIR}/wamr-sdk/out/simple/app-sdk/wamr-app-framework/include  \
-        -L${WAMR_DIR}/wamr-sdk/out/simple/app-sdk/wamr-app-framework/lib      \
+        -I${WAMR_DIR}/wamr-sdk/out/$PROFILE/app-sdk/wamr-app-framework/include  \
+        -L${WAMR_DIR}/wamr-sdk/out/$PROFILE/app-sdk/wamr-app-framework/lib      \
         -lapp_framework                                              \
         --target=wasm32 -O3 -z stack-size=4096 -Wl,--initial-memory=65536 \
-        --sysroot=${WAMR_DIR}/wamr-sdk/out/simple/app-sdk/libc-builtin-sysroot  \
-        -Wl,--allow-undefined-file=${WAMR_DIR}/wamr-sdk/out/simple/app-sdk/libc-builtin-sysroot/share/defined-symbols.txt \
+        --sysroot=${WAMR_DIR}/wamr-sdk/out/$PROFILE/app-sdk/libc-builtin-sysroot  \
+        -Wl,--allow-undefined-file=${WAMR_DIR}/wamr-sdk/out/$PROFILE/app-sdk/libc-builtin-sysroot/share/defined-symbols.txt \
         -Wl,--no-threads,--strip-all,--no-entry -nostdlib \
         -Wl,--export=on_init -Wl,--export=on_destroy \
         -Wl,--export=on_request -Wl,--export=on_response \

+ 38 - 0
samples/simple/profiles/arm-interp/toolchain.cmake

@@ -0,0 +1,38 @@
+INCLUDE(CMakeForceCompiler)
+
+SET(CMAKE_SYSTEM_NAME Linux) # this one is important
+SET(CMAKE_SYSTEM_VERSION 1) # this one not so much
+
+message(STATUS "*** ARM A7 toolchain file ***")
+set(CMAKE_VERBOSE_MAKEFILE ON) 
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE")
+
+
+if (NOT $ENV{ARM_A7_COMPILER_DIR} STREQUAL "") 
+    SET (toolchain_sdk_dir $ENV{ARM_A7_COMPILER_DIR}/)
+endif ()
+
+if (NOT $ENV{ARM_A7_SDKTARGETSYSROOT} STREQUAL "") 
+    SET(SDKTARGETSYSROOT $ENV{ARM_A7_SDKTARGETSYSROOT})
+    #SET(CMAKE_SYSROOT SDKTARGETSYSROOT)
+endif ()    
+
+message(STATUS "SDKTARGETSYSROOT=${SDKTARGETSYSROOT}")
+message(STATUS "toolchain_sdk_dir=${toolchain_sdk_dir}")
+
+SET(CMAKE_C_COMPILER ${toolchain_sdk_dir}arm-linux-gnueabihf-gcc)
+SET(CMAKE_CXX_COMPILER ${toolchain_sdk_dir}arm-linux-gnueabihf-g++)
+
+
+# this is the file system root of the target
+SET(CMAKE_FIND_ROOT_PATH ${SDKTARGETSYSROOT})
+
+# search for programs in the build host directories
+SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+
+# for libraries and headers in the target directories
+SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+

+ 9 - 0
samples/simple/profiles/arm-interp/wamr_config_simple.cmake

@@ -0,0 +1,9 @@
+set (WAMR_BUILD_PLATFORM "linux")
+set (WAMR_BUILD_TARGET ARM)
+set (WAMR_BUILD_INTERP 1)
+set (WAMR_BUILD_AOT 0)
+set (WAMR_BUILD_JIT 0)
+set (WAMR_BUILD_LIBC_BUILTIN 1)
+set (WAMR_BUILD_LIBC_WASI 0)
+set (WAMR_BUILD_APP_FRAMEWORK 1)
+set (WAMR_BUILD_APP_LIST WAMR_APP_BUILD_BASE WAMR_APP_BUILD_CONNECTION WAMR_APP_BUILD_SENSOR)

+ 0 - 0
samples/simple/wamr_config_simple.cmake → samples/simple/profiles/host-aot/wamr_config_simple.cmake


+ 9 - 0
samples/simple/profiles/host-interp/wamr_config_simple.cmake

@@ -0,0 +1,9 @@
+set (WAMR_BUILD_PLATFORM "linux")
+set (WAMR_BUILD_TARGET X86_64)
+set (WAMR_BUILD_INTERP 1)
+set (WAMR_BUILD_AOT 1)
+set (WAMR_BUILD_JIT 0)
+set (WAMR_BUILD_LIBC_BUILTIN 1)
+set (WAMR_BUILD_LIBC_WASI 0)
+set (WAMR_BUILD_APP_FRAMEWORK 1)
+set (WAMR_BUILD_APP_LIST WAMR_APP_BUILD_BASE WAMR_APP_BUILD_CONNECTION WAMR_APP_BUILD_SENSOR)

+ 28 - 9
wamr-sdk/build_sdk.sh

@@ -10,7 +10,9 @@ profile_path=${out_dir}/profile.cmake
 wamr_config_cmake_file=""
 # libc support, default builtin-libc
 LIBC_SUPPORT="BUILTIN"
-CMAKE_DEXTRA_SDK_INCLUDE_PATH=""
+CM_DEXTRA_SDK_INCLUDE_PATH=""
+CM_BUILD_TYPE="-DCMAKE_BUILD_TYPE=Release"
+CM_TOOLCHAIN=""
 
 # menuconfig will pass options to this script
 MENUCONFIG=""
@@ -20,28 +22,36 @@ usage ()
     echo "build.sh [options]"
     echo " -n [profile name]"
     echo " -x [config file path name]"
+    echo " -t [cmake toolchain file]"
     echo " -e [extra include path], files under this path will be copied into SDK package"
     echo " -c, clean"
+    echo " -d, debug mode"
     echo " -i, enter menu config settings"
     exit 1
 }
 
 
-while getopts "e:x:n:ic" opt
+while getopts "e:x:n:t:icd" opt
 do
     case $opt in
         n)
         PROFILE=$OPTARG
         ;;
+        t)
+        CM_TOOLCHAIN="-DCMAKE_TOOLCHAIN_FILE=$OPTARG"
+        ;;
         x)
         wamr_config_cmake_file=$OPTARG
         ;;
         e)
-        CMAKE_DEXTRA_SDK_INCLUDE_PATH="-DEXTRA_SDK_INCLUDE_PATH=${OPTARG}"
+        CM_DEXTRA_SDK_INCLUDE_PATH="-DEXTRA_SDK_INCLUDE_PATH=${OPTARG}"
         ;;
         c)
         CLEAN="TRUE"
         ;;
+        d)
+        CM_BUILD_TYPE="-DCMAKE_BUILD_TYPE=Debug"
+        ;;
         i)
         MENUCONFIG="TRUE"
         ;;
@@ -84,7 +94,7 @@ wamr_app_out_dir=${curr_profile_dir}/app-sdk/wamr-app-framework
 sysroot_dir=${curr_profile_dir}/app-sdk/libc-builtin-sysroot
 
 
-echo "CMAKE_DEXTRA_SDK_INCLUDE_PATH=${CMAKE_DEXTRA_SDK_INCLUDE_PATH}"
+echo "CM_DEXTRA_SDK_INCLUDE_PATH=${CM_DEXTRA_SDK_INCLUDE_PATH}"
 
 
 if [[ "$CLEAN" = "TRUE" ]]; then
@@ -151,7 +161,7 @@ app_all_selected=`cat ${wamr_config_cmake_file} | grep WAMR_APP_BUILD_ALL`
 app_wgl_selected=`cat ${wamr_config_cmake_file} | grep WAMR_APP_BUILD_WGL`
 
 if [[ -n "${app_wgl_selected}" ]] || [[ -n "${app_all_selected}" ]]; then
-    if [ -z "${CMAKE_DEXTRA_SDK_INCLUDE_PATH}" ]; then
+    if [ -z "${CM_DEXTRA_SDK_INCLUDE_PATH}" ]; then
         echo -e "\033[31mWGL module require lvgl config files, please input the path to the lvgl SDK include path:\033[0m"
         read -a extra_file_path
 
@@ -159,7 +169,7 @@ if [[ -n "${app_wgl_selected}" ]] || [[ -n "${app_all_selected}" ]]; then
             echo -e "\033[31mThe extra SDK path is invalid, exiting\033[0m"
             exit 1
         else
-            CMAKE_DEXTRA_SDK_INCLUDE_PATH="-DEXTRA_SDK_INCLUDE_PATH=${extra_file_path}"
+            CM_DEXTRA_SDK_INCLUDE_PATH="-DEXTRA_SDK_INCLUDE_PATH=${extra_file_path}"
         fi
     fi
 fi
@@ -170,10 +180,16 @@ if [ -n "$out" ]; then
 fi
 if [ "${LIBC_SUPPORT}" = "WASI" ]; then
     echo "using wasi toolchain"
-    cmake .. $CMAKE_DEXTRA_SDK_INCLUDE_PATH -DWAMR_BUILD_SDK_PROFILE=${PROFILE} -DCONFIG_PATH=${wamr_config_cmake_file} -DCMAKE_TOOLCHAIN_FILE=../wasi_toolchain.cmake
+    cmake .. $CM_DEXTRA_SDK_INCLUDE_PATH \
+         -DWAMR_BUILD_SDK_PROFILE=${PROFILE} \ 
+         -DCONFIG_PATH=${wamr_config_cmake_file} \
+         -DCMAKE_TOOLCHAIN_FILE=../wasi_toolchain.cmake
 else
     echo "using builtin libc toolchain"
-    cmake .. $CMAKE_DEXTRA_SDK_INCLUDE_PATH -DWAMR_BUILD_SDK_PROFILE=${PROFILE} -DCONFIG_PATH=${wamr_config_cmake_file} -DCMAKE_TOOLCHAIN_FILE=../wamr_toolchain.cmake
+    cmake .. $CM_DEXTRA_SDK_INCLUDE_PATH \
+         -DWAMR_BUILD_SDK_PROFILE=${PROFILE} \
+         -DCONFIG_PATH=${wamr_config_cmake_file} \
+         -DCMAKE_TOOLCHAIN_FILE=../wamr_toolchain.cmake
 fi
 [ $? -eq 0 ] || exit $?
 
@@ -195,7 +211,10 @@ echo "##############  Start to build runtime sdk  ###############"
 cd ${sdk_root}/runtime
 rm -fr build_runtime_sdk && mkdir build_runtime_sdk
 cd build_runtime_sdk
-cmake .. $CMAKE_DEXTRA_SDK_INCLUDE_PATH -DWAMR_BUILD_SDK_PROFILE=${PROFILE} -DCONFIG_PATH=${wamr_config_cmake_file}
+cmake .. $CM_DEXTRA_SDK_INCLUDE_PATH \
+       -DWAMR_BUILD_SDK_PROFILE=${PROFILE} \
+       -DCONFIG_PATH=${wamr_config_cmake_file} \
+       $CM_TOOLCHAIN $CM_BUILD_TYPE
 [ $? -eq 0 ] || exit $?
 make
 

+ 4 - 0
wamr-sdk/menuconfig.sh

@@ -27,6 +27,10 @@ do
 done
 
 
+if [  -z $wamr_config_cmake_file ]; then
+    usage
+    exit
+fi
 
 
 function set_build_target () {