Skip to content

Commit 728e7c9

Browse files
authored
Updated XNNPACK to v0.0.20210622 (#5416)
In particular: * Updated, and elaborated on comments on sources and dependency versions * Enabled i686-w64-mingw32 * Using system libs instead of additional (now, superfluous) sources * Removed pic patch * Replaced FP16 source with dependency * Added w64 system libs patch * Excluded some srcs on aarch64-* to enable compilation. * Disabled F16, F32, and QS8 operators on aarch64-* to enable linking. * Disabled armv6l-* due to lack of support. * Disabled armv7l-* due to lack of support for building for armv7l-*-march+neonvfpv4. * Disabled microarchitecture build for Apple M1.
1 parent 86f01f3 commit 728e7c9

11 files changed

+120
-115
lines changed

X/XNNPACK/build_tarballs.jl

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,66 +3,61 @@
33
using BinaryBuilder, Pkg
44

55
name = "XNNPACK"
6-
version = v"0.0.20200323"
6+
version = v"0.0.20210622" # i.e. https://github.com/google/XNNPACK/tree/79cd5f9e18ad0925ac9a050b00ea5a36230072db
77

8-
cpuinfo_build_version = v"0.0.20200228"
8+
cpuinfo_build_version = v"0.0.20201217" # https://github.com/google/XNNPACK/blob/79cd5f9e18ad0925ac9a050b00ea5a36230072db/cmake/DownloadCpuinfo.cmake#L15
99

1010
cpuinfo_compat = [
11-
cpuinfo_build_version,
12-
v"0.0.20200522", # previously released
13-
v"0.0.20200612", # due to pytorch v1.6.0 - v1.7.1, e.g. https://github.com/pytorch/pytorch/tree/v1.6.0/third_party/cpuinfo @ 63b254577ed77a8004a9be6ac707f3dccc4e1fd9
11+
cpuinfo_build_version, # Torch-compatible version, due to pytorch v1.8.0 - v1.12.1, e.g. https://github.com/pytorch/pytorch/tree/v1.8.0/third_party / cpuinfo @ 5916273f79a21551890fd3d56fc5375a78d1598d
1412
]
1513

16-
pthreadpool_build_version = v"0.0.20200302"
14+
pthreadpool_build_version = v"0.0.20201206" # https://github.com/google/XNNPACK/blob/79cd5f9e18ad0925ac9a050b00ea5a36230072db/cmake/DownloadPThreadPool.cmake#L15
1715

1816
pthreadpool_compat = [
1917
pthreadpool_build_version,
20-
v"0.0.20200616", # due to pytorch v1.6.0 - v1.7.1, e.g. https://github.com/pytorch/pytorch/tree/v1.6.0/third_party/pthreadpool @ 029c88620802e1361ccf41d1970bd5b07fd6b7bb
18+
v"0.0.20210414", # Torch-compatible version, due to pytorch v1.9.0 - v1.12.1, e.g. https://github.com/pytorch/pytorch/tree/v1.9.0/third_party / pthreadpool @ a134dd5d4cee80cce15db81a72e7f929d71dd413
2119
]
2220

2321
# Collection of sources required to complete build
2422
sources = [
25-
GitSource("https://github.com/google/XNNPACK.git", "1b354636b5942826547055252f3b359b54acff95"),
23+
GitSource("https://github.com/google/XNNPACK.git", "79cd5f9e18ad0925ac9a050b00ea5a36230072db"),
2624
DirectorySource("./bundled"),
27-
GitSource("https://github.com/pytorch/cpuinfo.git", "d5e37adf1406cf899d7d9ec1d317c47506ccb970"; unpack_target="clog"),
28-
GitSource("https://github.com/Maratyszcza/FP16.git", "ba1d31f5eed2eb4a69e4dea3870a68c7c95f998f"),
29-
GitSource("https://github.com/Maratyszcza/FXdiv.git", "f8c5354679ec2597792bc70a9e06eff50c508b9a"),
30-
GitSource("https://github.com/Maratyszcza/psimd.git", "88882f601f8179e1987b7e7cf4a8012c9080ad44"),
31-
GitSource("https://github.com/Maratyszcza/pthreadpool.git", "ebd50d0cfa3664d454ffdf246fcd228c3b370a11"),
3225
]
3326

3427
# Bash recipe for building across all platforms
3528
script = raw"""
3629
cd $WORKSPACE/srcdir/XNNPACK
37-
atomic_patch -p1 ../patches/xnnpack-disable-fast-math.patch
38-
atomic_patch -p1 ../patches/xnnpack-pic.patch
3930
atomic_patch -p1 ../patches/xnnpack-soversion.patch
4031
atomic_patch -p1 ../patches/xnnpack-freebsd.patch
41-
if [[ $target == aarch64-* ]]; then
42-
atomic_patch -p1 ../patches/xnnpack-disable-neon-fp16-arithmetic.patch
32+
atomic_patch -p1 ../patches/xnnpack-w64-system-libs.patch
33+
C_FLAGS=()
34+
# if [[ $bb_full_target == armv7l-*march+neonvfpv4 ]]; then # Requires build for specific micro-architecture
35+
# atomic_patch -p1 ../patches/xnnpack-arm-exclude-microkernel-srcs.patch
36+
# C_FLAGS+="-DXNN_NO_F32_OPERATORS "
37+
# C_FLAGS+="-DXNN_NO_QS8_OPERATORS "
38+
if [[ $bb_full_target == aarch64-* ]]; then # Building for aarch64-*march+armv8*
39+
atomic_patch -p1 ../patches/xnnpack-aarch64-exclude-microkernel-srcs.patch
40+
atomic_patch -p1 ../patches/xnnpack-aarch64-armv8-exclude-microkernel-srcs.patch
41+
C_FLAGS+="-DXNN_NO_F16_OPERATORS "
42+
C_FLAGS+="-DXNN_NO_F32_OPERATORS "
43+
C_FLAGS+="-DXNN_NO_QS8_OPERATORS "
44+
# elif [[ $bb_full_target == aarch64-apple-*march+apple_m1* ]]; then # Requires build for specific micro-architecture
45+
# atomic_patch -p1 ../patches/xnnpack-aarch64-exclude-microkernel-srcs.patch
46+
# C_FLAGS+="-DXNN_NO_F16_OPERATORS "
4347
fi
4448
mkdir build
4549
cd build
46-
# Omitted cmake define of CPUINFO_SOURCE_DIR as there is a patch for cpuinfo
4750
cmake \
4851
-DCMAKE_INSTALL_PREFIX=$prefix \
4952
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TARGET_TOOLCHAIN} \
5053
-DCMAKE_BUILD_TYPE=Release \
5154
-DCMAKE_INSTALL_LIBDIR=$libdir \
52-
-DCLOG_SOURCE_DIR=$WORKSPACE/srcdir/clog/cpuinfo \
53-
-DFP16_SOURCE_DIR=$WORKSPACE/srcdir/FP16 \
54-
-DFXDIV_SOURCE_DIR=$WORKSPACE/srcdir/FXdiv \
55-
-DPSIMD_SOURCE_DIR=$WORKSPACE/srcdir/psimd \
56-
-DPTHREADPOOL_SOURCE_DIR=$WORKSPACE/srcdir/pthreadpool \
5755
-DXNNPACK_LIBRARY_TYPE=shared \
5856
-DXNNPACK_BUILD_TESTS=OFF \
5957
-DXNNPACK_BUILD_BENCHMARKS=OFF \
58+
-DXNNPACK_USE_SYSTEM_LIBS=ON \
59+
-DCMAKE_C_FLAGS="$C_FLAGS" \
6060
..
61-
if [[ $target == *-w64-mingw32* ]]; then
62-
cd cpuinfo-source
63-
atomic_patch -p1 ../../../patches/cpuinfo-mingw-lowercase-windows-include.patch
64-
cd ..
65-
fi
6661
cmake --build . -- -j $nproc
6762
make install/local
6863
if [[ $target == *-w64-mingw32 ]]; then
@@ -74,7 +69,8 @@ install_license ../LICENSE
7469
# These are the platforms we will build for by default, unless further
7570
# platforms are passed in on the command line
7671
platforms = supported_platforms()
77-
filter!(p -> !(Sys.iswindows(p) && arch(p) == "i686"), platforms) # i686-Windows fails to link
72+
filter!(p -> arch(p) != "armv6l", platforms) # armv6l is unsupported by XNNPACK (lacks NEON instructions)
73+
filter!(p -> arch(p) != "armv7l", platforms) # Requires build for specific micro-architecture (neonvfpv4)
7874
filter!(p -> arch(p) != "powerpc64le", platforms) # PowerPC64LE is unsupported by XNNPACK (Unsupported architecture in src/init.c)
7975

8076
# The products that we will ensure are always built
@@ -83,8 +79,9 @@ products = [
8379
]
8480

8581
# Dependencies that must be installed before this package can be built
86-
dependencies = Dependency[
82+
dependencies = [
8783
Dependency("CPUInfo_jll", cpuinfo_build_version; compat=join(string.(cpuinfo_compat), ", ")),
84+
BuildDependency(PackageSpec("FP16_jll", v"0.0.20210320")),
8885
Dependency("PThreadPool_jll", pthreadpool_build_version; compat=join(string.(pthreadpool_compat), ", ")),
8986
]
9087

X/XNNPACK/bundled/patches/cpuinfo-mingw-lowercase-windows-include.patch

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
diff --git a/CMakeLists.txt b/CMakeLists.txt
2+
index f4c55af4e..6d0f1b9bb 100755
3+
--- a/CMakeLists.txt
4+
+++ b/CMakeLists.txt
5+
@@ -3437,10 +3437,6 @@ IF(XNNPACK_TARGET_PROCESSOR MATCHES "^(aarch64|arm64)$" OR IOS_ARCH MATCHES "^ar
6+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEONFMA_MICROKERNEL_SRCS})
7+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEONV8_MICROKERNEL_SRCS})
8+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_AARCH64_NEONFMA_MICROKERNEL_SRCS})
9+
- LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEONDOT_MICROKERNEL_SRCS})
10+
- IF(XNNPACK_ENABLE_ASSEMBLY)
11+
- LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_AARCH64_ASM_MICROKERNEL_SRCS})
12+
- ENDIF()
13+
ENDIF()
14+
IF(XNNPACK_TARGET_PROCESSOR MATCHES "^(i[3-6]86|x86_64|AMD64)$" OR IOS_ARCH MATCHES "^(i386|x86_64|AMD64)$")
15+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_SSE_MICROKERNEL_SRCS})
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
diff --git a/CMakeLists.txt b/CMakeLists.txt
2+
index ee2d3f255..c0f1fd4e7 100755
3+
--- a/CMakeLists.txt
4+
+++ b/CMakeLists.txt
5+
@@ -3437,7 +3437,6 @@ IF(XNNPACK_TARGET_PROCESSOR MATCHES "^(aarch64|arm64)$" OR IOS_ARCH MATCHES "^ar
6+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEONFMA_MICROKERNEL_SRCS})
7+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEONV8_MICROKERNEL_SRCS})
8+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_AARCH64_NEONFMA_MICROKERNEL_SRCS})
9+
- LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_AARCH64_NEONFP16ARITH_MICROKERNEL_SRCS})
10+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEONDOT_MICROKERNEL_SRCS})
11+
IF(XNNPACK_ENABLE_ASSEMBLY)
12+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_AARCH64_ASM_MICROKERNEL_SRCS})
13+
@@ -3489,9 +3488,6 @@ IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]" OR IOS_ARCH MATCHES "^armv7")
14+
ENDIF()
15+
ENDIF()
16+
IF(XNNPACK_TARGET_PROCESSOR MATCHES "^(aarch64|arm64)$" OR IOS_ARCH MATCHES "^arm64.*")
17+
- SET_PROPERTY(SOURCE ${XNNPACK_AARCH64_NEONFP16ARITH_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv8.2-a+fp16 ")
18+
- SET_PROPERTY(SOURCE ${XNNPACK_NEONDOT_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv8.2-a+dotprod ")
19+
- SET_PROPERTY(SOURCE ${XNNPACK_AARCH64_ASM_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv8.2-a+fp16+dotprod ")
20+
IF(IOS)
21+
SET_PROPERTY(SOURCE ${XNNPACK_AARCH64_ASM_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -arch ${IOS_ARCH} ")
22+
ENDIF()
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
diff --git a/CMakeLists.txt b/CMakeLists.txt
2+
index 63eb78928..8f00f272d 100755
3+
--- a/CMakeLists.txt
4+
+++ b/CMakeLists.txt
5+
@@ -3424,10 +3424,6 @@ SET(XNNPACK_MICROKERNEL_SRCS ${XNNPACK_SCALAR_MICROKERNEL_SRCS})
6+
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]" OR IOS_ARCH MATCHES "^armv7")
7+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEON_MICROKERNEL_SRCS})
8+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEONFMA_MICROKERNEL_SRCS})
9+
- LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEONV8_MICROKERNEL_SRCS})
10+
- IF(NOT IOS)
11+
- LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEONDOT_MICROKERNEL_SRCS})
12+
- ENDIF()
13+
IF(XNNPACK_ENABLE_ASSEMBLY)
14+
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_AARCH32_ASM_MICROKERNEL_SRCS})
15+
ENDIF()
16+
@@ -3472,12 +3468,10 @@ SET_TARGET_PROPERTIES(XNNPACK PROPERTIES
17+
SOVERSION 0)
18+
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]" OR IOS_ARCH MATCHES "^armv7")
19+
SET_PROPERTY(SOURCE ${XNNPACK_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -marm ")
20+
- SET_PROPERTY(SOURCE ${XNNPACK_NEON_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv7-a -mfpu=neon ")
21+
- SET_PROPERTY(SOURCE ${XNNPACK_NEONFMA_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv7-a -mfpu=neon-vfpv4 ")
22+
IF(IOS)
23+
SET_PROPERTY(SOURCE ${XNNPACK_NEONV8_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -mcpu=cyclone -mtune=generic ")
24+
SET_PROPERTY(SOURCE ${XNNPACK_AARCH32_ASM_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -arch ${IOS_ARCH} ")
25+
- ELSE()
26+
+ ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv8")
27+
SET_PROPERTY(SOURCE ${XNNPACK_NEONV8_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv8-a -mfpu=neon-fp-armv8 ")
28+
SET_PROPERTY(SOURCE ${XNNPACK_NEONDOT_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv8.2-a+dotprod -mfpu=neon-fp-armv8 ")
29+
ENDIF()

X/XNNPACK/bundled/patches/xnnpack-disable-fast-math.patch

Lines changed: 0 additions & 13 deletions
This file was deleted.

X/XNNPACK/bundled/patches/xnnpack-disable-neon-fp16-arithmetic.patch

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
diff --git a/CMakeLists.txt b/CMakeLists.txt
2-
index 9bcaa5816..56b28ef39 100644
2+
index ee2d3f255..66071856d 100755
33
--- a/CMakeLists.txt
44
+++ b/CMakeLists.txt
5-
@@ -51,7 +51,7 @@ ENDIF()
5+
@@ -82,7 +82,7 @@ ENDIF()
66

77
IF(NOT CMAKE_SYSTEM_NAME)
88
MESSAGE(FATAL_ERROR "CMAKE_SYSTEM_NAME not defined")
9-
-ELSEIF(NOT CMAKE_SYSTEM_NAME MATCHES "^(Darwin|Linux|Android|Windows)$")
10-
+ELSEIF(NOT CMAKE_SYSTEM_NAME MATCHES "^(Darwin|FreeBSD|Linux|Android|Windows)$")
9+
-ELSEIF(NOT CMAKE_SYSTEM_NAME MATCHES "^(Darwin|Linux|Android|Windows|CYGWIN|MSYS)$")
10+
+ELSEIF(NOT CMAKE_SYSTEM_NAME MATCHES "^(Darwin|FreeBSD|Linux|Android|Windows|CYGWIN|MSYS)$")
1111
MESSAGE(FATAL_ERROR "Unrecognized CMAKE_SYSTEM_NAME = ${CMAKE_SYSTEM_NAME}")
1212
ENDIF()
1313

X/XNNPACK/bundled/patches/xnnpack-pic.patch

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
diff --git a/CMakeLists.txt b/CMakeLists.txt
2-
index 9bcaa5816..dbe149f85 100644
2+
index ee2d3f255..f518e92f9 100755
33
--- a/CMakeLists.txt
44
+++ b/CMakeLists.txt
5-
@@ -1507,7 +1507,9 @@ ELSE()
5+
@@ -3467,7 +3467,9 @@ ELSE()
66
ENDIF()
77
SET_TARGET_PROPERTIES(XNNPACK PROPERTIES
88
C_STANDARD 99
@@ -12,4 +12,4 @@ index 9bcaa5816..dbe149f85 100644
1212
+ SOVERSION 0)
1313
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]" OR IOS_ARCH MATCHES "^armv7")
1414
SET_PROPERTY(SOURCE ${XNNPACK_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -marm ")
15-
SET_PROPERTY(SOURCE ${XNNPACK_PSIMD_FASTMATH_MICROKERNEL_SRCS} ${XNNPACK_PSIMD_ACCMATH_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -mfpu=neon ")
15+
SET_PROPERTY(SOURCE ${XNNPACK_NEON_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv7-a -mfpu=neon ")

0 commit comments

Comments
 (0)