Skip to content

Commit a64a30d

Browse files
committed
[LDC] Set up CI / package generation with Azure Pipelines and Shippable
Azure: Windows x86 & x64, macOS x64, Linux x64, Android ARMv7-A & AArch64 Shippable: Linux AArch64 2 packages per platform (enabled/disabled assertions), except for cross- compiled Android. Tagged builds are uploaded to the corresponding GitHub release, untagged builds to the GitHub 'CI' release.
1 parent 9f6443d commit a64a30d

File tree

4 files changed

+435
-0
lines changed

4 files changed

+435
-0
lines changed

.azure-pipelines/posix.yml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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+
-DLLVM_ENABLE_PROJECTS='compiler-rt;lld' \
15+
-DCMAKE_BUILD_TYPE=Release \
16+
-DCMAKE_INSTALL_PREFIX=$PWD/../install \
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
21+
ninja install
22+
displayName: Build & install LLVM incl. LLD, compiler-rt 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+
XZ_OPT=-9 tar -cJf artifacts/$artifactName.tar.xz --owner=0 --group=0 $artifactName
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+
cd ..
53+
artifactName=llvm-$ARTIFACT_ID.src
54+
chmod -R go=rX $BUILD_SOURCESDIRECTORY
55+
XZ_OPT=-9 tar -cJf artifacts/$artifactName.tar.xz --exclude-vcs --owner=0 --group=0 --transform=s,${BUILD_SOURCESDIRECTORY:1},$artifactName, $BUILD_SOURCESDIRECTORY
56+
displayName: Pack source dir
57+
condition: and(succeeded(), and(eq(variables['CI_OS'], 'linux'), eq(variables['LLVM_ENABLE_ASSERTIONS'], 'OFF')))
58+
- publish: ../artifacts
59+
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.9.0/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 http://releases.llvm.org/%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 -DLLVM_ENABLE_PROJECTS=compiler-rt;lld -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CD%/../install -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 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)

azure-pipelines.yml

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
variables:
2+
LLVM_TARGETS_TO_BUILD: AArch64;ARM;Mips;MSP430;NVPTX;PowerPC;RISCV;WebAssembly;X86
3+
LLVM_EXPERIMENTAL_TARGETS_TO_BUILD: AVR
4+
# Prevent dependencies on some purely optional libraries, and a dependency on clang
5+
# for compiler-rt and SPIRV-LLVM-Translator tests.
6+
BASE_CMAKE_FLAGS: -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_LIBEDIT=OFF -DCOMPILER_RT_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TESTS=OFF -DCOMPILER_RT_USE_LIBCXX=OFF
7+
8+
# Although tags are supposed to trigger builds by default, they don't.
9+
trigger:
10+
- '*'
11+
- refs/tags/ldc-v*
12+
13+
jobs:
14+
- job: Windows
15+
timeoutInMinutes: 180
16+
pool:
17+
vmImage: 'windows-2019'
18+
variables:
19+
CLANG_VERSION: 9.0.0
20+
VSINSTALLDIR: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\
21+
EXTRA_CMAKE_FLAGS: -DLLVM_USE_CRT_RELEASE=MT
22+
strategy:
23+
matrix:
24+
x64:
25+
ARCH: x64
26+
LLVM_DEFAULT_TARGET_TRIPLE: x86_64-pc-windows-msvc
27+
LLVM_ENABLE_ASSERTIONS: OFF
28+
x64_withAsserts:
29+
ARCH: x64
30+
LLVM_DEFAULT_TARGET_TRIPLE: x86_64-pc-windows-msvc
31+
LLVM_ENABLE_ASSERTIONS: ON
32+
x86:
33+
ARCH: x86
34+
LLVM_DEFAULT_TARGET_TRIPLE: i686-pc-windows-msvc
35+
LLVM_ENABLE_ASSERTIONS: OFF
36+
# Let CMake configure 64-bit clang-cl for 32-bit code emission.
37+
CFLAGS: -m32
38+
CXXFLAGS: -m32
39+
ASMFLAGS: -m32
40+
x86_withAsserts:
41+
ARCH: x86
42+
LLVM_DEFAULT_TARGET_TRIPLE: i686-pc-windows-msvc
43+
LLVM_ENABLE_ASSERTIONS: ON
44+
CFLAGS: -m32
45+
CXXFLAGS: -m32
46+
ASMFLAGS: -m32
47+
steps:
48+
- template: .azure-pipelines/windows.yml
49+
50+
- job: Linux
51+
timeoutInMinutes: 180
52+
pool:
53+
vmImage: 'ubuntu-16.04'
54+
variables:
55+
CI_OS: linux
56+
ARCH: x86_64
57+
EXTRA_CMAKE_FLAGS: -DLLVM_BINUTILS_INCDIR=/usr/include -DCMAKE_CXX_FLAGS=-static-libstdc++
58+
strategy:
59+
matrix:
60+
x64:
61+
LLVM_ENABLE_ASSERTIONS: OFF
62+
x64_withAsserts:
63+
LLVM_ENABLE_ASSERTIONS: ON
64+
steps:
65+
- checkout: self
66+
submodules: true
67+
fetchDepth: 50
68+
- script: |
69+
set -ex
70+
cd ..
71+
export DEBIAN_FRONTEND=noninteractive
72+
sudo apt-get -q update
73+
sudo apt-get -yq install \
74+
git-core cmake ninja-build g++ binutils-dev python
75+
displayName: Install prerequisites
76+
- template: .azure-pipelines/posix.yml
77+
78+
- job: macOS
79+
timeoutInMinutes: 180
80+
pool:
81+
vmImage: 'macOS-10.14'
82+
variables:
83+
CI_OS: osx
84+
ARCH: x86_64
85+
EXTRA_CMAKE_FLAGS: -DHAVE_FUTIMENS=0
86+
MACOSX_DEPLOYMENT_TARGET: 10.9
87+
strategy:
88+
matrix:
89+
x64:
90+
LLVM_ENABLE_ASSERTIONS: OFF
91+
x64_withAsserts:
92+
LLVM_ENABLE_ASSERTIONS: ON
93+
steps:
94+
- checkout: self
95+
submodules: true
96+
fetchDepth: 50
97+
- script: |
98+
set -ex
99+
cd ..
100+
# Download & extract Ninja
101+
curl -L -o ninja-mac.zip https://github.com/ninja-build/ninja/releases/download/v1.9.0/ninja-mac.zip
102+
mkdir ninja
103+
tar -xf ninja-mac.zip -C ninja
104+
displayName: Install prerequisites
105+
- template: .azure-pipelines/posix.yml
106+
107+
- job: Android
108+
timeoutInMinutes: 180
109+
pool:
110+
vmImage: 'ubuntu-16.04'
111+
variables:
112+
CI_OS: android
113+
LLVM_TARGETS_TO_BUILD: AArch64;ARM;WebAssembly;X86
114+
LLVM_EXPERIMENTAL_TARGETS_TO_BUILD: ''
115+
LLVM_ENABLE_ASSERTIONS: OFF
116+
strategy:
117+
matrix:
118+
armv7a:
119+
ARCH: armv7a
120+
EXTRA_CMAKE_FLAGS: -DANDROID_ABI=armeabi-v7a -DANDROID_NATIVE_API_LEVEL=21 -DANDROID_STL=c++_static -DCMAKE_CROSSCOMPILING=True -DLLVM_TARGET_ARCH=ARM -DLLVM_DEFAULT_TARGET_TRIPLE=armv7a--linux-androideabi -DLLVM_ENABLE_PLUGINS=OFF
121+
aarch64:
122+
ARCH: aarch64
123+
EXTRA_CMAKE_FLAGS: -DANDROID_ABI=arm64-v8a -DANDROID_NATIVE_API_LEVEL=21 -DANDROID_STL=c++_static -DCMAKE_CROSSCOMPILING=True -DLLVM_TARGET_ARCH=AArch64 -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64--linux-android -DLLVM_ENABLE_PLUGINS=OFF -DSANITIZER_CXX_ABI=libc++
124+
steps:
125+
- checkout: self
126+
submodules: true
127+
fetchDepth: 50
128+
- script: |
129+
set -ex
130+
cd ..
131+
export DEBIAN_FRONTEND=noninteractive
132+
sudo apt-get -q update
133+
sudo apt-get -yq install \
134+
git-core cmake ninja-build g++ curl python unzip
135+
displayName: Install prerequisites
136+
- script: |
137+
set -ex
138+
cd ..
139+
cmake --version
140+
ninja --version
141+
mkdir build-native
142+
cd build-native
143+
cmake -G Ninja $BUILD_SOURCESDIRECTORY/llvm \
144+
-DCMAKE_BUILD_TYPE=Release \
145+
-DLLVM_TARGETS_TO_BUILD="$LLVM_TARGETS_TO_BUILD" \
146+
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="$LLVM_EXPERIMENTAL_TARGETS_TO_BUILD" \
147+
-DLLVM_ENABLE_ASSERTIONS=$LLVM_ENABLE_ASSERTIONS \
148+
$BASE_CMAKE_FLAGS
149+
ninja llvm-tblgen
150+
displayName: Build native llvm-tblgen
151+
- script: |
152+
set -ex
153+
cd ..
154+
# Download & extract Android NDK
155+
curl -OL https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip
156+
unzip android-ndk-r20b-linux-x86_64.zip > /dev/null
157+
rm android-ndk-r20b-linux-x86_64.zip
158+
# The NDK toolchain file enforces `-g` as base C[XX] flag - remove it to
159+
# *significantly* reduce executable sizes
160+
TOOLCHAIN_FILE=$PWD/android-ndk-r20b/build/cmake/android.toolchain.cmake
161+
sed -i 's|^ -g$||' $TOOLCHAIN_FILE
162+
# Extend EXTRA_CMAKE_FLAGS for future steps
163+
set +x
164+
echo "##vso[task.setvariable variable=EXTRA_CMAKE_FLAGS]$EXTRA_CMAKE_FLAGS -DLLVM_TABLEGEN=$PWD/build-native/bin/llvm-tblgen -DLLVM_CONFIG_PATH=$PWD/build-native/bin/llvm-config -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN_FILE"
165+
displayName: Set up cross-compilation
166+
- template: .azure-pipelines/posix.yml
167+
168+
# Uploads the packages to a GitHub release.
169+
- job: Upload_to_GitHub
170+
timeoutInMinutes: 30
171+
pool:
172+
vmImage: 'ubuntu-16.04'
173+
dependsOn:
174+
- Windows
175+
- Linux
176+
- macOS
177+
- Android
178+
# Only run for branches and tags, no PRs.
179+
condition: and(succeeded(), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/'), startsWith(variables['Build.SourceBranch'], 'refs/tags/')))
180+
steps:
181+
- checkout: none
182+
- task: DownloadPipelineArtifact@2
183+
inputs:
184+
targetPath: artifacts
185+
- bash: |
186+
set -ex
187+
cd artifacts
188+
mv */*.* .
189+
find . -type d -empty -delete
190+
ls -l
191+
sha256sum * > sha256sums.txt
192+
displayName: Move artifact files out of their subdirs and compute hashes
193+
- bash: |
194+
set -ex
195+
if [ "${BUILD_SOURCEBRANCH:0:10}" != "refs/tags/" ]; then
196+
releaseTag=CI
197+
isPreRelease=true
198+
artifactID=${BUILD_SOURCEVERSION:0:8}
199+
else
200+
releaseTag=${BUILD_SOURCEBRANCH:10}
201+
isPreRelease=false
202+
artifactID=${BUILD_SOURCEBRANCH:15}
203+
fi
204+
mv artifacts/sha256sums.txt artifacts/llvm-$artifactID.sha256sums.txt
205+
set +x
206+
echo "##vso[task.setvariable variable=GITHUB_RELEASE_TAG]$releaseTag"
207+
echo "##vso[task.setvariable variable=GITHUB_RELEASE_ISPRERELEASE]$isPreRelease"
208+
displayName: Set GITHUB_RELEASE_{TAG,ISPRERELEASE} env variables
209+
- task: GitHubRelease@0
210+
inputs:
211+
gitHubConnection: kinke
212+
repositoryName: ldc-developers/llvm-project
213+
action: edit
214+
tag: $(GITHUB_RELEASE_TAG)
215+
assets: artifacts/*
216+
assetUploadMode: replace
217+
isPreRelease: $(GITHUB_RELEASE_ISPRERELEASE)
218+
addChangeLog: false
219+
displayName: Upload artifacts to GitHub release

0 commit comments

Comments
 (0)