Skip to content

Commit 7cb75c2

Browse files
Marc-André Moreauawakecoding
authored andcommitted
update halide build
1 parent 539c808 commit 7cb75c2

5 files changed

+227
-54
lines changed

.github/workflows/halide-prebuilt.yml

Lines changed: 90 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
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
@@ -35,6 +35,11 @@ jobs:
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
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
From 58ad85758391a8058d6fdfebfefc0abae5539630 Mon Sep 17 00:00:00 2001
2+
From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= <[email protected]>
3+
Date: Sat, 21 Jan 2023 10:15:38 -0500
4+
Subject: [PATCH] add HALIDE_HOST_TOOLS_DIR cmake option
5+
6+
---
7+
tools/CMakeLists.txt | 26 ++++++++++++++++++++------
8+
1 file changed, 20 insertions(+), 6 deletions(-)
9+
10+
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
11+
index 0d8ff8e8b..23d7b2496 100644
12+
--- a/tools/CMakeLists.txt
13+
+++ b/tools/CMakeLists.txt
14+
@@ -2,14 +2,28 @@
15+
# Build time tools
16+
##
17+
18+
-add_executable(build_halide_h build_halide_h.cpp)
19+
-target_compile_options(build_halide_h PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/wd4996>)
20+
+if(DEFINED HALIDE_HOST_TOOLS_DIR)
21+
+ add_executable(build_halide_h IMPORTED GLOBAL)
22+
+ set_property(TARGET build_halide_h PROPERTY IMPORTED_LOCATION
23+
+ "${HALIDE_HOST_TOOLS_DIR}/build_halide_h${CMAKE_EXECUTABLE_SUFFIX}")
24+
25+
-add_executable(binary2cpp binary2cpp.cpp)
26+
-target_compile_options(binary2cpp PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/wd4996>)
27+
+ add_executable(binary2cpp IMPORTED GLOBAL)
28+
+ set_property(TARGET binary2cpp PROPERTY IMPORTED_LOCATION
29+
+ "${HALIDE_HOST_TOOLS_DIR}/binary2cpp${CMAKE_EXECUTABLE_SUFFIX}")
30+
31+
-add_executable(regexp_replace regexp_replace.cpp)
32+
-target_compile_options(regexp_replace PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/wd4996>)
33+
+ add_executable(regexp_replace IMPORTED GLOBAL)
34+
+ set_property(TARGET regexp_replace PROPERTY IMPORTED_LOCATION
35+
+ "${HALIDE_HOST_TOOLS_DIR}/regexp_replace${CMAKE_EXECUTABLE_SUFFIX}")
36+
+else()
37+
+ add_executable(build_halide_h build_halide_h.cpp)
38+
+ target_compile_options(build_halide_h PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/wd4996>)
39+
+
40+
+ add_executable(binary2cpp binary2cpp.cpp)
41+
+ target_compile_options(binary2cpp PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/wd4996>)
42+
+
43+
+ add_executable(regexp_replace regexp_replace.cpp)
44+
+ target_compile_options(regexp_replace PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/wd4996>)
45+
+endif()
46+
47+
##
48+
# Interface target for enabling PNG/JPEG support in Halide
49+
--
50+
2.25.1
51+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
From 644b27083565e1f6f2b010dc3cdc21259ade9880 Mon Sep 17 00:00:00 2001
2+
From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= <[email protected]>
3+
Date: Sun, 22 Jan 2023 08:01:56 -0500
4+
Subject: [PATCH] disable autoschedulers
5+
6+
---
7+
src/CMakeLists.txt | 4 ++--
8+
1 file changed, 2 insertions(+), 2 deletions(-)
9+
10+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
11+
index 809b3efdd..8202c49d5 100644
12+
--- a/src/CMakeLists.txt
13+
+++ b/src/CMakeLists.txt
14+
@@ -524,8 +524,8 @@ endif ()
15+
##
16+
17+
if (BUILD_SHARED_LIBS)
18+
- message(STATUS "Building autoschedulers enabled")
19+
- add_subdirectory(autoschedulers)
20+
+ #message(STATUS "Building autoschedulers enabled")
21+
+ #add_subdirectory(autoschedulers)
22+
else ()
23+
message(STATUS "Building autoschedulers disabled (static Halide)")
24+
endif ()
25+
--
26+
2.25.1
27+
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
From b44261e5846f054b16901e6fe0d31d23cee8e74b Mon Sep 17 00:00:00 2001
2+
From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= <[email protected]>
3+
Date: Tue, 7 Nov 2023 11:07:53 -0500
4+
Subject: [PATCH] [PATCH] disable clang verbose build warnings
5+
6+
---
7+
src/CMakeLists.txt | 2 ++
8+
1 file changed, 2 insertions(+)
9+
10+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
11+
index 84f98033a..8fda27e5b 100644
12+
--- a/src/CMakeLists.txt
13+
+++ b/src/CMakeLists.txt
14+
@@ -521,6 +521,8 @@ target_compile_options(
15+
$<$<CXX_COMPILER_ID:Clang,AppleClang>:-Wno-undefined-func-template>
16+
$<$<CXX_COMPILER_ID:Clang,AppleClang>:-Wno-unused-member-function>
17+
$<$<CXX_COMPILER_ID:Clang,AppleClang>:-Wno-unused-template>
18+
+ $<$<CXX_COMPILER_ID:Clang,AppleClang>:-Wno-unknown-warning-option>
19+
+ $<$<CXX_COMPILER_ID:Clang,AppleClang>:-Wno-unsafe-buffer-usage>
20+
21+
# This warning was removed in Clang 13
22+
$<$<AND:$<CXX_COMPILER_ID:Clang,AppleClang>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,13.0>>:-Wno-return-std-move-in-c++11>
23+
--
24+
2.25.1
25+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
From dfcb3a317b420e1e5b4f98506f0e9d12a4adb406 Mon Sep 17 00:00:00 2001
2+
From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= <[email protected]>
3+
Date: Sun, 22 Jan 2023 14:40:59 -0500
4+
Subject: [PATCH] disable imported clang+llvm executable promotion
5+
6+
---
7+
dependencies/llvm/CMakeLists.txt | 4 ++++
8+
1 file changed, 4 insertions(+)
9+
10+
diff --git a/dependencies/llvm/CMakeLists.txt b/dependencies/llvm/CMakeLists.txt
11+
index 248aaf9ea..a8e613a37 100644
12+
--- a/dependencies/llvm/CMakeLists.txt
13+
+++ b/dependencies/llvm/CMakeLists.txt
14+
@@ -42,6 +42,8 @@ cmake_dependent_option(Halide_BUNDLE_LLVM "When built as a static library, inclu
15+
# Promote LLVM/Clang executable targets
16+
##
17+
18+
+if(PROMOTE_IMPORTED_CLANG_LLVM)
19+
+
20+
set_target_properties(llvm-as clang PROPERTIES IMPORTED_GLOBAL TRUE)
21+
22+
# clang-tools-extra is optional, but provides the clang-format target
23+
@@ -49,6 +51,8 @@ if (TARGET clang-format)
24+
set_target_properties(clang-format PROPERTIES IMPORTED_GLOBAL TRUE)
25+
endif ()
26+
27+
+endif()
28+
+
29+
##
30+
# Create options for including or excluding LLVM backends.
31+
##
32+
--
33+
2.25.1
34+

0 commit comments

Comments
 (0)