I just double-checked. The -fPIC is definitely there for each individual object file, but not for the *_intermediate_link.o.

Irwin

James Bigler wrote:


James

On Jan 6, 2015, at 11:29 AM, Irwin Zaid<irwin.z...@physics.ox.ac.uk>  wrote:

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.


Yeah. That looks right. It means the argument will only be run when the build 
configuration matches DEBUG. This is less exciting for Makefiles builds since 
there is only one configuration preset at a time, but for things like Visual 
Studio where you have multiple build configs from a single CMake configure this 
makes a custom command for each without having to rely on scripts to dispatch 
the correct command (that's how the rest of FindCUDA works by the way).

As far as the rest of these, I'm concerned the fPIC flag comes and goes. 
Perhaps something is modifying the flags. Do the commands with fPIC actually 
get run with fPIC (use make VERBOSE=1)?

--

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_dy
nd_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_dy
nd_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