GH Actions: Export ~all symbols from prebuilt LTO'd macOS binaries #2491
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions | |
name: Vanilla LLVM | |
on: | |
- pull_request | |
- push | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
test: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- job_name: Ubuntu 20.04, LLVM 16, latest LDC beta | |
os: ubuntu-20.04 | |
host_dc: ldc-beta | |
llvm_version: 16.0.6 # LDC-LLVM | |
- job_name: Ubuntu 20.04, LLVM 15, latest LDC beta | |
os: ubuntu-20.04 | |
host_dc: ldc-beta | |
llvm_version: 15.0.6 | |
- job_name: Ubuntu 20.04, LLVM 12, latest LDC beta | |
os: ubuntu-20.04 | |
host_dc: ldc-beta | |
llvm_version: 12.0.1 | |
cmake_flags: -DBUILD_SHARED_LIBS=ON -DLIB_SUFFIX=64 | |
- job_name: Ubuntu 20.04, LLVM 11, latest DMD beta | |
os: ubuntu-20.04 | |
host_dc: dmd-beta | |
llvm_version: 11.1.0 | |
cmake_flags: -DBUILD_SHARED_LIBS=OFF -DRT_SUPPORT_SANITIZERS=ON -DLDC_LINK_MANUALLY=ON | |
- job_name: macOS 11, LLVM 13, latest DMD beta | |
os: macos-11 | |
host_dc: dmd-beta | |
llvm_version: 13.0.1 | |
cmake_flags: -DBUILD_SHARED_LIBS=ON -DRT_SUPPORT_SANITIZERS=ON -DLDC_LINK_MANUALLY=ON -DCMAKE_CXX_COMPILER=/usr/bin/c++ -DCMAKE_C_COMPILER=/usr/bin/cc | |
- job_name: macOS 11, LLVM 14, latest LDC beta | |
os: macos-11 | |
host_dc: ldc-beta | |
llvm_version: 14.0.6 | |
cmake_flags: -DBUILD_SHARED_LIBS=OFF -DD_COMPILER_FLAGS=-gcc=/usr/bin/c++ | |
name: ${{ matrix.job_name }} | |
runs-on: ${{ matrix.os }} | |
env: | |
MACOSX_DEPLOYMENT_TARGET: 11.6 # silence `ld: warning: object file (…) was built for newer macOS version (…) than being linked (…)` | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
fetch-depth: 50 | |
- name: Install ninja | |
uses: symmetryinvestments/gha-setup-ninja@v1 | |
- name: Install D host compiler | |
uses: dlang-community/setup-dlang@v1 | |
with: | |
compiler: ${{ matrix.host_dc }} | |
- name: Clear LD_LIBRARY_PATH to prevent loading host compiler libs | |
run: echo "LD_LIBRARY_PATH=" >> $GITHUB_ENV | |
- name: Install lit | |
run: | | |
set -euxo pipefail | |
python3 -m pip install --user setuptools wheel | |
python3 -m pip install --user lit | |
python3 -c "import lit.main; lit.main.main();" --version . | head -n 1 | |
- name: 'Linux: Install gdb and llvm-symbolizer' | |
if: runner.os == 'Linux' | |
run: | | |
set -eux | |
sudo apt-get update | |
# Don't use latest gdb v10+ from Ubuntu toolchain PPA with regressions, use official v9 | |
sudo apt-get install gdb=9.1-0ubuntu1 llvm | |
- name: Try to restore cached LLVM | |
uses: actions/cache@v2 | |
with: | |
path: llvm | |
key: llvm-${{ matrix.llvm_version }}-${{ runner.os }} | |
- name: Download & extract prebuilt vanilla LLVM ${{ matrix.llvm_version }} | |
run: | | |
set -eux | |
if [[ -d llvm ]]; then | |
echo "Already cached" | |
exit 0 | |
fi | |
version='${{ matrix.llvm_version }}' | |
if [[ '${{ runner.os }}' == macOS ]]; then | |
suffix='x86_64-apple-darwin' | |
elif [[ "$version" =~ ^1[3-9]\. ]]; then | |
suffix='x86_64-linux-gnu-ubuntu-18.04' # LLVM 13.0.1+ | |
else | |
suffix='x86_64-linux-gnu-ubuntu-16.04' | |
fi | |
url="https://github.com/llvm/llvm-project/releases/download/llvmorg-$version/clang+llvm-$version-$suffix.tar.xz" | |
# FIXME: weird crashes with official v16.0.0 archive; use LDC-LLVM instead | |
if [[ "$version" =~ ^16\. ]]; then | |
url="https://github.com/ldc-developers/llvm-project/releases/download/ldc-v$version/llvm-$version-linux-x86_64.tar.xz" | |
fi | |
curl -fL --retry 3 --max-time 300 -o llvm.tar.xz "$url" | |
mkdir llvm | |
tar -xf llvm.tar.xz --strip 1 -C llvm | |
rm llvm.tar.xz | |
- name: 'Linux: Make lld the default linker' | |
if: runner.os == 'Linux' | |
run: | | |
set -eux | |
echo "Using lld to work around sporadic failures" | |
sudo ln -sf "$PWD/llvm/bin/ld.lld" /usr/bin/ld | |
ld --version | |
- name: Build LDC & LDC D unittests & defaultlib unittest runners with extra '${{ matrix.cmake_flags }}' | |
run: | | |
set -eux | |
cmake -G Ninja . \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DLLVM_ROOT_DIR="$PWD/llvm" \ | |
-DLDC_LINK_MANUALLY=OFF \ | |
${{ matrix.cmake_flags }} | |
ninja obj/ldc2.o all ldc2-unittest all-test-runners | |
bin/ldc2 --version | |
- name: Run LDC D unittests | |
if: success() || failure() | |
run: ctest --output-on-failure -R "ldc2-unittest" | |
- name: Run LIT testsuite | |
if: success() || failure() | |
run: | | |
set -eux | |
# LLVM 14+ on Linux: don't use vanilla llvm-symbolizer (no support for zlib-compressed debug sections => failing ASan tests) | |
if [[ '${{ runner.os }}' == 'Linux' && '${{ matrix.llvm_version }}' =~ ^1[4-9]\. ]]; then | |
mv llvm/bin/llvm-symbolizer llvm/bin/llvm-symbolizer.bak | |
fi | |
ctest -V -R "lit-tests" | |
if [[ -f llvm/bin/llvm-symbolizer.bak ]]; then | |
mv llvm/bin/llvm-symbolizer.bak llvm/bin/llvm-symbolizer | |
fi | |
- name: Run DMD testsuite | |
if: success() || failure() | |
run: ctest -V -R "dmd-testsuite" | |
- name: Run defaultlib unittests & druntime integration tests | |
if: success() || failure() | |
run: | | |
set -eux | |
excludes='dmd-testsuite|lit-tests|ldc2-unittest' | |
if [[ '${{ runner.os }}' == macOS ]]; then | |
N=$(sysctl -n hw.logicalcpu) | |
else | |
N=$(nproc) | |
fi | |
ctest -j$N --output-on-failure -E "$excludes" |