automake
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Build rules for CUDA source files


From: Ralf Wildenhues
Subject: Re: Build rules for CUDA source files
Date: Thu, 9 Sep 2010 22:55:10 +0200
User-agent: Mutt/1.5.20 (2010-04-22)

* Adam Mercer wrote on Thu, Sep 09, 2010 at 10:42:31PM CEST:
> On Thu, Sep 9, 2010 at 15:27, Ralf Wildenhues wrote:
> > For libtool libraries, it will try for a CudaFFT.lo file.
> 
> of course.
> 
> > You may be
> > able to create a .cu.lo rule to generate that.  I think.  Since I'm not
> > sure that that will work OOTB with Libtool (there is no extra Cuda
> > language tag defined in Libtool, but you may be able to get by by using
> > --tag=CC or so),
> 
> libtool doesn't seem to like the generate CudaFFT.lo:
> 
> nvcc -c -I../../../include -I./../include  -o CudaFFT.lo CudaFFT.cu

Showing the line before this would have been interesting.
Using libtool >= 2.2.8, you should get the .cu.lo rule to emit something
like this command line:
  $(SHELL) $(LIBTOOL) --tag=CC --mode=compile $(NVCC) -c $(flags...) -o $@ $<

as example here is what I mean, using dry run (on GNU/Linux, libtool
configured for gcc):

./libtool --dry-run --mode=compile --tag=CC nvcc -c  -o a.lo a.cu
libtool: compile:  nvcc -c a.cu  -fPIC -DPIC -o .libs/a.o
libtool: compile:  nvcc -c a.cu -o a.o >/dev/null 2>&1

This probably won't work though since nvcc wants -Xcompiler -fPIC
not plain -fPIC, if I'm reading the Libtool patch correctly.

> /bin/sh ../../../libtool --tag=CC   --mode=link gcc -std=gnu99
> -I/usr/local/nvidia/sdk-3.1/cuda/include   -o libfft.la
> CudaComplexFFT.lo CudaRealFFT.lo FFTWMutex.lo CudaFunctions.lo
> CudaFFT.lo TimeFreqFFT.lo AverageSpectrum.lo Convolution.lo  -lfftw3
> -lfftw3f -lgsl -lgslcblas -lm  -L/usr/local/nvidia/sdk-3.1/cuda/lib64
> -lcufft -lcudart -lgsl -lgslcblas -lm   -lfftw3 -lfftw3f -lm
> libtool: link: `CudaFFT.lo' is not a valid libtool object
> make: *** [libfft.la] Error 1
> 
> > a workaround for now could be to remove CudaFFT.cu from
> > *_SOURCES, add it to EXTRA_DIST, and add
> >  libfft_la_LIBADD = CudaFFT.o
> >
> > Untested, please complain if that breaks.
> 
> Seems to work, but theres the following warning:
> 
> *** Warning: Linking the shared library libfft.la against the non-libtool
> *** objects  CudaFFT.o is not portable!

Yep, that's why I called that a workaround.

> is this anything to worry about as we are only going to support Cuda
> on Linux, and possibly Mac OS X.

OK.

> > Ah yes, of course you need to ensure PICness yourself in the latter
> > case.
> 
> How would I go about doing that? I usually leave that up to libtool?

Yes.  You add -Xcompiler -fPIC to compile flags.

Hope that helps.  And yes, for decent support of packages *not*
compiling all code with nvcc, libtool will probably need more
adjustments; haven't thought about that enough yet.

Cheers,
Ralf



reply via email to

[Prev in Thread] Current Thread [Next in Thread]