-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
150 lines (118 loc) · 5.06 KB
/
CMakeLists.txt
File metadata and controls
150 lines (118 loc) · 5.06 KB
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
143
144
145
146
147
148
149
150
cmake_minimum_required(VERSION 4.0)
project(flashlight LANGUAGES CXX C VERSION 0.4.0)
include(CTest)
include(CMakeDependentOption)
# ----------------------------- Setup -----------------------------
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# The CUDA standard is still C++14 to enable interopability with
# slightly older and still well-supported versions of CUDA/nvcc
# (e.g. CUDA < 11). This will be bumped to 17 once CUDA 11 is
# required.
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
# no modules in this library
set(CMAKE_CXX_SCAN_FOR_MODULES OFF)
# Default directories for installation
set(FL_INSTALL_INC_DIR "include" CACHE PATH "Install path for headers")
set(FL_INSTALL_INC_DIR_HEADER_LOC ${FL_INSTALL_INC_DIR}/flashlight)
set(FL_INSTALL_LIB_DIR "lib" CACHE PATH "Install path for libraries")
set(FL_INSTALL_BIN_DIR "bin" CACHE PATH "Install path for binaries")
# Other assets
set(FL_INSTALL_ASSETS_BASE_DIR "share/flashlight")
set(FL_INSTALL_CMAKE_DIR "${FL_INSTALL_ASSETS_BASE_DIR}/cmake" CACHE PATH "Install path for CMake files")
set(FL_INSTALL_EXAMPLES_DIR "${FL_INSTALL_ASSETS_BASE_DIR}/examples" CACHE PATH "Install path for example files")
set(FL_INSTALL_DOC_DIR "${FL_INSTALL_ASSETS_BASE_DIR}/doc" CACHE PATH "Install path for documentation")
include(CheckCXXCompilerFlag)
# All libraries should have their symbols exported so plugins can lazily
# symbols from any of them
check_cxx_compiler_flag("-rdynamic" COMPILER_SUPPORTS_RDYNAMIC)
if(${COMPILER_SUPPORTS_RDYNAMIC})
message(STATUS "-rdynamic supported.")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -rdynamic")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rdynamic")
else()
if(NOT WIN32) # Windows operates with explicit dll exports
message(WARNING
"This compiler doesn't support dynamic symbol exports. "
"Plugin functionality likely won't work.")
endif()
endif()
if(WIN32 OR MSVC)
set(FL_BUILD_PLUGIN ON)
else()
set(FL_BUILD_PLUGIN ${COMPILER_SUPPORTS_RDYNAMIC})
endif()
# ]------ The library target for the Flashlight core
add_library(flashlight)
# We haven't [yet] polluted Flashlight with explicit dllexport annotations
if(MSVC)
target_compile_options(flashlight PUBLIC $<$<NOT:$<COMPILE_LANGUAGE:CUDA>>:/bigobj>)
endif()
if(WIN32)
target_compile_definitions(flashlight PUBLIC _USE_MATH_DEFINES NOMINMAX)
endif()
include(InternalUtils)
# ----------------------------- Configuration -----------------------------
option(FL_BUILD_TESTS "Build tests" ON)
option(FL_CODE_COVERAGE "Enable coverage reporting" OFF)
option(FL_BUILD_EXAMPLES "Build examples" ON)
option(FL_BUILD_EXPERIMENTAL "Build internal experimental components" OFF)
option(FL_BUILD_SCRIPTS "Build internal scripts for wav2letter++" OFF)
option(FL_BUILD_RECIPES "Build recipes" ON)
option(FL_BUILD_STANDALONE "Build standalone installation" ON)
if(FL_BUILD_TESTS)
enable_testing()
include(TestUtils)
endif()
# External project configuration
option(FL_TEXT_REQUIRE_KENLM "Require KenLM in the Flashlight text build" OFF)
# List of installable targets
set(INSTALLABLE_TARGETS)
set(FL_ROOT_DIR ${PROJECT_SOURCE_DIR}/flashlight)
set(FL_BUILD_BINARY_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/bin")
# ]--- Backend Options
# TODO: change these to FL_BACKEND_* to be consistent with preproc
option(FL_USE_CUDA "Build CUDA support for Flashlight backends" OFF)
option(FL_USE_CPU "Build CPU support for Flashlight backends" OFF)
option(FL_USE_OPENCL "Build OpenCL support for Flashlight backends" OFF)
option(FL_USE_MKL "Build MKL support for Flashlight backends" OFF)
# --------------------------- Core ---------------------------
# Internal includes are implicitly defined as <flashlight...>
target_include_directories(
flashlight
PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
)
set(FL_CORE_DIR "${FL_ROOT_DIR}/fl")
include(${FL_CORE_DIR}/CMakeLists.txt)
list(APPEND INSTALLABLE_TARGETS flashlight)
# flashlight core components keep their relative paths with respect to project
setup_install_headers(${FL_CORE_DIR} ${FL_INSTALL_INC_DIR_HEADER_LOC})
# FL_USE_* variables are set in flashlight/fl/tensor/CMakeLists.txt based on
# backend registration
target_compile_definitions(flashlight
PUBLIC
FL_BACKEND_CPU=$<BOOL:${FL_USE_CPU}>
FL_BACKEND_CUDA=$<BOOL:${FL_USE_CUDA}>
FL_BUILD_PROFILING=$<BOOL:${FL_BUILD_PROFILING}>
FL_COMPILE_LIBRARY=$<BOOL:${BUILD_SHARED_LIBS}>
PRIVATE
FL_DLL
)
if(FL_CODE_COVERAGE)
add_coverage_to_target(TARGET flashlight)
endif()
# --------------------------- pkg/app ---------------------------
include(${FL_ROOT_DIR}/pkg/CMakeLists.txt)
# --------------------------- Cleanup ---------------------------
setup_install_targets(INSTALL_TARGETS ${INSTALLABLE_TARGETS})
# --------------------------- Other ------------------------------
include(fm_target_utilities)
fm_glob_cpp(FM_CPP "flashlight/*")
fm_add_uncrustify_target(uncrustify-format OPTIONAL ${FM_CPP})