File: CMakeLists.txt

package info (click to toggle)
pytorch 1.13.1%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 139,252 kB
  • sloc: cpp: 1,100,274; python: 706,454; ansic: 83,052; asm: 7,618; java: 3,273; sh: 2,841; javascript: 612; makefile: 323; xml: 269; ruby: 185; yacc: 144; objc: 68; lex: 44
file content (132 lines) | stat: -rw-r--r-- 4,077 bytes parent folder | download | duplicates (2)
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()