1
1
name : halide prebuilt
2
- on : workflow_dispatch
2
+ on :
3
+ workflow_dispatch :
4
+ inputs :
5
+ llvm_run_id :
6
+ description : ' llvm workflow run id'
7
+ default : " latest"
8
+ required : true
3
9
jobs :
4
10
build :
5
11
name : halide [${{matrix.arch}}-${{matrix.os}}-${{matrix.version}}]
6
12
runs-on : ${{matrix.runner}}
7
13
strategy :
8
14
fail-fast : false
9
15
matrix :
10
- arch : [ x86_64 ]
16
+ arch : [ x86_64, aarch64 ]
11
17
os : [ windows, macos, ubuntu-20.04, ubuntu-22.04 ]
12
- version : [ 12.0.1, 14.0.0 ]
18
+ version : [ 14.0.0 ]
13
19
14
20
include :
15
21
- os : windows
16
22
runner : windows-2022
17
23
- os : macos
18
- runner : macos-latest
24
+ runner : macos-12
19
25
- os : ubuntu-20.04
20
26
runner : ubuntu-20.04
21
27
- os : ubuntu-22.04
22
28
runner : ubuntu-22.04
29
+
30
+ - arch : x86_64
31
+ os : windows
32
+ msvc_arch : amd64
33
+ - arch : aarch64
34
+ os : windows
35
+ msvc_arch : amd64_arm64
23
36
24
37
steps :
25
38
- name : Configure Windows runner
26
39
if : runner.os == 'Windows'
27
40
run : |
28
41
choco install ninja 7zip wget
42
+ Install-Module -Name VsDevShell -Force
29
43
30
44
- name : Configure macOS runner
31
45
if : runner.os == 'macOS'
@@ -35,15 +49,18 @@ jobs:
35
49
36
50
- name : Configure Linux runner
37
51
if : runner.os == 'Linux'
52
+ shell : pwsh
38
53
run : |
39
54
sudo apt update
40
- sudo apt install git xz-utils ninja-build
55
+ sudo apt install zstd xz-utils
56
+ sudo apt install ninja-build
57
+ sudo apt install g++-aarch64-linux-gnu
41
58
42
- - name : Install clang+llvm
59
+ - name : Install host clang+llvm
43
60
shell : pwsh
44
61
run : |
45
62
$CLANG_LLVM_OS='$
9E88
{{matrix.os}}'.ToLower()
46
- $CLANG_LLVM_VERSION= if ('${{matrix.version}}' -eq '12.0.1') { '12.0.1' } else { ' 14.0.6' }
63
+ $CLANG_LLVM_VERSION=' 14.0.6'
47
64
$CLANG_LLVM_BASE_URL="https://github.com/awakecoding/llvm-prebuilt/releases/download/v2022.2.0"
48
65
$CLANG_LLVM_NAME="clang+llvm-${CLANG_LLVM_VERSION}-x86_64-${CLANG_LLVM_OS}"
49
66
wget -q "${CLANG_LLVM_BASE_URL}/${CLANG_LLVM_NAME}.tar.xz"
@@ -58,35 +75,123 @@ jobs:
58
75
}
59
76
$LLVM_BIN_PATH="$LLVM_PREFIX/bin"
60
77
$LLVM_DIR="$LLVM_PREFIX/lib/cmake/llvm"
78
+ $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
+
61
82
echo "LLVM_DIR=$LLVM_DIR" >> $Env:GITHUB_ENV
83
+ echo "CLANG_DIR=$CLANG_DIR" >> $Env:GITHUB_ENV
62
84
echo "PATH=$LLVM_BIN_PATH$([IO.Path]::PathSeparator)$Env:PATH" >> $Env:GITHUB_ENV
63
85
86
+ - name : Install target clang+llvm
87
+ if : matrix.arch == 'aarch64'
88
+ shell : pwsh
89
+ env :
90
+ GH_TOKEN : ${{ github.token }}
91
+ run : |
92
+ $LlvmPlatform='${{matrix.os}}'
93
+ $LlvmArch='${{matrix.arch}}'
94
+ $LlvmVersion='14.0.6'
95
+ $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
103
+ if ($IsWindows) {
104
+ $LLVM_PREFIX="C:/llvm-${LlvmArch}"
105
+ cmd.exe /c "7z.exe x ${LlvmName}.tar.xz -so | 7z x -si -ttar -o`"C:/temp`""
106
+ mv "C:/temp/${LlvmName}" $LLVM_PREFIX
107
+ } else {
108
+ $LLVM_PREFIX="/opt/llvm-${LlvmArch}"
109
+ tar -xf "${LlvmName}.tar.xz" -C /tmp
110
+ sudo mv "/tmp/${LlvmName}" $LLVM_PREFIX
111
+ }
112
+ $LLVM_BIN_PATH="$LLVM_PREFIX/bin"
113
+ $LLVM_DIR="$LLVM_PREFIX/lib/cmake/llvm"
114
+ $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
117
+
118
+ echo "LLVM_DIR=$LLVM_DIR" >> $Env:GITHUB_ENV
119
+ #echo "CLANG_DIR=$CLANG_DIR" >> $Env:GITHUB_ENV
120
+
121
+ - name : Clone project
122
+ uses : actions/checkout@v3
123
+ with :
124
+ path : llvm-prebuilt
125
+
64
126
- name : Clone Halide ${{matrix.version}}
65
127
uses : actions/checkout@v3
66
128
with :
67
129
repository : halide/Halide
68
130
ref : v${{matrix.version}}
69
131
path : halide
70
132
71
- - name : Enable Windows environment
133
+ - name : Patch Halide
134
+ shell : pwsh
135
+ 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
140
+
141
+ - name : Build Halide host tools
142
+ shell : pwsh
143
+ run : |
144
+ if ($IsWindows) {
145
+ Enter-VsDevShell x64
146
+ }
147
+
148
+ cmake -G Ninja -S halide -B halide-host `
149
+ -DCMAKE_BUILD_TYPE=Release `
150
+ -DLLVM_DIR="$Env:LLVM_DIR" `
151
+ -Wno-dev
152
+
153
+ cmake --build halide-host --target build_halide_h binary2cpp regexp_replace
154
+
155
+ $HALIDE_HOST_TOOLS_DIR = "$Env:GITHUB_WORKSPACE/halide-host/tools"
156
+ if ($IsWindows) {
157
+ $HALIDE_HOST_TOOLS_DIR = "$Env:GITHUB_WORKSPACE/halide-host/bin"
158
+ }
159
+ echo "HALIDE_HOST_TOOLS_DIR=$HALIDE_HOST_TOOLS_DIR" >> $Env:GITHUB_ENV
160
+
161
+ - name : Enable Windows target environment
72
162
if : runner.os == 'Windows'
73
163
uses : ilammy/msvc-dev-cmd@v1
74
164
with :
75
- arch : amd64
165
+ arch : ${{matrix.msvc_arch}}
76
166
77
167
- name : Configure Halide
78
168
shell : pwsh
79
169
run : |
80
170
if ($IsWindows) {
81
- $Env:CC="clang-cl"
82
- $Env:CXX="clang-cl"
171
+ $TargetArch = @{'x86_64'='x86_64';'aarch64'='arm64'}['${{matrix.arch}}']
172
+ $Env:CC="clang-cl --target=${TargetArch}-pc-windows-msvc"
173
+ $Env:CXX="clang-cl --target=${TargetArch}-pc-windows-msvc"
174
+ }
175
+ $TargetName = "${{matrix.arch}}-${{matrix.os}}"
176
+ $CMakeToolchainFile = "$Env:GITHUB_WORKSPACE/llvm-prebuilt/cmake/$TargetName.cmake"
177
+ $CMakeArgs = @("-DCMAKE_BUILD_TYPE=Release", "-DBUILD_SHARED_LIBS=ON")
178
+ $CMakeArgs += @("-DWITH_TESTS=OFF", "-DWITH_TUTORIALS=OFF")
179
+ $CMakeArgs += @("-DWITH_DOCS=OFF", "-DWITH_UTILS=OFF")
180
+ $CMakeArgs += @("-DWITH_PYTHON_BINDINGS=OFF")
181
+ $CMakeArgs += @("-DTARGET_WEBASSEMBLY=ON")
182
+ $CMakeArgs += @("-Wno-dev")
183
+
184
+ if ('${{matrix.os}}' -eq 'macos') {
185
+ $AppleArch = @{'x86_64'='x86_64';'aarch64'='arm64'}['${{matrix.arch}}']
186
+ $CMakeArgs += @("-DCMAKE_OSX_ARCHITECTURES=`"$AppleArch`"")
83
187
}
84
- cmake -G Ninja -S halide -B halide-build `
85
- -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON `
86
- -DWITH_TESTS=OFF -DWITH_APPS=OFF -DWITH_TUTORIALS=OFF `
87
- -DWITH_DOCS=OFF -DWITH_UTILS=OFF -DWITH_PYTHON_BINDINGS=OFF `
88
- -DTARGET_WEBASSEMBLY=ON -DLLVM_DIR="$Env:LLVM_DIR" -Wno-dev `
89
- -DCMAKE_INSTALL_PREFIX="halide-install"
188
+
189
+ cmake -G Ninja -S halide -B halide-build $CMakeArgs `
190
+ -DLLVM_DIR="$Env:LLVM_DIR" `
191
+ -DClang_DIR="$Env:CLANG_DIR" `
192
+ -DHALIDE_HOST_TOOLS_DIR="$Env:HALIDE_HOST_TOOLS_DIR" `
193
+ -DCMAKE_INSTALL_PREFIX="halide-install" `
194
+ -DCMAKE_TOOLCHAIN_FILE="$CMakeToolchainFile"
90
195
91
196
- name : Build Halide
92
197
run : cmake --build halide-build
0 commit comments