From 9d1707478753ec790458b8ef74baa57285ef7470 Mon Sep 17 00:00:00 2001 From: Mark Harfouche Date: Sun, 29 May 2022 09:01:21 -0400 Subject: [PATCH] Add qnnpack --- recipes/qnnpack/build.sh | 10 +++ recipes/qnnpack/meta.yaml | 68 +++++++++++++++ recipes/qnnpack/shared_libs.patch | 140 ++++++++++++++++++++++++++++++ 3 files changed, 218 insertions(+) create mode 100644 recipes/qnnpack/build.sh create mode 100644 recipes/qnnpack/meta.yaml create mode 100644 recipes/qnnpack/shared_libs.patch diff --git a/recipes/qnnpack/build.sh b/recipes/qnnpack/build.sh new file mode 100644 index 0000000000000..69003a084e296 --- /dev/null +++ b/recipes/qnnpack/build.sh @@ -0,0 +1,10 @@ +mkdir build +cd build +cmake ${CMAKE_ARGS} \ + -DCMAKE_BUILD_TYPE=Release \ + -DQNNPACK_BUILD_TESTS=OFF \ + -DQNNPACK_BUILD_BENCHMARKS=OFF \ + -DQNNPACK_LIBRARY_TYPE=shared \ + .. +make -j${CPU_COUNT} +make install diff --git a/recipes/qnnpack/meta.yaml b/recipes/qnnpack/meta.yaml new file mode 100644 index 0000000000000..e7004387ad610 --- /dev/null +++ b/recipes/qnnpack/meta.yaml @@ -0,0 +1,68 @@ +# To generate the version number +{%- if false %} +git clone git@github.com:pytorch/qnnpack.git +cd QNNPACK +git pull +echo 0.0.0.$(date +%Y%m%d -d "$(git show -s --format=%ci HEAD)").$(git rev-list HEAD --count).$(git rev-parse --short HEAD) +# Get the git sha +git rev-parse HEAD +wget --quiet https://github.com/pytorch/qnnpack/archive/$(git rev-parse HEAD).tar.gz +openssl sha256 $(git rev-parse HEAD).tar.gz +{%- endif %} + +{% set gitrev = "7d2a4e9931a82adc3814275b6219a03e24e36b4c" %} +{% set version = "0.0.0.20190828.145.7d2a4e9" %} + + +package: + name: qnnpack + version: {{ version }} + +source: + url: https://github.com/pytorch/qnnpack/archive/{{ gitrev }}.tar.gz + sha256: 0d752bd75f46ce4d7c6f0a60b0d6c0e5918a7b4683c825284f8db3706dd24f76 + patches: + - shared_libs.patch + +build: + # You can probably build this for windows + skip: true # [win] + number: 0 + run_exports: + # 0 guarantees because they beleive in not creating real releases... + # https://github.com/pytorch/qnnpack/issues/84 + - {{ pin_subpackage('qnnpack', max_pin='x.x.x.x.x') }} + +requirements: + build: + - {{ compiler('c') }} + - {{ compiler('cxx') }} + - cmake + - make # [unix] + host: + - cpuinfo + - pthreadpool + # header only libraries below + - fp16 + - fxdiv + +test: + commands: + - test -f ${PREFIX}/lib/libqnnpack.so + - test -f ${PREFIX}/include/qnnpack.h + +about: + home: https://github.com/pytorch/qnnpack + summary: Quantized Neural Networks PACKage + description: | + QNNPACK (Quantized Neural Networks PACKage) is a mobile-optimized library + for low-precision high-performance neural network inference. QNNPACK + provides implementation of common neural network operators on quantized + 8-bit tensors. + license: BSD-3-Clause + license_family: BSD + license_file: LICENSE + +extra: + recipe-maintainers: + - hmaarrfk diff --git a/recipes/qnnpack/shared_libs.patch b/recipes/qnnpack/shared_libs.patch new file mode 100644 index 0000000000000..3c744f27ee6fd --- /dev/null +++ b/recipes/qnnpack/shared_libs.patch @@ -0,0 +1,140 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index a5ddc49..707dae6 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -57,56 +57,6 @@ IF(NOT DEFINED CLOG_SOURCE_DIR) + SET(CLOG_SOURCE_DIR "${PROJECT_SOURCE_DIR}/deps/clog") + ENDIF() + +-IF(NOT DEFINED CPUINFO_SOURCE_DIR) +- MESSAGE(STATUS "Downloading cpuinfo to ${CONFU_DEPENDENCIES_SOURCE_DIR}/cpuinfo (define CPUINFO_SOURCE_DIR to avoid it)") +- CONFIGURE_FILE(cmake/DownloadCpuinfo.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/cpuinfo-download/CMakeLists.txt") +- EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . +- WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/cpuinfo-download") +- EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build . +- WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/cpuinfo-download") +- SET(CPUINFO_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/cpuinfo" CACHE STRING "cpuinfo source directory") +-ENDIF() +- +-IF(NOT DEFINED FP16_SOURCE_DIR) +- MESSAGE(STATUS "Downloading FP16 to ${CONFU_DEPENDENCIES_SOURCE_DIR}/fp16 (define FP16_SOURCE_DIR to avoid it)") +- CONFIGURE_FILE(cmake/DownloadFP16.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/fp16-download/CMakeLists.txt") +- EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . +- WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/fp16-download") +- EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build . +- WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/fp16-download") +- SET(FP16_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/fp16" CACHE STRING "FP16 source directory") +-ENDIF() +- +-IF(NOT DEFINED FXDIV_SOURCE_DIR) +- MESSAGE(STATUS "Downloading FXdiv to ${CONFU_DEPENDENCIES_SOURCE_DIR}/fxdiv (define FXDIV_SOURCE_DIR to avoid it)") +- CONFIGURE_FILE(cmake/DownloadFXdiv.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/fxdiv-download/CMakeLists.txt") +- EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . +- WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/fxdiv-download") +- EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build . +- WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/fxdiv-download") +- SET(FXDIV_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/fxdiv" CACHE STRING "FXdiv source directory") +-ENDIF() +- +-IF(NOT DEFINED PSIMD_SOURCE_DIR) +- MESSAGE(STATUS "Downloading PSimd to ${CONFU_DEPENDENCIES_SOURCE_DIR}/psimd (define PSIMD_SOURCE_DIR to avoid it)") +- CONFIGURE_FILE(cmake/DownloadPSimd.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/psimd-download/CMakeLists.txt") +- EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . +- WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/psimd-download") +- EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build . +- WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/psimd-download") +- SET(PSIMD_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/psimd" CACHE STRING "PSimd source directory") +-ENDIF() +- +-IF(NOT DEFINED PTHREADPOOL_SOURCE_DIR) +- MESSAGE(STATUS "Downloading pthreadpool to ${CONFU_DEPENDENCIES_SOURCE_DIR}/pthreadpool (define PTHREADPOOL_SOURCE_DIR to avoid it)") +- CONFIGURE_FILE(cmake/DownloadPThreadPool.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/pthreadpool-download/CMakeLists.txt") +- EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . +- WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/pthreadpool-download") +- EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build . +- WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/pthreadpool-download") +- SET(PTHREADPOOL_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/pthreadpool" CACHE STRING "pthreadpool source directory") +-ENDIF() +- + IF(QNNPACK_BUILD_TESTS AND NOT DEFINED GOOGLETEST_SOURCE_DIR) + MESSAGE(STATUS "Downloading Google Test to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest (define GOOGLETEST_SOURCE_DIR to avoid it)") + CONFIGURE_FILE(cmake/DownloadGoogleTest.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download/CMakeLists.txt") +@@ -284,60 +234,10 @@ ENDIF() + TARGET_LINK_LIBRARIES(qnnpack PRIVATE clog) + + # ---[ Configure cpuinfo +-IF(NOT TARGET cpuinfo) +- SET(CPUINFO_BUILD_TOOLS OFF CACHE BOOL "") +- SET(CPUINFO_BUILD_UNIT_TESTS OFF CACHE BOOL "") +- SET(CPUINFO_BUILD_MOCK_TESTS OFF CACHE BOOL "") +- SET(CPUINFO_BUILD_BENCHMARKS OFF CACHE BOOL "") +- ADD_SUBDIRECTORY( +- "${CPUINFO_SOURCE_DIR}" +- "${CONFU_DEPENDENCIES_BINARY_DIR}/cpuinfo") +-ENDIF() + TARGET_LINK_LIBRARIES(qnnpack PRIVATE cpuinfo) + + # ---[ Configure pthreadpool +-IF(NOT TARGET pthreadpool) +- SET(PTHREADPOOL_BUILD_TESTS OFF CACHE BOOL "") +- SET(PTHREADPOOL_BUILD_BENCHMARKS OFF CACHE BOOL "") +- ADD_SUBDIRECTORY( +- "${PTHREADPOOL_SOURCE_DIR}" +- "${CONFU_DEPENDENCIES_BINARY_DIR}/pthreadpool") +-ENDIF() +-IF(QNNPACK_CUSTOM_THREADPOOL) +- # Depend on pthreadpool interface, but not on implementation. +- # This is used when QNNPACK user (e.g. Caffe2) provides its own threadpool implementation. +- TARGET_LINK_LIBRARIES(qnnpack PUBLIC pthreadpool_interface) +-ELSE() +- TARGET_LINK_LIBRARIES(qnnpack PUBLIC pthreadpool) +-ENDIF() +- +-# ---[ Configure FXdiv +-IF(NOT TARGET fxdiv) +- SET(FXDIV_BUILD_TESTS OFF CACHE BOOL "") +- SET(FXDIV_BUILD_BENCHMARKS OFF CACHE BOOL "") +- ADD_SUBDIRECTORY( +- "${FXDIV_SOURCE_DIR}" +- "${CONFU_DEPENDENCIES_BINARY_DIR}/fxdiv") +-ENDIF() +-TARGET_LINK_LIBRARIES(qnnpack PRIVATE fxdiv) +- +-# ---[ Configure psimd +-IF(NOT TARGET psimd) +- ADD_SUBDIRECTORY( +- "${PSIMD_SOURCE_DIR}" +- "${CONFU_DEPENDENCIES_BINARY_DIR}/psimd") +-ENDIF() +-TARGET_LINK_LIBRARIES(qnnpack PRIVATE psimd) +- +-# ---[ Configure FP16 +-IF(NOT TARGET fp16) +- SET(FP16_BUILD_TESTS OFF CACHE BOOL "") +- SET(FP16_BUILD_BENCHMARKS OFF CACHE BOOL "") +- ADD_SUBDIRECTORY( +- "${FP16_SOURCE_DIR}" +- "${CONFU_DEPENDENCIES_BINARY_DIR}/fp16") +-ENDIF() +-TARGET_LINK_LIBRARIES(qnnpack PRIVATE fp16) ++TARGET_LINK_LIBRARIES(qnnpack PUBLIC pthreadpool) + + INSTALL(TARGETS qnnpack + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +diff --git a/deps/clog/CMakeLists.txt b/deps/clog/CMakeLists.txt +index 7465313..5831f62 100644 +--- a/deps/clog/CMakeLists.txt ++++ b/deps/clog/CMakeLists.txt +@@ -73,11 +73,6 @@ IF(ANDROID AND NOT CLOG_LOG_TO_STDIO) + TARGET_LINK_LIBRARIES(clog PRIVATE log) + ENDIF() + +-INSTALL(TARGETS clog +- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" +- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" +- PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") +- + # ---[ clog tests + IF(CLOG_BUILD_TESTS) + # ---[ Build google test +