From 31fb869a5a0b64c0a808ef066d3b3b462e9afd28 Mon Sep 17 00:00:00 2001 From: Jesper Stemann Andersen Date: Tue, 8 Mar 2022 00:59:53 +0100 Subject: [PATCH 01/10] Updated XNNPACK to v0.0.20200323 As referenced by Torch v1.6.0 --- X/XNNPACK/build_tarballs.jl | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/X/XNNPACK/build_tarballs.jl b/X/XNNPACK/build_tarballs.jl index 1e34a540f1a..e2c77e79f3b 100644 --- a/X/XNNPACK/build_tarballs.jl +++ b/X/XNNPACK/build_tarballs.jl @@ -3,17 +3,17 @@ using BinaryBuilder, Pkg name = "XNNPACK" -version = v"0.0.20200225" +version = v"0.0.20200323" # Collection of sources required to complete build sources = [ - GitSource("https://github.com/google/XNNPACK.git", "7493bfb9d412e59529bcbced6a902d44cfa8ea1c"), + GitSource("https://github.com/google/XNNPACK.git", "1b354636b5942826547055252f3b359b54acff95"), DirectorySource("./bundled"), - GitSource("https://github.com/pytorch/cpuinfo.git", "d5e37adf1406cf899d7d9ec1d317c47506ccb970"), + GitSource("https://github.com/pytorch/cpuinfo.git", "d5e37adf1406cf899d7d9ec1d317c47506ccb970"; unpack_target="clog"), GitSource("https://github.com/Maratyszcza/FP16.git", "ba1d31f5eed2eb4a69e4dea3870a68c7c95f998f"), GitSource("https://github.com/Maratyszcza/FXdiv.git", "f8c5354679ec2597792bc70a9e06eff50c508b9a"), GitSource("https://github.com/Maratyszcza/psimd.git", "10b4ffc6ea9e2e11668f86969586f88bc82aaefa"), - GitSource("https://github.com/Maratyszcza/pthreadpool.git", "7ad026703b3109907ad124025918da15cfd3f100"), + GitSource("https://github.com/Maratyszcza/pthreadpool.git", "ebd50d0cfa3664d454ffdf246fcd228c3b370a11"), ] # Bash recipe for building across all platforms @@ -29,7 +29,7 @@ cmake \ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TARGET_TOOLCHAIN} \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_LIBDIR=$libdir \ - -DCLOG_SOURCE_DIR=$WORKSPACE/srcdir/cpuinfo \ + -DCLOG_SOURCE_DIR=$WORKSPACE/srcdir/clog/cpuinfo \ -DFP16_SOURCE_DIR=$WORKSPACE/srcdir/FP16 \ -DFXDIV_SOURCE_DIR=$WORKSPACE/srcdir/FXdiv \ -DPSIMD_SOURCE_DIR=$WORKSPACE/srcdir/psimd \ @@ -46,10 +46,6 @@ install_license ../LICENSE # These are the platforms we will build for by default, unless further # platforms are passed in on the command line platforms = supported_platforms() -filter!(p -> !Sys.isfreebsd(p), platforms) # FreeBSD is unsupported -filter!(p -> !Sys.iswindows(p), platforms) # Windows is unsupported -filter!(p -> arch(p) != "powerpc64le", platforms) # PowerPC64LE is unsupported -filter!(p -> arch(p) != "aarch64", platforms) # Disabled aarch64 as XNNPACK seems to specifically support armv8.2-a+fp16 which is not in https://github.com/JuliaPackaging/BinaryBuilderBase.jl/blob/master/src/Platforms.jl#L91 # The products that we will ensure are always built products = [ @@ -58,8 +54,8 @@ products = [ # Dependencies that must be installed before this package can be built dependencies = Dependency[ - Dependency("CPUInfo_jll"; compat="0.0.20200122"), - Dependency("PThreadPool_jll"; compat="0.0.20191029"), + Dependency("CPUInfo_jll"; compat="0.0.20200228"), + Dependency("PThreadPool_jll"; compat="0.0.20200302"), ] # Build the tarballs, and possibly a `build.jl` as well. From 4099234dc33d9712be9bfaee4907b3720b4f76d2 Mon Sep 17 00:00:00 2001 From: Jesper Stemann Andersen Date: Thu, 17 Mar 2022 10:21:43 +0100 Subject: [PATCH 02/10] Fixed version of psimd psimd was updated in https://github.com/google/XNNPACK/blob/1b354636b5942826547055252f3b359b54acff95/WORKSPACE but not in https://github.com/google/XNNPACK/blob/1b354636b5942826547055252f3b359b54acff95/cmake/DownloadPSimd.cmake --- X/XNNPACK/build_tarballs.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/X/XNNPACK/build_tarballs.jl b/X/XNNPACK/build_tarballs.jl index e2c77e79f3b..60300a2d341 100644 --- a/X/XNNPACK/build_tarballs.jl +++ b/X/XNNPACK/build_tarballs.jl @@ -12,7 +12,7 @@ sources = [ GitSource("https://github.com/pytorch/cpuinfo.git", "d5e37adf1406cf899d7d9ec1d317c47506ccb970"; unpack_target="clog"), GitSource("https://github.com/Maratyszcza/FP16.git", "ba1d31f5eed2eb4a69e4dea3870a68c7c95f998f"), GitSource("https://github.com/Maratyszcza/FXdiv.git", "f8c5354679ec2597792bc70a9e06eff50c508b9a"), - GitSource("https://github.com/Maratyszcza/psimd.git", "10b4ffc6ea9e2e11668f86969586f88bc82aaefa"), + GitSource("https://github.com/Maratyszcza/psimd.git", "88882f601f8179e1987b7e7cf4a8012c9080ad44"), GitSource("https://github.com/Maratyszcza/pthreadpool.git", "ebd50d0cfa3664d454ffdf246fcd228c3b370a11"), ] From a299bd2c8e0886be437f84529df7a7ab72cb10b0 Mon Sep 17 00:00:00 2001 From: Jesper Stemann Andersen Date: Thu, 17 Mar 2022 10:46:05 +0100 Subject: [PATCH 03/10] Configured compat for CPUInfo and PThreadPool dependencies --- X/XNNPACK/build_tarballs.jl | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/X/XNNPACK/build_tarballs.jl b/X/XNNPACK/build_tarballs.jl index 60300a2d341..05e34c8ef94 100644 --- a/X/XNNPACK/build_tarballs.jl +++ b/X/XNNPACK/build_tarballs.jl @@ -5,6 +5,21 @@ using BinaryBuilder, Pkg name = "XNNPACK" version = v"0.0.20200323" +cpuinfo_build_version = v"0.0.20200228" + +cpuinfo_compat = [ + cpuinfo_build_version, + v"0.0.20200522", # previously released + 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 +] + +pthreadpool_build_version = v"0.0.20200302" + +pthreadpool_compat = [ + pthreadpool_build_version, + 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 +] + # Collection of sources required to complete build sources = [ GitSource("https://github.com/google/XNNPACK.git", "1b354636b5942826547055252f3b359b54acff95"), @@ -54,8 +69,8 @@ products = [ # Dependencies that must be installed before this package can be built dependencies = Dependency[ - Dependency("CPUInfo_jll"; compat="0.0.20200228"), - Dependency("PThreadPool_jll"; compat="0.0.20200302"), + Dependency("CPUInfo_jll", cpuinfo_build_version; compat=join(string.(cpuinfo_compat), ", ")), + Dependency("PThreadPool_jll", pthreadpool_build_version; compat=join(string.(pthreadpool_compat), ", ")), ] # Build the tarballs, and possibly a `build.jl` as well. From c5e82e1c547e947c1fba56809eb4a2aef49f8ea0 Mon Sep 17 00:00:00 2001 From: Jesper Stemann Andersen Date: Thu, 17 Mar 2022 11:02:01 +0100 Subject: [PATCH 04/10] Disabled NEON FP16 arithmetic on aarch64 --- X/XNNPACK/build_tarballs.jl | 3 ++ ...xnnpack-disable-neon-fp16-arithmetic.patch | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 X/XNNPACK/bundled/patches/xnnpack-disable-neon-fp16-arithmetic.patch diff --git a/X/XNNPACK/build_tarballs.jl b/X/XNNPACK/build_tarballs.jl index 05e34c8ef94..0e972bd01fb 100644 --- a/X/XNNPACK/build_tarballs.jl +++ b/X/XNNPACK/build_tarballs.jl @@ -36,6 +36,9 @@ script = raw""" cd $WORKSPACE/srcdir/XNNPACK atomic_patch -p1 ../patches/xnnpack-disable-fast-math.patch atomic_patch -p1 ../patches/xnnpack-pic.patch +if [[ $target == aarch64-* ]]; then + atomic_patch -p1 ../patches/xnnpack-disable-neon-fp16-arithmetic.patch +fi mkdir build cd build # Omitted cmake define of CPUINFO_SOURCE_DIR as there is a patch for cpuinfo diff --git a/X/XNNPACK/bundled/patches/xnnpack-disable-neon-fp16-arithmetic.patch b/X/XNNPACK/bundled/patches/xnnpack-disable-neon-fp16-arithmetic.patch new file mode 100644 index 00000000000..0aa0790c3b4 --- /dev/null +++ b/X/XNNPACK/bundled/patches/xnnpack-disable-neon-fp16-arithmetic.patch @@ -0,0 +1,32 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 9bcaa5816..8627e0546 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -863,11 +863,6 @@ SET(XNNPACK_AARCH64_NEONFMA_MICROKERNEL_SRCS + src/math/sigmoid-neonfma-rr2-lut64-p2-div.c + src/math/sigmoid-neonfma-rr2-p5-div.c) + +-SET(XNNPACK_AARCH64_NEONFP16ARITH_MICROKERNEL_SRCS +- src/f16-gemm/gen/4x8-neonfp16arith-ld64.c +- src/f16-gemm/gen/6x8-neonfp16arith-ld64.c +- src/f16-gemm/gen/8x8-neonfp16arith-ld64.c) +- + SET(XNNPACK_SSE_MICROKERNEL_SRCS + src/f32-avgpool/9p8x-sse-c4.c + src/f32-avgpool/9x-sse-c4.c +@@ -1482,7 +1477,6 @@ IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR IOS_ARCH MATCHES "^arm64.*") + LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEON_MICROKERNEL_SRCS}) + LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEONFMA_MICROKERNEL_SRCS}) + LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_AARCH64_NEONFMA_MICROKERNEL_SRCS}) +- LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_AARCH64_NEONFP16ARITH_MICROKERNEL_SRCS}) + LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_AARCH64_ASM_MICROKERNEL_SRCS}) + ENDIF() + IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|x86_64|AMD64)$" OR IOS_ARCH MATCHES "^(i386|x86_64|AMD64)$") +@@ -1518,7 +1512,6 @@ IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]" OR IOS_ARCH MATCHES "^armv7") + ENDIF() + ENDIF() + IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR IOS_ARCH MATCHES "^arm64.*") +- SET_PROPERTY(SOURCE ${XNNPACK_AARCH64_NEONFP16ARITH_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv8.2-a+fp16 ") + IF(IOS) + SET_PROPERTY(SOURCE ${XNNPACK_AARCH64_ASM_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -arch ${IOS_ARCH} ") + ENDIF() From 3c5e51660771c3352118e8ccf5dfdda12b6ed9ef Mon Sep 17 00:00:00 2001 From: Jesper Stemann Andersen Date: Thu, 17 Mar 2022 11:37:16 +0100 Subject: [PATCH 05/10] Added patch for cpuinfo on Windows --- X/XNNPACK/build_tarballs.jl | 5 +++++ .../cpuinfo-mingw-lowercase-windows-include.patch | 13 +++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 X/XNNPACK/bundled/patches/cpuinfo-mingw-lowercase-windows-include.patch diff --git a/X/XNNPACK/build_tarballs.jl b/X/XNNPACK/build_tarballs.jl index 0e972bd01fb..e82f04846b3 100644 --- a/X/XNNPACK/build_tarballs.jl +++ b/X/XNNPACK/build_tarballs.jl @@ -56,6 +56,11 @@ cmake \ -DXNNPACK_BUILD_TESTS=OFF \ -DXNNPACK_BUILD_BENCHMARKS=OFF \ .. +if [[ $target == *-w64-mingw32* ]]; then + cd cpuinfo-source + atomic_patch -p1 ../../../patches/cpuinfo-mingw-lowercase-windows-include.patch + cd .. +fi cmake --build . -- -j $nproc make install install_license ../LICENSE diff --git a/X/XNNPACK/bundled/patches/cpuinfo-mingw-lowercase-windows-include.patch b/X/XNNPACK/bundled/patches/cpuinfo-mingw-lowercase-windows-include.patch new file mode 100644 index 00000000000..85f17c2e1f3 --- /dev/null +++ b/X/XNNPACK/bundled/patches/cpuinfo-mingw-lowercase-windows-include.patch @@ -0,0 +1,13 @@ +diff --git a/src/x86/windows/init.c b/src/x86/windows/init.c +index eb3498a..7c300c8 100644 +--- a/src/x86/windows/init.c ++++ b/src/x86/windows/init.c +@@ -8,7 +8,7 @@ + #include + #include + +-#include ++#include + + static inline uint32_t bit_mask(uint32_t bits) { + return (UINT32_C(1) << bits) - UINT32_C(1); From ea6daf0ce350a2ed0f89dbcd715ad7f9fe6737c5 Mon Sep 17 00:00:00 2001 From: Jesper Stemann Andersen Date: Thu, 17 Mar 2022 11:46:19 +0100 Subject: [PATCH 06/10] Added manual install of library on Windows --- X/XNNPACK/build_tarballs.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/X/XNNPACK/build_tarballs.jl b/X/XNNPACK/build_tarballs.jl index e82f04846b3..d663f2acde1 100644 --- a/X/XNNPACK/build_tarballs.jl +++ b/X/XNNPACK/build_tarballs.jl @@ -63,6 +63,9 @@ if [[ $target == *-w64-mingw32* ]]; then fi cmake --build . -- -j $nproc make install +if [[ $target == *-w64-mingw32 ]]; then + install -Dvm 755 libXNNPACK.dll "${libdir}/libXNNPACK.dll" +fi install_license ../LICENSE """ From 40a351a9acc60f81445effb96948064633063bce Mon Sep 17 00:00:00 2001 From: Jesper Stemann Andersen Date: Thu, 17 Mar 2022 12:03:27 +0100 Subject: [PATCH 07/10] Added FreeBSD patch --- X/XNNPACK/build_tarballs.jl | 1 + X/XNNPACK/bundled/patches/xnnpack-freebsd.patch | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 X/XNNPACK/bundled/patches/xnnpack-freebsd.patch diff --git a/X/XNNPACK/build_tarballs.jl b/X/XNNPACK/build_tarballs.jl index d663f2acde1..6fb2a5b5956 100644 --- a/X/XNNPACK/build_tarballs.jl +++ b/X/XNNPACK/build_tarballs.jl @@ -36,6 +36,7 @@ script = raw""" cd $WORKSPACE/srcdir/XNNPACK atomic_patch -p1 ../patches/xnnpack-disable-fast-math.patch atomic_patch -p1 ../patches/xnnpack-pic.patch +atomic_patch -p1 ../patches/xnnpack-freebsd.patch if [[ $target == aarch64-* ]]; then atomic_patch -p1 ../patches/xnnpack-disable-neon-fp16-arithmetic.patch fi diff --git a/X/XNNPACK/bundled/patches/xnnpack-freebsd.patch b/X/XNNPACK/bundled/patches/xnnpack-freebsd.patch new file mode 100644 index 00000000000..8ee76cd974b --- /dev/null +++ b/X/XNNPACK/bundled/patches/xnnpack-freebsd.patch @@ -0,0 +1,13 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 9bcaa5816..56b28ef39 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -51,7 +51,7 @@ ENDIF() + + IF(NOT CMAKE_SYSTEM_NAME) + MESSAGE(FATAL_ERROR "CMAKE_SYSTEM_NAME not defined") +-ELSEIF(NOT CMAKE_SYSTEM_NAME MATCHES "^(Darwin|Linux|Android|Windows)$") ++ELSEIF(NOT CMAKE_SYSTEM_NAME MATCHES "^(Darwin|FreeBSD|Linux|Android|Windows)$") + MESSAGE(FATAL_ERROR "Unrecognized CMAKE_SYSTEM_NAME = ${CMAKE_SYSTEM_NAME}") + ENDIF() + From 7b83770873326f1a3b132d8a5f5f0a4d6c6f1383 Mon Sep 17 00:00:00 2001 From: Jesper Stemann Andersen Date: Thu, 17 Mar 2022 12:10:23 +0100 Subject: [PATCH 08/10] Re-disabled i686-w64 and powerpc64le --- X/XNNPACK/build_tarballs.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/X/XNNPACK/build_tarballs.jl b/X/XNNPACK/build_tarballs.jl index 6fb2a5b5956..196b734537b 100644 --- a/X/XNNPACK/build_tarballs.jl +++ b/X/XNNPACK/build_tarballs.jl @@ -73,6 +73,8 @@ install_license ../LICENSE # These are the platforms we will build for by default, unless further # platforms are passed in on the command line platforms = supported_platforms() +filter!(p -> !(Sys.iswindows(p) && arch(p) == "i686"), platforms) # i686-Windows fails to link +filter!(p -> arch(p) != "powerpc64le", platforms) # PowerPC64LE is unsupported by XNNPACK (Unsupported architecture in src/init.c) # The products that we will ensure are always built products = [ From 0fa205ac681e5596896085e02541b4f7f4091e4e Mon Sep 17 00:00:00 2001 From: Jesper Stemann Andersen Date: Thu, 17 Mar 2022 15:10:55 +0100 Subject: [PATCH 09/10] Replaced make install with make install/local to avoid getting dependencies install into $prefix --- X/XNNPACK/build_tarballs.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/X/XNNPACK/build_tarballs.jl b/X/XNNPACK/build_tarballs.jl index 196b734537b..4ba0af1b3d0 100644 --- a/X/XNNPACK/build_tarballs.jl +++ b/X/XNNPACK/build_tarballs.jl @@ -63,7 +63,7 @@ if [[ $target == *-w64-mingw32* ]]; then cd .. fi cmake --build . -- -j $nproc -make install +make install/local if [[ $target == *-w64-mingw32 ]]; then install -Dvm 755 libXNNPACK.dll "${libdir}/libXNNPACK.dll" fi From 7f2c4ded3c38019d8161cbcea4c3a1f0c8f0b302 Mon Sep 17 00:00:00 2001 From: Jesper Stemann Andersen Date: Fri, 18 Mar 2022 10:23:45 +0100 Subject: [PATCH 10/10] Added xnnpack soversion patch Adapted from https://salsa.debian.org/deeplearning-team/xnnpack/-/blob/master/debian/patches/soversion.patch --- X/XNNPACK/build_tarballs.jl | 1 + X/XNNPACK/bundled/patches/xnnpack-soversion.patch | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 X/XNNPACK/bundled/patches/xnnpack-soversion.patch diff --git a/X/XNNPACK/build_tarballs.jl b/X/XNNPACK/build_tarballs.jl index 4ba0af1b3d0..b8ae59826d1 100644 --- a/X/XNNPACK/build_tarballs.jl +++ b/X/XNNPACK/build_tarballs.jl @@ -36,6 +36,7 @@ script = raw""" cd $WORKSPACE/srcdir/XNNPACK atomic_patch -p1 ../patches/xnnpack-disable-fast-math.patch atomic_patch -p1 ../patches/xnnpack-pic.patch +atomic_patch -p1 ../patches/xnnpack-soversion.patch atomic_patch -p1 ../patches/xnnpack-freebsd.patch if [[ $target == aarch64-* ]]; then atomic_patch -p1 ../patches/xnnpack-disable-neon-fp16-arithmetic.patch diff --git a/X/XNNPACK/bundled/patches/xnnpack-soversion.patch b/X/XNNPACK/bundled/patches/xnnpack-soversion.patch new file mode 100644 index 00000000000..4317f2b6e92 --- /dev/null +++ b/X/XNNPACK/bundled/patches/xnnpack-soversion.patch @@ -0,0 +1,15 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 9bcaa5816..dbe149f85 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1507,7 +1507,9 @@ ELSE() + ENDIF() + SET_TARGET_PROPERTIES(XNNPACK PROPERTIES + C_STANDARD 99 +- C_EXTENSIONS YES) ++ C_EXTENSIONS YES ++ VERSION 0.0 ++ SOVERSION 0) + IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]" OR IOS_ARCH MATCHES "^armv7") + SET_PROPERTY(SOURCE ${XNNPACK_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -marm ") + SET_PROPERTY(SOURCE ${XNNPACK_PSIMD_FASTMATH_MICROKERNEL_SRCS} ${XNNPACK_PSIMD_ACCMATH_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -mfpu=neon ")