-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
216 lines (181 loc) · 7.51 KB
/
Copy pathCMakeLists.txt
File metadata and controls
216 lines (181 loc) · 7.51 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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
cmake_minimum_required(VERSION 3.16.0)
project(ASDP_Analysis_Module_Examples LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#-----------------------------------------------------------------------------
# Add locations to look for packages.
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} C:/Boost/boost_1_82_0/lib64-msvc-14.3/cmake C:/Python310)
#-----------------------------------------------------------------------------
if(WIN32)
add_definitions(-DNOMINMAX)
endif(WIN32)
#-----------------------------------------------------------------------------
# Local CMake Modules
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
#-----------------------------------------------------------------------------
# Enable sorting projects within the solution on Visual Studio, to group
# Test and Example files together.
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
#-----------------------------------------------------------------------------
# Checking for optional and required packages
find_package(Threads REQUIRED)
find_package(ASDP_Core_API REQUIRED)
find_package(Doxygen)
find_package(CUDA)
# If CUDA is found, add it as an optional component
if(CUDA_FOUND)
option(USE_CUDA "Use CUDA" ON)
if(USE_CUDA)
enable_language(CUDA)
set(CMAKE_CUDA_ARCHITECTURES 80)
endif()
endif()
find_package(Boost COMPONENTS python numpy)
if(TARGET Boost::python)
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
message(STATUS "Python3 include: ${Python3_INCLUDE_DIRS} executable: ${Python3_EXECUTABLE}")
endif()
if(TARGET Boost::numpy)
message(STATUS "Boost.Python NumPy support enabled")
else()
message(STATUS "Boost.Python NumPy support NOT enabled")
endif()
#-----------------------------------------------------------------------------
# Build options.
if (DOXYGEN_FOUND)
option(BUILD_DOXYGEN "Build DOxygen documentation" ON)
endif (DOXYGEN_FOUND)
if (BUILD_DOXYGEN)
# set input and output files
set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.in)
set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
# request to configure the file
configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
# note the option ALL which allows to build the docs together with the application
add_custom_target( doc_doxygen ALL
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating API documentation with Doxygen"
VERBATIM )
endif (BUILD_DOXYGEN)
#-----------------------------------------------------------------------------
# Build the C++ modules.
set (ASDP_Analysis_Module_CXX_HEADERS
)
set (ASDP_Analysis_Module_CXX_SOURCES
ASDP_Analysis_Module_CXX.cpp
)
add_executable(ASDP_Analysis_Module_CXX ${ASDP_Analysis_Module_CXX_SOURCES} ${ASDP_Analysis_Module_CXX_HEADERS})
target_link_libraries(ASDP_Analysis_Module_CXX ASDP_Core_API::ASDP_Core_API)
include(GNUInstallDirs)
install(TARGETS ASDP_Analysis_Module_CXX EXPORT ${PROJECT_NAME}
RUNTIME DESTINATION bin COMPONENT bin
LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT lib
ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT lib
INCLUDES DESTINATION include
PUBLIC_HEADER DESTINATION include
)
set (Percentile_CXX_HEADERS
)
set (Percentile_CXX_SOURCES
Percentile_CXX.cpp
)
add_executable(Percentile_CXX ${Percentile_CXX_SOURCES} ${Percentile_CXX_HEADERS})
target_link_libraries(Percentile_CXX ASDP_Core_API::ASDP_Core_API)
include(GNUInstallDirs)
install(TARGETS Percentile_CXX EXPORT ${PROJECT_NAME}
RUNTIME DESTINATION bin COMPONENT bin
LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT lib
ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT lib
INCLUDES DESTINATION include
PUBLIC_HEADER DESTINATION include
)
set (Analysis_Test_Sender_HEADERS
)
set (Analysis_Test_Sender_SOURCES
Analysis_Test_Sender.cpp
)
add_executable(Analysis_Test_Sender ${Analysis_Test_Sender_SOURCES} ${Analysis_Test_Sender_HEADERS})
target_link_libraries(Analysis_Test_Sender ASDP_Core_API::ASDP_Core_API)
include(GNUInstallDirs)
install(TARGETS Percentile_CXX EXPORT ${PROJECT_NAME}
RUNTIME DESTINATION bin COMPONENT bin
LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT lib
ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT lib
INCLUDES DESTINATION include
PUBLIC_HEADER DESTINATION include
)
set (ASDP_Streamfile_Analysis_CXX_HEADERS
)
set (ASDP_Streamfile_Analysis_CXX_SOURCES
ASDP_Streamfile_Analysis_CXX.cpp
)
add_executable(ASDP_Streamfile_Analysis_CXX ${ASDP_Streamfile_Analysis_CXX_SOURCES} ${ASDP_Streamfile_Analysis_CXX_HEADERS})
target_link_libraries(ASDP_Streamfile_Analysis_CXX ASDP_Core_API::ASDP_Core_API)
include(GNUInstallDirs)
install(TARGETS ASDP_Streamfile_Analysis_CXX EXPORT ${PROJECT_NAME}
RUNTIME DESTINATION bin COMPONENT bin
LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT lib
ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT lib
INCLUDES DESTINATION include
PUBLIC_HEADER DESTINATION include
)
#-----------------------------------------------------------------------------
# Build the CUDA modules if we found CUDA.
if(CUDA_FOUND)
foreach(APP ASDP_Analysis_Module_CUDA ASDP_Analysis_Module_Median_Threshold)
add_executable(${APP} ${APP}.cu dependencies/ASDP_Render_Module/CUDABufferPool.cpp)
target_link_libraries(${APP} ASDP_Core_API::ASDP_Core_API)
target_include_directories(${APP} PRIVATE dependencies/ASDP_Render_Module)
install(TARGETS ${APP} EXPORT ${PROJECT_NAME}
RUNTIME DESTINATION bin COMPONENT bin
LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT lib
ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT lib
INCLUDES DESTINATION include
PUBLIC_HEADER DESTINATION include
)
endforeach()
endif()
#-----------------------------------------------------------------------------
# Build the Python module if Boost.Python is enabled.
if(TARGET Boost::python)
# Build a Boost.Python extension that exposes two ASDP_Core_API classes
set (PYTHON_BINDINGS_SOURCES
python_bindings.cpp
)
# Use a shared/module library for the Python extension
add_library(ASDP_Core MODULE ${PYTHON_BINDINGS_SOURCES})
# Ensure we compile with the same standard as the project
target_compile_features(ASDP_Core PRIVATE cxx_std_11)
# Link against Boost.Python, the ASDP core API and Python
target_compile_definitions(ASDP_Core PRIVATE BOOST_PYTHON_STATIC_LIB)
target_link_libraries(ASDP_Core
PRIVATE
Boost::python
Python3::Python
ASDP_Core_API::ASDP_Core_API
)
if(TARGET Boost::numpy)
target_compile_definitions(ASDP_Core PRIVATE BOOST_NUMPY_ENABLED)
target_link_libraries(ASDP_Core
PRIVATE
Boost::numpy
)
endif()
# Set extension name / suffix so Python can import it easily
if (WIN32)
# Python extension on Windows should have .pyd suffix and no lib prefix
set_target_properties(ASDP_Core PROPERTIES PREFIX "" SUFFIX ".pyd")
else()
# Use .so on Unix
set_target_properties(ASDP_Core PROPERTIES PREFIX "" SUFFIX ".so")
endif()
# Ensure position independent code
set_target_properties(ASDP_Core PROPERTIES POSITION_INDEPENDENT_CODE ON)
# Optionally install the python module into CMAKE_INSTALL_PREFIX/lib/python or similar
install(TARGETS ASDP_Core
RUNTIME DESTINATION bin COMPONENT python
LIBRARY DESTINATION lib COMPONENT python
ARCHIVE DESTINATION lib COMPONENT python
)
endif()