spiegel-keyman/core/commands.inc.sh
rc-swag d52b48cbbb feat(windows): handle arm64 complier environment
Update the build.bat to handle configuring the build
environment with vsdevcmd correctly for arm64 2019 doesn't
work very well so have to have pretty weird if statement.
also checked in some missed updates to function name change
2025-10-28 16:40:42 +10:00

168 lines
5.4 KiB
Bash

# shellcheck shell=bash
# no hashbang for .inc.sh
. "$KEYMAN_ROOT/resources/locate_emscripten.inc.sh"
# ----------------------------------------------------------------------------
# clean
# ----------------------------------------------------------------------------
do_clean() {
# clean: note build/<target> will be left, but build/<target>/<configuration> should be gone
local target=$1
builder_start_action clean:$target || return 0
rm -rf "$MESON_PATH"
# Removes ICU cached components so it will be re-downloaded and built. Note:
# we could use `git clean`, but this clarifies exactly what is deleted, and
# but we try not to use git commands in build scripts, to maintain clear
# responsibility
rm -rf \
"$THIS_SCRIPT_PATH/subprojects/icu" \
"$THIS_SCRIPT_PATH/subprojects/*.tgz" \
"$THIS_SCRIPT_PATH/subprojects/*.zip"
builder_finish_action success clean:$target
}
# ----------------------------------------------------------------------------
# configure
# ----------------------------------------------------------------------------
do_configure() {
local target=$1
builder_start_action configure:$target || return 0
local STANDARD_MESON_ARGS="$MESON_OPTION_keyman_core_tests --default-library both"
local MESON_CROSS_FILE=
if [[ -f "$THIS_SCRIPT_PATH/cross-$target.build" ]]; then
MESON_CROSS_FILE="--cross-file cross-$target.build"
fi
builder_heading "======= Configuring $target ======="
if [[ $target == wasm ]]; then
# do_configure_wasm
locate_emscripten
build_meson_cross_file_for_wasm
STANDARD_MESON_ARGS="$STANDARD_MESON_ARGS --cross-file wasm.defs.build --cross-file wasm.build --default-library static"
fi
if [[ $target =~ ^(x86|x64|arm64)$ ]]; then
cmd //C build.bat $target $BUILDER_CONFIGURATION configure $BUILD_BAT_keyman_core_tests "${builder_extra_params[@]}"
else
pushd "$THIS_SCRIPT_PATH" > /dev/null
# Additional arguments are used by Linux build, e.g. -Dprefix=${INSTALLDIR}
meson setup "$MESON_PATH" $MESON_CROSS_FILE ${MESON_ARGS} --buildtype $BUILDER_CONFIGURATION $STANDARD_MESON_ARGS "${builder_extra_params[@]}"
popd > /dev/null
fi
builder_finish_action success configure:$target
}
# ----------------------------------------------------------------------------
# build
# ----------------------------------------------------------------------------
do_build() {
local target=$1
builder_start_action build:$target || return 0
if [[ $target =~ ^(x86|x64|arm64)$ ]]; then
cmd //C build.bat $target $BUILDER_CONFIGURATION build "${builder_extra_params[@]}"
elif $MESON_LOW_VERSION; then
pushd "$MESON_PATH" > /dev/null
ninja
popd
else
meson compile -C "$MESON_PATH"
fi
builder_finish_action success build:$target
}
# ----------------------------------------------------------------------------
# test
# ----------------------------------------------------------------------------
do_test() {
local target=$1
builder_start_action test:$target || return 0
if [[ $target =~ ^(x86|x64|arm64)$ ]]; then
cmd //C build.bat $target $BUILDER_CONFIGURATION test $testparams
else
if [[ $target == wasm ]] && builder_is_macos; then
# 11794 -- parallel tests failing on some mac build agents; temporary
# mitigation until we diagnose root cause
meson test -j 1 -C "$MESON_PATH" $testparams
else
meson test -C "$MESON_PATH" $testparams
fi
fi
builder_finish_action success test:$target
}
# ----------------------------------------------------------------------------
# install and uninstall
# ----------------------------------------------------------------------------
do_install() {
local target=$1
builder_start_action install:$target || return 0
if $MESON_LOW_VERSION; then
pushd "$MESON_PATH" > /dev/null
ninja install
popd > /dev/null
else
meson install -C "$MESON_PATH"
fi
builder_finish_action success install:$target
}
do_uninstall() {
local target=$1
builder_start_action uninstall:$target || return 0
pushd "$MESON_PATH" > /dev/null
# Note: there is no meson uninstall command, which means
# this probably won't work on Windows
ninja uninstall
popd > /dev/null
builder_finish_action success uninstall:$target
}
# ----------------------------------------------------------------------------
# utility functions
# ----------------------------------------------------------------------------
build_meson_cross_file_for_wasm() {
if builder_is_windows; then
local R=$(cygpath -w $(echo $EMSCRIPTEN_BASE) | sed 's_\\_\\\\_g')
else
local R=$(echo $EMSCRIPTEN_BASE | sed 's_/_\\/_g')
fi
sed -e "s/\$EMSCRIPTEN_BASE/$R/g" wasm.build.$BUILDER_OS.in > wasm.build
}
#
# Remove Visual Studio from the path so that meson goes looking for it rather than
# assuming that it's all available. If we don't do this, we get an error with link.exe:
#
# meson.build:8:0: ERROR: Found GNU link.exe instead of MSVC link.exe in C:\Program Files\Git\usr\bin\link.EXE.
# This link.exe is not a linker.
# You may need to reorder entries to your %PATH% variable to resolve this.
#
# TODO: is this still required with meson 1.0?
#
cleanup_visual_studio_path() {
local _split_path _new_path=""
IFS=':' read -ra _split_path <<<"$PATH"
for p in "${_split_path[@]}"; do
if ! [[ $p =~ Visual\ Studio ]]; then
_new_path="$_new_path:$p"
fi
done
PATH="${_new_path:1}"
unset VSINSTALLDIR
}