[CMake] [Insight-developers] 64 bit build detection
Alexander Neundorf
a.neundorf-work at gmx.net
Wed Jun 17 17:23:36 EDT 2009
On Thursday 11 June 2009, Sean McBride wrote:
> On 6/11/09 3:00 PM, Michael Jackson said:
> >-- CMAKE_SIZEOF_VOID_P: 4 <============ THIS IS WRONG FOR X64 builds
>
> Yeah, but gcc on 10.5 and earlier defaults to building 32 bit. If you
> want 64 bit you need to pass '-arch x86_64' (or ppc64). Or in the case
> of CMake, use CMAKE_OSX_ARCHITECTURES (or whatever its called).
>
> But if you use multiple architectures, like i386 _and_ x86_64, then each
> arch can and does have a different size void*. Now sure what CMake does
> there, hopefully warns or errors.
>
> Always best to avoid TRY_RUNs and I guess TRY_COMPILES too for Universal
> Binaries/cross compilation.
This is from CheckTypeSize.cmake:
SET(CMAKE_CHECKTYPESIZE_FIRST_RESULT "FIRST_LOOP")
FOREACH(info ${CMAKE_CHECKTYPESIZE_STRINGS})
IF("${info}" MATCHES ".*INFO:sizeof\\[0*([^]]*)\\].*")
STRING(REGEX REPLACE ".*INFO:sizeof\\[0*([^]]*)\\].*" "\\1"
${VARIABLE} "${info}")
ENDIF("${info}" MATCHES ".*INFO:sizeof\\[0*([^]]*)\\].*")
IF("${CMAKE_CHECKTYPESIZE_FIRST_RESULT}" STREQUAL "FIRST_LOOP")
SET(CMAKE_CHECKTYPESIZE_FIRST_RESULT "${${VARIABLE}}")
ENDIF("${CMAKE_CHECKTYPESIZE_FIRST_RESULT}" STREQUAL "FIRST_LOOP")
IF(NOT "${CMAKE_CHECKTYPESIZE_FIRST_RESULT}" STREQUAL "${${VARIABLE}}")
MESSAGE(SEND_ERROR "CHECK_TYPE_SIZE found different results, consider
setting CMAKE_OSX_ARCHITECTURES or CMAKE_TRY_COMPILE_OSX_ARCHITECTURES to one
or no architecture !")
ENDIF(NOT "${CMAKE_CHECKTYPESIZE_FIRST_RESULT}" STREQUAL "${${VARIABLE}}")
ENDFOREACH(info ${CMAKE_CHECKTYPESIZE_STRINGS})
So if you are building universal binaries, and if check_type_size() finds more
than one result, and if these results differ, then there should be an error
generated.
I can't test that here, I don't have a Mac at hand.
Alex
More information about the CMake
mailing list