I've pushed a change into 'stage' [1] that I hope to get into 'next' (something isn't working with my ssh authentication).
James [1] commit b4e54f9b8c748f78d16e9da055a7e0436d7654ef Author: James Bigler <@> Date: Tue Jan 6 16:28:05 2015 -0700 FindCUDA: Add relevant CMAKE_{C,CXX}_FLAGS for separable compilation Previously only the CMAKE_{C,CXX}_FLAGS_<CONFIG> flags were inspected for relevant flags when compiling the intermediate link file. We need to also consider the configuration agnostic flags, CMAKE_{C,CXX}_FLAGS as well. On Tue, Jan 6, 2015 at 4:29 PM, Irwin Zaid <irwin.z...@physics.ox.ac.uk> wrote: > Okay, so to conclude: > > Should we make a PR to include your patched code so CMAKE_CXX_FLAGS just > works? I think this makes sense, as I would never have thought to do the > DEBUG / RELEASE stuff. I can do the PR, unless you want to. > > And, of course, thanks for all your help! > > Irwin > > James Bigler wrote: > >> Right, if you don't specify the CMAKE_BUILD_TYPE you are only getting the >> CMAKE_CXX_FLAGS and none of the build type specific flags such as >> CMAKE_CXX_FLAGS_DEBUG. >> >> There is still the issue that I wasn't bringing in the CMAKE_CXX_FLAGS >> (which is why my patch helped). >> >> James >> >> On Tue, Jan 6, 2015 at 1:32 PM, Irwin Zaid <irwin.z...@physics.ox.ac.uk >> <mailto:irwin.z...@physics.ox.ac.uk>> wrote: >> >> Wait, hold on. The -fPIC does get passed to everything if I set >> the build mode to Debug by passing -DCMAKE_BUILD_TYPE=Debug to >> CMake. Is that what I should be doing? (Sorry about that, if yes.) >> >> If that's the case, what is the correct way to get -fPIC passed to >> the intermediate linking? Am I meant to always build in Debug mode >> just for that? >> >> Irwin >> >> Irwin Zaid wrote: >> >> 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 >> <mailto: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 >> <http://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_d >> >> y >> >> 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 >> <http://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_d >> >> y >> >> 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> >> <mailto: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>> >> <mailto:irwin.z...@physics.ox. >> <mailto:irwin.z...@physics.ox.>____ac.uk >> <http://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