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 9b475276ea0..afa1e473188 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 9656cd4d23c..cb273c5f6a1 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 13752a0cfc1..4992ecf6894 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 63df4b613e3..5a5201b0055 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 ba2888b16db..9d7fe2bcfcf 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 00000000000..8002da71d1e --- /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