diff options
Diffstat (limited to 'taskcluster/scripts/misc/build-custom-car-win64.sh')
-rw-r--r-- | taskcluster/scripts/misc/build-custom-car-win64.sh | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/taskcluster/scripts/misc/build-custom-car-win64.sh b/taskcluster/scripts/misc/build-custom-car-win64.sh new file mode 100644 index 0000000000..512a0a072f --- /dev/null +++ b/taskcluster/scripts/misc/build-custom-car-win64.sh @@ -0,0 +1,102 @@ +#!/bin/bash +set -x -e -v + +# This script is for building a custom version of chromium-as-release on Windows + +# First argument must be the artifact name +ARTIFACT_NAME=$(basename $TOOLCHAIN_ARTIFACT) +shift + +# Use the rest of the arguments as the build config +CONFIG=$(echo $* | tr -d "'") + +mkdir custom_car +cd custom_car +CUSTOM_CAR_DIR=$PWD + +# setup VS 2022 +. $GECKO_PATH/taskcluster/scripts/misc/vs-setup.sh + +# setup depot_tools +git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git +export PATH="$(cd ./depot_tools && pwd):$PATH" + +# setup some environment variables for chromium build scripts +export DEPOT_TOOLS_WIN_TOOLCHAIN=0 +export GYP_MSVS_OVERRIDE_PATH="$MOZ_FETCHES_DIR/VS" +export GYP_MSVS_VERSION=2022 +export vs2022_install="$MOZ_FETCHES_DIR/VS" +export WINDOWSSDKDIR="$MOZ_FETCHES_DIR/VS/Windows Kits/10" +export DEPOT_TOOLS_UPDATE=1 +export GCLIENT_PY3=1 +# Fool GYP +touch "$MOZ_FETCHES_DIR/VS/VC/vcvarsall.bat" + + +# construct some of our own dirs and move VS dlls + other files +# to a path that chromium build files are expecting +mkdir chrome_dll +cd chrome_dll +mkdir system32 +cd ../ +pushd "$WINDOWSSDKDIR" +mkdir -p Debuggers/x64/ +popd +mv $MOZ_FETCHES_DIR/VS/VC/Redist/MSVC/14.34.31931/x64/Microsoft.VC143.CRT/* chrome_dll/system32/ +mv "$WINDOWSSDKDIR/App Certification Kit/"* "$WINDOWSSDKDIR"/Debuggers/x64/ +export WINDIR="$PWD/chrome_dll" + +# run glcient once first to get some windows deps +gclient + +# fetch chromium src code +mkdir chromium +cd chromium +fetch --no-history --nohooks chromium + +# setup the .gclient file to ensure pgo profiles are downloaded +# for some reason we need to set --name flag even though it already exists. +# currently the gclient.py file does NOT recognize --custom-var as it's own argument +gclient config --name src https://chromium.googlesource.com/chromium/src.git --custom-var=checkout_pgo_profiles=True --unmanaged + +cd src + +# For fast fetches it seems we will be missing some dummy files in windows. +# We can create a dummy this way to satisfy the rest of the build sequence +# this is ok because we are not doing any development here and don't need +# history. +python3 build/util/lastchange.py -o build/util/LASTCHANGE + +# now we can run hooks and fetch PGO + everything else +gclient runhooks + +# PGO data should be in src/chrome/build/pgo_profiles/ +# with a name like "chrome-{OS}-<some unique identifier>" +export PGO_DATA_DIR="$CUSTOM_CAR_DIR/chromium/src/chrome/build/pgo_profiles" +for entry in "$PGO_DATA_DIR"/* +do + if [ -f "$entry" ];then + export PGO_DATA_PATH="$entry" + fi +done +# compute a relative path that the build scripts looks for. +# this odd pathing seems to only happen on windows +PGO_FILE=${PGO_DATA_PATH#*/*/*/*/*/*/*/*/*/} +mv $PGO_DATA_PATH build/config/compiler/pgo/ +CONFIG=$(echo $CONFIG pgo_data_path='"'$PGO_FILE'"') + +# set up then build chrome +gn gen out/Default --args="$CONFIG" +autoninja -C out/Default chrome # skips test binaries + +# Gather binary and related files into a zip, and upload it +cd .. +mkdir chromium + +mv src/out/Default chromium +chmod -R +x chromium + +tar caf $ARTIFACT_NAME chromium + +mkdir -p $UPLOAD_DIR +mv $ARTIFACT_NAME $UPLOAD_DIR |