-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathCMakeLists.txt
132 lines (116 loc) · 3.98 KB
/
CMakeLists.txt
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()