1 diff --git a/CMakeLists.txt b/CMakeLists.txt
2 index a5ddc49..05e1279 100644
5 @@ -13,8 +13,6 @@ PROJECT(QNNPACK C CXX ASM)
8 OPTION(QNNPACK_CUSTOM_THREADPOOL "Build QNNPACK for custom thread pool" OFF)
9 -SET(QNNPACK_LIBRARY_TYPE "default" CACHE STRING "Type of library (shared, static, or default) to build")
10 -SET_PROPERTY(CACHE QNNPACK_LIBRARY_TYPE PROPERTY STRINGS default static shared)
11 OPTION(QNNPACK_BUILD_TESTS "Build QNNPACK unit tests" ON)
12 OPTION(QNNPACK_BUILD_BENCHMARKS "Build QNNPACK benchmarks" ON)
14 @@ -53,11 +51,11 @@ SET(CONFU_DEPENDENCIES_SOURCE_DIR "${CMAKE_SOURCE_DIR}/deps"
15 SET(CONFU_DEPENDENCIES_BINARY_DIR "${CMAKE_BINARY_DIR}/deps"
16 CACHE PATH "Confu-style dependencies binary directory")
18 -IF(NOT DEFINED CLOG_SOURCE_DIR)
20 SET(CLOG_SOURCE_DIR "${PROJECT_SOURCE_DIR}/deps/clog")
23 -IF(NOT DEFINED CPUINFO_SOURCE_DIR)
25 MESSAGE(STATUS "Downloading cpuinfo to ${CONFU_DEPENDENCIES_SOURCE_DIR}/cpuinfo (define CPUINFO_SOURCE_DIR to avoid it)")
26 CONFIGURE_FILE(cmake/DownloadCpuinfo.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/cpuinfo-download/CMakeLists.txt")
27 EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
28 @@ -67,7 +65,7 @@ IF(NOT DEFINED CPUINFO_SOURCE_DIR)
29 SET(CPUINFO_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/cpuinfo" CACHE STRING "cpuinfo source directory")
32 -IF(NOT DEFINED FP16_SOURCE_DIR)
34 MESSAGE(STATUS "Downloading FP16 to ${CONFU_DEPENDENCIES_SOURCE_DIR}/fp16 (define FP16_SOURCE_DIR to avoid it)")
35 CONFIGURE_FILE(cmake/DownloadFP16.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/fp16-download/CMakeLists.txt")
36 EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
37 @@ -77,7 +75,7 @@ IF(NOT DEFINED FP16_SOURCE_DIR)
38 SET(FP16_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/fp16" CACHE STRING "FP16 source directory")
41 -IF(NOT DEFINED FXDIV_SOURCE_DIR)
43 MESSAGE(STATUS "Downloading FXdiv to ${CONFU_DEPENDENCIES_SOURCE_DIR}/fxdiv (define FXDIV_SOURCE_DIR to avoid it)")
44 CONFIGURE_FILE(cmake/DownloadFXdiv.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/fxdiv-download/CMakeLists.txt")
45 EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
46 @@ -87,7 +85,7 @@ IF(NOT DEFINED FXDIV_SOURCE_DIR)
47 SET(FXDIV_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/fxdiv" CACHE STRING "FXdiv source directory")
50 -IF(NOT DEFINED PSIMD_SOURCE_DIR)
52 MESSAGE(STATUS "Downloading PSimd to ${CONFU_DEPENDENCIES_SOURCE_DIR}/psimd (define PSIMD_SOURCE_DIR to avoid it)")
53 CONFIGURE_FILE(cmake/DownloadPSimd.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/psimd-download/CMakeLists.txt")
54 EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
55 @@ -97,7 +95,7 @@ IF(NOT DEFINED PSIMD_SOURCE_DIR)
56 SET(PSIMD_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/psimd" CACHE STRING "PSimd source directory")
59 -IF(NOT DEFINED PTHREADPOOL_SOURCE_DIR)
61 MESSAGE(STATUS "Downloading pthreadpool to ${CONFU_DEPENDENCIES_SOURCE_DIR}/pthreadpool (define PTHREADPOOL_SOURCE_DIR to avoid it)")
62 CONFIGURE_FILE(cmake/DownloadPThreadPool.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/pthreadpool-download/CMakeLists.txt")
63 EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
64 @@ -107,7 +105,7 @@ IF(NOT DEFINED PTHREADPOOL_SOURCE_DIR)
65 SET(PTHREADPOOL_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/pthreadpool" CACHE STRING "pthreadpool source directory")
68 -IF(QNNPACK_BUILD_TESTS AND NOT DEFINED GOOGLETEST_SOURCE_DIR)
70 MESSAGE(STATUS "Downloading Google Test to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest (define GOOGLETEST_SOURCE_DIR to avoid it)")
71 CONFIGURE_FILE(cmake/DownloadGoogleTest.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download/CMakeLists.txt")
72 EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
73 @@ -117,7 +115,7 @@ IF(QNNPACK_BUILD_TESTS AND NOT DEFINED GOOGLETEST_SOURCE_DIR)
74 SET(GOOGLETEST_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest" CACHE STRING "Google Test source directory")
77 -IF(QNNPACK_BUILD_BENCHMARKS AND NOT DEFINED GOOGLEBENCHMARK_SOURCE_DIR)
79 MESSAGE(STATUS "Downloading Google Benchmark to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark (define GOOGLEBENCHMARK_SOURCE_DIR to avoid it)")
80 CONFIGURE_FILE(cmake/DownloadGoogleBenchmark.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download/CMakeLists.txt")
81 EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
82 @@ -229,15 +227,7 @@ IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|x86_64)$" OR IOS_ARCH MATCHES "^(i
83 LIST(APPEND QNNPACK_UKERNELS ${QNNPACK_X86_SSE2_UKERNELS})
86 -IF(QNNPACK_LIBRARY_TYPE STREQUAL "default")
87 - ADD_LIBRARY(qnnpack ${QNNPACK_INIT_SRCS} ${QNNPACK_EXEC_SRCS} ${QNNPACK_UKERNELS})
88 -ELSEIF(QNNPACK_LIBRARY_TYPE STREQUAL "shared")
89 - ADD_LIBRARY(qnnpack SHARED ${QNNPACK_INIT_SRCS} ${QNNPACK_EXEC_SRCS} ${QNNPACK_UKERNELS})
90 -ELSEIF(QNNPACK_LIBRARY_TYPE STREQUAL "static")
91 - ADD_LIBRARY(qnnpack STATIC ${QNNPACK_INIT_SRCS} ${QNNPACK_EXEC_SRCS} ${QNNPACK_UKERNELS})
93 - MESSAGE(FATAL_ERROR "Unsupported QNNPACK library type \"${QNNPACK_LIBRARY_TYPE}\". Must be \"static\", \"shared\", or \"default\"")
95 +ADD_LIBRARY(qnnpack ${QNNPACK_INIT_SRCS} ${QNNPACK_EXEC_SRCS} ${QNNPACK_UKERNELS})
96 SET_TARGET_PROPERTIES(qnnpack PROPERTIES
99 @@ -272,7 +262,7 @@ TARGET_INCLUDE_DIRECTORIES(qnnpack PRIVATE src)
100 SET_TARGET_PROPERTIES(qnnpack PROPERTIES PUBLIC_HEADER include/qnnpack.h)
102 # ---[ Configure clog
105 SET(CLOG_BUILD_TESTS OFF CACHE BOOL "")
106 SET(CLOG_RUNTIME_TYPE "${CPUINFO_RUNTIME_TYPE}" CACHE STRING "")
108 @@ -281,10 +271,9 @@ IF(NOT TARGET clog)
109 # We build static version of clog but a dynamic library may indirectly depend on it
110 SET_PROPERTY(TARGET clog PROPERTY POSITION_INDEPENDENT_CODE ON)
112 -TARGET_LINK_LIBRARIES(qnnpack PRIVATE clog)
114 # ---[ Configure cpuinfo
115 -IF(NOT TARGET cpuinfo)
117 SET(CPUINFO_BUILD_TOOLS OFF CACHE BOOL "")
118 SET(CPUINFO_BUILD_UNIT_TESTS OFF CACHE BOOL "")
119 SET(CPUINFO_BUILD_MOCK_TESTS OFF CACHE BOOL "")
120 @@ -293,17 +282,19 @@ IF(NOT TARGET cpuinfo)
121 "${CPUINFO_SOURCE_DIR}"
122 "${CONFU_DEPENDENCIES_BINARY_DIR}/cpuinfo")
124 -TARGET_LINK_LIBRARIES(qnnpack PRIVATE cpuinfo)
126 +find_package(unofficial-cpuinfo CONFIG REQUIRED)
127 +target_link_libraries(qnnpack PUBLIC unofficial::cpuinfo::clog unofficial::cpuinfo::cpuinfo)
129 # ---[ Configure pthreadpool
130 -IF(NOT TARGET pthreadpool)
132 SET(PTHREADPOOL_BUILD_TESTS OFF CACHE BOOL "")
133 SET(PTHREADPOOL_BUILD_BENCHMARKS OFF CACHE BOOL "")
135 "${PTHREADPOOL_SOURCE_DIR}"
136 "${CONFU_DEPENDENCIES_BINARY_DIR}/pthreadpool")
138 -IF(QNNPACK_CUSTOM_THREADPOOL)
140 # Depend on pthreadpool interface, but not on implementation.
141 # This is used when QNNPACK user (e.g. Caffe2) provides its own threadpool implementation.
142 TARGET_LINK_LIBRARIES(qnnpack PUBLIC pthreadpool_interface)
143 @@ -312,34 +303,38 @@ ELSE()
146 # ---[ Configure FXdiv
147 -IF(NOT TARGET fxdiv)
149 SET(FXDIV_BUILD_TESTS OFF CACHE BOOL "")
150 SET(FXDIV_BUILD_BENCHMARKS OFF CACHE BOOL "")
152 "${FXDIV_SOURCE_DIR}"
153 "${CONFU_DEPENDENCIES_BINARY_DIR}/fxdiv")
155 -TARGET_LINK_LIBRARIES(qnnpack PRIVATE fxdiv)
156 +find_path(FXDIV_INCLUDE_DIRS "fxdiv.h")
157 +target_include_directories(qnnpack PRIVATE ${FXDIV_INCLUDE_DIRS})
159 # ---[ Configure psimd
160 -IF(NOT TARGET psimd)
163 "${PSIMD_SOURCE_DIR}"
164 "${CONFU_DEPENDENCIES_BINARY_DIR}/psimd")
166 -TARGET_LINK_LIBRARIES(qnnpack PRIVATE psimd)
167 +find_path(PSIMD_INCLUDE_DIRS "psimd.h")
168 +target_include_directories(qnnpack PRIVATE ${PSIMD_INCLUDE_DIRS})
170 # ---[ Configure FP16
173 SET(FP16_BUILD_TESTS OFF CACHE BOOL "")
174 SET(FP16_BUILD_BENCHMARKS OFF CACHE BOOL "")
177 "${CONFU_DEPENDENCIES_BINARY_DIR}/fp16")
179 -TARGET_LINK_LIBRARIES(qnnpack PRIVATE fp16)
180 +find_path(FP16_INCLUDE_DIRS "fp16.h")
181 +target_include_directories(qnnpack PRIVATE ${FP16_INCLUDE_DIRS})
183 INSTALL(TARGETS qnnpack
184 + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
185 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
186 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
187 PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})