Files
anisette-js/script/rebuild-unicorn.sh
2026-02-26 17:04:29 +08:00

55 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
EMSDK_DIR="${EMSDK:-/Users/libr/Desktop/Life/emsdk}"
UNICORN_DIR="${UNICORN_DIR:-${ROOT_DIR}/../unicorn}"
UNICORN_BUILD_DIR="${UNICORN_BUILD_DIR:-${UNICORN_DIR}/build}"
JOBS="${JOBS:-8}"
PATCH_DIR="${PATCH_DIR:-${ROOT_DIR}/script/patches}"
if [[ ! -d "${UNICORN_DIR}" ]]; then
echo "unicorn directory not found: ${UNICORN_DIR}"
exit 1
fi
if [[ -f "${EMSDK_DIR}/emsdk_env.sh" ]]; then
# shellcheck disable=SC1090
source "${EMSDK_DIR}/emsdk_env.sh" >/dev/null
else
echo "emsdk_env.sh not found at ${EMSDK_DIR}/emsdk_env.sh"
exit 1
fi
# if [[ -d "${PATCH_DIR}" ]]; then
# for patch_file in "${PATCH_DIR}"/*.diff; do
# if [[ ! -f "${patch_file}" ]]; then
# continue
# fi
# echo "applying patch: ${patch_file}"
# if ! git -C "${UNICORN_DIR}" apply "${patch_file}"; then
# echo "skip failed patch: ${patch_file}"
# fi
# done
# fi
# rm -rf "${UNICORN_BUILD_DIR}"
mkdir -p "${UNICORN_BUILD_DIR}"
pushd "${UNICORN_BUILD_DIR}" >/dev/null
emcmake cmake "${UNICORN_DIR}" \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DUNICORN_BUILD_TESTS=OFF \
-DUNICORN_INSTALL=OFF \
-DUNICORN_LEGACY_STATIC_ARCHIVE=ON \
-DUNICORN_INTERPRETER=ON \
-DUNICORN_ARCH="arm;aarch64" \
-DCMAKE_C_COMPILER=emcc \
-DCMAKE_C_FLAGS="-DUSE_STATIC_CODE_GEN_BUFFER"
cmake --build . -- -j"${JOBS}"
popd >/dev/null
echo "unicorn rebuild done: ${UNICORN_BUILD_DIR}"