# Copyright (C) 2019 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
cmake_minimum_required(VERSION 3.0)
project(wasm-app)
set (WAMR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/..)
if (APPLE)
set (HAVE_FLAG_SEARCH_PATHS_FIRST 0)
set (CMAKE_C_LINK_FLAGS "")
set (CMAKE_CXX_LINK_FLAGS "")
endif ()
set (CMAKE_SYSTEM_PROCESSOR wasm32)
set (CMAKE_SYSROOT ${WAMR_ROOT_DIR}/wamr-sdk/app/libc-builtin-sysroot)
if (NOT DEFINED WASI_SDK_DIR)
set (WASI_SDK_DIR "../../wasi-sdk-20.0")
endif ()
set (CMAKE_C_FLAGS "-nostdlib")
set (CMAKE_C_COMPILER_TARGET "wasm32")
set (CMAKE_C_COMPILER "${WASI_SDK_DIR}/bin/clang")
set (CMAKE_EXE_LINKER_FLAGS
"-Wl,--max-memory=131072 -z stack-size=8192 \
-Wl,--no-entry,--strip-all \
-Wl,--export=__main_argc_argv \
-Wl,--export=__heap_base,--export=__data_end \
-Wl,--allow-undefined"
)
add_executable(demo1.wasm main.c)
target_link_libraries(demo1.wasm)
4、编译打包脚本:打包脚本:build_and_pack.sh
#!/bin/zsh
# 获取参数个数
num_args=$#
# 检查参数个数是否为零
if [ $num_args -eq 0 ]; then
echo "参数不存在!请提供app_name参数。"
exit 1
fi
# 获取第一个参数
APP_NAME=$1
# 判断文件夹是否存在
directory="build"
if [ ! -d "$directory" ]; then
echo "$directory 目录不存在, 需要先将程序编译"
mkdir -p $directory
cd $directory
cmake ..
make
else
echo "目录已存在:$directory"
cd $directory
make
fi
# 创建临时工作目录
if [ ! -d "$APP_NAME" ]; then
mkdir -p "$APP_NAME"
fi
WASM_NAME="$APP_NAME.wasm"
#复制二进制文件到应用目录
cp "$WASM_NAME" "$APP_NAME"
# 创建安装脚本 install.sh
cat <<EOL >"$APP_NAME/install.sh"
#!/bin/sh
# 获取当前用户的home目录
folder_path=/root/wd_edge/runtime/wasm-app
# 判断如果文件夹不存在则创建
if [ ! -d "\$folder_path" ]; then
mkdir \$folder_path
fi
mv $WASM_NAME \$folder_path
EOL
# 创建启动脚本 start.sh
cat <<EOL >"$APP_NAME/start.sh"
#!/bin/sh
APPNAME=$WASM_NAME
APP_PID=\`ps -ef |grep \$APPNAME |grep -v "grep" |awk '{printf "%s ",\$2}'\`
if [ "\$APP_PID" ]; then
echo "\$APNAME already started..."
else
folder_path=/root/wd_edge/runtime
cd \$folder_path
./iwasm --native-lib=./libwd_edge_x.so wasm-app/\$APPNAME
fi
EOL
# 创建停止脚本 stop.sh
cat <<EOL >"$APP_NAME/stop.sh"
APPNAME=$WASM_NAME
APP_PID=\`ps -ef |grep \$APPNAME |grep -v "grep" |awk '{printf "%s ",\$2}'\`
if [ "\$APP_PID" ]; then
kill -9 \$APP_PID
fi
EOL
# 创建卸载脚本 uninstall.sh
cat <<EOL >"$APP_NAME/uninstall.sh"
#!/bin/sh
rm -rf /root/wd_edge/runtime/wasm-app/$WASM_NAME
EOL
chmod a+x "$APP_NAME/install.sh"
chmod a+x "$APP_NAME/start.sh"
chmod a+x "$APP_NAME/stop.sh"
chmod a+x "$APP_NAME/uninstall.sh"
# 使用tar命令创建安装包
OUTPUT_FILE="$APP_NAME.tar.gz"
tar -zcvf "$APP_NAME.tar.gz" "$APP_NAME"
# 输出安装包文件路径
echo "安装包已创建:$APP_NAME.tar.gz"
# 输出安装包md5值
# 计算tar文件的md5值
tar_md5=$(md5 $OUTPUT_FILE | awk '{print $4}')
echo "MD5值为: $tar_md5"
# 清理临时工作目录
rm -rf "$APP_NAME"
scp $OUTPUT_FILE wudun@172.16.24.119:/home/wudun/snet-test-0621
cd /root/projects/wasm-micro-runtime/demo/demo1/
rm -rf ./build
mkdir build && cd build
cmake -DWAMR_BUILD_PLATFORM=linux -DWAMR_BUILD_TARGET=AARCH64 ..
make