Skip to content

Commit 14e1d50

Browse files
committedAug 27, 2022
Added publication version.
1 parent 8a3c989 commit 14e1d50

File tree

128 files changed

+15961
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+15961
-0
lines changed
 

‎.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*build/*

‎CMakeLists.txt

+171
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
################################################## Project ##################################################
2+
cmake_minimum_required(VERSION 3.23 FATAL_ERROR)
3+
project (astray VERSION 1.0 LANGUAGES C CXX)
4+
list (APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
5+
set_property (GLOBAL PROPERTY USE_FOLDERS ON)
6+
set (CMAKE_CXX_STANDARD 17)
7+
set (CMAKE_BUILD_TYPE Release)
8+
9+
include (set_max_warning_level)
10+
set_max_warning_level ()
11+
12+
################################################## Options ##################################################
13+
option (ASTRAY_BUILD_APPLICATIONS "Build the example applications (default: OFF)." OFF)
14+
option (ASTRAY_BUILD_TESTS "Build the tests (default: OFF)." OFF)
15+
option (ASTRAY_USE_FFMPEG "Use FFMPEG for video output (default: OFF)." OFF)
16+
option (ASTRAY_USE_MPI "Use MPI for distributed compute (default: OFF)." OFF)
17+
18+
set (ASTRAY_DEVICE_SYSTEM OMP CACHE STRING "Device system (default: OMP).")
19+
set_property(CACHE ASTRAY_DEVICE_SYSTEM PROPERTY STRINGS CPP CUDA OMP TBB)
20+
21+
################################################## Sources ##################################################
22+
file(GLOB_RECURSE PROJECT_HEADERS include/*.h include/*.hpp)
23+
file(GLOB_RECURSE PROJECT_CMAKE_UTILS cmake/*.cmake)
24+
file(GLOB_RECURSE PROJECT_MISC *.md *.txt)
25+
set (PROJECT_FILES ${PROJECT_HEADERS} ${PROJECT_CMAKE_UTILS} ${PROJECT_MISC})
26+
27+
include (assign_source_group)
28+
assign_source_group(${PROJECT_FILES})
29+
30+
################################################## Dependencies ##################################################
31+
include(import_library)
32+
33+
if (ASTRAY_BUILD_TESTS)
34+
find_package (doctest CONFIG REQUIRED)
35+
list (APPEND PROJECT_LIBRARIES doctest::doctest)
36+
set (PROJECT_DEPENDENCY_DOCTEST "find_dependency(doctest)")
37+
endif ()
38+
39+
if (ASTRAY_USE_FFMPEG)
40+
find_package (FFMPEG REQUIRED)
41+
import_library (FFMPEG_INCLUDE_DIRS FFMPEG_LIBRARIES)
42+
list (APPEND PROJECT_COMPILE_DEFINITIONS -DASTRAY_USE_FFMPEG)
43+
set (PROJECT_DEPENDENCY_FFMPEG "find_dependency(FFMPEG)")
44+
endif ()
45+
46+
if (ASTRAY_USE_MPI)
47+
find_package (MPI REQUIRED COMPONENTS C)
48+
list (APPEND PROJECT_LIBRARIES MPI::MPI_C)
49+
list (APPEND PROJECT_COMPILE_DEFINITIONS -DASTRAY_USE_MPI)
50+
set (PROJECT_DEPENDENCY_MPI "find_dependency(MPI)")
51+
endif ()
52+
53+
if (${ASTRAY_DEVICE_SYSTEM} STREQUAL CUDA)
54+
enable_language(CUDA)
55+
find_package (CUDA REQUIRED)
56+
set (CMAKE_CUDA_ARCHITECTURES "all-major")
57+
list (APPEND PROJECT_COMPILE_OPTIONS $<$<COMPILE_LANGUAGE:CUDA>:--extended-lambda --expt-relaxed-constexpr --use_fast_math>)
58+
import_library (CUDA_INCLUDE_DIRS CUDA_LIBRARIES)
59+
list (APPEND PROJECT_COMPILE_DEFINITIONS -DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_CUDA)
60+
set (PROJECT_DEPENDENCY_DEVICE "find_dependency(CUDA)")
61+
elseif (${ASTRAY_DEVICE_SYSTEM} STREQUAL OMP)
62+
find_package (OpenMP REQUIRED)
63+
list (APPEND PROJECT_LIBRARIES OpenMP::OpenMP_CXX)
64+
list (APPEND PROJECT_COMPILE_DEFINITIONS -DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_OMP )
65+
set (PROJECT_DEPENDENCY_DEVICE "find_dependency(OpenMP)")
66+
elseif (${ASTRAY_DEVICE_SYSTEM} STREQUAL TBB)
67+
find_package (TBB REQUIRED)
68+
list (APPEND PROJECT_LIBRARIES TBB::tbb TBB::tbbmalloc)
69+
list (APPEND PROJECT_COMPILE_DEFINITIONS -DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_TBB )
70+
set (PROJECT_DEPENDENCY_DEVICE "find_dependency(TBB)")
71+
elseif (${ASTRAY_DEVICE_SYSTEM} STREQUAL CPP)
72+
list (APPEND PROJECT_COMPILE_DEFINITIONS -DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_CPP )
73+
endif ()
74+
75+
find_package (Eigen3 REQUIRED NO_MODULE)
76+
list (APPEND PROJECT_LIBRARIES Eigen3::Eigen)
77+
78+
find_package (thrust CONFIG REQUIRED)
79+
list (APPEND PROJECT_LIBRARIES thrust::thrust)
80+
81+
################################################## Targets ##################################################
82+
add_library(${PROJECT_NAME} INTERFACE)
83+
target_include_directories(${PROJECT_NAME} INTERFACE
84+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
85+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
86+
$<INSTALL_INTERFACE:include>)
87+
target_include_directories(${PROJECT_NAME} INTERFACE ${PROJECT_INCLUDE_DIRS})
88+
target_link_libraries (${PROJECT_NAME} INTERFACE ${PROJECT_LIBRARIES})
89+
target_compile_definitions(${PROJECT_NAME} INTERFACE ${PROJECT_COMPILE_DEFINITIONS})
90+
target_compile_options (${PROJECT_NAME} INTERFACE ${PROJECT_COMPILE_OPTIONS})
91+
92+
# Hack for header-only project to appear in the IDEs.
93+
add_library(${PROJECT_NAME}_ STATIC ${PROJECT_FILES})
94+
target_include_directories(${PROJECT_NAME}_ PUBLIC
95+
${CMAKE_CURRENT_SOURCE_DIR}/include
96+
${CMAKE_CURRENT_BINARY_DIR})
97+
target_include_directories(${PROJECT_NAME}_ PUBLIC ${PROJECT_INCLUDE_DIRS})
98+
target_link_libraries (${PROJECT_NAME}_ PUBLIC ${PROJECT_LIBRARIES})
99+
target_compile_definitions(${PROJECT_NAME}_ PUBLIC ${PROJECT_COMPILE_DEFINITIONS})
100+
target_compile_options (${PROJECT_NAME}_ PUBLIC ${PROJECT_COMPILE_OPTIONS})
101+
set_target_properties (${PROJECT_NAME}_ PROPERTIES LINKER_LANGUAGE CXX)
102+
103+
################################################## Applications ##################################################
104+
if(ASTRAY_BUILD_APPLICATIONS)
105+
file(GLOB PROJECT_APPLICATION_HPPS applications/*.hpp)
106+
file(GLOB PROJECT_APPLICATION_CPPS applications/*.cu )
107+
108+
# Hack for compiling .cu files as .cpp.
109+
if (NOT ${ASTRAY_DEVICE_SYSTEM} STREQUAL CUDA)
110+
set_source_files_properties(${PROJECT_APPLICATION_CPPS} PROPERTIES LANGUAGE CXX)
111+
endif()
112+
113+
foreach(_SOURCE ${PROJECT_APPLICATION_CPPS})
114+
get_filename_component(_NAME ${_SOURCE} NAME_WE)
115+
add_executable (${_NAME} ${PROJECT_APPLICATION_HPPS} ${_SOURCE})
116+
target_link_libraries (${_NAME} ${PROJECT_NAME})
117+
target_link_libraries (${_NAME} ${PROJECT_LIBRARIES})
118+
set_property (TARGET ${_NAME} PROPERTY FOLDER applications)
119+
set_property (TARGET ${_NAME} PROPERTY LINKER_LANGUAGE CXX)
120+
assign_source_group (${PROJECT_APPLICATION_HPPS} ${_SOURCE})
121+
endforeach()
122+
endif()
123+
124+
################################################## Testing ##################################################
125+
if(ASTRAY_BUILD_TESTS)
126+
enable_testing ()
127+
set (TEST_MAIN_NAME test_main)
128+
set (TEST_MAIN_SOURCES tests/internal/main.cpp)
129+
add_library (${TEST_MAIN_NAME} OBJECT ${TEST_MAIN_SOURCES})
130+
target_link_libraries(${TEST_MAIN_NAME} ${PROJECT_NAME})
131+
set_property (TARGET ${TEST_MAIN_NAME} PROPERTY FOLDER tests)
132+
assign_source_group (${TEST_MAIN_SOURCES})
133+
134+
file(GLOB_RECURSE PROJECT_TEST_CPPS tests/*.cu)
135+
136+
# Hack for compiling .cu files as .cpp.
137+
if (NOT ${ASTRAY_DEVICE_SYSTEM} STREQUAL CUDA)
138+
set_source_files_properties(${PROJECT_TEST_CPPS} PROPERTIES LANGUAGE CXX)
139+
endif()
140+
141+
foreach(_SOURCE ${PROJECT_TEST_CPPS})
142+
get_filename_component(_NAME ${_SOURCE} NAME_WE )
143+
get_filename_component(_DIRECTORY ${_SOURCE} DIRECTORY)
144+
get_filename_component(_PARENT ${_DIRECTORY} NAME )
145+
add_executable (${_NAME} ${_SOURCE} $<TARGET_OBJECTS:${TEST_MAIN_NAME}>)
146+
target_link_libraries (${_NAME} ${PROJECT_NAME})
147+
target_link_libraries (${_NAME} ${PROJECT_LIBRARIES})
148+
add_test (${_NAME} ${_NAME})
149+
set_property (TARGET ${_NAME} PROPERTY FOLDER tests/${_PARENT})
150+
assign_source_group (${_SOURCE})
151+
endforeach()
152+
endif()
153+
154+
################################################## Installation ##################################################
155+
install(DIRECTORY include/ DESTINATION include)
156+
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME})
157+
install(EXPORT ${PROJECT_NAME} FILE ${PROJECT_NAME}-targets.cmake NAMESPACE ${PROJECT_NAME}:: DESTINATION cmake)
158+
export (TARGETS ${PROJECT_NAME} FILE ${PROJECT_NAME}-targets.cmake)
159+
160+
include(CMakePackageConfigHelpers)
161+
configure_package_config_file (
162+
${PROJECT_NAME}-config.cmake.in
163+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake INSTALL_DESTINATION cmake)
164+
write_basic_package_version_file(
165+
${PROJECT_NAME}-config-version.cmake
166+
VERSION ${PROJECT_VERSION}
167+
COMPATIBILITY SameMajorVersion)
168+
install(FILES
169+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake
170+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
171+
DESTINATION cmake)

0 commit comments

Comments
 (0)
Please sign in to comment.