1515 matrix :
1616 arch : [ x86_64, aarch64 ]
1717 os : [ windows, macos, ubuntu-20.04, ubuntu-22.04 ]
18- version : [ 14 .0.0 ]
18+ version : [ 16 .0.0 ]
1919
2020 include :
2121 - os : windows
3535 msvc_arch : amd64_arm64
3636
3737 steps :
38+ - name : Set up Python
39+ uses : actions/setup-python@v4
40+ with :
41+ python-version : ' 3.9'
42+
3843 - name : Configure Windows runner
3944 if : runner.os == 'Windows'
4045 run : |
@@ -56,32 +61,55 @@ jobs:
5661 sudo apt install ninja-build
5762 sudo apt install g++-aarch64-linux-gnu
5863
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+
5977 - name : Install host clang+llvm
6078 shell : pwsh
79+ env :
80+ GH_TOKEN : ${{ github.token }}
6181 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
6788 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
7193 } 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
7598 }
76- $LLVM_BIN_PATH ="$LLVM_PREFIX/bin"
99+ $LLVM_BIN_DIR ="$LLVM_PREFIX/bin"
77100 $LLVM_DIR="$LLVM_PREFIX/lib/cmake/llvm"
78101 $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
81102
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
85113
86114 - name : Install target clang+llvm
87115 if : matrix.arch == 'aarch64'
@@ -91,32 +119,34 @@ jobs:
91119 run : |
92120 $LlvmPlatform='${{matrix.os}}'
93121 $LlvmArch='${{matrix.arch}}'
94- $LlvmVersion='14.0.6'
122+ $LlvmVersion = $Env:LLVM_VERSION
123+ $LlvmRunId = $Env:LLVM_RUN_ID
95124 $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
103126 if ($IsWindows) {
104- $LLVM_PREFIX="C:/llvm-${LlvmArch}"
127+ $TempDir = "C:/temp"
128+ $LLVM_PREFIX = "C:/llvm-$LlvmArch"
105129 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
107131 } 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
111136 }
112- $LLVM_BIN_PATH ="$LLVM_PREFIX/bin"
137+ $LLVM_BIN_DIR ="$LLVM_PREFIX/bin"
113138 $LLVM_DIR="$LLVM_PREFIX/lib/cmake/llvm"
114139 $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
117142
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+ }
120150
121151 - name : Clone project
122152 uses : actions/checkout@v3
@@ -133,10 +163,16 @@ jobs:
133163 - name : Patch Halide
134164 shell : pwsh
135165 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+ }
140176
141177 - name : Build Halide host tools
142178 shell : pwsh
@@ -147,7 +183,10 @@ jobs:
147183
148184 cmake -G Ninja -S halide -B halide-host `
149185 -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 `
151190 -Wno-dev
152191
153192 cmake --build halide-host --target build_halide_h binary2cpp regexp_replace
@@ -187,9 +226,10 @@ jobs:
187226 }
188227
189228 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 " `
192231 -DHALIDE_HOST_TOOLS_DIR="$Env:HALIDE_HOST_TOOLS_DIR" `
232+ -DLLVM_HOST_BIN_DIR="$Env:LLVM_HOST_BIN_DIR" `
193233 -DCMAKE_INSTALL_PREFIX="halide-install" `
194234 -DCMAKE_TOOLCHAIN_FILE="$CMakeToolchainFile"
195235
@@ -200,19 +240,15 @@ jobs:
200240 run : cmake --install halide-build
201241
202242 - 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'
211243 shell : pwsh
212244 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+ }
216252
217253 - name : Upload Halide package
218254 uses : actions/upload-artifact@v3
0 commit comments