1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
# Minimum CMake required
cmake_minimum_required(VERSION 3.1)
# Set default build type
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "Build type not set - defaulting to Release")
set(
CMAKE_BUILD_TYPE "Release"
CACHE
STRING
"Choose the type of build from: Debug Release RelWithDebInfo MinSizeRel Coverage."
FORCE)
endif()
cmake_policy(SET CMP0063 NEW)
# Project
project(foxi C)
option(FOXI_WERROR "Build with Werror" OFF)
# Set C++11 as standard for the whole project
if(NOT MSVC)
set(CMAKE_CXX_STANDARD 11)
endif(NOT MSVC)
set(FOXI_ROOT ${PROJECT_SOURCE_DIR})
# Read ONNX version
file(READ "${PROJECT_SOURCE_DIR}/VERSION_NUMBER" ONNX_VERSION)
string(STRIP "${ONNX_VERSION}" ONNX_VERSION)
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
if(ONNX_COVERAGE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
endif()
endif()
# Build the libraries with -fPIC
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Export include directories
# ---[ ONNX Interface for Framework Integratin (FOXI)
add_library(foxi INTERFACE)
target_include_directories(foxi INTERFACE
$<BUILD_INTERFACE:${FOXI_ROOT}>
$<INSTALL_INTERFACE:include>)
# ---[ FOXI loader
add_library(foxi_loader STATIC foxi/onnxifi_loader.c)
target_include_directories(foxi_loader PUBLIC
$<BUILD_INTERFACE:${FOXI_ROOT}>
$<INSTALL_INTERFACE:include>)
# Users of ONNX backend API would compile it with their toolchain, so it is
# implemented in standard C89 for maximum compatibility
set_target_properties(foxi_loader
PROPERTIES C_STANDARD
90
C_EXTENSIONS
NO)
target_link_libraries(foxi_loader PUBLIC foxi ${CMAKE_DL_LIBS})
if(MSVC)
add_msvc_runtime_flag(foxi_loader)
endif()
if (NOT ANDROID AND NOT IOS)
# ---[ FOXI wrapper
add_library(foxi_wrapper MODULE foxi/onnxifi_wrapper.c)
target_include_directories(foxi_wrapper PRIVATE
$<BUILD_INTERFACE:${FOXI_ROOT}>
$<INSTALL_INTERFACE:include>)
set_target_properties(foxi_wrapper PROPERTIES
C_STANDARD 99
C_EXTENSIONS NO
OUTPUT_NAME "foxi"
POSITION_INDEPENDENT_CODE YES)
target_link_libraries(foxi_wrapper PRIVATE foxi_loader foxi)
if(DEFINED FOXI_SEARCH_DIR)
target_compile_definitions(foxi_wrapper PRIVATE "FOXI_SEARCH_DIR=\"${FOXI_SEARCH_DIR}\"")
endif()
if(WIN32)
if(MSVC)
target_compile_definitions(foxi_wrapper PRIVATE "ONNXIFI_PUBLIC=__declspec(dllexport)")
else()
target_compile_definitions(foxi_wrapper PRIVATE "ONNXIFI_PUBLIC=__attribute__((__dllexport__))")
endif()
endif()
if(APPLE)
# By default CMake would use .so suffix on Mac
set_target_properties(foxi_wrapper PROPERTIES SUFFIX ".dylib")
endif()
endif()
# ---[ FOXI dummy backend
add_library(foxi_dummy SHARED foxi/onnxifi_dummy.c)
target_include_directories(foxi_dummy PRIVATE
$<BUILD_INTERFACE:${FOXI_ROOT}>
$<INSTALL_INTERFACE:include>)
target_link_libraries(foxi_dummy PUBLIC foxi ${CMAKE_DL_LIBS})
target_compile_definitions(foxi_dummy PRIVATE ONNXIFI_BUILD_LIBRARY=TRUE)
if(MSVC)
add_msvc_runtime_flag(foxi_dummy)
endif()
install(DIRECTORY ${FOXI_ROOT}/foxi
DESTINATION include
FILES_MATCHING
PATTERN "*.h")
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/foxi
DESTINATION include
FILES_MATCHING
PATTERN "*.h")
install(TARGETS
foxi foxi_dummy foxi_loader
EXPORT ONNXTargets DESTINATION lib)
if(NOT ANDROID AND NOT IOS)
install(TARGETS foxi_wrapper
EXPORT ONNXTargets DESTINATION lib)
endif()
set(FOXI_INCLUDE_DIRS "${FOXI_ROOT}" "${CMAKE_CURRENT_BINARY_DIR}")
get_directory_property(hasParent PARENT_DIRECTORY)
if(hasParent)
set(FOXI_INCLUDE_DIRS ${FOXI_INCLUDE_DIRS} PARENT_SCOPE)
endif()
include(cmake/summary.cmake)
onnx_print_configuration_summary()
|