Meta+Toolchain+CI: Add a script to bootstrap vcpkg

And hook it into ladybird.sh for convenience. The script will set up
PATH and other environment variables automatically.

On CI, vcpkg is theoretically already installed on Linux machines, but
not with the right environment variables, and not on macOS. So this also
makes CI use this script to bootstrap vcpkg.
This commit is contained in:
Timothy Flynn 2024-06-04 16:24:06 -04:00 committed by Tim Flynn
parent be9fe23835
commit b36ab480bf
Notes: sideshowbarker 2024-07-16 22:26:05 +09:00
6 changed files with 50 additions and 1 deletions

View file

@ -60,3 +60,7 @@ runs:
set -e
brew update
brew install coreutils bash ninja wabt ccache unzip qt llvm@18
- name: 'Install vcpkg'
shell: bash
run: ./Toolchain/BuildVcpkg.sh

View file

@ -22,6 +22,7 @@ env:
# github.workspace = /home/runner/work/serenity/serenity
LADYBIRD_SOURCE_DIR: ${{ github.workspace }}
CCACHE_DIR: ${{ github.workspace }}/.ccache
VCPKG_ROOT: ${{ github.workspace }}/Toolchain/Tarballs/vcpkg
jobs:
CI:

View file

@ -10,6 +10,7 @@ env:
# github.workspace = /home/runner/work/serenity/serenity
LADYBIRD_SOURCE_DIR: ${{ github.workspace }}
CCACHE_DIR: ${{ github.workspace }}/.ccache
VCPKG_ROOT: ${{ github.workspace }}/Toolchain/Tarballs/vcpkg
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || format('{0}-{1}', github.ref, github.run_number) }}

View file

@ -5,6 +5,7 @@ on: [push]
env:
LADYBIRD_SOURCE_DIR: ${{ github.workspace }}
SERENITY_CCACHE_DIR: ${{ github.workspace }}/.ccache
VCPKG_ROOT: ${{ github.workspace }}/Toolchain/Tarballs/vcpkg
jobs:
build-and-package:

View file

@ -83,7 +83,9 @@ cmd_with_target() {
BUILD_DIR="$LADYBIRD_SOURCE_DIR/Build/ladybird"
CMAKE_ARGS+=("-DCMAKE_INSTALL_PREFIX=$LADYBIRD_SOURCE_DIR/Build/lagom-install")
CMAKE_ARGS+=("-DSERENITY_CACHE_DIR=${LADYBIRD_SOURCE_DIR}/Build/caches")
export PATH="$LADYBIRD_SOURCE_DIR/Toolchain/Local/cmake/bin":$PATH
export PATH="$LADYBIRD_SOURCE_DIR/Toolchain/Local/cmake/bin:$LADYBIRD_SOURCE_DIR/Toolchain/Local/vcpkg/bin:$PATH"
export VCPKG_ROOT="$LADYBIRD_SOURCE_DIR/Toolchain/Tarballs/vcpkg"
}
ensure_target() {
@ -124,10 +126,20 @@ build_cmake() {
( cd "$LADYBIRD_SOURCE_DIR/Toolchain" && ./BuildCMake.sh )
}
build_vcpkg() {
echo "Building vcpkg"
( cd "$LADYBIRD_SOURCE_DIR/Toolchain" && ./BuildVcpkg.sh )
}
ensure_toolchain() {
if [ "$(cmake -P "$LADYBIRD_SOURCE_DIR"/Meta/CMake/cmake-version.cmake)" -ne 1 ]; then
build_cmake
fi
# FIXME: Add a version check if needed.
if [ ! -x "${LADYBIRD_SOURCE_DIR}/Toolchain/Local/vcpkg/bin/vcpkg" ]; then
build_vcpkg
fi
}
run_gdb() {
@ -179,6 +191,7 @@ build_and_run_lagom_target() {
if [[ "$CMD" =~ ^(build|install|run|gdb|test|rebuild|recreate|addr2line)$ ]]; then
cmd_with_target
[[ "$CMD" != "recreate" && "$CMD" != "rebuild" ]] || delete_target
ensure_toolchain
ensure_target
case "$CMD" in
build)

29
Toolchain/BuildVcpkg.sh Executable file
View file

@ -0,0 +1,29 @@
#!/usr/bin/env bash
# This script builds the vcpkg dependency management system
set -e
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# shellcheck source=/dev/null
. "${DIR}/../Meta/shell_include.sh"
exit_if_running_as_root "Do not run BuildVcpkg.sh as root, parts of your Toolchain directory will become root-owned"
GIT_REPO="https://github.com/microsoft/vcpkg.git"
GIT_REV="01f602195983451bc83e72f4214af2cbc495aa94" # 2024.05.24
PREFIX_DIR="$DIR/Local/vcpkg"
mkdir -p "$DIR/Tarballs"
pushd "$DIR/Tarballs"
[ ! -d vcpkg ] && git clone $GIT_REPO
cd vcpkg
git fetch origin
git checkout $GIT_REV
./bootstrap-vcpkg.sh -disableMetrics
mkdir -p "$PREFIX_DIR/bin"
cp vcpkg "$PREFIX_DIR/bin"
popd