diff options
author | Michael Kruse <llvm-project@meinersbur.de> | 2021-09-03 14:48:40 -0500 |
---|---|---|
committer | Michael Kruse <llvm-project@meinersbur.de> | 2021-09-03 15:44:51 -0500 |
commit | 84e1258febe1f179e5d4e1914be7b727d2296336 (patch) | |
tree | 1d1aa326dbdfc7027f72cec002af28221bf98033 /flang/CMakeLists.txt | |
parent | 37ce7349f7e95ef19cd6169e70414286b33114cb (diff) | |
download | llvm-84e1258febe1f179e5d4e1914be7b727d2296336.tar.gz |
[flang] Use CMake to determine endianness.
The preprocessor definitions __BYTE_ORDER__, __ORDER_BIG_ENDIAN__, and
__ORDER_LITTLE_ENDIAN__ are gcc extensions (also supported by clang),
but msvc (and others) do not define them. As a result __BYTE_ORDER__
and __ORDER_BIG_ENDIAN__ both evaluate to 0 by the prepreprocessor,
and __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__, the first `#if` condition
to 1, hence assuming the wrong byte order for x86(_64).
This patch instead uses CMake's TestBigEndian module to determine
target architecture's endianness at configure-time.
Note this also uses the same mechanism for the runtime. If compiling
flang as a cross-compiler, the runtime for the compile-target must be
built separately (Flang does not support the LLVM_ENABLE_RUNTIMES
mechanism yet).
Fixes llvm.org/PR51597
Reviewed By: ijan1, Leporacanthicus
Differential Revision: https://reviews.llvm.org/D109108
Diffstat (limited to 'flang/CMakeLists.txt')
-rw-r--r-- | flang/CMakeLists.txt | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt index f5e602b6b844..13ecc372a2ac 100644 --- a/flang/CMakeLists.txt +++ b/flang/CMakeLists.txt @@ -295,6 +295,14 @@ if (FLANG_REPOSITORY_STRING) add_definitions(-DFLANG_REPOSITORY_STRING="${FLANG_REPOSITORY_STRING}") endif() +include(TestBigEndian) +test_big_endian(IS_BIGENDIAN) +if (IS_BIGENDIAN) + add_compile_definitions(FLANG_BIG_ENDIAN=1) +else () + add_compile_definitions(FLANG_LITTLE_ENDIAN=1) +endif () + # Configure Flang's Version.inc file. configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/include/flang/Version.inc.in |