# example here is inspired by Nvidia's blog post: # https://developer.nvidia.com/blog/separate-compilation-linking-cuda-device-code/ # code: # https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#examples project('device linking', ['cpp'], version : '1.0.0') # test that optional initialization of cuda works to disable thin archives add_languages('cuda') nvcc = meson.get_compiler('cuda') cuda = import('unstable-cuda') arch_flags = cuda.nvcc_arch_flags(nvcc.version(), 'Common') message('NVCC version: ' + nvcc.version()) message('NVCC flags: ' + ' '.join(arch_flags)) # test device linking with -dc (which is equivalent to `--relocatable-device-code true`) lib = static_library('devicefuncs', ['b.cu'], cuda_args : ['-dc'] + arch_flags) exe = executable('app', 'main.cu', cuda_args : ['-dc'] + arch_flags, link_with : lib, link_args : arch_flags) # if we don't have a CUDA-capable GPU available, avoid creating the test if run_command('__nvcc_device_query', check : false).returncode() == 0 test('cudatest', exe) endif