8000 add halide arm64 cross-compilation · awakecoding/llvm-prebuilt@1a54bd2 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1a54bd2

Browse files
Marc-André Moreauawakecoding
Marc-André Moreau
authored andcommitted
add halide arm64 cross-compilation
1 parent 08cc1a2 commit 1a54bd2

12 files changed

+272
-32
lines changed

.github/workflows/halide-prebuilt.yml

Lines changed: 122 additions & 17 deletions
8000
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,45 @@
11
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
39
jobs:
410
build:
511
name: halide [${{matrix.arch}}-${{matrix.os}}-${{matrix.version}}]
612
runs-on: ${{matrix.runner}}
713
strategy:
814
fail-fast: false
915
matrix:
10-
arch: [ x86_64 ]
16+
arch: [ x86_64, aarch64 ]
1117
os: [ windows, macos, ubuntu-20.04, ubuntu-22.04 ]
12-
version: [ 12.0.1, 14.0.0 ]
18+
version: [ 14.0.0 ]
1319

1420
include:
1521
- os: windows
1622
runner: windows-2022
1723
- os: macos
18-
runner: macos-latest
24+
runner: macos-12
1925
- os: ubuntu-20.04
2026
runner: ubuntu-20.04
2127
- os: ubuntu-22.04
2228
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
2336

2437
steps:
2538
- name: Configure Windows runner
2639
if: runner.os == 'Windows'
2740
run: |
2841
choco install ninja 7zip wget
42+
Install-Module -Name VsDevShell -Force
2943
3044
- name: Configure macOS runner
3145
if: runner.os == 'macOS'
@@ -35,15 +49,18 @@ jobs:
3549
3650
- name: Configure Linux runner
3751
if: runner.os == 'Linux'
52+
shell: pwsh
3853
run: |
3954
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
4158
42-
- name: Install clang+llvm
59+
- name: Install host clang+llvm
4360
shell: pwsh
4461
run: |
4562
$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'
4764
$CLANG_LLVM_BASE_URL="https://github.com/awakecoding/llvm-prebuilt/releases/download/v2022.2.0"
4865
$CLANG_LLVM_NAME="clang+llvm-${CLANG_LLVM_VERSION}-x86_64-${CLANG_LLVM_OS}"
4966
wget -q "${CLANG_LLVM_BASE_URL}/${CLANG_LLVM_NAME}.tar.xz"
@@ -58,35 +75,123 @@ jobs:
5875
}
5976
$LLVM_BIN_PATH="$LLVM_PREFIX/bin"
6077
$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+
6182
echo "LLVM_DIR=$LLVM_DIR" >> $Env:GITHUB_ENV
83+
echo "CLANG_DIR=$CLANG_DIR" >> $Env:GITHUB_ENV
6284
echo "PATH=$LLVM_BIN_PATH$([IO.Path]::PathSeparator)$Env:PATH" >> $Env:GITHUB_ENV
6385
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+
64126
- name: Clone Halide ${{matrix.version}}
65127
uses: actions/checkout@v3
66128
with:
67129
repository: halide/Halide
68130
ref: v${{matrix.version}}
69131
path: halide
70132

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
72162
if: runner.os == 'Windows'
73163
uses: ilammy/msvc-dev-cmd@v1
74164
with:
75-
arch: amd64
165+
arch: ${{matrix.msvc_arch}}
76166

77167
- name: Configure Halide
78168
shell: pwsh
79169
run: |
80170
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`"")
83187
}
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"
90195
91196
- name: Build Halide
92197
run: cmake --build halide-build

.github/workflows/llvm-prebuilt.yml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ jobs:
6262
sudo apt install libxml2-dev
6363
mkdir libxml2-dev-arm64 && cd libxml2-dev-arm64
6464
$LibXmlDebFile = if ($(lsb_release -rs) -eq '20.04') {
65-
"libxml2-dev_2.9.10+dfsg-5ubuntu0.20.04.4_arm64.deb"
65+
"libxml2-dev_2.9.10+dfsg-5ubuntu0.20.04.5_arm64.deb"
6666
} else {
6767
"libxml2-dev_2.9.13+dfsg-1build1_arm64.deb"
6868
}
@@ -130,10 +130,20 @@ jobs:
130130
shell: pwsh
131131
run: |
132132
$TargetName = "${{matrix.arch}}-${{matrix.os}}"
133-
$CMakeCache = "$Env:GITHUB_WORKSPACE/llvm-prebuilt/cmake/$TargetName.cmake"
134-
cmake -G Ninja -S llvm-project/llvm -B llvm-build `
133+
$CMakeToolchainFile = "$Env:GITHUB_WORKSPACE/llvm-prebuilt/cmake/$TargetName.cmake"
134+
$CMakeInitialCache = "$Env:GITHUB_WORKSPACE/llvm-prebuilt/cmake/llvm-distribution.cmake"
135+
136+
$CMakeArgs = @()
137+
138+
if ('${{matrix.os}}' -eq 'macos') {
139+
$AppleArch = @{'x86_64'='x86_64';'aarch64'='arm64'}['${{matrix.arch}}']
140+
$CMakeArgs += @("-DCMAKE_OSX_ARCHITECTURES=`"$AppleArch`"")
141+
}
142+
143+
cmake -G Ninja -S llvm-project/llvm -B llvm-build $CMakeArgs `
135144
-DCMAKE_INSTALL_PREFIX=llvm-install `
136-
-C $CMakeCache -Wno-dev
145+
-DCMAKE_TOOLCHAIN_FILE="$CMakeToolchainFile" `
146+
-C $CMakeInitialCache -Wno-dev
137147
138148
- name: Build LLVM
139149
run: cmake --build llvm-build

cmake/aarch64-linux.cmake

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,3 @@ set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
88

99
set(LLVM_TARGET_ARCH AArch64)
1010
set(LLVM_DEFAULT_TARGET_TRIPLE aarch64-linux-gnu)
11-
12-
include("${CMAKE_CURRENT_LIST_DIR}/llvm-distribution.cmake")

cmake/aarch64-macos.cmake

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,3 @@ set(CMAKE_OSX_ARCHITECTURES "arm64")
44
set(CMAKE_CROSSCOMPILING TRUE)
55

66
set(LLVM_TARGET_ARCH AArch64)
7-
8-
include("${CMAKE_CURRENT_LIST_DIR}/llvm-distribution.cmake")

cmake/aarch64-windows.cmake

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,3 @@ set(CMAKE_SYSTEM_PROCESSOR "ARM64")
44
set(CMAKE_CROSSCOMPILING TRUE)
55

66
set(LLVM_TARGET_ARCH AArch64)
7-
8-
include("${CMAKE_CURRENT_LIST_DIR}/llvm-distribution.cmake")

cmake/x86_64-linux.cmake

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,3 @@ set(CMAKE_SYSTEM_NAME Linux)
22
set(CMAKE_SYSTEM_PROCESSOR x86_64)
33

44
set(CMAKE_CROSSCOMPILING TRUE)
5-
6-
include("${CMAKE_CURRENT_LIST_DIR}/llvm-distribution.cmake")

cmake/x86_64-macos.cmake

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,3 @@ set(CMAKE_OSX_ARCHITECTURES "x86_64")
33

44
set(CMAKE_CROSSCOMPILING TRUE)
55

6-
include("${CMAKE_CURRENT_LIST_DIR}/llvm-distribution.cmake")

cmake/x86_64-windows.cmake

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,3 @@ set(CMAKE_SYSTEM_NAME Windows)
22
set(CMAKE_SYSTEM_PROCESSOR "x64")
33

44
set(CMAKE_CROSSCOMPILING TRUE)
5-
6-
include("${CMAKE_CURRENT_LIST_DIR}/llvm-distribution.cmake")
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
From 165416c82f9317968d4811464cca0c1d5fc56775 Mon Sep 17 00:00:00 2001
2+
From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= <mamoreau@devolutions.net>
3+
Date: Sun, 22 Jan 2023 14:58:02 -0500
4+
Subject: [PATCH] add clang no unknown warning option
5+
6+
---
7+
src/CMakeLists.txt | 1 +
8+
1 file changed, 1 insertion(+)
9+
10+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
11+
index 8202c49d5..d345f70fd 100644
12+
--- a/src/CMakeLists.txt
13+
+++ b/src/CMakeLists.txt
14+
@@ -466,6 +466,7 @@ 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+
20+
$<$<CXX_COMPILER_ID:MSVC>:/W3>
21+
$<$<CXX_COMPILER_ID:MSVC>:/wd4018> # 4018: disable "signed/unsigned mismatch"
22+
--
23+
2.25.1
24+
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?= <mamoreau@devolutions.net>
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?= <mamoreau@devolutions.net>
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+

0 commit comments

Comments
 (0)
0