forked from pytorch/glow
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
142 lines (112 loc) · 4.23 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
133
134
135
136
137
138
139
140
141
142
cmake_minimum_required(VERSION 3.5)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
project(Glow C CXX)
enable_testing()
option(GLOW_WITH_CPU "Build the LLVM-based JIT CPU backend" ON)
option(GLOW_WITH_OPENCL "Build the OpenCL backend" ON)
option(GLOW_BUILD_EXAMPLES "Build the examples" ON)
option(GLOW_BUILD_TESTS "Build the tests" ON)
option(GLOW_WITH_BUNDLES "Build bundles" OFF)
set(CMAKE_CXX_STANDARD 14)
set(CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if (NOT BUILD_SHARED_LIBS)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
endif ()
# Export a JSON file with the compilation commands that external tools can use
# to analyze the source code of the project.
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include(GlowDefaults)
include(GlowTestSupport)
include(SanitizerSupport)
include(CoverageSupport)
include(DoxygenSupport)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/CMakeGraphVizOptions.cmake
${CMAKE_CURRENT_BINARY_DIR}/CMakeGraphVizOptions.cmake COPYONLY)
set(GLOW_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(GLOW_THIRDPARTY_DIR ${GLOW_SOURCE_DIR}/thirdparty)
set(GLOW_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(GLOW_OUTPUT_DIR ${GLOW_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${GLOW_OUTPUT_DIR})
set(GLOW_MODELS_DIR "" CACHE PATH
"Directory that contains the various models, like en2gr, resnet50")
include_directories(BEFORE
${CMAKE_CURRENT_BINARY_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/include
)
include_directories(${GLOW_BINARY_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
file(GLOB_RECURSE header_files include/*.h tools/*.h lib/*.h)
add_custom_target(CollectHeaders SOURCES ${header_files})
find_package(PNG)
if(PNG_FOUND)
add_definitions(-DWITH_PNG)
endif()
if(GLOW_WITH_CPU)
add_definitions(-DGLOW_WITH_CPU=1)
endif ()
if (GLOW_WITH_OPENCL)
add_definitions(-DGLOW_WITH_OPENCL=1)
find_package(OpenCL REQUIRED)
endif ()
# Prefer LLVM 7.
find_package(LLVM 7 CONFIG)
# If LLVM 7 not found, try building with LLVM 6.
if (NOT LLVM_FOUND)
# Fallback to LLVM 6
find_package(LLVM 6 CONFIG)
# Fallback to whatever is available.
if (NOT LLVM_FOUND)
find_package(LLVM CONFIG)
endif()
endif()
if (NOT LLVM_FOUND)
message(FATAL_ERROR "Could not find LLVM. Build LLVM manually and configure the project with -DCMAKE_PREFIX_PATH=/path/to/llvm/install")
endif()
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
include_directories(SYSTEM ${LLVM_INCLUDE_DIRS})
if(NOT EXISTS "${GLOW_SOURCE_DIR}/tests/googletest/googletest")
message(FATAL_ERROR "No googletest git submodule. Run: git submodule update --init --recursive")
endif()
if(NOT EXISTS "${GLOW_THIRDPARTY_DIR}/onnx")
message(FATAL_ERROR "No onnx git submodule. Run: git submodule update --init --recursive")
endif()
if(NOT EXISTS "${GLOW_THIRDPARTY_DIR}/fp16")
message(FATAL_ERROR "No fp16 git submodule. Run: git submodule update --init --recursive")
else()
include_directories(${GLOW_THIRDPARTY_DIR}/fp16/include)
endif()
find_program(FILECHECK "FileCheck")
# The lit environment works equally with lit.py from llvm source or
# the python lit package. Check for the other one if lit.py failed.
find_program(LLVM_LIT "lit.py")
if (NOT LLVM_LIT)
find_program(LLVM_LIT "lit")
endif()
if (FILECHECK AND LLVM_LIT)
set(HAS_LLVM_TEST_ENV ON)
else()
set(HAS_LLVM_TEST_ENV OFF)
endif()
add_subdirectory(lib)
add_subdirectory(tools)
if (GLOW_BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
if (GLOW_WITH_BUNDLES AND NOT GLOW_WITH_CPU)
message(FATAL_ERROR "Cannot create bundles without CPU backend. Configure with -DGLOW_WITH_BUNDLES and -DGLOW_WITH_CPU to build bundles.")
endif()
if (GLOW_BUILD_TESTS)
add_subdirectory(tests/googletest)
add_subdirectory(tests)
# Fetch the dependencies for all the tests.
get_property(GLOW_TEST_DEPENDS GLOBAL PROPERTY GLOW_TEST_DEPENDS)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
DEPENDS ${GLOW_TEST_DEPENDS} USES_TERMINAL)
endif()
add_custom_target(dependency_graph
"${CMAKE_COMMAND}" "--graphviz=dependency_graph" .
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")