On 11/01/2016 16:13, Brad King wrote:

On 01/11/2016 10:49 AM, Alan Burlison wrote:
So is the answer here to add -m64 just to CMAKE_EXE_LINKER_FLAGS and
CMAKE_SHARED_LINKER_FLAGS and not to CMAKE_STATIC_LINKER_FLAGS? Are
CMAKE_STATIC_LINKER_FLAGS only ever used with ar?

Yes and yes.  Actually adding -m64 to CMAKE_{C,CXX}_FLAGS may be
enough because IIRC CMake uses those when invoking the C or C++
compiler front-end for linking a shared library or executable.

Thanks, I've removed -m64 from CMAKE_STATIC_LINKER_FLAGS and with 3.3.2 on Solaris it fixes the problem, I'll ring the changes on the other platforms and with 2.8.6 and make sure it still works elsewhere.

There seems to be an assumption baked into CMake that if the underlying
OS is *nix and is 32-bit then all executables that run on it are 32 bit
and if it is 64-bit then all the executables are 64-bit as well, so
looking at 'uname -p' is sufficient to determine the type of executables
that should be produced. Unfortunately that's not correct for either
Solaris or Linux.

Very few decisions are actually made based on CMAKE_SYSTEM_PROCESSOR.
Most platform tuning is done based on the compiler id detection results
which uses the actual toolchain.  For example, CMAKE_SIZEOF_VOID_P is
set to the data pointer size detected from the toolchain target.

ISTR part of the issue at least was in the bowels of the CMake FindJNI module, that makes extensive use of CMAKE_SYSTEM_PROCESSOR.

If you're not adding -m64 to the CMAKE_{C,CXX}_FLAGS until after the
top-level project() command enables the C and CXX languages then it is
too late for those flags to affect the detected target architecture.

The Hadoop CMakeLists.txt files don't use a PROJECT() command. The CMake docs say if you don't do so then an implicit PROJECT() is added that selects the C & C++ languages, is that done before processing any other commands in CMakeLists.txt? If so then from what you say it seems setting CMAKE_{C,CXX}_FLAGS wouldn't have any effect, which is probably why it has been done via CMAKE_EXE_LINKER_FLAGS etc.

--
Alan Burlison
--
--

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