mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-02-06 06:55:07 +00:00
support cross compliation for SDK and the simple sample (#172)
This commit is contained in:
parent
82b0bb44c3
commit
3695f29d34
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -81,7 +81,38 @@ 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`
|
||||
|
||||
```
|
||||
$ ./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).
|
||||
|
||||
```
|
||||
~/.bashrc:
|
||||
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"
|
||||
|
||||
notes: please set the value to the actual path of your cross toolchain.
|
||||
```
|
||||
|
||||
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-root/samples/simple/profiles$ ls
|
||||
arm-interp host-aot host-interp
|
||||
$wamr-root/samples/simple/profiles$ ls arm-interp/
|
||||
toolchain.cmake wamr_config_simple.cmake
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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
samples/simple/profiles/arm-interp/toolchain.cmake
Normal file
38
samples/simple/profiles/arm-interp/toolchain.cmake
Normal file
|
@ -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)
|
||||
|
|
@ -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 +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)
|
|
@ -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
|
||||
|
||||
|
|
|
@ -27,6 +27,10 @@ do
|
|||
done
|
||||
|
||||
|
||||
if [ -z $wamr_config_cmake_file ]; then
|
||||
usage
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
function set_build_target () {
|
||||
|
|
Loading…
Reference in New Issue
Block a user