I have a static library that contains some helper __device__
functions that will be consumed by several other projects. I have looked online and so far the best I discern is that to do this you need to set both CUDA_SEPARABLE_COMPILATION
and CUDA_RESOLVE_DEVICE_SYMBOLS
to ON
to enable device linking. But so far I have been unable to get a consumer library to build while referencing code from the helper library and I am unsure where to go next.
Helper Library CMake:
cmake_minimum_required(VERSION 3.17)
project(HelperLib CUDA)
set(CMAKE_CUDA_STANDARD 17)
find_package(CUDAToolkit REQUIRED)
add_library(HelperLib STATIC
src/frame.cu
src/helpers.cu
src/module.cu
)
target_link_libraries(HelperLib PUBLIC CUDA::cudart)
set_target_properties(HelperLib PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
set_target_properties(HelperLib PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
set_target_properties(HelperLib PROPERTIES CUDA_ARCHITECTURES 75-real)
Consumer Library CMake
cmake_minimum_required(VERSION 3.17)
project(ConsumerLib CUDA)
set(CMAKE_CUDA_STANDARD 17)
find_package(CUDAToolkit REQUIRED)
add_library(ConsumerLib STATIC src/demo.cu)
target_link_libraries(ConsumerLib PUBLIC CUDA::cudart)
set_target_properties(ConsumerLib PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
set_target_properties(ConsumerLib PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
set_target_properties(ConsumerLib PROPERTIES CUDA_ARCHITECTURES 75-real)
target_include_directories(ConsumerLib PUBLIC ../HelperLib/src)
target_link_directories(ConsumerLib PUBLIC ../HelperLib/build)
target_link_libraries(ConsumerLib PRIVATE HelperLib)
I double checked the command that CMake outputs when trying to link the project, and it definitely includes HelperLibrary in the command. Any help on what I am doing wrong would be appreciate.
Thanks