15
15
matrix :
16
16
arch : [ x86_64, aarch64 ]
17
17
os : [ windows, macos, ubuntu-20.04, ubuntu-22.04 ]
18
- version : [ 14 .0.0 ]
18
+ version : [ 16 .0.0 ]
19
19
20
20
include :
21
21
- os : windows
35
35
msvc_arch : amd64_arm64
36
36
37
37
steps :
38
+ - name : Set up Python
39
+ uses : actions/setup-python@v4
40
+ with :
41
+ python-version : ' 3.9'
42
+
38
43
- name : Configure Windows runner
39
44
if : runner.os == 'Windows'
40
45
run : |
@@ -56,32 +61,55 @@ jobs:
56
61
sudo apt install ninja-build
57
62
sudo apt install g++-aarch64-linux-gnu
58
63
64
+ - name : Preflight
65
+ shell : pwsh
66
+ run : |
67
+ $LlvmVersion = if ('${{matrix.version}}' -eq "14.0.0") { "14.0.6" } else { "16.0.6" }
68
+ $LlvmRunId = '${{ github.event.inputs.run_id }}'
69
+ if ($LlvmRunId -eq 'latest') {
70
+ $LlvmRunId = $(gh run list -w 'LLVM prebuilt' --json 'status,databaseId,conclusion') |
71
+ ConvertFrom-Json | Where-Object { ($_.status -eq 'completed') -and ($_.conclusion -eq 'success') } |
72
+ Select-Object -First 1 -ExpandProperty databaseId
73
+ }
74
+ echo "LLVM_VERSION=$LlvmVersion" >> $Env:GITHUB_ENV
75
+ echo "LLVM_RUN_ID=$LlvmRunId" >> $Env:GITHUB_ENV
76
+
59
77
- name : Install host clang+llvm
60
78
shell : pwsh
79
+ env :
80
+ GH_TOKEN : ${{ github.token }}
61
81
run : |
62
- $CLANG_LLVM_OS='${{matrix.os}}'.ToLower()
63
- $CLANG_LLVM_VERSION='14.0.6'
64
- $CLANG_LLVM_BASE_URL="https://github.com/awakecoding/llvm-prebuilt/releases/download/v2022.2.0"
65
- $CLANG_LLVM_NAME="clang+llvm-${CLANG_LLVM_VERSION}-x86_64-${CLANG_LLVM_OS}"
66
- wget -q "${CLANG_LLVM_BASE_URL}/${CLANG_LLVM_NAME}.tar.xz"
82
+ $LlvmPlatform='${{matrix.os}}'
83
+ $LlvmArch='x86_64'
84
+ $LlvmVersion = $Env:LLVM_VERSION
85
+ $LlvmRunId = $Env:LLVM_RUN_ID
86
+ $LlvmName="clang+llvm-${LlvmVersion}-${LlvmArch}-${LlvmPlatform}"
87
+ & gh run download $LlvmRunId --repo $Env:GITHUB_REPOSITORY -n $LlvmName
67
88
if ($IsWindows) {
68
- $LLVM_PREFIX="C:/llvm"
69
- cmd.exe /c "7z.exe x ${CLANG_LLVM_NAME}.tar.xz -so | 7z x -si -ttar -o`"C:/temp`""
70
- mv "C:/temp/${CLANG_LLVM_NAME}" $LLVM_PREFIX
89
+ $TempDir = "C:/temp"
90
+ $LLVM_PREFIX = "C:/llvm"
91
+ cmd.exe /c "7z.exe x ${LlvmName}.tar.xz -so | 7z x -si -ttar -o`"C:/temp`""
92
+ mv "$TempDir/${LlvmName}" $LLVM_PREFIX
71
93
} else {
72
- $LLVM_PREFIX="/opt/llvm"
73
- tar -xf "${CLANG_LLVM_NAME}.tar.xz" -C /tmp
74
- sudo mv "/tmp/${CLANG_LLVM_NAME}" $LLVM_PREFIX
94
+ $TempDir = "/tmp"
95
+ $LLVM_PREFIX = "/opt/llvm"
96
+ tar -xvf "${LlvmName}.tar.xz" -C $TempDir
97
+ sudo mv "$TempDir/${LlvmName}" $LLVM_PREFIX
75
98
}
76
- $LLVM_BIN_PATH ="$LLVM_PREFIX/bin"
99
+ $LLVM_BIN_DIR ="$LLVM_PREFIX/bin"
77
100
$LLVM_DIR="$LLVM_PREFIX/lib/cmake/llvm"
78
101
$CLANG_DIR="$LLVM_PREFIX/lib/cmake/clang"
79
- echo "LLVM_X86_64_DIR=$LLVM_DIR" >> $Env:GITHUB_ENV
80
- echo "CLANG_X86_64_DIR=$CLANG_DIR" >> $Env:GITHUB_ENV
81
102
82
- echo "LLVM_DIR=$LLVM_DIR" >> $Env:GITHUB_ENV
83
- echo "CLANG_DIR=$CLANG_DIR" >> $Env:GITHUB_ENV
84
- echo "PATH=$LLVM_BIN_PATH$([IO.Path]::PathSeparator)$Env:PATH" >> $Env:GITHUB_ENV
103
+ echo "LLVM_HOST_DIR=$LLVM_DIR" >> $Env:GITHUB_ENV
104
+ echo "CLANG_HOST_DIR=$CLANG_DIR" >> $Env:GITHUB_ENV
105
+
106
+ if ('${{matrix.arch}}' -eq 'x86_64') {
107
+ echo "LLVM_TARGET_DIR=$LLVM_DIR" >> $Env:GITHUB_ENV
108
+ echo "CLANG_TARGET_DIR=$CLANG_DIR" >> $Env:GITHUB_ENV
109
+ }
110
+
111
+ echo "LLVM_HOST_BIN_DIR=$LLVM_BIN_DIR" >> $Env:GITHUB_ENV
112
+ echo "PATH=$LLVM_BIN_DIR$([IO.Path]::PathSeparator)$Env:PATH" >> $Env:GITHUB_ENV
85
113
86
114
- name : Install target clang+llvm
87
115
if : matrix.arch == 'aarch64'
@@ -91,32 +119,34 @@ jobs:
91
119
run : |
92
120
$LlvmPlatform='${{matrix.os}}'
93
121
$LlvmArch='${{matrix.arch}}'
94
- $LlvmVersion='14.0.6'
122
+ $LlvmVersion = $Env:LLVM_VERSION
123
+ $LlvmRunId = $Env:LLVM_RUN_ID
95
124
$LlvmName="clang+llvm-${LlvmVersion}-${LlvmArch}-${LlvmPlatform}"
96
- $RunId = '${{ github.event.inputs.run_id }}'
97
- if ($RunId -eq 'latest') {
98
- $RunId = $(gh run list -w 'LLVM prebuilt' --json 'status,databaseId,conclusion') |
99
- ConvertFrom-Json | Where-Object { ($_.status -eq 'completed') -and ($_.conclusion -eq 'success') } |
100
- Select-Object -First 1 -ExpandProperty databaseId
101
- }
102
- & gh run download $RunId --repo $Env:GITHUB_REPOSITORY -n $LlvmName
125
+ & gh run download $LlvmRunId --repo $Env:GITHUB_REPOSITORY -n $LlvmName
103
126
if ($IsWindows) {
104
- $LLVM_PREFIX="C:/llvm-${LlvmArch}"
127
+ $TempDir = "C:/temp"
128
+ $LLVM_PREFIX = "C:/llvm-$LlvmArch"
105
129
cmd.exe /c "7z.exe x ${LlvmName}.tar.xz -so | 7z x -si -ttar -o`"C:/temp`""
106
- mv "C:/temp /${LlvmName}" $LLVM_PREFIX
130
+ mv "$TempDir /${LlvmName}" $LLVM_PREFIX
107
131
} else {
108
- $LLVM_PREFIX="/opt/llvm-${LlvmArch}"
109
- tar -xf "${LlvmName}.tar.xz" -C /tmp
110
- sudo mv "/tmp/${LlvmName}" $LLVM_PREFIX
132
+ $TempDir = "/tmp"
133
+ $LLVM_PREFIX = "/opt/llvm-$LlvmArch"
134
+ tar -xf "${LlvmName}.tar.xz" -C $TempDir
135
+ sudo mv "$TempDir/${LlvmName}" $LLVM_PREFIX
111
136
}
112
- $LLVM_BIN_PATH ="$LLVM_PREFIX/bin"
137
+ $LLVM_BIN_DIR ="$LLVM_PREFIX/bin"
113
138
$LLVM_DIR="$LLVM_PREFIX/lib/cmake/llvm"
114
139
$CLANG_DIR="$LLVM_PREFIX/lib/cmake/clang"
115
- echo "LLVM_AARCH64_DIR =$LLVM_DIR" >> $Env:GITHUB_ENV
116
- echo "CLANG_AARCH64_DIR=$LLVM_DIR " >> $Env:GITHUB_ENV
140
+ echo "LLVM_TARGET_DIR =$LLVM_DIR" >> $Env:GITHUB_ENV
141
+ echo "CLANG_TARGET_DIR=$CLANG_DIR " >> $Env:GITHUB_ENV
117
142
118
- echo "LLVM_DIR=$LLVM_DIR" >> $Env:GITHUB_ENV
119
- #echo "CLANG_DIR=$CLANG_DIR" >> $Env:GITHUB_ENV
143
+ $LLVM_HOST_BIN_DIR=$Env:LLVM_HOST_BIN_DIR
144
+ $LLVM_TARGET_BIN_DIR=$LLVM_BIN_DIR
145
+ $ExeSuffix = if ($IsWindows) { ".exe" } else { "" }
146
+ @('llvm-as', 'clang', 'clang-format') | ForEach-Object {
147
+ $ExeFileName = "$_${ExeSuffix}"
148
+ Copy-Item -Path "${LLVM_HOST_BIN_DIR}/$ExeFileName" -Destination "${LLVM_TARGET_BIN_DIR}/$ExeFileName" -Force
149
+ }
120
150
121
151
- name : Clone project
122
152
uses : actions/checkout@v3
@@ -133,10 +163,16 @@ jobs:
133
163
- name : Patch Halide
134
164
shell : pwsh
135
165
run : |
136
- git -C halide apply ../llvm-prebuilt/patches/halide-14-add-halide-host-tools-dir-cmake-option.patch
137
- git -C halide apply ../llvm-prebuilt/patches/halide-14-disable-autoschedulers.patch
138
- git -C halide apply ../llvm-prebuilt/patches/halide-14-disable-imported-clang-llvm-executables.patch
139
- git -C halide apply ../llvm-prebuilt/patches/halide-14-add-clang-no-unknown-warning-option.patch
166
+ if ('${{matrix.version}}' -eq '14.0.0') {
167
+ git -C halide apply ../llvm-prebuilt/patches/halide-14-add-halide-host-tools-dir-cmake-option.patch
168
+ git -C halide apply ../llvm-prebuilt/patches/halide-14-disable-autoschedulers.patch
169
+ git -C halide apply ../llvm-prebuilt/patches/halide-14-disable-imported-clang-llvm-executables.patch
170
+ git -C halide apply ../llvm-prebuilt/patches/halide-14-add-clang-no-unknown-warning-option.patch
171
+ } else {
172
+ git -C halide apply ../llvm-prebuilt/patches/halide-16-add-halide-host-tools-dir-cmake-option.patch
173
+ git -C halide apply ../llvm-prebuilt/patches/halide-16-disable-autoschedulers.patch
174
+ git -C halide apply ../llvm-prebuilt/patches/halide-16-disable-clang-verbose-build-warnings.patch
175
+ }
140
176
141
177
- name : Build Halide host tools
142
178
shell : pwsh
@@ -147,7 +183,10 @@ jobs:
147
183
148
184
cmake -G Ninja -S halide -B halide-host `
149
185
-DCMAKE_BUILD_TYPE=Release `
150
- -DLLVM_DIR="$Env:LLVM_DIR" `
186
+ -DLLVM_DIR="$Env:LLVM_HOST_DIR" `
187
+ -DClang_DIR="$Env:CLANG_HOST_DIR" `
188
+ -DWITH_TESTS=OFF -DWITH_UTILS=OFF `
189
+ -DWITH_PYTHON_BINDINGS=OFF `
151
190
-Wno-dev
152
191
153
192
cmake --build halide-host --target build_halide_h binary2cpp regexp_replace
@@ -187,9 +226,10 @@ jobs:
187
226
}
188
227
189
228
cmake -G Ninja -S halide -B halide-build $CMakeArgs `
190
- -DLLVM_DIR="$Env:LLVM_DIR " `
191
- -DClang_DIR="$Env:CLANG_DIR " `
229
+ -DLLVM_DIR="$Env:LLVM_TARGET_DIR " `
230
+ -DClang_DIR="$Env:CLANG_HOST_DIR " `
192
231
-DHALIDE_HOST_TOOLS_DIR="$Env:HALIDE_HOST_TOOLS_DIR" `
232
+ -DLLVM_HOST_BIN_DIR="$Env:LLVM_HOST_BIN_DIR" `
193
233
-DCMAKE_INSTALL_PREFIX="halide-install" `
194
234
-DCMAKE_TOOLCHAIN_FILE="$CMakeToolchainFile"
195
235
@@ -200,19 +240,15 @@ jobs:
200
240
run : cmake --install halide-build
201
241
202
242
- name : Package Halide
203
- if : runner.os != 'Windows'
204
- run : |
205
- PACKAGE_NAME="halide-${{matrix.version}}-${{matrix.arch}}-${{matrix.os}}"
206
- mv halide-install ./${PACKAGE_NAME}
207
- tar -cJf ${PACKAGE_NAME}.tar.xz ${PACKAGE_NAME}
208
-
209
- - name : Package Halide
210
- if : runner.os == 'Windows'
211
243
shell : pwsh
212
244
run : |
213
- $PACKAGE_NAME="halide-${{matrix.version}}-${{matrix.arch}}-${{matrix.os}}"
214
- mv halide-install $PACKAGE_NAME
215
- cmd.exe /c "7z a -ttar -snl -so $PACKAGE_NAME.tar $PACKAGE_NAME | 7z a -si $PACKAGE_NAME.tar.xz"
245
+ $PackageName="halide-${{matrix.version}}-${{matrix.arch}}-${{matrix.os}}"
246
+ Move-Item halide-install $PackageName
247
+ if ($IsWindows) {
248
+ cmd.exe /c "7z a -ttar -snl -so $PackageName.tar $PackageName | 7z a -si $PackageName.tar.xz"
249
+ } else {
250
+ tar -cJf "${PackageName}.tar.xz" "${PackageName}"
251
+ }
216
252
217
253
- name : Upload Halide package
218
254
uses : actions/upload-artifact@v3
0 commit comments