[CMake] Finding out the Endianness of a system at CMake config time

Mike Jackson mike.jackson at imts.us
Wed Nov 22 13:18:23 EST 2006


I got it to work with the built in TestBigEndian (as of 2.4.3)

INCLUDE(TestBigEndian)
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
IF (WORDS_BIGENDIAN)
        ADD_DEFINITIONS("-DB_ENDIAN")
ELSE (WORDS_BIGENDIAN)
        ADD_DEFINITIONS("-DL_ENDIAN")
ENDIF (WORDS_BIGENDIAN)

Thanks everyone for the help

--  
Mike Jackson   Senior Research Engineer
Innovative Management & Technology Services


On Nov 22, 2006, at 1:15 PM, Brandon J. Van Every wrote:

> Eric Noulard wrote:
>> May be you could use TRY_RUN to detect endianity
>> with something like:
>>
>> TRY_RUN(
>>  ENDIANESS_RESULT
>>  ENDIANESS_COMPILE
>>  /tmp/
>>  ${CMAKE_CURRENT_SOURCE_DIR}/make/endianess.c
>>  OUTPUT_VARIABLE ENDIANESS_OUT
>>  )
>>
>>
>> MESSAGE(STATUS "ENDIANITY is :${ENDIANESS_OUT}")
>>
>> endianess.c is attached.
>>
>> The trouble I have is that I expected to have
>> my "endianess" program output in ${ENDIANESS_OUT}
>> but I get too much including
>> compilation process ouput.
>
> The format is:
>
> TRY_RUN(RUN_RESULT_VAR COMPILE_RESULT_VAR
> bindir srcfile <CMAKE_FLAGS <Flags>>
> <COMPILE_DEFINITIONS <flags>>
> <OUTPUT_VARIABLE var>
> <ARGS <arg1> <arg2>..
>
>
> Write a test called IsBigEndian.c.  When run, have it return either  
> 0 or 1.  Get the result with RUN_RESULT_VAR.  Use it and be happy.   
> Caveat: 0 is typically regarded as a *success* code when running a  
> system tool, so go over your bit twiddling convention carefully.  I  
> can't remember what I did in Chicken's StackGrowsDownward.c, only  
> that Felix caught me doing it backwards and I was surprised.
>
> Use COMPILER_RESULT_VAR to make sure your code actually worked, and  
> throw errors if it doesn't.  Your code should always compile; this  
> would be a strange / severe / exceptional error.
>
> OUTPUT_VARIABLE isn't useful for this kind of problem.  It gives  
> you all the stdout stuff and you don't want that.
>
> A complete working example of this kind of code is available in the  
> Chicken CMake build.  Search CMakeLists.txt for  
> STACK_GROWS_DOWNWARD.  http://www.call-with-current- 
> continuation.org .  I think I'll document it more, so that the  
> return code conventions are less confusing.
>
>
> Cheers,
> Brandon Van Every
>
>
> _______________________________________________
> CMake mailing list
> CMake at cmake.org
> http://www.cmake.org/mailman/listinfo/cmake




More information about the CMake mailing list