Files
electron/script/actions/move-artifacts.sh
Sam Attard 0e2faaed30 build: cross-compile Windows on Linux
Move the Windows build jobs to Linux runners using the same
ghcr.io/electron/build container as the gn-check job (with /dev/fuse
and SYS_ADMIN for ciopfs).

- build-electron action: set target_os=win/target_cpu/use_v8_context_snapshot
  GN args for all Windows arches; point ELECTRON_BUILD_TOOLS_MAIN_STAR at
  the in-repo build/siso/main.star; drop the powershell build/siso-report/
  installed_software/mksnapshot.zip steps in favour of the unified bash
  paths now that the host is Linux.
- pipeline-segment-electron-build: set ELECTRON_DEPOT_TOOLS_WIN_TOOLCHAIN,
  use AKS cache restore for Windows (Linux container), skip fix-sync for
  Windows (Linux-synced tree needs no fixup), and run the win_toolchain
  hook with target_os=['win'] so the MSVC toolchain lands.
- build/siso/main.star: in-repo copy of build-tools' main.star with the
  mswsock.h/Lm.h :headers extension keyed on win_sdk.enabled() (target
  OS) instead of runtime.os, so siso uploads those SDK headers to RBE on
  a Linux host.
- move-artifacts.sh: classify Linux+ELECTRON_DEPOT_TOOLS_WIN_TOOLCHAIN
  as a win build.

Derived from the build-win-on-linux branch with the wine path removed —
mksnapshot now runs natively on the Linux host with --target_os=win and
the V8 patches in the previous commits ensure it emits Win64 unwind
data and uses the right snapshot toolchain for arm64.
2026-04-08 03:28:05 +00:00

125 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
if [ "$(expr substr $(uname -s) 1 10)" == "MSYS_NT-10" ]; then
BUILD_TYPE="win"
elif [ "`uname`" == "Darwin" ]; then
if [ -z "$MAS_BUILD" ]; then
BUILD_TYPE="darwin"
else
BUILD_TYPE="mas"
fi
elif [ "`uname`" == "Linux" ]; then
if [ "$ELECTRON_DEPOT_TOOLS_WIN_TOOLCHAIN" == "1" ]; then
BUILD_TYPE="win"
else
BUILD_TYPE="linux"
fi
else
echo "Unsupported platform"
exit 1
fi
GENERATED_ARTIFACTS="generated_artifacts_${BUILD_TYPE}_${TARGET_ARCH}"
echo Creating $GENERATED_ARTIFACTS...
rm -rf $GENERATED_ARTIFACTS
mkdir $GENERATED_ARTIFACTS
SRC_ARTIFACTS="src_artifacts_${BUILD_TYPE}_${TARGET_ARCH}"
echo Creating $SRC_ARTIFACTS...
rm -rf $SRC_ARTIFACTS
mkdir $SRC_ARTIFACTS
mv_if_exist() {
if [ -f "$1" ] || [ -d "$1" ]; then
echo Storing $1
mv $1 $GENERATED_ARTIFACTS
else
echo Skipping $1 - It is not present on disk
fi
}
cp_if_exist() {
if [ -f "$1" ] || [ -d "$1" ]; then
echo Storing $1
cp $1 $GENERATED_ARTIFACTS
else
echo Skipping $1 - It is not present on disk
fi
}
move_src_dirs_if_exist() {
mkdir src_artifacts
dirs=("src/out/Default/gen/node_headers" \
"src/out/Default/overlapped-checker" \
"src/out/Default/ffmpeg" \
"src/out/Default/hunspell_dictionaries" \
"src/third_party/electron_node" \
"src/third_party/nan" \
"src/cross-arch-snapshots" \
"src/buildtools/mac" \
"src/buildtools/third_party/libc++" \
"src/buildtools/third_party/libc++abi" \
"src/third_party/libc++" \
"src/third_party/libc++abi" \
"src/out/Default/obj/buildtools/third_party" \
"src/v8/tools/builtins-pgo")
# Only do this for linux build type, this folder
# exists for windows builds on linux hosts but we do
# not need it
if [ "$BUILD_TYPE" == "linux" ]; then
dirs+=('src/build/linux')
fi
# llvm-build is the host toolchain, for windows we need
# a different toolchain so no point copying this one
if [ "$BUILD_TYPE" != "win" ]; then
dirs+=('src/third_party/llvm-build')
fi
# On windows we should clean up two symlinks that aren't
# compatible with the windows test runner
if [ "$BUILD_TYPE" == "win" ]; then
rm -f src/third_party/electron_node/tools/node_modules/eslint/node_modules/eslint
rm -f src/third_party/electron_node/tools/node_modules/eslint/node_modules/.bin/eslint
rm -f src/third_party/electron_node/out/tools/bin/python
# Also need to copy electron.lib to node.lib for native module testing purposes
mkdir -p src/out/Default/gen/node_headers/Release
cp src/out/Default/electron.lib src/out/Default/gen/node_headers/Release/node.lib
fi
for dir in "${dirs[@]}"
do
if [ -d "$dir" ]; then
mkdir -p src_artifacts/$(dirname $dir)
cp -r $dir/ src_artifacts/$dir
fi
done
tar -C src_artifacts -cf src_artifacts.tar .
echo Storing src_artifacts.tar
mv src_artifacts.tar $SRC_ARTIFACTS
}
# Generated Artifacts
mv_if_exist src/out/Default/dist.zip
mv_if_exist src/out/Default/gen/node_headers.tar.gz
mv_if_exist src/out/Default/symbols.zip
mv_if_exist src/out/Default/mksnapshot.zip
mv_if_exist src/out/Default/chromedriver.zip
mv_if_exist src/out/ffmpeg/ffmpeg.zip
mv_if_exist src/out/Default/hunspell_dictionaries.zip
mv_if_exist src/cross-arch-snapshots
cp_if_exist src/out/electron_ninja_log
cp_if_exist src/out/Default/.ninja_log
if [ -n "$SISO_REPORT_PATH" ]; then
cp_if_exist "$SISO_REPORT_PATH"
fi
move_src_dirs_if_exist