fune/taskcluster/scripts/misc/build-custom-car.sh
Kash Shampur 4586663a11 Bug 1820216 - Add toolchain task for Chromium-as-Release for OSX. r=perftest-reviewers,glandium,sparky
This patch provides a shell script to build a custom Chromium-as-Release (CaR) binary on OSX.
Additionally, we can remove the previous scripts that were used for win64 & linux64 and
refactor everything into a single script due to the similarities and add some logic to handle different OS platforms.

Differential Revision: https://phabricator.services.mozilla.com/D180824
2023-06-19 13:20:01 +00:00

141 lines
4.4 KiB
Bash
Executable file

#!/bin/bash
set -x -e -v
# This script is for building a custom version of chromium-as-release
# First argument must be the artifact name
ARTIFACT_NAME=$(basename $TOOLCHAIN_ARTIFACT)
shift
# Use the rest of the arguments as the build config for gn
CONFIG=$(echo $* | tr -d "'")
mkdir custom_car
cd custom_car
CUSTOM_CAR_DIR=$PWD
# Setup depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH="$PATH:$CUSTOM_CAR_DIR/depot_tools"
# Set up some env variables depending on the target OS
# Linux is the default case
# Final folder structure before compressing is
# the same for linux and windows
FINAL_BIN_PATH="src/out/Default"
# unique substring for PGO data for Linux
PGO_SUBSTR="chrome-linux-main"
# Logic for macosx64
if [[ $(uname -s) == "Darwin" ]]; then
# modify the config with fetched sdk path
export MACOS_SYSROOT="$MOZ_FETCHES_DIR/MacOSX13.3.sdk"
pip3 install importlib-metadata --user
CONFIG=$(echo $CONFIG mac_sdk_path='"'$MACOS_SYSROOT'"')
# ensure we don't use ARM64 profdata with this unique sub string
PGO_SUBSTR="chrome-mac-main"
# macOS final build folder is different than linux/win
FINAL_BIN_PATH="src/out/Default/Chromium.app"
fi
# Logic for win64 using the mingw environment
if [[ $(uname -o) == "Msys" ]]; then
# setup VS 2022
. $GECKO_PATH/taskcluster/scripts/misc/vs-setup.sh
# 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 & scripts 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
# ensure we don't use WIN32 profdata with this unique sub string
PGO_SUBSTR="chrome-win64-main"
fi
# Get chromium source code and dependencies
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
if [[ $(uname -o) == "Msys" ]]; then
# 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
# the development history, but this file is still needed to proceed.
python3 build/util/lastchange.py -o build/util/LASTCHANGE
fi
# 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
if [[ "$entry" == *"$PGO_SUBSTR"* ]]; then
echo "Found the correct profdata"
export PGO_DATA_PATH="$entry"
break
fi
fi
done
PGO_FILE=$PGO_DATA_PATH
if [[ $(uname -o) == "Msys" ]]; then
# 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/
fi
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 "$FINAL_BIN_PATH" chromium
chmod -R +x chromium
tar -c chromium | python3 $GECKO_PATH/taskcluster/scripts/misc/zstdpy > $ARTIFACT_NAME
mkdir -p $UPLOAD_DIR
mv "$ARTIFACT_NAME" "$UPLOAD_DIR"