Files
agent_compositor_test/references/igraph-1.0.1/etc/cmake/ieee754_endianness.cmake
T
Abdelrahman Said a11edf0c53 Add graph references
2026-06-28 13:49:01 +01:00

55 lines
2.3 KiB
CMake

include(CheckCSourceRuns)
cmake_push_check_state(RESET)
# Check whether IEEE754 doubles are laid out in little-endian order. We do this
# only when not cross-compiling; during cross-compilation, the host architecture
# might have different endianness conventions than the target, and we are running
# the test on the host here
if(CMAKE_CROSSCOMPILING AND NOT CMAKE_CROSSCOMPILING_EMULATOR)
# If we are cross-compiling and we have no emulator, let's just assume that
# IEEE754 doubles use the same endianness as uint64_t
set(IEEE754_DOUBLE_ENDIANNESS_MATCHES YES)
message(WARNING "\
igraph is being cross-compiled, therefore we cannot validate whether the \
endianness of IEEE754 doubles is the same as the endianness of uint64_t. \
Most likely it is, unless you are compiling for some esoteric platform, \
in which case you need make sure that this is the case on your own.\
")
else()
if(NOT DEFINED CACHE{IEEE754_DOUBLE_ENDIANNESS_MATCHES})
try_run(
IEEE754_DOUBLE_ENDIANNESS_TEST_EXIT_CODE
IEEE754_DOUBLE_ENDIANNESS_TEST_COMPILES
${CMAKE_BINARY_DIR}
${PROJECT_SOURCE_DIR}/etc/cmake/ieee754_endianness_check.c
RUN_OUTPUT_VARIABLE IEEE754_DOUBLE_ENDIANNESS_TEST_RESULT
)
# Strip trailing newline, which is necessary on some platforms (such as node.js)
# to complete printing the output.
string(STRIP "${IEEE754_DOUBLE_ENDIANNESS_TEST_RESULT}" IEEE754_DOUBLE_ENDIANNESS_TEST_RESULT)
if(IEEE754_DOUBLE_ENDIANNESS_TEST_EXIT_CODE EQUAL 0)
if(IEEE754_DOUBLE_ENDIANNESS_TEST_RESULT STREQUAL "OK")
set(TEST_RESULT YES)
else()
set(TEST_RESULT NO)
endif()
else()
message(FATAL_ERROR "IEEE754 double endianness test terminated abnormally.")
endif()
set(
IEEE754_DOUBLE_ENDIANNESS_MATCHES ${TEST_RESULT} CACHE BOOL
"Specifies whether the endianness of IEEE754 doubles is the same as the endianness of uint64_t."
FORCE
)
mark_as_advanced(IEEE754_DOUBLE_ENDIANNESS_MATCHES)
endif()
endif()
cmake_pop_check_state()
if(NOT IEEE754_DOUBLE_ENDIANNESS_MATCHES)
message(FATAL_ERROR "igraph only supports platforms where IEEE754 doubles have the same endianness as uint64_t.")
endif()