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