I have merged the branch into next for you. On Tue, Jan 6, 2015 at 6:50 PM, James Bigler <jamesbig...@gmail.com> wrote: > 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 --
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