|
1 | 1 | cmake_minimum_required(VERSION 3.30...4.0) |
2 | 2 |
|
3 | | -project(${SKBUILD_PROJECT_NAME} LANGUAGES CXX) |
4 | | - |
5 | | -set(CMAKE_CXX_STANDARD 20) |
6 | | -set(CMAKE_POSITION_INDEPENDENT_CODE ON) |
| 3 | +# CUDA is transitive dependency of nvbench |
| 4 | +project(${SKBUILD_PROJECT_NAME} LANGUAGES CXX CUDA) |
7 | 5 |
|
8 | 6 | find_package(Python REQUIRED COMPONENTS Development.Module) |
9 | 7 | find_package(CUDAToolkit REQUIRED) |
10 | 8 |
|
11 | | -include(FetchContent) |
| 9 | +# Get CMake package manager |
| 10 | +set(_cpm_download_location ${CMAKE_CURRENT_BINARY_DIR}/cmake/CPM.cmake) |
| 11 | +file( |
| 12 | + DOWNLOAD |
| 13 | + https://github.com/cpm-cmake/CPM.cmake/releases/download/v0.42.0/CPM.cmake |
| 14 | + ${_cpm_download_location} |
| 15 | + EXPECTED_HASH SHA256=2020b4fc42dba44817983e06342e682ecfc3d2f484a581f11cc5731fbe4dce8a |
| 16 | +) |
| 17 | +include(${_cpm_download_location}) |
12 | 18 |
|
13 | | -FetchContent_Declare( |
14 | | - pybind11 |
15 | | - URL https://github.com/pybind/pybind11/archive/refs/tags/v2.13.6.tar.gz |
16 | | - URL_HASH SHA256=e08cb87f4773da97fa7b5f035de8763abc656d87d5773e62f6da0587d1f0ec20 |
17 | | - FIND_PACKAGE_ARGS NAMES pybind11 |
| 19 | +CPMAddPackage( |
| 20 | + NAME nvbench |
| 21 | + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/.. |
| 22 | + OPTIONS "NVBench_INSTALL_RULES ON" |
| 23 | + FIND_PACKAGE_ARGS CONFIG REQUIRED |
18 | 24 | ) |
19 | | -FetchContent_MakeAvailable(pybind11) |
20 | 25 |
|
21 | | -find_package(nvbench CONFIG REQUIRED) |
| 26 | +CPMAddPackage("gh:pybind/[email protected]") |
22 | 27 |
|
23 | 28 | pybind11_add_module(_nvbench MODULE src/py_nvbench.cpp) |
24 | 29 | target_link_libraries(_nvbench PUBLIC nvbench::nvbench) |
25 | 30 | target_link_libraries(_nvbench PRIVATE CUDA::cudart_static) |
| 31 | + |
26 | 32 | set_target_properties(_nvbench PROPERTIES INSTALL_RPATH "$ORIGIN") |
| 33 | +set_target_properties(_nvbench PROPERTIES INTERPROCEDURAL_OPTIMIZATION ON) |
| 34 | +set_target_properties(_nvbench PROPERTIES POSITION_INDEPENDENT_CODE ON) |
| 35 | +set_target_properties(_nvbench PROPERTIES CXX_STANDARD 20) |
27 | 36 |
|
28 | 37 | install(TARGETS _nvbench DESTINATION cuda/nvbench) |
29 | | -install(IMPORTED_RUNTIME_ARTIFACTS nvbench::nvbench DESTINATION cuda/nvbench) |
| 38 | + |
| 39 | +# Determine target that nvbench::nvbench is an alias of, |
| 40 | +# necessary because ALIAS targets cannot be installed |
| 41 | +get_target_property(_aliased_target_name nvbench::nvbench ALIASED_TARGET) |
| 42 | +install(IMPORTED_RUNTIME_ARTIFACTS ${_aliased_target_name} DESTINATION cuda/nvbench) |
0 commit comments