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:
@ -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
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
@ -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
|
||||
@ -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}
|
||||
@ -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 "")
|
||||
@ -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 "")
|
||||
@ -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 "")
|
||||
|
||||
@ -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 "")
|
||||
|
||||
Reference in New Issue
Block a user