I have a C project in Cmake
in which I have embedded cuda
kernel module.
I want to pass --ptxas-options=-v
only to nvcc
in-order to view
Number of registers usage per thread and
shared Memory usage per block.
By searching on howto pass flags to nvcc
in Cmake
, I came across a solution
add_compile_options(myprog
PRIVATE
$<$<COMPILE_LANGUAGE:C>:-Wall>
$<$<COMPILE_LANGUAGE:CUDA>:-arch=sm_20 -ptxas-options=-v>
)
but this didn't show me the above properties. I think these flags aren't passed to nvcc
properly.
How can I pass --ptxas-options=-v
to my nvcc
compiler ?
The proper way to set CUDA flags only on a target is
target_compile_options(<my_target> PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:my_cuda_option>)
This will set the option, via the generator expression, only for files which are compiled for the CUDA language.
Using CMAKE_CUDA_FLAGS
as suggested by the other answer sets a global property for all targets, which might or might not be the right approach depending on the use-case.
The newer approach of cmake cuda sets some other variables. Check the docs here.
What we need is to set CMAKE_<LANG>_FLAGS, which actually CMAKE_CUDA_FLAGS
here.
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --ptxas-options=-v")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With