[Insight-developers] 32/64 bits universal builds cause itk test failures.

Mathieu Coursolle mcoursolle at rogue-research.com
Fri Dec 21 15:32:52 EST 2007


Yes, those configure.h files are build for each architectures of the
universal build. So it is easy to put conditions based on the architecture
to set some defined, like TEEM_32BIT.

In that case, is there a need for a configure.h.in in the NrrdIO folder,
or should we set the TEEM-32BIT flag in a higher level configure.h.in
file? Or any other prefered way of setting this flag in such a way that
it is different for each architectures in the universal build.

Thanks.

Mathieu


>Like in a teem configure.h.in file?
>
>On Dec 21, 2007 3:16 PM, Mathieu Coursolle <mcoursolle at rogue-
>research.com > wrote:
>The TEEM_32BIT flag is not set inside the NrrdIO files, but outside, in
>the CMakeList.txt file.
>
>In the NrrdIO/teem32bit.h file, the validation is made, and an error is
>thrown if TEEM_32BIT is not set
>to 0 or 1.
>
>So, I guess the right solution would be to still set this flag outside 
>of the NrrdIO code?
>
>Thanks.
>
>Mathieu
>
>>Now I see. Both builds are controlled with one cmakelists file.
>>
>>I don't understand your last comment. "However, Nrrd seems to expect 
>>that TEEM_32BIT is set outside of its library." Where does it expect
>>this? I don't see it in itk proper.
>>
>>Bill
>>
>>On Dec 21, 2007 2:56 PM, Mathieu Coursolle <mcoursolle at rogue -
>>research.com> wrote:
>>Hi,
>>
>>I may be wrong, but if this flag is set inside the CMakeList file, it
>>means that it will be the same for all builds of the universal build 
>>(32 and 64 bits).
>>
>>Since the problem is that the TEEM_32BIT flag needs to be 1 in the 32 bits
>>part, and 0 in the 64 bits parts, I guess that the flag needs to be set
>>outside
>>of the CMakeList file. 
>>
>>A solution could be to add the following piece of code somewhere:
>>
>>#ifdef __APPLE__
>># ifdef __LP64__
>># define TEEM_32BIT 0
>># else
>># define TEEM_32BIT 1
>># endif 
>>#else
>>
>>// Do the same for non Apple...
>>
>>#endif
>>
>>I tried it in NrrdIO/teem32bit.h and it solved 38 of our 42 test
>>failures in 64 bits
>>(currently testing the 32 bits part). 
>>
>>However, Nrrd seems to expect that TEEM_32BIT is set outside of its library.
>>
>>Any suggestion on where we could do this code?
>>In itkConfigure.h.in maybe?
>>
>>Thanks.
>>
>>Mathieu
>>
>>>Mathieu and Sean,
>>>
>>>Reviving this e-mail to try and fix bug 5904:
>>> http://public.kitware.com/Bug/view.php?id=5904
>>>
>>>Code in Utilities should not depend on itk settings. At least that's my
>>>recollection.
>>>
>>>How about something like this in the Utilities/NrrdIO/CMakeLists.txt: 
>>>
>>>
>>>INCLUDE (${CMAKE_ROOT}/Modules/CheckSymbolExists.cmake)
>>>CHECK_SYMBOL_EXISTS("__LP64__" "" LP64Exists)
>>>
>>>IF(APPLE)
>>> IF(LP64Exists) 
>>> ADD_DEFINITIONS(-DTEEM_32BIT=0)
>>> ELSE(LP64Exists)
>>> ADD_DEFINITIONS(-DTEEM_32BIT=1)
>>> ENDIF(LP64Exists)
>>>ELSE(APPLE)
>>> IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
>>> ADD_DEFINITIONS(-DTEEM_32BIT=0) 
>>> ELSE(CMAKE_SIZEOF_VOID_P MATCHES 8)
>>> ADD_DEFINITIONS(-DTEEM_32BIT=1)
>>> ENDIF(CMAKE_SIZEOF_VOID_P MATCHES 8)
>>>ENDIF(APPLE)
>>>
>>>There may be typso in the above. Can you try this (or something close 
>>to it)?
>>>
>>>Bill
>>>
>>>
>>>
>>>On Jul 10, 2007 9:57 AM, Mathieu Coursolle <mcoursolle at rogue-
>>>research.com > wrote:
>>>Hi ITK developpers,
>>>
>>>We currently have a private dashboard (OSX) which is doing a universal
>>>32 and 64 bits nightly build
>>>of ITK. (CMAKE_OSX_ARCHITECTURES = i386; x86_64) 
>>>
>>>However, a lots of ITK tests related to the Nrrd library are failing (~40).
>>>
>>>Our ITK build is both 32 and 64 bits (i386 and x86_64). However, the
>>>TEEM_32BIT flag
>>>of the Nrrd library is defined according to the size of a void pointer
>>>when cmake configures.
>>>
>>>In the case of a universal 32-64 bits build, that flag cannot be the
>>>same for both builds, 
>>>and therefore needs to depend on something else.
>>>
>>>We could check in the itkConfigures.h.in for the __LP64__ definition
>>>which tells if an apple 
>>>build is 64 bits:
>>>
>>>/* 32 or 64 bits. */
>>>/* All compilers that support Mac OS X define __LP64__ if the
>>architecture is
>>> 64 bits. */
>>>#if !defined(__APPLE__) 
>>>#cmakedefine CMAKE_SIZEOF_VOID_P
>>>#if CMAKE_SIZEOF_VOID_P == 8
>>> #define ITK_32BITS 0
>>>#else
>>> #define ITK_32BITS 1
>>>#endif
>>>#elif defined(__LP64__) && __LP64__ 
>>>#define ITK_32BITS 0
>>>#else
>>>#define ITK_32BITS 1
>>>#endif
>>>
>>>However, in the NrrdIO/CMakeList.txt file, the TEEM_32BIT flag is set
>>>as follow:
>>> 
>>>IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
>>>ADD_DEFINITIONS(-DTEEM_32BIT=0)
>>>ELSE(CMAKE_SIZEOF_VOID_P MATCHES 8)
>>>ADD_DEFINITIONS(-DTEEM_32BIT=1)
>>>ENDIF(CMAKE_SIZEOF_VOID_P MATCHES 8) 
>>>
>>>Is there a way to set TEEM_32BIT to the value of ITK_32BITS definition
>>>at that point?
>>>
>>>Example:
>>>
>>># Set compiler flags for 32 or 64 bit architecture (based on the size 
>>># of a void pointer).
>>>IF(APPLE)
>>>ADD_DEFINITIONS(-DTEEM_32BIT=ITK_32BITS)
>>>ELSE(APPLE)
>>>IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
>>> ADD_DEFINITIONS(-DTEEM_32BIT=0)
>>>ELSE(CMAKE_SIZEOF_VOID_P MATCHES 8)
>>> ADD_DEFINITIONS(-DTEEM_32BIT=1)
>>>ENDIF(CMAKE_SIZEOF_VOID_P MATCHES 8)
>>>ENDIF(APPLE)
>>>
>>>It seems like it is always define as 0 if I do this. 
>>>
>>>Any idea on how this could be solve?
>>>
>>>Thank you.
>>>
>>>Mathieu
>>>
>>>--
>>>____________________________________________________________ 
>>>Mathieu Coursolle mcoursolle at rogue-research.com
>>>Rogue Research www.rogue-research.com
>>>Montréal, Québec, Canada
>>>
>>>_______________________________________________
>>>Insight-developers mailing list
>>>Insight-developers at itk.org 
>>>http://www.itk.org/mailman/listinfo/insight-developers
>>
>



More information about the Insight-developers mailing list