dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #20741
Re: Extending DOLFIN CMake scripts for CUDA interoperability
On Mon, Jan 17, 2011 at 10:00 PM, Johan Hake <johan.hake@xxxxxxxxx> wrote:
> It looks like changing:
>
> add_definitions(-DPACKAGE_VERSION="${DOLFIN_VERSION}")
>
> to
>
> add_definitions(-DPACKAGE_VERSION=${DOLFIN_VERSION})
>
> Fixed it. PACKAGE_VERSION got added to the defines in the call to nvcc and the
> escaped quotes screwed things up.
>
> Johannes: Are the quotes needed for something special? It compiles alright
> without the quotes.
It does not work for me when I remove the quotes:
[ 50%] Building CXX object dolfin/CMakeFiles/dolfin.dir/main/init.cpp.o
/home/johannr/src/bzr/dolfin/dolfin/main/init.cpp:15:53: error: too
many decimal points in number
/home/johannr/src/bzr/dolfin/dolfin/main/init.cpp: In function ‘void
dolfin::dolfin_init(int, char**)’:
/home/johannr/src/bzr/dolfin/dolfin/main/init.cpp:15: error: expected
primary-expression before ‘)’ token
make[2]: *** [dolfin/CMakeFiles/dolfin.dir/main/init.cpp.o] Error 1
make[1]: *** [dolfin/CMakeFiles/dolfin.dir/all] Error 2
make: *** [all] Error 2
However, I don't think the -DPACKAGE_VERSION flag is really needed. It
only seems to be used in dolfin/common/constants.h for specifying the
DOLFIN_VERSION. We can use CMake's configure_file command instead to
set this value. How does that sound?
Johannes
> Johan
>
> On Monday January 17 2011 09:41:26 Johan Hake wrote:
>> Florian!
>>
>> I am no CMake expert nor have I ever compiled any CUDA code, but it looks
>> like something fishy happens when you add your flags to the CUDA code
>> generation step. Have you set it up correctly? I also get the erronious
>> output from CMake for the nvcc call.
>>
>> What CMake command is used to set these flags? It almost seems like the
>> eronious flags are set automatic? At least I cannot see that you put
>> PACKAGE_VERSION to the NVCC flags anywhere. If they are automatically set,
>> maybe there is a way to set them using one of the commands from
>> FindCUDA.cmake?
>>
>> Johan
>>
>> On Friday January 14 2011 12:07:50 Florian Rathgeber wrote:
>> > Hi,
>> >
>> > I'm currently trying to get my DOLFIN GPU code in shape but haven't
>> > quite succeeded integrating it with DOLFIN's CMake build.
>> >
>> > Now the FindCUDA.cmake script tries to propagate host compiler flags and
>> > defines to the NVIDIA compiler nvcc but apparently messes up so I get a
>> >
>> > compiler invocation looking like this (only the relevant part):
>> > -DPACKAGE_VERSION= 0.9.9+\" -Ddolfin_gpu_EXPORTS\" -Xcompiler
>> >
>> > ,\"-fPIC\",\"-O2\",\"-g\"
>> >
>> > Note the odd quoting and also the space after -DPACKAGE_VERSION=
>> >
>> > This causes nvcc to assume this is a target and die:
>> > nvcc fatal : A single input file is required for a non-link phase when
>> > an outputfile is specified
>> >
>> > The code is at lp:~florian-rathgeber/dolfin/gpu-backend
>> >
>> > The relevant section from dolfin/CMakeLists.txt (after all the other
>> > packages)
>> > <<<
>> > # CUDA
>> > SET(DOLFIN_GPU_LIBRARY "")
>> > if (DOLFIN_ENABLE_CUDA AND CUDA_FOUND)
>> >
>> > list(APPEND DOLFIN_CXX_DEFINITIONS "-DHAS_CUDA")
>> > list(APPEND DOLFIN_INCLUDE_DIRECTORIES ${CUDA_INCLUDE_DIRS})
>> > # Add CUDA sources (*.cu) only if CUDA is enabled
>> > foreach(DIR ${DOLFIN_DIRS})
>> >
>> > file(GLOB _CU_SOURCES ${DIR}/*.cu)
>> > list(APPEND CU_SOURCES ${_CU_SOURCES})
>> >
>> > endforeach()
>> > CUDA_ADD_LIBRARY(dolfin_gpu ${CU_SOURCES} SHARED)
>> > SET(DOLFIN_GPU_LIBRARY dolfin_gpu)
>> > list(APPEND DOLFIN_TARGET_LINK_LIBRARIES ${CUDA_LIBRARIES}
>> >
>> > ${DOLFIN_GPU_LIBRARY})
>> > endif()
>> >
>> > # Cusp
>> > if (DOLFIN_ENABLE_CUSP AND CUSP_FOUND)
>> >
>> > list(APPEND DOLFIN_CXX_DEFINITIONS "-DHAS_CUSP")
>> > list(APPEND DOLFIN_INCLUDE_DIRECTORIES ${THRUST_INCLUDE_DIRS}
>> >
>> > ${CUSP_INCLUDE_DIRS})
>> >
>> > endif()
>> > <<<
>> >
>> > In CMakeLists.txt I check for the packages like this:
>> > <<<
>> > # Check for CUDA
>> > if (DOLFIN_ENABLE_CUDA)
>> >
>> > find_package(CUDA)
>> >
>> > endif()
>> >
>> > # Check for Cusp
>> > if (DOLFIN_ENABLE_CUSP)
>> >
>> > find_package(Cusp)
>> >
>> > endif()
>> > <<<
>> > FindCUDA is the stock script from CMake 2.8, FindCusp is a simple script
>> > I wrote which lives in cmake/modules
>> >
>> > I'd be happy about any hints and tips. Garth, afair you wanted to look
>> > into this at some point now that the new build system is in place?
>> >
>> > Florian
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~dolfin
>> Post to : dolfin@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~dolfin
>> More help : https://help.launchpad.net/ListHelp
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dolfin
> Post to : dolfin@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dolfin
> More help : https://help.launchpad.net/ListHelp
>
Follow ups
References