Skip to content

Commit 0ae541f

Browse files
committed
[LDC] Set up CI / package generation with Azure Pipelines and Shippable
Azure: Windows x86 & x64, macOS x64 & ARM64, Linux x64, Android ARMv7-A & AArch64 Shippable: Linux AArch64 2 packages per platform (enabled/disabled assertions), except for cross- compiled Android and macOS ARM64. Tagged builds are uploaded to the corresponding GitHub release, untagged builds to the GitHub 'CI' release. A Linux/AArch64 backup has been prepared for Travis too, as Shippable will be history with May 3rd.
1 parent 2385592 commit 0ae541f

File tree

5 files changed

+586
-0
lines changed

5 files changed

+586
-0
lines changed

.azure-pipelines/posix.yml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Each step starts in the checked-out source directory,
2+
# environment variables aren't persisted across steps.
3+
4+
steps:
5+
- script: |
6+
set -ex
7+
cd ..
8+
if [ "$CI_OS" = "osx" ]; then export PATH="$PWD/ninja:$PATH"; fi
9+
cmake --version
10+
ninja --version
11+
mkdir build
12+
cd build
13+
cmake -G Ninja $BUILD_SOURCESDIRECTORY/llvm \
14+
-DCMAKE_BUILD_TYPE=Release \
15+
-DCMAKE_INSTALL_PREFIX=$PWD/../install \
16+
-DLLVM_ENABLE_PROJECTS="$LLVM_PROJECTS_TO_ENABLE" \
17+
-DLLVM_TARGETS_TO_BUILD="$LLVM_TARGETS_TO_BUILD" \
18+
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="$LLVM_EXPERIMENTAL_TARGETS_TO_BUILD" \
19+
-DLLVM_ENABLE_ASSERTIONS=$LLVM_ENABLE_ASSERTIONS \
20+
$BASE_CMAKE_FLAGS $EXTRA_CMAKE_FLAGS $EXTRA_CMAKE_FLAGS_CROSS
21+
ninja install
22+
displayName: Build & install LLVM incl. LLD, compiler-rt, MLIR and the Khronos SPIRV-LLVM-Translator
23+
- script: |
24+
set -ex
25+
cd ..
26+
if [ "${BUILD_SOURCEBRANCH:0:10}" = "refs/tags/" ]; then
27+
ARTIFACT_ID=${BUILD_SOURCEBRANCH:15}
28+
else
29+
ARTIFACT_ID=${BUILD_SOURCEVERSION:0:8}
30+
fi
31+
ASSERTS_SUFFIX=""
32+
if [ "$LLVM_ENABLE_ASSERTIONS" = "ON" ]; then
33+
ASSERTS_SUFFIX="-withAsserts"
34+
fi
35+
artifactName=llvm-$ARTIFACT_ID-$CI_OS-$ARCH$ASSERTS_SUFFIX
36+
mv install $artifactName
37+
mkdir artifacts
38+
chmod -R go=rX $artifactName
39+
if [ "$CI_OS" = "osx" ]; then
40+
sudo chown -R root:wheel $artifactName
41+
tar -cJf artifacts/$artifactName.tar.xz --options='compression-level=9' $artifactName
42+
else
43+
tar -cf - --owner=0 --group=0 $artifactName | 7za a artifacts/$artifactName.tar.xz -si -txz -mx9
44+
fi
45+
# Persist the ARTIFACT_ID and ASSERTS_SUFFIX variables for future steps
46+
set +x
47+
echo "##vso[task.setvariable variable=ARTIFACT_ID]$ARTIFACT_ID"
48+
echo "##vso[task.setvariable variable=ASSERTS_SUFFIX]$ASSERTS_SUFFIX"
49+
displayName: Pack installation dir
50+
- script: |
51+
set -ex
52+
artifactName=llvm-$ARTIFACT_ID.src
53+
# just the LLVM src dir (already incl. LLVM-SPIRV-Translator) + compiler-rt + lld + mlir
54+
mv compiler-rt mlir llvm/projects
55+
mv lld llvm/tools
56+
chmod -R go=rX llvm
57+
tar -cf - --exclude-vcs --owner=0 --group=0 --transform=s,${BUILD_SOURCESDIRECTORY:1}/llvm,$artifactName, $BUILD_SOURCESDIRECTORY/llvm | 7za a ../artifacts/$artifactName.tar.xz -si -txz -mx9
58+
displayName: Pack source dir
59+
condition: and(succeeded(), and(eq(variables['CI_OS'], 'linux'), eq(variables['LLVM_ENABLE_ASSERTIONS'], 'OFF')))
60+
- publish: ../artifacts
61+
artifact: $(CI_OS)-$(ARCH)$(ASSERTS_SUFFIX)

.azure-pipelines/windows.yml

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Each step starts in the checked-out source directory,
2+
# environment variables aren't persisted across steps.
3+
4+
steps:
5+
- script: |
6+
set
7+
displayName: Print environment variables
8+
- checkout: self
9+
submodules: true
10+
fetchDepth: 50
11+
- script: |
12+
echo on
13+
cd ..
14+
:: Download & extract Ninja
15+
curl -L -o ninja.zip https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip 2>&1
16+
mkdir ninja
17+
cd ninja
18+
7z x ../ninja.zip > nul
19+
cd ..
20+
:: Download & install clang
21+
curl -L -o clang.exe https://github.com/llvm/llvm-project/releases/download/llvmorg-%CLANG_VERSION%/LLVM-%CLANG_VERSION%-win64.exe 2>&1
22+
clang.exe /S
23+
displayName: Install prerequisites
24+
- script: |
25+
echo on
26+
cd ..
27+
set PATH=C:\Program Files\LLVM\bin;%CD%\ninja;%PATH%
28+
call "%VSINSTALLDIR%Common7\Tools\VsDevCmd.bat" -arch=%ARCH%
29+
echo on
30+
cmake --version
31+
ninja --version
32+
clang-cl --version
33+
mkdir build
34+
cd build
35+
cmake -G Ninja %BUILD_SOURCESDIRECTORY%\llvm -DCMAKE_C_COMPILER:PATH=clang-cl.exe -DCMAKE_CXX_COMPILER:PATH=clang-cl.exe -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CD%/../install -DLLVM_ENABLE_PROJECTS=%LLVM_PROJECTS_TO_ENABLE% -DLLVM_TARGETS_TO_BUILD=%LLVM_TARGETS_TO_BUILD% -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=%LLVM_EXPERIMENTAL_TARGETS_TO_BUILD% -DLLVM_ENABLE_ASSERTIONS=%LLVM_ENABLE_ASSERTIONS% -DLLVM_DEFAULT_TARGET_TRIPLE=%LLVM_DEFAULT_TARGET_TRIPLE% %BASE_CMAKE_FLAGS% %EXTRA_CMAKE_FLAGS%
36+
ninja install
37+
displayName: Build & install LLVM incl. LLD, compiler-rt, MLIR and the Khronos SPIRV-LLVM-Translator
38+
- script: |
39+
echo on
40+
cd ..
41+
:: On Windows, the lld symlinks are copies
42+
rm install/bin/ld.lld.exe
43+
rm install/bin/ld64.lld.exe
44+
rm install/bin/lld.exe
45+
rm install/bin/wasm-ld.exe
46+
if "%BUILD_SOURCEBRANCH:~0,10%" == "refs/tags/" (
47+
set ARTIFACT_ID=%BUILD_SOURCEBRANCH:~15%
48+
) else (
49+
set ARTIFACT_ID=%BUILD_SOURCEVERSION:~0,8%
50+
)
51+
set ASSERTS_SUFFIX=
52+
if "%LLVM_ENABLE_ASSERTIONS%" == "ON" (
53+
set ASSERTS_SUFFIX=-withAsserts
54+
)
55+
set ARTIFACT_NAME=llvm-%ARTIFACT_ID%-windows-%ARCH%%ASSERTS_SUFFIX%
56+
mv install %ARTIFACT_NAME%
57+
mkdir artifacts
58+
cd %ARTIFACT_NAME%
59+
7z a -mx=9 ../artifacts/%ARTIFACT_NAME%.7z * > nul
60+
:: Persist the ASSERTS_SUFFIX env variable for future steps
61+
echo off
62+
echo ##vso[task.setvariable variable=ASSERTS_SUFFIX]%ASSERTS_SUFFIX%
63+
displayName: Pack installation dir
64+
- publish: ../artifacts
65+
artifact: windows-$(ARCH)$(ASSERTS_SUFFIX)

.travis.yml

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
language: cpp
2+
3+
git:
4+
depth: 50
5+
6+
os: linux
7+
arch: arm64-graviton2
8+
group: edge
9+
virt: lxd
10+
dist: bionic
11+
addons:
12+
apt:
13+
packages:
14+
- git-core
15+
- ninja-build
16+
- binutils-dev
17+
- python
18+
- p7zip-full
19+
- curl
20+
21+
jobs:
22+
include:
23+
- env: LLVM_ENABLE_ASSERTIONS=ON
24+
- env: LLVM_ENABLE_ASSERTIONS=OFF
25+
26+
script:
27+
# Install a more recent version of CMake
28+
- curl -L -o cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v3.20.1/cmake-3.20.1-linux-aarch64.tar.gz
29+
- mkdir cmake_bin
30+
- tar -xf cmake.tar.gz --strip 1 -C cmake_bin
31+
- export PATH="$PWD/cmake_bin/bin:$PATH"
32+
# Download & extract clang
33+
- curl -L -o clang.tar.xz https://github.com/llvm/llvm-project/releases/download/llvmorg-11.1.0/clang+llvm-11.1.0-aarch64-linux-gnu.tar.xz
34+
- mkdir clang_bin
35+
- tar -xf clang.tar.xz --strip 1 -C clang_bin
36+
- rm clang.tar.xz
37+
- export CC="$PWD/clang_bin/bin/clang"
38+
- export CXX="$PWD/clang_bin/bin/clang++"
39+
# Build & install LLVM incl. LLD, compiler-rt and the Khronos SPIRV-LLVM-Translator
40+
- nproc
41+
- free
42+
- cmake --version
43+
- ninja --version
44+
- mkdir build
45+
- cd build
46+
- |
47+
cmake -G Ninja ../llvm \
48+
-DCMAKE_BUILD_TYPE=Release \
49+
-DCMAKE_INSTALL_PREFIX=$PWD/../install \
50+
-DLLVM_ENABLE_PROJECTS='compiler-rt;lld' \
51+
-DLLVM_TARGETS_TO_BUILD='AArch64;AMDGPU;ARM;AVR;Mips;MSP430;NVPTX;PowerPC;RISCV;WebAssembly;X86' \
52+
-DLLVM_ENABLE_ASSERTIONS=$LLVM_ENABLE_ASSERTIONS \
53+
-DLLVM_ENABLE_UNWIND_TABLES=OFF \
54+
-DLLVM_ENABLE_TERMINFO=OFF \
55+
-DLLVM_ENABLE_LIBEDIT=OFF \
56+
-DCOMPILER_RT_INCLUDE_TESTS=OFF \
57+
-DLLVM_INCLUDE_TESTS=OFF \
58+
-DCOMPILER_RT_USE_LIBCXX=OFF \
59+
-DLLVM_BINUTILS_INCDIR=/usr/include \
60+
-DLLVM_STATIC_LINK_CXX_STDLIB=ON
61+
- |
62+
# work around out-of-memory kills
63+
for N in 8 6 4; do
64+
ninja -j$N -k0 && break
65+
done
66+
- ninja -j4 install
67+
- cd ..
68+
# Pack installation dir
69+
- |
70+
set -eo pipefail
71+
if [ "$TRAVIS_TAG" != "" ]; then
72+
artifactID=${TRAVIS_TAG:5}
73+
else
74+
artifactID=${TRAVIS_COMMIT:0:8}
75+
fi
76+
assertsSuffix=""
77+
if [ "$LLVM_ENABLE_ASSERTIONS" = "ON" ]; then
78+
assertsSuffix="-withAsserts"
79+
fi
80+
artifactName=llvm-$artifactID-linux-aarch64$assertsSuffix
81+
mv install $artifactName
82+
artifact=$artifactName.tar.xz
83+
echo "Packing $artifact..."
84+
tar -cf - $artifactName | 7za a $artifact -si -txz -mx9
85+
ls -lh $artifact
86+
87+
# Travis deploys to the GitHub release matching git tag $TRAVIS_TAG
88+
after_success:
89+
- |
90+
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
91+
echo 'Skipping deployment'
92+
elif [ "$TRAVIS_TAG" = "" ]; then
93+
echo 'Deploying to CI release'
94+
export TRAVIS_TAG=CI
95+
fi
96+
97+
deploy:
98+
provider: releases
99+
api_key:
100+
secure: "vJnenvhXJd8hSiUrwIMTux37WCrEg8ntPJlmks3oSeFSJuD5/jE6ietbBi31GWJ2CNL8SgrVNCYr8zd5dCEiwH3EJHgJwQYf5P0mm6oJ0QcdKMRMBws1xuiHv4Q1o/IOfWt6fFA7xfiU/UXU1aQM21ec4aq1AKg3NpcyYM3k8HzFZVkGgOpedxh0/pQnDjWSma8aHGOjyfYil8dWPyX7X6AO8ju4VNi3b+gd/jXX4j6fIxRBUA6cSiHl86yJGyls2blhyjTEUD/Hp4WL/3qf0Jrd7c/B8M9zA94GTt5rfsnnKwdgLpyZX+xZV6xwzUkCu0D/tD+zriz1Dl1PLaztytTufv5Gvs2uVQcSWCYvd8DjMR/t4qeX3FJqpmgCRF/TK1o5ad0bcxDTu3JMIPxPnz3sTbPwRi26CzVG6rNEB7sfWHzNO9IWBrrGnOkmsOg96R3I1oNXFxsgX3Goy7KRL71mTxjQlw5KdC45hSOYMFcZ8LXVyGK9KldCUYg+OUawCNru+e+glVT3p0fjV/R3LRSEe551+9jsUPXii7gGiKBx0Ivr+00y1wqI0EWy0oWMGlTSfBmE2pw+K+Yfia2CXUVNak8uFRilEcJQVoVj65opM00PsDeiX/HXHNkN4j72AU7uspP5bOXmD4osONJqwvLW9hxCLBNE/ycWL06Wiu4="
101+
file_glob: true
102+
file: llvm-*.tar.xz
103+
skip_cleanup: true
104+
on:
105+
tags: true
106+
107+
notifications:
108+
email: false

0 commit comments

Comments
 (0)