blob: b5f4f7059cd805a18e31bdf2d7657abb45ea2fd1 [file] [log] [blame]
if (__NNPACK_INCLUDED)
return()
endif()
set(__NNPACK_INCLUDED TRUE)
if (NOT USE_NNPACK)
return()
endif()
# try any external nnpack first
find_package(NNPACK)
if (NNPACK_FOUND)
message(INFO "Found external NNPACK installation.")
return()
endif()
##############################################################################
# Custom build rules to build nnpack, if external dependency is not found
##############################################################################
set(NNPACK_PREFIX ${PROJECT_SOURCE_DIR}/third_party/NNPACK)
##############################################################################
# (1) MSVC - unsupported
##############################################################################
if (MSVC)
message(WARNING "NNPACK not supported on MSVC yet. Turn this warning off by USE_NNPACK=OFF.")
set(USE_NNPACK OFF)
return()
endif()
##############################################################################
# (2) Anything but x86, x86-64, ARM, ARM64 - unsupported
##############################################################################
if(CMAKE_SYSTEM_PROCESSOR)
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(i686|x86_64|armv5te|armv7-a|armv7l|aarch64)$")
message(WARNING "NNPACK is not supported on ${CMAKE_SYSTEM_PROCESSOR} processors. "
"The only supported architectures are x86, x86-64, ARM, and ARM64. "
"Turn this warning off by USE_NNPACK=OFF.")
set(USE_NNPACK OFF)
return()
endif()
endif()
##############################################################################
# (3) Android, iOS, Linux, macOS - supported
##############################################################################
if (ANDROID OR IOS OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
message(STATUS "Brace yourself, we are building NNPACK")
set(CAFFE2_THIRD_PARTY_ROOT ${PROJECT_SOURCE_DIR}/third_party)
# Directory where NNPACK will download and build all dependencies
set(CONFU_DEPENDENCIES_SOURCE_DIR ${PROJECT_BINARY_DIR}/confu-srcs
CACHE PATH "Confu-style dependencies source directory")
set(CONFU_DEPENDENCIES_BINARY_DIR ${PROJECT_BINARY_DIR}/confu-deps
CACHE PATH "Confu-style dependencies binary directory")
if(NOT TARGET nnpack)
set(NNPACK_BUILD_TESTS OFF CACHE BOOL "")
set(NNPACK_BUILD_BENCHMARKS OFF CACHE BOOL "")
set(NNPACK_LIBRARY_TYPE "static" CACHE STRING "")
set(PTHREADPOOL_LIBRARY_TYPE "static" CACHE STRING "")
add_subdirectory(
"${NNPACK_PREFIX}"
"${CONFU_DEPENDENCIES_BINARY_DIR}")
# We build static versions of nnpack and pthreadpool but link
# them into a shared library for Caffe2, so they need PIC.
set_property(TARGET nnpack PROPERTY POSITION_INDEPENDENT_CODE ON)
set_property(TARGET pthreadpool PROPERTY POSITION_INDEPENDENT_CODE ON)
endif()
set(NNPACK_FOUND TRUE)
set(NNPACK_INCLUDE_DIRS
$<TARGET_PROPERTY:nnpack,INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:pthreadpool,INCLUDE_DIRECTORIES>)
set(NNPACK_LIBRARIES
$<TARGET_FILE:nnpack>
$<TARGET_FILE:pthreadpool>)
return()
endif()
##############################################################################
# (4) Catch-all: not supported.
##############################################################################
message(WARNING "Unknown platform - I don't know how to build NNPACK. "
"See cmake/External/nnpack.cmake for details.")
set(USE_NNPACK OFF)