mirror of
https://github.com/NVIDIA/nvbench.git
synced 2026-03-14 20:27:24 +00:00
Update NVBench build system with initial standalone support.
This commit is contained in:
@@ -1,12 +1,22 @@
|
|||||||
# 3.18.3 is needed for a MSVC + NVCC + C++17 bugfix.
|
# 3.18.3 is needed for a MSVC + NVCC + C++17 bugfix.
|
||||||
cmake_minimum_required(VERSION 3.18.3)
|
cmake_minimum_required(VERSION 3.18.3)
|
||||||
|
|
||||||
project(nvbench CUDA)
|
# CXX to work around issues with CUDA-only CMake projects.
|
||||||
|
project(NVBench CUDA CXX)
|
||||||
|
|
||||||
|
option(NVBench_ENABLE_TESTING "Build NVBench testing suite." OFF)
|
||||||
|
|
||||||
# Setup some vars for CPM packages:
|
# Setup some vars for CPM packages:
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/")
|
||||||
|
|
||||||
|
# NVBench requires C++17.
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CUDA_STANDARD 17)
|
set(CMAKE_CUDA_STANDARD 17)
|
||||||
|
|
||||||
|
# TODO this probably should use GNUInstallDirs or something.
|
||||||
|
set(NVBench_LIBRARY_OUTPUT_DIR "${CMAKE_BINARY_DIR}/lib")
|
||||||
|
set(NVBench_EXECUTABLE_OUTPUT_DIR "${CMAKE_BINARY_DIR}/bin")
|
||||||
|
|
||||||
include(CPM)
|
include(CPM)
|
||||||
|
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
@@ -16,4 +26,8 @@ CPMAddPackage(
|
|||||||
)
|
)
|
||||||
|
|
||||||
add_subdirectory(nvbench)
|
add_subdirectory(nvbench)
|
||||||
add_subdirectory(testing)
|
|
||||||
|
if (NVBench_ENABLE_TESTING)
|
||||||
|
enable_testing()
|
||||||
|
add_subdirectory(testing)
|
||||||
|
endif()
|
||||||
|
|||||||
19
cmake/modules/CPM.cmake
Normal file
19
cmake/modules/CPM.cmake
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
set(CPM_DOWNLOAD_VERSION 0.27.3)
|
||||||
|
|
||||||
|
if(CPM_SOURCE_CACHE)
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
else()
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
|
||||||
|
message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}")
|
||||||
|
file(DOWNLOAD
|
||||||
|
https://github.com/TheLartians/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
|
||||||
|
${CPM_DOWNLOAD_LOCATION}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(${CPM_DOWNLOAD_LOCATION})
|
||||||
@@ -30,10 +30,20 @@ add_library(nvbench STATIC ${srcs})
|
|||||||
add_library(nvbench::nvbench ALIAS nvbench)
|
add_library(nvbench::nvbench ALIAS nvbench)
|
||||||
|
|
||||||
# TODO generator expressions for installed paths
|
# TODO generator expressions for installed paths
|
||||||
target_include_directories(nvbench PUBLIC "${nvbench_SOURCE_DIR}")
|
target_include_directories(nvbench PUBLIC "${NVBench_SOURCE_DIR}")
|
||||||
target_link_libraries(nvbench PRIVATE fmt::fmt)
|
target_link_libraries(nvbench PRIVATE fmt::fmt)
|
||||||
target_compile_features(nvbench PUBLIC cuda_std_17)
|
target_compile_features(nvbench PUBLIC cuda_std_17)
|
||||||
|
set_target_properties(nvbench PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${NVBench_LIBRARY_OUTPUT_DIR}"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${NVBench_LIBRARY_OUTPUT_DIR}"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${NVBench_EXECUTABLE_OUTPUT_DIR}"
|
||||||
|
)
|
||||||
|
|
||||||
add_library(nvbench_main OBJECT main.cu)
|
add_library(nvbench_main OBJECT main.cu)
|
||||||
add_library(nvbench::main ALIAS nvbench_main)
|
add_library(nvbench::main ALIAS nvbench_main)
|
||||||
target_link_libraries(nvbench_main PUBLIC nvbench)
|
target_link_libraries(nvbench_main PUBLIC nvbench)
|
||||||
|
set_target_properties(nvbench PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${NVBench_LIBRARY_OUTPUT_DIR}"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${NVBench_LIBRARY_OUTPUT_DIR}"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${NVBench_EXECUTABLE_OUTPUT_DIR}"
|
||||||
|
)
|
||||||
|
|||||||
@@ -16,8 +16,6 @@ set(test_srcs
|
|||||||
type_list.cu
|
type_list.cu
|
||||||
)
|
)
|
||||||
|
|
||||||
enable_testing()
|
|
||||||
|
|
||||||
foreach(test_src IN LISTS test_srcs)
|
foreach(test_src IN LISTS test_srcs)
|
||||||
get_filename_component(test_name "${test_src}" NAME_WLE)
|
get_filename_component(test_name "${test_src}" NAME_WLE)
|
||||||
string(PREPEND test_name "nvbench.test.")
|
string(PREPEND test_name "nvbench.test.")
|
||||||
@@ -25,5 +23,10 @@ foreach(test_src IN LISTS test_srcs)
|
|||||||
target_include_directories(${test_name} PRIVATE "${CMAKE_CURRENT_LIST_DIR}")
|
target_include_directories(${test_name} PRIVATE "${CMAKE_CURRENT_LIST_DIR}")
|
||||||
target_link_libraries(${test_name} PRIVATE nvbench::nvbench fmt)
|
target_link_libraries(${test_name} PRIVATE nvbench::nvbench fmt)
|
||||||
set_target_properties(${test_name} PROPERTIES COMPILE_FEATURES cuda_std_17)
|
set_target_properties(${test_name} PROPERTIES COMPILE_FEATURES cuda_std_17)
|
||||||
|
set_target_properties(${test_name} PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${NVBench_LIBRARY_OUTPUT_DIR}"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${NVBench_LIBRARY_OUTPUT_DIR}"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${NVBench_EXECUTABLE_OUTPUT_DIR}"
|
||||||
|
)
|
||||||
add_test(NAME ${test_name} COMMAND "$<TARGET_FILE:${test_name}>")
|
add_test(NAME ${test_name} COMMAND "$<TARGET_FILE:${test_name}>")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|||||||
Reference in New Issue
Block a user