[CMake] FindCUDA with ITK

James Bigler jamesbigler at gmail.com
Fri Jan 15 12:12:18 EST 2010


On Sun, Jan 10, 2010 at 3:50 PM, Luke Parkinson <lparkinson at vpac.org> wrote:

>
> ----- "James Bigler" <jamesbigler at gmail.com> wrote:
>
> > On Thu, Jan 7, 2010 at 8:52 PM, Luke Parkinson < lparkinson at vpac.org >
> > wrote:
> >
> > ----- "James Bigler" < jamesbigler at gmail.com > wrote:
> > > On Wed, Jan 6, 2010 at 11:00 PM, Luke Parkinson <
> > lparkinson at vpac.org > wrote:
> > >
> > >
> >
> > Hello Everyone,
> > >
> > > I apologise in advance if this is the wrong way to revive an old
> > topic, but I wasn't sure how to reply to old threads in the mailing
> > list and I'm new to this list. I'm part of a team of developers
> > looking at integrating CUDA into the Insight Toolkit (
> > http://www.itk.org/ ). People subscribing to the mailing list over
> > there might have heard from my colleague.
> > >
> > > Thanks to James Bigler and his FindCUDA.cmake module, we have been
> > able to get CUDA and ITK to link into the executable, but we're having
> > a similar problem to the previous post (included below just in case).
> > I have created several 'build environments' using this module with my
> > own modifications that include the SDK (as an aside, can anyone point
> > me in the direction of code that integrates C++ and CUDA without using
> > cutil.h or cutil_inline.h?). It works brilliantly with just the CUDA
> > SDK, and the SDK plus our own C++ CUDA utility programs, but when we
> > include the ITK in the configuration, building gives errors exactly
> > like those above. I've attached my modifications to the FindCUDA.cmake
> > module (with a diff), and the 'CMakeLists.txt's we're using in the
> > root and source directories.
> > >
> > > We got the original FindCUDA.cmake from the svn repository, and
> > based our code on the driver examples. When we add our own CUDA/C++
> > code (files omitted as code is still under development, permission is
> > required), we get the same errors as mentioned previously, along the
> > lines of 'warning: comparison between signed and unsigned integer
> > expressions'.
> > >
> > >
> >
> > Just including ITK (without our own code, using the provided driver
> > code examples)
> > > [Attached the corresponding files as ITKOnly_FindCUDA.cmake,
> > ITKOnly_root_CMakeLists.txt, ITKOnly_src_CMakeLists.txt]
> > >
> > > Any ideas or suggestions would be helpful. This isn't crippling
> > (only warnings), but it is annoying and could lead to problems later
> > on if it has to do with how the CMake module deals with C/C++ code. I
> > also noticed with that same module that there are a few variables that
> > don't seem to do anything. The example I found was
> > CUDA_INCLUDE_DIRECTORIES (deprecated by CUDA_INCLUDE_DIRS?). I assume
> > that svn version was the most up-to-date, please let me know if I am
> > wrong.
> > >
> > > snip...
> > >
> > > What versions of CUDA are you using? 2.3 or a 3.0 beta?
> > >
> > > Also, could you send the output of 'make VERBOSE=1' with
> > CUDA_NVCC_FLAGS=-v for a single object compilation that has these
> > warning? I would like to determine at which point these flags are
> > causing problems.
> > >
> > > You could also attach (if possible) the cmake build script that is
> > invoked by FindCUDA for the same object?
> > >
> > > Also, please make sure that CUDA_HOST_COMPILATION_CPP is ON (this
> > can also be verified by me with the cuda_compile....cmake file you can
> > attach).
> > >
> > > There is also the CUDA_PROPAGATE_HOST_FLAGS that you could turn off,
> > if you wish to manage all the host flag propagation manually by using
> > the OPTION -Xcompiler combination.
> > >
> > > James
> > >
> > The CMake build script is identicle to the others I posted, just
> > different source files and executable names. I included it anyway
> > though, in case there was something I missed. I also double-checked
> > the CUDA_HOST_COMPILATION flag, it's definitely set to 1. If you still
> > think it would help, where can I find cuda_compile.cmake?
> >
> > I've attached the complete 'make VERBOSE=1' for both the
> > FindCUDA.cmake sample code, and one with some of the warnings we've
> > been getting for our own code. The CMakeCache.txt is from the ITK
> > build I'm using, so you can see some of the variables it had defined
> > internally. If you've seen the CMakeLists.txt I sent yesterday, it
> > includes an ITK file USE_ITK_FILE (it's just in the recommendded
> > build, points to the attached UseITK.cmake), which is where the new
> > compile flags are introduced.
> >
> > Thanks for the tip about the CUDA_PROPAGATE_HOST_FLAGS and OPTION
> > -Xcompiler, I'll try it out if all else fails. And thanks for the
> > quick reply and you help with this,
> >
> > Luke
> >
> >
> >
> > Thanks. If it's possible, I need the output after adding the -v
> > argument to the CUDA_NVCC_FLAGS. This will show all the compilation
> > steps from nvcc and then we can see what commands nvcc is passing to
> > the compiler as well as what source files its using.
> >
> > Also, does it produce the warning when you don't specify -Wall? You
> > may be able to suppress this flag with a -Wno-all for CUDA code.
> >
> > The cuda_compile.cmake file I talked about is part of the build
> > system. Each CUDA file generates its own compilation script which is
> > then invoked by the build system. The one for test_bin.cu in the svn
> > test system should be found here:
> >
> > build/src/CMakeFiles/cuda_compile_generated_test_bin.cu.obj.cmake
> >
> > This file contains all the parameters (well most of them) that are
> > used to compile the CUDA file. You don't have to send it to me now. I
> > can see what I need to from the verbose output.
> >
> > Thanks,
> > James
>
> The output I attached was produced with the '-v' flag argument added to the
> CUDA_NVCC_FLAGS variable.  If the output is not what you expected, could it
> be that the ITK variables are overwriting the FindCUDA.cmake flags?
>
> I tried adding -Wno-all to CUDA_NVCC_FLAGS along with -v, but it wouldn't
> compile, saying 'unknown flag 'v -w'' or 'v -Wno-all'.  I think there's
> definitely something happening with that variable, because when I added both
> options to the CMAKE_CXX_FLAGS variable, it worked fine.  I'll post the
> output with just -v in the CMAKE_CXX_FLAGS variable, just in case it helps.
>
> By itself in the CMAKE_CXX_FLAGS variable, -w suppresses every warning but
> "cc1: warning: command line option "-Wno-deprecated" is valid for
> C++/Java/ObjC++ but not for C", and with -Wno-all I get "cc1plus: error:
> unrecognized command line option "-Wno-all"" with all the old warnings.  But
> that's somewhat helpful, since that means that passing -w in CMAKE_CXX_FLAGS
> makes it through to nvcc and blocks all the C++ warnings there.
>
> Hopefully the output I got by putting -v in the CMAKE_CXX_FLAGS variable
> will help.
>
> Luke
>

This output looks like you put the -v in the CXX flags which isn't what I
needed.  I needed the -v flag passed to NVCC.  You can add the -v flag to
CUDA_NVCC_FLAGS from the GUI or ccmake.

Also, -Wno-all is a CXX flag, not a NVCC flag.  Adding it to CUDA_NVCC_FLAGS
will make NVCC fail as you discovered.  If you want to pass the flag to the
CXX compiler with a NVCC flag you need to add -Xcompiler;-Wno-all to
CUDA_NVCC_FLAGS.  The -Xcompiler tells NVCC to pass the next flag to CXX
compiler.  Alternatively, you could edit the CMAKE_CXX_FLAGS or
CMAKE_C_FLAGS to include -Wno-all which would then be automatically passed
to nvcc via -Xcompiler.

James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20100115/b9044bec/attachment.htm>


More information about the CMake mailing list