Skip to content
Snippets Groups Projects
Commit da2961af authored by Matthew Pickering's avatar Matthew Pickering Committed by Marge Bot
Browse files

ghc-toolchain: Add endianess check using __BYTE_ORDER__ macro

In very old toolchains the BYTE_ORDER macro is not set but thankfully
the __BYTE_ORDER__ macro can be used instead.
parent 42d50b5a
No related branches found
No related tags found
No related merge requests found
......@@ -46,7 +46,7 @@ checkWordSize cc = checking "word size" $ do
checkEndianness :: Cc -> M Endianness
checkEndianness cc = do
checkEndiannessParamH cc <|> checkEndiannessLimitsH cc
checkEndiannessParamH cc <|> checkEndiannessLimitsH cc <|> checkEndianness__BYTE_ORDER__ cc
checkEndiannessParamH :: Cc -> M Endianness
checkEndiannessParamH cc = checking "endianness (param.h)" $ do
......@@ -92,6 +92,28 @@ checkEndiannessLimitsH cc = checking "endianness (limits.h)" $ do
, "#endif"
]
checkEndianness__BYTE_ORDER__ :: Cc -> M Endianness
checkEndianness__BYTE_ORDER__ cc = checking "endianness (__BYTE_ORDER__)" $ do
out <- preprocess cc prog
case reverse $ lines out of
"big":_ -> return BigEndian
"little":_ -> return LittleEndian
"unknown":_ -> throwE "unknown endianness"
_ -> throwE "unrecognized output"
where
prog = unlines
[ "#include <sys/param.h>"
, "#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__"
, "little"
, "#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__"
, "big"
, "#else"
, "unknown"
, "#endif"
]
checkLeadingUnderscore :: Cc -> Nm -> M Bool
checkLeadingUnderscore cc nm = checking ctxt $ withTempDir $ \dir -> do
let test_o = dir </> "test.o"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment