-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
103 lines (80 loc) · 2.58 KB
/
CMakeLists.txt
File metadata and controls
103 lines (80 loc) · 2.58 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
cmake_minimum_required(VERSION 4.1)
project(genmetaballs VERSION 0.0.1 LANGUAGES CUDA CXX)
include(CheckLanguage)
check_language(CUDA)
set(CMAKE_CXX_STANDARD 20)
# Generate compile_commands.json for clang-tidy and other tools
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Wno-deprecated-gpu-targets")
set(CMAKE_CUDA_FLAGS_RELEASE "${CMAKE_CUDA_FLAGS_RELEASE} -Xptxas -O3")
################
# Core Library #
################
add_library(genmetaballs_core
genmetaballs/src/cuda/core/camera.cu
genmetaballs/src/cuda/core/camera.cuh
genmetaballs/src/cuda/core/confidence.cuh
genmetaballs/src/cuda/core/fmb.cu
genmetaballs/src/cuda/core/fmb.cuh
genmetaballs/src/cuda/core/forward.cu
genmetaballs/src/cuda/core/forward.cuh
genmetaballs/src/cuda/core/geometry.cu
genmetaballs/src/cuda/core/geometry.cuh
genmetaballs/src/cuda/core/image.cuh
genmetaballs/src/cuda/core/intersector.cuh
genmetaballs/src/cuda/core/utils.cu
genmetaballs/src/cuda/core/utils.cuh
)
# Set include directories for the core library
target_include_directories(genmetaballs_core
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/genmetaballs/src/cuda
)
# Enable Position Independent Code for shared library linking
set_target_properties(genmetaballs_core PROPERTIES
POSITION_INDEPENDENT_CODE ON
CUDA_SEPARABLE_COMPILATION ON
)
############
# Bindings #
############
find_package(Python 3.13
REQUIRED COMPONENTS Interpreter Development.Module
OPTIONAL_COMPONENTS Development.SABIModule)
find_package(nanobind CONFIG REQUIRED)
# Build the extension
nanobind_add_module(
_genmetaballs_bindings
NB_STATIC
STABLE_ABI
genmetaballs/src/cuda/bindings.cu
)
# Link the core library to the bindings module
target_link_libraries(_genmetaballs_bindings PRIVATE genmetaballs_core)
# Enable CUDA separable compilation for device code linking
set_target_properties(_genmetaballs_bindings PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
)
# Install the extension into the Python package directory
install(TARGETS _genmetaballs_bindings LIBRARY DESTINATION genmetaballs)
################
# Testing #
################
enable_testing()
# Find GTest
find_package(GTest CONFIG REQUIRED)
# C++/CUDA test executable
file(GLOB CPP_CUDA_TEST_SOURCES tests/cpp_tests/*.cu tests/cpp_tests/*.cpp)
add_executable(cpp_tests ${CPP_CUDA_TEST_SOURCES})
target_link_libraries(cpp_tests
PRIVATE
genmetaballs_core
GTest::gtest
GTest::gtest_main
)
# Enable CUDA for the test executable
set_target_properties(cpp_tests PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
)
include(GoogleTest)
gtest_discover_tests(cpp_tests)