Separate app-manager and app-framework from WAMR (#3129)

As planned, the app-manager and app-framework are to be migrated to
https://github.com/bytecodealliance/wamr-app-framework.

ps.
https://github.com/bytecodealliance/wasm-micro-runtime/issues/2329
https://github.com/bytecodealliance/wasm-micro-runtime/wiki/TSC-meeting-notes
This commit is contained in:
Wenyong Huang
2024-02-20 18:12:36 +08:00
committed by GitHub
parent b9db23b983
commit 63cd567b3f
359 changed files with 45 additions and 37923 deletions

View File

@ -1,84 +0,0 @@
mainmenu "WebAssembly Micro Runtime Configuration"
choice
prompt "select a build target"
config TARGET_X86_64
bool "X86_64"
config TARGET_X86_32
bool "X86_32"
endchoice
choice
prompt "select a target platform"
config PLATFORM_LINUX
bool "Linux"
endchoice
menu "select execution mode"
comment "At least one execution mode must be selected"
config EXEC_AOT
bool "AOT"
depends on PLATFORM_LINUX
config EXEC_JIT
bool "JIT"
depends on PLATFORM_LINUX
select BUILD_LLVM
config BUILD_LLVM
bool "build llvm (this may take a long time)"
depends on EXEC_JIT
help
llvm library is required by JIT mode.
config EXEC_INTERP
bool "INTERPRETER"
default y
endmenu
choice
prompt "libc support"
config LIBC_BUILTIN
bool "builtin libc"
help
use builtin libc, this is a minimal subset of libc.
config LIBC_WASI
bool "WebAssembly System Interface [WASI]"
depends on PLATFORM_LINUX
help
enable WebAssembly System Interface
endchoice
choice
prompt "application framework"
config APP_FRAMEWORK_DISABLE
bool "Disable app framework"
help
Disable wamr app framework
config APP_FRAMEWORK_DEFAULT
bool "Default components"
help
Default components
config APP_FRAMEWORK_ALL
bool "All components"
config APP_FRAMEWORK_CUSTOM
bool "customized module config"
menu "modules:"
depends on APP_FRAMEWORK_CUSTOM
source ".wamr_modules"
endmenu
endchoice

View File

@ -1,10 +0,0 @@
# Copyright (C) 2019 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
# # This will generate SDK for both runtime and wasm application
config:
./build_sdk.sh -i
menuconfig:
./menuconfig.sh

View File

@ -1,133 +1,3 @@
# WebAssembly Micro Runtime SDK
Usually there are two tasks for integrating the WAMR into a particular project:
- Select what WAMR components (vmcore, libc, app-mgr, app-framework components) to be integrated, and get the associated source files added into the project building configuration
- Generate the APP SDK for developing the WASM apps on the selected libc and framework components
The **[WAMR SDK](./wamr-sdk)** tools is helpful to finish the two tasks quickly. It supports menu configuration for selecting WAMR components and builds the WAMR to a SDK package that includes **runtime SDK** and **APP SDK**. The runtime SDK is used for building the native application and the APP SDK should be shipped to WASM application developers.
**Note**: [WASI-SDK](https://github.com/WebAssembly/wasi-sdk/releases) version 7 and above should be installed before building the WAMR SDK.
### SDK profile and configuration file
A SDK profile presents a configuration of build parameters for the selection of CPU architecture, software platforms, execution mode, libc and application framework components. The profile configurations are saved in a cmake file that will be included by the WAMR SDK building tool `build_sdk.sh`.
Here is the default configuration file [wamr-sdk/wamr_config_default.cmake](./wamr_config_default.cmake):
```
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)
```
Execute following command to build the WAMR SDK for a configuration profile:
```
cd wamr-sdk
./build_sdk.sh -n [profile name] -x [config file path]
```
The output directory structure of a SDK package with profile name "simple":
```
simple/
├── app-sdk
│   ├── libc-builtin-sysroot
│   │   ├── include
│   │   └── share
│   └── wamr-app-framework
│   ├── include
│   │   ├── bi-inc
│   │   └── wa-inc
│   ├── lib
│   └── share
└── runtime-sdk
├── include
│   └── bi-inc
└── lib
```
Like the WAMR samples, a project probably has its own pre-defined SDK configuration file. The project building script can call the `build_sdk.sh` by passing the configuration file name to the build_sdk.sh to generate its own WAMR SDK package.
### Menu configuration for building SDK
Menu configuration is supported for easy integration of runtime components and application libraries for the target architecture and platform. Run following command to start the menu config.
```
cd wamr-sdk
./build_sdk.sh -i -n [profile name]
```
The argument "-i" will make the command enter menu config mode as depicted below.
<img src="../doc/pics/wamr_menu_config.png" alt="wamr build menu configuration" style="zoom:80%;" />
After the menu configuration is finished, the profile config file is saved and the building process is automatically started. When the building gets successful, the SDK package is generated under folder $wamr-sdk/out/{profile}, and the header files of configured components were copied into the SDK package.
### Build WASM applications with APP-SDK
The folder “**app-sdk**” under the profile output directory contains all the header files and WASM library for developing the WASM application. For C/C++ based WASM applications, the developers can use conventional cross-compilation procedure to build the WASM application. According to the profile selection of libc, following cmake toolchain files under folder [wamr-sdk/app](./app) are available for cross compiling WASM application:
- ` wamr_toolchain.cmake`
- `wasi_toolchain.cmake`
Refer to [build WASM applications](../doc/build_wasm_app.md) for the details.
### Use Runtime SDK to build native application
The output folder "**runtime-sdk**" contains all the header files and library files for integration with project native code.
You can link the pre-built library:
``` cmake
link_directories(${SDK_DIR}/runtime-sdk/lib)
include_directories(${SDK_DIR}/runtime-sdk/include)
# ......
target_link_libraries (your_target vmlib -lm -ldl -lpthread)
```
This method can also be used when you don't use cmake
You can refer to this sample: [CMakeLists.txt](../samples/simple/CMakeLists.txt).
> NOTE: If you are familiar with how to configure WAMR by cmake and don't want to build the SDK, you can set the related settings on the top of your `CMakeLists.txt`, then the `runtime_lib.cmake` will not load settings from the SDK.
### Integrate WAMR without pre-built WAMR library
Use the provided `runtime_lib.cmake` file:
You can include `${WAMR_ROOT}/cmake/runtime_lib.cmake` in your project's `CMakeLists.txt` file:
``` cmake
include (${WAMR_ROOT}/cmake/runtime_lib.cmake)
add_library (vmlib ${WAMR_RUNTIME_LIB_SOURCE})
# ......
target_link_libraries (your_target vmlib -lm -ldl -lpthread)
```
You can refer to to product-mini building for Linux: [`product-mini/platforms/linux/CMakeLists.txt`](../product-mini/platforms/linux/CMakeLists.txt).
>
# Notice
`wamr-sdk` has been migrated to **[wamr-app-framework/wamr-sdk](https://github.com/bytecodealliance/wamr-app-framework/tree/main/wamr-sdk)**.
Only some necessary files that wasm app will use are retained here

View File

@ -1,98 +0,0 @@
# Copyright (C) 2019 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
cmake_minimum_required(VERSION 2.8)
project(app-framework)
SET (CMAKE_C_FLAGS "-O3")
if (NOT DEFINED WAMR_BUILD_SDK_PROFILE)
set (WAMR_BUILD_SDK_PROFILE "default")
endif ()
if (NOT DEFINED CONFIG_PATH)
set (CONFIG_PATH ${CMAKE_CURRENT_LIST_DIR}/../wamr_config_default.cmake)
message(STATUS "CONFIG_PATH set to ${CONFIG_PATH} ")
endif ()
if (NOT EXISTS "${CONFIG_PATH}")
message (FATAL_ERROR "${CONFIG_PATH} not exist")
endif ()
include(${CONFIG_PATH})
if (NOT DEFINED OUT_DIR)
set (OUT_DIR "${CMAKE_CURRENT_LIST_DIR}/../out/${WAMR_BUILD_SDK_PROFILE}")
endif ()
set (APP_SDK_DIR "${OUT_DIR}/app-sdk")
if (DEFINED EXTRA_SDK_INCLUDE_PATH)
message(STATUS, "EXTRA_SDK_INCLUDE_PATH = ${EXTRA_SDK_INCLUDE_PATH} ")
include_directories (
${EXTRA_SDK_INCLUDE_PATH}
)
endif ()
if (WAMR_BUILD_LIBC_BUILTIN EQUAL 1)
set (SYSROOT_DIR "${APP_SDK_DIR}/libc-builtin-sysroot")
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${SYSROOT_DIR}/include)
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${SYSROOT_DIR}/share)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/libc-builtin-sysroot/share/defined-symbols.txt ${SYSROOT_DIR}/share)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/wamr_toolchain.cmake ${APP_SDK_DIR})
execute_process(
COMMAND ${CMAKE_COMMAND}
-E copy_directory ${CMAKE_CURRENT_LIST_DIR}/libc-builtin-sysroot/include ${SYSROOT_DIR}/include
)
else()
if (WAMR_BUILD_LIBC_WASI EQUAL 1)
set (SYSROOT_DIR "${APP_SDK_DIR}/wasi-sysroot")
message("sysroot: ${SYSROOT_DIR}")
execute_process(COMMAND ln -s ${WASI_SDK_DIR}/share/wasi-sysroot ${SYSROOT_DIR})
execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/wasi_toolchain.cmake ${APP_SDK_DIR}/wamr_toolchain.cmake)
endif ()
endif()
if (WAMR_BUILD_APP_FRAMEWORK EQUAL 1)
message(WAMR_BUILD_APP_FRAMEWORK)
set (APP_FRAMEWORK_INCLUDE_TYPE "APP")
set (WAMR_APP_OUT_DIR "${APP_SDK_DIR}/wamr-app-framework")
include(${CMAKE_CURRENT_LIST_DIR}/../../core/app-framework/app_framework.cmake)
add_library(app_framework
${WASM_APP_SOURCE_ALL}
)
add_custom_command(
TARGET app_framework POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${WAMR_APP_OUT_DIR}/lib
COMMAND ${CMAKE_COMMAND} -E make_directory ${WAMR_APP_OUT_DIR}/include/wa-inc
COMMAND ${CMAKE_COMMAND} -E make_directory ${WAMR_APP_OUT_DIR}/share
COMMAND ${CMAKE_COMMAND} -E copy_directory ${WASM_APP_BI_INC_DIR} ${WAMR_APP_OUT_DIR}/include/bi-inc
COMMAND ${CMAKE_COMMAND} -E copy ${WASM_APP_BASE_DIR}/bh_platform.h ${WAMR_APP_OUT_DIR}/include
COMMAND ${CMAKE_COMMAND} -E copy ${WASM_APP_BASE_DIR}/wasm_app.h ${WAMR_APP_OUT_DIR}/include
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/*.a ${WAMR_APP_OUT_DIR}/lib
# bi-inc folder should also copy into runtime-sdk
COMMAND ${CMAKE_COMMAND} -E make_directory ${OUT_DIR}/runtime-sdk/include
COMMAND ${CMAKE_COMMAND} -E copy_directory ${WASM_APP_BI_INC_DIR} ${OUT_DIR}/runtime-sdk/include/bi-inc
)
# If app-framework is enabled, add the undefined-symbol list to the toolchain file
if (WAMR_BUILD_LIBC_WASI EQUAL 1)
file (APPEND
${APP_SDK_DIR}/wamr_toolchain.cmake
"SET (CMAKE_EXE_LINKER_FLAGS \"\${CMAKE_EXE_LINKER_FLAGS},--allow-undefined-file=\${CMAKE_CURRENT_LIST_DIR}/wamr-app-framework/share/defined-symbols.txt\" CACHE INTERNAL \"\")"
)
endif ()
FOREACH (dir IN LISTS WASM_APP_WA_INC_DIR_LIST)
file (COPY ${dir} DESTINATION ${WAMR_APP_OUT_DIR}/include/)
ENDFOREACH (dir)
if (DEFINED EXTRA_SDK_INCLUDE_PATH)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${EXTRA_SDK_INCLUDE_PATH} ${WAMR_APP_OUT_DIR}/include)
endif ()
endif()

View File

@ -1,254 +0,0 @@
#!/bin/bash
# Copyright (C) 2019 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
sdk_root=$(cd "$(dirname "$0")/" && pwd)
wamr_root_dir=${sdk_root}/..
out_dir=${sdk_root}/out
profile_path=${out_dir}/profile.cmake
wamr_config_cmake_file=""
wasi_sdk_home="/opt/wasi-sdk"
# libc support, default builtin-libc
LIBC_SUPPORT="BUILTIN"
CM_DEXTRA_SDK_INCLUDE_PATH=""
CM_BUILD_TYPE="-DCMAKE_BUILD_TYPE=Release"
CM_TOOLCHAIN=""
# menuconfig will pass options to this script
MENUCONFIG=""
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"
echo " -w [wasi-sdk installation path] it will be '/opt/wasi-sdk' if not set"
exit 1
}
while getopts "e:x:n:t:icdw:" opt
do
case $opt in
n)
PROFILE=$OPTARG
;;
t)
CM_TOOLCHAIN="-DCMAKE_TOOLCHAIN_FILE=$OPTARG"
;;
x)
wamr_config_cmake_file=$OPTARG
;;
e)
CM_DEXTRA_SDK_INCLUDE_PATH="-DEXTRA_SDK_INCLUDE_PATH=${OPTARG}"
;;
c)
CLEAN="TRUE"
;;
d)
CM_BUILD_TYPE="-DCMAKE_BUILD_TYPE=Debug"
;;
i)
MENUCONFIG="TRUE"
;;
w)
if [[ -n "${OPTARG}" ]]; then
wasi_sdk_home=$(realpath "${OPTARG}")
fi
;;
?)
echo "Unknown arg: $arg"
usage
exit 1
;;
esac
done
if [ ! -f "${wasi_sdk_home}/bin/clang" ]; then
echo "Can not find clang under \"${wasi_sdk_home}/bin\"."
exit 1
else
echo "Found WASI_SDK HOME ${wasi_sdk_home}"
fi
echo "download dependent external repositories.."
${wamr_root_dir}/core/deps/download.sh
[ $? -eq 0 ] || exit $?
if [ -z "$PROFILE" ]; then
PROFILE="default"
echo "PROFILE argument not set, using DEFAULT"
if [[ -z "$wamr_config_cmake_file" ]]; then
wamr_config_cmake_file=${sdk_root}/wamr_config_default.cmake
echo "use default config file: [$wamr_config_cmake_file]"
fi
fi
if [ ! -d "${out_dir}" ]; then
mkdir -p ${out_dir}
fi
curr_profile_dir=${out_dir}/${PROFILE}
wamr_app_out_dir=${curr_profile_dir}/app-sdk/wamr-app-framework
sysroot_dir=${curr_profile_dir}/app-sdk/libc-builtin-sysroot
echo "CM_DEXTRA_SDK_INCLUDE_PATH=${CM_DEXTRA_SDK_INCLUDE_PATH}"
if [[ "$CLEAN" = "TRUE" ]]; then
rm -rf ${curr_profile_dir}
fi
# cmake config file for wamr runtime:
# 1. use the users provided the config cmake file path.
# 2. if user set MENU CONFIG, enter menu config to generate
# menu_config.cmake in the profile output folder
# 3. If the menu_config.cmake is already in the profile folder, use it
# 4. Use the default config cmake file
#
if [[ -n "$wamr_config_cmake_file" ]]; then
if [[ ! -f $wamr_config_cmake_file ]]; then
echo "user given file not exist: ${wamr_config_cmake_file}"
exit 1
fi
echo "User config file: [${wamr_config_cmake_file}]"
else
wamr_config_cmake_file=${out_dir}/wamr_config_${PROFILE}.cmake
# always rebuilt the sdk if user is not giving the config file
if [ -d ${curr_profile_dir} ]; then
rm -rf ${curr_profile_dir}
fi
if [[ "$MENUCONFIG" = "TRUE" ]] || [[ ! -f $wamr_config_cmake_file ]]; then
echo "MENUCONFIG: [${wamr_config_cmake_file}]"
./menuconfig.sh -x ${wamr_config_cmake_file}
[ $? -eq 0 ] || exit $?
else
echo "use existing config file: [$wamr_config_cmake_file]"
fi
fi
mkdir -p ${curr_profile_dir}
mkdir -p ${curr_profile_dir}/app-sdk
mkdir -p ${curr_profile_dir}/runtime-sdk
if [ "${BUILD_LLVM}" = "TRUE" ]; then
if [ ! -d "${wamr_root_dir}/core/deps/llvm" ]; then
echo -e "\n"
echo "###### build llvm (this will take a long time) #######"
echo ""
cd ${wamr_root_dir}/wamr-compiler
./build_llvm.sh
fi
fi
echo -e "\n\n"
echo "############## Start to build wasm app sdk ###############"
# If wgl module is selected, check if the extra SDK include dir is passed by the args, prompt user to input if not.
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 "${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
if [[ -z "${extra_file_path}" ]] || [[ ! -d "${extra_file_path}" ]]; then
echo -e "\033[31mThe extra SDK path is empty\033[0m"
else
CM_DEXTRA_SDK_INCLUDE_PATH="-DEXTRA_SDK_INCLUDE_PATH=${extra_file_path}"
fi
fi
cd ${wamr_root_dir}/core/app-framework/wgl/app
./prepare_headers.sh
fi
cd ${sdk_root}/app
rm -fr build && mkdir build
cd build
out=`grep WAMR_BUILD_LIBC_WASI ${wamr_config_cmake_file} |grep 1`
if [ -n "$out" ]; then
LIBC_SUPPORT="WASI"
fi
if [ "${LIBC_SUPPORT}" = "WASI" ]; then
echo "using wasi toolchain"
cmake .. $CM_DEXTRA_SDK_INCLUDE_PATH \
-DWAMR_BUILD_SDK_PROFILE=${PROFILE} \
-DCONFIG_PATH=${wamr_config_cmake_file} \
-DWASI_SDK_DIR="${wasi_sdk_home}" \
-DCMAKE_TOOLCHAIN_FILE=../wasi_toolchain.cmake
else
echo "using builtin libc toolchain"
cmake .. $CM_DEXTRA_SDK_INCLUDE_PATH \
-DWAMR_BUILD_SDK_PROFILE=${PROFILE} \
-DCONFIG_PATH=${wamr_config_cmake_file} \
-DWASI_SDK_DIR="${wasi_sdk_home}" \
-DCMAKE_TOOLCHAIN_FILE=../wamr_toolchain.cmake
fi
[ $? -eq 0 ] || exit $?
make
if (( $? == 0 )); then
echo -e "\033[32mSuccessfully built app-sdk under ${curr_profile_dir}/app-sdk\033[0m"
else
echo -e "\033[31mFailed to build app-sdk for wasm application\033[0m"
exit 1
fi
cd ..
rm -fr build
echo -e "\n\n"
echo "############## Start to build runtime sdk ###############"
cd ${sdk_root}/runtime
rm -fr build-runtime-sdk && mkdir build-runtime-sdk
cd build-runtime-sdk
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
if (( $? == 0 )); then
echo -e "\033[32mSuccessfully built runtime library under ${curr_profile_dir}/runtime-sdk/lib\033[0m"
else
echo -e "\033[31mFailed to build runtime sdk\033[0m"
exit 1
fi
APP=`grep WAMR_BUILD_APP_FRAMEWORK ${wamr_config_cmake_file} |grep 1`
if [ -n "$APP" ]; then
# Generate defined-symbol list for app-sdk
cd ${wamr_app_out_dir}/share
cat ${curr_profile_dir}/runtime-sdk/include/*.inl | egrep "^ *EXPORT_WASM_API *[(] *[a-zA-Z_][a-zA-Z0-9_]* *?[)]" | cut -d '(' -f2 | cut -d ')' -f1 > defined-symbols.txt
fi
cd ..
rm -fr build-runtime-sdk
exit 0

View File

@ -1,223 +0,0 @@
#!/bin/bash
# Copyright (C) 2019 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
usage ()
{
echo "menuconfig.sh [options]"
echo " -x [config file path name]"
exit 1
}
while getopts "x:" opt
do
case $opt in
x)
wamr_config_cmake_file=$OPTARG
;;
?)
echo "Unknown arg: $arg"
usage
exit 1
;;
esac
done
if [ -z $wamr_config_cmake_file ]; then
usage
exit
fi
function set_build_target () {
target=$1
if [[ "${target}" = "X86_64" ]]; then
echo -e "set (WAMR_BUILD_TARGET \"X86_64\")" >> ${wamr_config_cmake_file}
elif [[ "${target}" = "X86_32" ]]; then
echo -e "set (WAMR_BUILD_TARGET \"X86_32\")" >> ${wamr_config_cmake_file}
else
echo "unknown build target."
exit 1
fi
}
function set_build_platform () {
platform=$1
if [[ "${platform}" = "linux" ]]; then
echo -e "set (WAMR_BUILD_PLATFORM \"linux\")" >> ${wamr_config_cmake_file}
# TODO: add other platforms
else
echo "${platform} platform currently not supported"
exit 1
fi
}
# input: array of selected exec modes [aot jit interp]
function set_exec_mode () {
modes=($1)
for mode in ${modes[@]}
do
if [[ "$mode" = "aot" ]]; then
echo "set (WAMR_BUILD_AOT 1)" >> ${wamr_config_cmake_file}
elif [[ "$mode" = "jit" ]]; then
echo "set (WAMR_BUILD_JIT 1)" >> ${wamr_config_cmake_file}
BUILD_LLVM="TRUE"
elif [[ "$mode" = "interp" ]]; then
echo "set (WAMR_BUILD_INTERP 1)" >> ${wamr_config_cmake_file}
else
echo "unknown execute mode."
exit 1
fi
done
}
function set_libc_support () {
libc=$1
if [ "$libc" = "WASI" ]; then
echo "set (WAMR_BUILD_LIBC_WASI 1)" >> ${wamr_config_cmake_file}
else
echo "set (WAMR_BUILD_LIBC_BUILTIN 1)" >> ${wamr_config_cmake_file}
fi
}
function set_app_framework () {
app_support=$1
if [ "$app_support" = "TRUE" ]; then
echo "set (WAMR_BUILD_APP_FRAMEWORK 1)" >> ${wamr_config_cmake_file}
fi
}
# input: array of selected app modules
function set_app_module () {
modules=($1)
for module in ${modules[*]}
do
if [ "${module}" = "all" ]; then
cmake_app_list="WAMR_APP_BUILD_ALL"
break
fi
cmake_app_list="${cmake_app_list} WAMR_APP_BUILD_${module^^}"
done
# APP module list
if [ -n "${cmake_app_list}" ]; then
echo "set (WAMR_BUILD_APP_LIST ${cmake_app_list# })" >> ${wamr_config_cmake_file}
fi
}
sdk_root=$(cd "$(dirname "$0")/" && pwd)
wamr_root=${sdk_root}/..
if [ ! `command -v menuconfig` ]; then
echo "Can't find kconfiglib python lib on this computer"
echo "Downloading it through pip"
echo "If this fails, you can try `pip install kconfiglib` to install it manually"
echo "Or download the repo from https://github.com/ulfalizer/Kconfiglib"
pip install kconfiglib
fi
if [ -f ".wamr_modules" ]; then
rm -f .wamr_modules
fi
# get all modules under core/app-framework
for module in `ls ${wamr_root}/core/app-framework -F | grep "/$" | grep -v "base" | grep -v "app-native-shared" | grep -v "template"`
do
module=${module%*/}
echo "config APP_BUILD_${module^^}" >> .wamr_modules
echo " bool \"enable ${module}\"" >> .wamr_modules
done
menuconfig Kconfig
[ $? -eq 0 ] || exit $?
if [ ! -e ".config" ]; then
exit 0
fi
# parse platform
platform=`cat .config | grep "^CONFIG_PLATFORM"`
platform=${platform%*=y}
platform=${platform,,}
platform=${platform#config_platform_}
# parse target
target=`cat .config | grep "^CONFIG_TARGET"`
target=${target%*=y}
target=${target#CONFIG_TARGET_}
# parse execution mode
modes=`cat .config | grep "^CONFIG_EXEC"`
mode_list=""
for mode in ${modes}
do
mode=${mode%*=y}
mode=${mode#CONFIG_EXEC_}
mode_list="${mode_list} ${mode,,}"
done
if [ -z "${mode_list}" ]; then
echo "execution mode are not selected"
exit 1
fi
# parse libc support
libc=`cat .config | grep "^CONFIG_LIBC"`
libc=${libc%*=y}
if [ "${libc}" = "CONFIG_LIBC_WASI" ]; then
libc_support="WASI"
else
libc_support="BUILTIN"
fi
# parse application framework options
app_option=`cat .config | grep "^CONFIG_APP_FRAMEWORK"`
app_option=${app_option%*=y}
app_option=${app_option#CONFIG_APP_FRAMEWORK_}
if [ "${app_option}" != "DISABLE" ]; then
app_enable="TRUE"
# Default components
if [ "${app_option}" = "DEFAULT" ]; then
app_list="base connection sensor"
# All components
elif [ "${app_option}" = "ALL" ]; then
app_list="all"
# Customize
elif [ "${app_option}" = "CUSTOM" ]; then
app_option=`cat .config | grep "^CONFIG_APP_BUILD"`
app_list="base"
for app in ${app_option}
do
app=${app%*=y}
app=${app#CONFIG_APP_BUILD_}
app_list="${app_list} ${app,,}"
done
fi
fi
if [[ -f $wamr_config_cmake_file ]]; then
rm $wamr_config_cmake_file
fi
set_build_target ${target}
set_build_platform ${platform}
set_exec_mode "${mode_list[*]}"
set_libc_support ${libc_support}
set_app_module "${app_list[*]}"
set_app_framework ${app_enable}

View File

@ -1,58 +0,0 @@
# Copyright (C) 2019 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
cmake_minimum_required(VERSION 2.8)
project(runtime-sdk)
SET (CMAKE_C_FLAGS "-O3")
set (CMAKE_BUILD_TYPE Release)
add_definitions(-DBH_MALLOC=wasm_runtime_malloc)
add_definitions(-DBH_FREE=wasm_runtime_free)
if (NOT DEFINED WAMR_BUILD_SDK_PROFILE)
set (WAMR_BUILD_SDK_PROFILE "default")
endif ()
if (NOT DEFINED CONFIG_PATH)
set (CONFIG_PATH ${CMAKE_CURRENT_LIST_DIR}/../wamr_config_default.cmake)
endif ()
if (NOT EXISTS "${CONFIG_PATH}")
message (FATAL_ERROR "${CONFIG_PATH} not exist")
endif ()
include(${CONFIG_PATH})
if (NOT DEFINED OUT_DIR)
set (OUT_DIR "${CMAKE_CURRENT_LIST_DIR}/../out/${WAMR_BUILD_SDK_PROFILE}")
endif ()
set (RUNTIME_SDK_DIR "${OUT_DIR}/runtime-sdk")
include(${CMAKE_CURRENT_LIST_DIR}/../../build-scripts/runtime_lib.cmake)
# build vmlib
add_library(vmlib ${WAMR_RUNTIME_LIB_SOURCE})
# copy vmlib.a to ${SDK_ROOT}/out/runtime-sdk/lib
add_custom_command(
TARGET vmlib POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${RUNTIME_SDK_DIR}/lib
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/*.a ${RUNTIME_SDK_DIR}/lib
)
# copy headers to ${SDK_ROOT}/out/runtime-sdk/include
FOREACH (header IN LISTS RUNTIME_LIB_HEADER_LIST)
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${RUNTIME_SDK_DIR}/include)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${header}" ${RUNTIME_SDK_DIR}/include)
ENDFOREACH (header)
if (DEFINED EXTRA_SDK_INCLUDE_PATH)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${EXTRA_SDK_INCLUDE_PATH} ${RUNTIME_SDK_DIR}/include)
endif ()
# config.h is not needed when building a runtime product with pre-built library
# erase the file to avoid compile error
file (WRITE ${RUNTIME_SDK_DIR}/include/config.h "")

View File

@ -1,12 +0,0 @@
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)
#
# set (EXTRA_SDK_INCLUDE_PATH "")

View File

@ -1,40 +0,0 @@
set (WAMR_BUILD_PLATFORM "darwin")
set (WAMR_BUILD_TARGET X86_64)
# Running mode
set (WAMR_BUILD_AOT 1)
set (WAMR_BUILD_INTERP 1)
set (WAMR_BUILD_JIT 0)
# Runtime SDK Features
set (WAMR_BUILD_CUSTOM_NAME_SECTION 0)
set (WAMR_BUILD_DEBUG_INTERP 0)
set (WAMR_BUILD_DEBUG_AOT 0)
set (WAMR_BUILD_DUMP_CALL_STACK 0)
set (WAMR_BUILD_LIBC_UVWASI 0)
set (WAMR_BUILD_LIBC_EMCC 0)
set (WAMR_BUILD_LIB_RATS 0)
set (WAMR_BUILD_LOAD_CUSTOM_SECTION 0)
set (WAMR_BUILD_MEMORY_PROFILING 0)
set (WAMR_BUILD_MINI_LOADER 0)
set (WAMR_BUILD_MULTI_MODULE 0)
set (WAMR_BUILD_PERF_PROFILING 0)
set (WAMR_BUILD_SPEC_TEST 0)
set (WAMR_BUILD_BULK_MEMORY 1)
set (WAMR_BUILD_LIB_PTHREAD 1)
set (WAMR_BUILD_LIB_PTHREAD_SEMAPHORE 1)
set (WAMR_BUILD_LIBC_BUILTIN 1)
set (WAMR_BUILD_LIBC_WASI 1)
set (WAMR_BUILD_REF_TYPES 1)
set (WAMR_BUILD_SIMD 1)
set (WAMR_BUILD_SHARED_MEMORY 1)
set (WAMR_BUILD_TAIL_CALL 1)
set (WAMR_BUILD_THREAD_MGR 1)
# APP SDK Features
set (WAMR_BUILD_APP_FRAMEWORK 1)
set (WAMR_BUILD_APP_LIST WAMR_APP_BUILD_BASE)
#
# set (EXTRA_SDK_INCLUDE_PATH "")

View File

@ -1,40 +0,0 @@
set (WAMR_BUILD_PLATFORM "linux")
set (WAMR_BUILD_TARGET X86_64)
# Running mode
set (WAMR_BUILD_AOT 1)
set (WAMR_BUILD_INTERP 1)
set (WAMR_BUILD_JIT 0)
# Runtime SDK Features
set (WAMR_BUILD_CUSTOM_NAME_SECTION 0)
set (WAMR_BUILD_DEBUG_INTERP 0)
set (WAMR_BUILD_DEBUG_AOT 0)
set (WAMR_BUILD_DUMP_CALL_STACK 0)
set (WAMR_BUILD_LIBC_UVWASI 0)
set (WAMR_BUILD_LIBC_EMCC 0)
set (WAMR_BUILD_LIB_RATS 0)
set (WAMR_BUILD_LOAD_CUSTOM_SECTION 0)
set (WAMR_BUILD_MEMORY_PROFILING 0)
set (WAMR_BUILD_MINI_LOADER 0)
set (WAMR_BUILD_MULTI_MODULE 0)
set (WAMR_BUILD_PERF_PROFILING 0)
set (WAMR_BUILD_SPEC_TEST 0)
set (WAMR_BUILD_BULK_MEMORY 1)
set (WAMR_BUILD_LIB_PTHREAD 1)
set (WAMR_BUILD_LIB_PTHREAD_SEMAPHORE 1)
set (WAMR_BUILD_LIBC_BUILTIN 1)
set (WAMR_BUILD_LIBC_WASI 1)
set (WAMR_BUILD_REF_TYPES 1)
set (WAMR_BUILD_SIMD 1)
set (WAMR_BUILD_SHARED_MEMORY 1)
set (WAMR_BUILD_TAIL_CALL 1)
set (WAMR_BUILD_THREAD_MGR 1)
# APP SDK Features
set (WAMR_BUILD_APP_FRAMEWORK 1)
set (WAMR_BUILD_APP_LIST WAMR_APP_BUILD_BASE)
#
# set (EXTRA_SDK_INCLUDE_PATH "")