From b36ab480bf2c46ae9b327dc091d2e0813e3c8197 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 4 Jun 2024 16:24:06 -0400 Subject: [PATCH] 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. --- .github/actions/setup/action.yml | 4 +++ .github/workflows/lagom-template.yml | 1 + .github/workflows/nightly-android.yml | 1 + .github/workflows/serenity-js-artifacts.yml | 1 + Meta/ladybird.sh | 15 ++++++++++- Toolchain/BuildVcpkg.sh | 29 +++++++++++++++++++++ 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100755 Toolchain/BuildVcpkg.sh diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 9b475276ea0c..afa1e4731883 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -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 diff --git a/.github/workflows/lagom-template.yml b/.github/workflows/lagom-template.yml index 9656cd4d23cb..cb273c5f6a16 100644 --- a/.github/workflows/lagom-template.yml +++ b/.github/workflows/lagom-template.yml @@ -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: diff --git a/.github/workflows/nightly-android.yml b/.github/workflows/nightly-android.yml index 13752a0cfc1d..4992ecf68949 100644 --- a/.github/workflows/nightly-android.yml +++ b/.github/workflows/nightly-android.yml @@ -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) }} diff --git a/.github/workflows/serenity-js-artifacts.yml b/.github/workflows/serenity-js-artifacts.yml index 63df4b613e3c..5a5201b00559 100644 --- a/.github/workflows/serenity-js-artifacts.yml +++ b/.github/workflows/serenity-js-artifacts.yml @@ -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: diff --git a/Meta/ladybird.sh b/Meta/ladybird.sh index ba2888b16db4..9d7fe2bcfcf4 100755 --- a/Meta/ladybird.sh +++ b/Meta/ladybird.sh @@ -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) diff --git a/Toolchain/BuildVcpkg.sh b/Toolchain/BuildVcpkg.sh new file mode 100755 index 000000000000..8002da71d1e0 --- /dev/null +++ b/Toolchain/BuildVcpkg.sh @@ -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