111 lines
4.4 KiB
CMake
111 lines
4.4 KiB
CMake
cmake_minimum_required(VERSION 3.18)
|
|
project(cudaslicer VERSION 1.0.0 LANGUAGES C CXX CUDA)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CUDA_STANDARD 14)
|
|
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
|
|
|
|
# Cross-platform compiler settings
|
|
if(MSVC)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2 /W3 /MP")
|
|
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -O3 --use_fast_math -Xcompiler=/MD,/W3")
|
|
else()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall -pthread -fPIC")
|
|
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -O3 --use_fast_math -Xcompiler -fPIC,-Wall")
|
|
endif()
|
|
|
|
# Set broad CUDA GPU architecture support (Turing, Ampere, Ada Lovelace, Hopper/Blackwell)
|
|
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
|
|
set(CMAKE_CUDA_ARCHITECTURES "75;80;86")
|
|
endif()
|
|
|
|
include_directories(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
|
${CUDA_INCLUDE_DIRS}
|
|
)
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# 1. Standalone C/C++ Shared Library (libcudaslicer_offset.so / cudaslicer_offset.dll)
|
|
# -----------------------------------------------------------------------------
|
|
add_library(cudaslicer_offset SHARED
|
|
src/gpu_offset.cu
|
|
src/gpu_sdf.cu
|
|
src/cpu_offset.cpp
|
|
)
|
|
set_target_properties(cudaslicer_offset PROPERTIES
|
|
OUTPUT_NAME "cudaslicer_offset"
|
|
CUDA_SEPARABLE_COMPILATION OFF
|
|
)
|
|
target_compile_definitions(cudaslicer_offset PRIVATE GPU_OFFSET_EXPORTS)
|
|
target_link_libraries(cudaslicer_offset PUBLIC cudart)
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# 2. Standalone C/C++ Static Library
|
|
# -----------------------------------------------------------------------------
|
|
add_library(cudaslicer_offset_static STATIC
|
|
src/gpu_offset.cu
|
|
src/gpu_sdf.cu
|
|
src/cpu_offset.cpp
|
|
)
|
|
set_target_properties(cudaslicer_offset_static PROPERTIES
|
|
OUTPUT_NAME "cudaslicer_offset"
|
|
CUDA_SEPARABLE_COMPILATION OFF
|
|
)
|
|
target_link_libraries(cudaslicer_offset_static PUBLIC cudart)
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# 3. C++ Benchmark Binary
|
|
# -----------------------------------------------------------------------------
|
|
add_executable(gpu_slicer_c_bench
|
|
src/main_bench.cpp
|
|
src/stl_slicer.cpp
|
|
)
|
|
target_link_libraries(gpu_slicer_c_bench PRIVATE cudaslicer_offset cudart)
|
|
if(UNIX)
|
|
target_link_libraries(gpu_slicer_c_bench PRIVATE pthread)
|
|
endif()
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# 4. Pybind11 Python Native Extension (_cudaslicer_backend)
|
|
# -----------------------------------------------------------------------------
|
|
if(NOT DEFINED Python3_EXECUTABLE)
|
|
find_program(Python3_EXECUTABLE NAMES python3 python)
|
|
endif()
|
|
find_package(Python3 COMPONENTS Interpreter REQUIRED)
|
|
execute_process(
|
|
COMMAND "${Python3_EXECUTABLE}" -c "import sysconfig; print(sysconfig.get_path('include'))"
|
|
OUTPUT_VARIABLE _python3_include_dir
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
execute_process(
|
|
COMMAND "${Python3_EXECUTABLE}" -c "import pybind11; print(pybind11.get_include())"
|
|
OUTPUT_VARIABLE _pybind11_include_dir
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
execute_process(
|
|
COMMAND "${Python3_EXECUTABLE}" -c "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX') or '.so')"
|
|
OUTPUT_VARIABLE _ext_suffix
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
|
|
add_library(_cudaslicer_backend MODULE
|
|
python/cudaslicer/bindings.cpp
|
|
)
|
|
set_target_properties(_cudaslicer_backend PROPERTIES
|
|
PREFIX ""
|
|
SUFFIX "${_ext_suffix}"
|
|
)
|
|
target_include_directories(_cudaslicer_backend PRIVATE "${_python3_include_dir}" "${_pybind11_include_dir}")
|
|
target_link_libraries(_cudaslicer_backend PRIVATE cudaslicer_offset_static cudart)
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Output Directories
|
|
# -----------------------------------------------------------------------------
|
|
if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
|
|
set_target_properties(cudaslicer_offset PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib")
|
|
set_target_properties(cudaslicer_offset_static PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib")
|
|
set_target_properties(gpu_slicer_c_bench PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin")
|
|
set_target_properties(_cudaslicer_backend PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/python/cudaslicer")
|
|
endif()
|