mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 11:40:14 +01:00
Clang 21 is now the latest version available in Ubuntu LTS, so we can move to it.
83 lines
3.4 KiB
YAML
83 lines
3.4 KiB
YAML
# 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"
|