# Part of the Carbon Language project, under the Apache License v2.0 with LLVM # Exceptions. See /LICENSE for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception name: Setup build environment (Ubuntu) runs: using: composite steps: # Ubuntu images start with ~23GB available; this takes a few seconds to add # ~22GB more. # # Although we could delete more, if we run into a limit, not deleting # everything provides a little flexibility to get space while trying # to shrink the build. - name: Free up disk space uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 with: android: true dotnet: true haskell: true # Enabling large-packages adds ~3 minutes to save ~4GB, so turn it off # to save time. large-packages: false # Select the LLVM release - by the cache key and the download. - name: Select LLVM release shell: bash run: | if [[ "${{ runner.arch }}" == "ARM64" ]]; then echo "LLVM_RELEASE=21.1.8" >> "$GITHUB_ENV" else echo "LLVM_RELEASE=21.1.8" >> "$GITHUB_ENV" fi # Cache and install a recent version of LLVM. This uses the GitHub action # cache to avoid directly downloading on each iteration and improve # reliability. - name: Cache LLVM and Clang installation id: cache-llvm-ubuntu uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: path: ~/llvm key: LLVM-${{ env.LLVM_RELEASE }}-Cache-ubuntu-${{ runner.arch }} - name: Download LLVM and Clang installation if: steps.cache-llvm-ubuntu.outputs.cache-hit != 'true' shell: bash run: | cd ~ # `LLVM_RELEASE` comes from the "Select LLVM release" step; `runner.arch` # (`X64`/`ARM64`) matches the package's arch suffix. LLVM_TARBALL_NAME=LLVM-$LLVM_RELEASE-Linux-${{ runner.arch }} LLVM_PATH=~/llvm echo "*** Downloading $LLVM_RELEASE" wget --show-progress=off "https://github.com/llvm/llvm-project/releases/download/llvmorg-$LLVM_RELEASE/$LLVM_TARBALL_NAME.tar.xz" echo "*** Extracting $LLVM_TARBALL_NAME.tar.xz" mkdir $LLVM_PATH tar -xJf $LLVM_TARBALL_NAME.tar.xz --strip-components=1 -C $LLVM_PATH echo "*** Deleting $LLVM_TARBALL_NAME.tar.xz" rm $LLVM_TARBALL_NAME.tar.xz echo "*** Testing `clang++ --version`" $LLVM_PATH/bin/clang++ --version # The installation contains *huge* parts of LLVM we don't need for the # toolchain. Prune them here to keep our cache small. x86-64 and # AArch64 use different LLVM releases whose tool sets differ, so `-f` # ignores entries that are absent from a given package. echo "*** Cleaning the 'llvm' directory" rm -f $LLVM_PATH/lib/{*.a,*.so,*.so.*} rm -f $LLVM_PATH/bin/{flang-*,mlir-*,clang-{scan-deps,check,repl},*-test,llvm-{lto*,reduce,bolt*,exegesis,jitlink},bugpoint,opt,llc} echo "*** Size of the 'llvm' directory" du -hs $LLVM_PATH - name: Setup LLVM and Clang paths shell: bash run: | LLVM_PATH=~/llvm echo "Using ${LLVM_PATH}" echo "${LLVM_PATH}/bin" >> $GITHUB_PATH echo '*** ls "${LLVM_PATH}"' ls "${LLVM_PATH}" echo '*** ls "${LLVM_PATH}/bin"' ls "${LLVM_PATH}/bin"