blob: 463af27f9f0e35b74ed0c5ef86abd681baebc532 [file] [log] [blame]
#!/bin/bash
# Copyright 2023 Google LLC
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Helper script to build skia with reclient.
# This script does some setup and teardown for reclient build.
# Use this like
# $ ./tools/build_with_reclient.sh ninja -C out/Static -j 1000
set -eux
cd $(dirname $(dirname $0))
# download reclient binary.
echo 'infra/rbe/client/${platform}' 're_client_version:0.116.1.9128bc4-gomaip' > /tmp/reclient.ensure
cipd ensure --root ./out/reclient --ensure-file /tmp/reclient.ensure
# generate reproxy config.
echo "
instance=projects/rbe-chrome-untrusted/instances/default_instance
service=remotebuildexecution.googleapis.com:443
server_address=unix:///tmp/reproxy.sock
use_application_default_credentials=true
proxy_log_dir=/tmp
" > out/reproxy.cfg
# download clang
if [[ ! -d out/chromium-clang ]]; then
mkdir -p out/chromium-clang
(
cd out/chromium-clang
git clone https://chromium.googlesource.com/chromium/src/tools/clang.git
)
fi
./out/chromium-clang/clang/scripts/update.py
# download reclient config corresponding to clang version
revision=$(out/chromium-clang/clang/scripts/update.py --print-revision)
echo 'infra_internal/rbe/reclient_cfgs/rbe-chrome-untrusted/chromium-browser-clang' "revision/$revision" > /tmp/reclient_cfgs.ensure
cipd ensure --root ./out/reclient_cfgs --ensure-file /tmp/reclient_cfgs.ensure
# generate args.gn using reclient
case "${OSTYPE}" in
linux*)
mkdir -p out/.sysroot/usr
ln -sf /usr/include out/.sysroot/usr/
ln -sf /usr/lib out/.sysroot/usr/
echo '
cc_wrapper="../reclient/rewrapper -exec_root ../../ -cfg ../reclient_cfgs/rewrapper_linux.cfg"
cc="../third_party/llvm-build/Release+Asserts/bin/clang"
cxx="../third_party/llvm-build/Release+Asserts/bin/clang++"
skia_build_fuzzers=false
skia_use_system_freetype2 = false
extra_cflags=["--sysroot=../.sysroot"]
' > out/Static/args.gn
;;
darwin*)
ln -sf $(xcrun --sdk macosx --show-sdk-path) out/.sysroot
echo '
cc_wrapper="../reclient/rewrapper -exec_root ../../ -cfg ../reclient_cfgs/rewrapper_mac.cfg"
cc="../third_party/llvm-build/Release+Asserts/bin/clang"
cxx="../third_party/llvm-build/Release+Asserts/bin/clang++"
skia_build_fuzzers=false
xcode_sysroot = "../.sysroot"
' > out/Static/args.gn
;;
*)
echo "${OSTYPE} is not supported to use reclient."
exit 1
;;
esac
# start reclient
./out/reclient/bootstrap -re_proxy=./out/reclient/reproxy -cfg=./out/reproxy.cfg
# run given command.
"$@"
# stop reclient
./out/reclient/bootstrap -re_proxy=./out/reclient/reproxy -cfg=./out/reproxy.cfg -shutdown