Okay, so I've gone and put the messages into FindCUDA.cmake. I specifically put them right before and after the foreach() in CUDA_LINK_SEPARARABLE_COMPILATION_OBJECTS. The output is the following.

Is "$<$<CONFIG:Debug>:-Xcompiler>;$<$<CONFIG:Debug>:-fPIC>" supposed to be that way? That looks weird.

--

going to run COMMAND /usr/local/cuda/bin/nvcc -m64;-ccbin;"/usr/bin/cc" -dlink /home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/kernels/./libdynd_generated_assignment_kernels.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/func/./libdynd_generated_arithmetic.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/func/./libdynd_generated_elwise.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/kernels/./libdynd_generated_ckernel_builder.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/types/./libdynd_generated_dynd_complex.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/types/./libdynd_generated_dynd_float16.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/types/./libdynd_generated_dynd_float128.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/types/./libdynd_generated_dynd_int128.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/d ynd/types/./libdynd_generated_dynd_uint128.cu.o -o /home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/./libdynd_intermediate_link.o

going to run COMMAND /usr/local/cuda/bin/nvcc -m64;-ccbin;"/usr/bin/cc" -dlink /home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/kernels/./libdynd_generated_assignment_kernels.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/func/./libdynd_generated_arithmetic.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/func/./libdynd_generated_elwise.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/kernels/./libdynd_generated_ckernel_builder.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/types/./libdynd_generated_dynd_complex.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/types/./libdynd_generated_dynd_float16.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/types/./libdynd_generated_dynd_float128.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/dynd/types/./libdynd_generated_dynd_int128.cu.o;/home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/src/d ynd/types/./libdynd_generated_dynd_uint128.cu.o -o /home/irwin/Repositories/libdynd/build/CMakeFiles/libdynd.dir/./libdynd_intermediate_link.o $<$<CONFIG:Debug>:-Xcompiler>;$<$<CONFIG:Debug>:-fPIC> going to run COMMAND /usr/local/cuda/bin/nvcc -m64;-ccbin;"/usr/bin/cc" -dlink /home/irwin/Repositories/libdynd/build/tests/CMakeFiles/test_libdynd.dir/func/./test_libdynd_generated_test_apply.cu.o;/home/irwin/Repositories/libdynd/build/tests/CMakeFiles/test_libdynd.dir/func/./test_libdynd_generated_test_lift_arrfunc.cu.o -o /home/irwin/Repositories/libdynd/build/tests/CMakeFiles/test_libdynd.dir/./test_libdynd_intermediate_link.o

going to run COMMAND /usr/local/cuda/bin/nvcc -m64;-ccbin;"/usr/bin/cc" -dlink /home/irwin/Repositories/libdynd/build/tests/CMakeFiles/test_libdynd.dir/func/./test_libdynd_generated_test_apply.cu.o;/home/irwin/Repositories/libdynd/build/tests/CMakeFiles/test_libdynd.dir/func/./test_libdynd_generated_test_lift_arrfunc.cu.o -o /home/irwin/Repositories/libdynd/build/tests/CMakeFiles/test_libdynd.dir/./test_libdynd_intermediate_link.o $<$<CONFIG:Debug>:-Xcompiler>;$<$<CONFIG:Debug>:-fPIC>

James Bigler wrote:
I meant putting messages into FindCUDA.cmake itself.

Only certain flags are propagated for the intermediate link file
compilation, because I've had a lot of trouble over the years for
propagating all the host flags. This set of flags is filtered by the
function _cuda_get_important_host_flags. Right now only the
CMAKE_CXX_FLAGS_*CONFIG* are being processed. None of the flags in the
configuration free variable are passed. That was the "patch" I wanted
you to try. Why -fPIC in the configuration specific CMAKE_CXX_FLAGS
wasn't working, I'm not sure. The code is there to do it.

On Tue, Jan 6, 2015 at 10:05 AM, Irwin Zaid <irwin.z...@physics.ox.ac.uk
<mailto:irwin.z...@physics.ox.ac.uk>> wrote:

    Right, when I modify FindCUDA.cmake as you describe everything
    works. So that's good.

    Without doing that, I still don't see CMAKE_CXX_FLAGS_DEBUG
    propagating its flags to the intermediate link file. Did you mean to
    put message commands into CUDA_LINK_SEPARABLE___COMPILATION_OBJECTS
    itself? When I put them into my main CMakeLists.txt, nothing is
    printed for ${nvcc_flags} or the other variables.

    James Bigler wrote:

        On Tue, Jan 6, 2015 at 8:54 AM, Irwin Zaid
        <irwin.z...@physics.ox.ac.uk
        <mailto:irwin.z...@physics.ox.ac.uk>
        <mailto:irwin.z...@physics.ox.__ac.uk
        <mailto:irwin.z...@physics.ox.ac.uk>>> wrote:

        Okay, an update on this.

        2) This is trickier and, unfortunately, still not working. We are
        already adding -fPIC to CMAKE_CXX_FLAGS, should that not be
        enough? I also tried adding it to both CMAKE_CXX_FLAGS_DEBUG and
        CMAKE_CXX_FLAGS_RELEASE, with no effect.

        Looking into FindCUDA.CMake at
        CUDA_LINK_SEPARABLE_____COMPILATION_OBJECTS, I find code very
        similar to what you are describing. Are you saying that in
        addition to what is below, we need to add what you proposed? This
        is what I see.

        --


        It can be put here (before this foreach).

        foreach(config ${CUDA_configuration_types})
        string(TOUPPER ${config} config_upper)
        # Add config specific flags
        foreach(f ${CUDA_NVCC_FLAGS_${config_____upper}})
        list(APPEND config_specific_flags $<$<CONFIG:${config}>:${f}>)
        endforeach()
        set(important_host_flags)
        _cuda_get_important_host_____flags(important_host_flags
        ${CMAKE_${CUDA_C_OR_CXX}_____FLAGS_${config_upper}})
        foreach(f ${important_host_flags})
        list(APPEND flags $<$<CONFIG:${config}>:-____Xcompiler>
        $<$<CONFIG:${config}>:${f}>)
        endforeach()
        endforeach()


        Or it can be put here (or after the foreach).

        I'm concerned that the flag didn't show up after adding it to
        the _DEBUG or _RELEASE variants. If you could add a few message
        commands around that might help see what is going on. The flag
        needs to be propagated.

        You could sprinkle a few commands like this:
        message("going to run COMMAND ${CUDA_NVCC_EXECUTABLE}
        ${nvcc_flags} -dlink ${object_files} -o ${output_file}
        ${flags}")



--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to