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

Bill Lorensen bill.lorensen at gmail.com
Thu Jan 3 13:21:18 EST 2008


Mathieu and Sean,

As you probably noticed, I fixed the nrrd configure problem. It's a
combination of the things we talked about.

I have not closed the bug:
http://public.kitware.com/Bug/view.php?id=5904yet until you guys agree
that it's working.

Happy New year,

Bill

Oh, I also found a bug or 2 in itkBMPImageIO.cxx that was also causing a
failure on the ppc.

On Dec 21, 2007 3:35 PM, Bill Lorensen <bill.lorensen at gmail.com> wrote:

> I would think the configure.h.in would be in the NrrdIO directory. Does
> anyone else need TEEM_32BIT who would not be including the teem include
> files?
>
>
>
> On Dec 21, 2007 3:32 PM, Mathieu Coursolle <mcoursolle at rogue-research.com>
> wrote:
>
> > 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 <http://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 <http://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
> > >>
> > >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.itk.org/mailman/private/insight-developers/attachments/20080103/ad089334/attachment.htm


More information about the Insight-developers mailing list