File: CheckFloatingPointFormat.cmake

package info (click to toggle)
swi-prolog 8.0.2%2Bdfsg-3%2Bdeb10u1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 72,036 kB
  • sloc: ansic: 349,612; perl: 306,654; java: 5,208; cpp: 4,436; sh: 3,042; ruby: 1,594; yacc: 845; makefile: 136; xml: 82; sed: 12; sql: 6
file content (60 lines) | stat: -rw-r--r-- 2,543 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
SET(UB_DIRECTORY_OF_CHECK_FLOATING_POINT_FORMAT_SCRIPT "${CMAKE_CURRENT_LIST_DIR}")

MACRO(UB_CHECK_FLOATING_POINT_FORMAT IEEE754_FLOATS FLOAT_BYTES_BIGENDIAN FLOAT_WORDS_BIGENDIAN)
	IF(NOT DEFINED HAVE_${IEEE754_FLOATS})
		MESSAGE(STATUS "Check floating point format")

		SET(UB_CHECK_FLOATING_POINT_FORMAT_TARGET
			"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckFloatingPointFormat.bin")
		TRY_COMPILE(HAVE_${IEEE754_FLOATS} "${CMAKE_BINARY_DIR}"
			"${UB_DIRECTORY_OF_CHECK_FLOATING_POINT_FORMAT_SCRIPT}/CheckFloatingPointFormat.c"
			COPY_FILE "${UB_CHECK_FLOATING_POINT_FORMAT_TARGET}")

		IF(HAVE_${IEEE754_FLOATS})
			FILE(STRINGS "${UB_CHECK_FLOATING_POINT_FORMAT_TARGET}"
				UB_IEEE754_BIG_BIG REGEX "ABCDEFGH" LIMIT_COUNT 1)
			FILE(STRINGS "${UB_CHECK_FLOATING_POINT_FORMAT_TARGET}"
				UB_IEEE754_LITTLE_LITTLE REGEX "HGFEDCBA" LIMIT_COUNT 1)
			FILE(STRINGS "${UB_CHECK_FLOATING_POINT_FORMAT_TARGET}"
				UB_IEEE754_BIG_LITTLE REGEX "EFGHABCD" LIMIT_COUNT 1)
			FILE(STRINGS "${UB_CHECK_FLOATING_POINT_FORMAT_TARGET}"
				UB_IEEE754_LITTLE_BIG REGEX "DCBAHGFE" LIMIT_COUNT 1)

			IF(UB_IEEE754_BIG_BIG OR UB_IEEE754_LITTLE_LITTLE OR
					UB_IEEE754_LITTLE_BIG OR UB_IEEE754_BIG_LITTLE)
				SET(UB_IEEE754 TRUE)
			ELSE()
				SET(UB_IEEE754 FALSE)
			ENDIF()
		ENDIF()

		IF(UB_IEEE754)
			SET(${IEEE754_FLOATS} 1 CACHE INTERNAL
				"Stores whether the system uses IEEE754 floats" FORCE)
		ENDIF(UB_IEEE754)

		IF(UB_IEEE754_BIG_BIG OR UB_IEEE754_BIG_LITTLE)
			SET(${FLOAT_BYTES_BIGENDIAN} 1 CACHE INTERNAL
				"Stores whether IEEE754 floats store bytes in big endian" FORCE)
		ENDIF(UB_IEEE754_BIG_BIG OR UB_IEEE754_BIG_LITTLE)

		IF(UB_IEEE754_BIG_BIG OR UB_IEEE754_LITTLE_BIG)
			SET(${FLOAT_WORDS_BIGENDIAN} 1 CACHE INTERNAL
				"Stores whether IEEE754 words store bytes in big endian" FORCE)
		ENDIF(UB_IEEE754_BIG_BIG OR UB_IEEE754_LITTLE_BIG)

		IF(UB_IEEE754_BIG_BIG)
			MESSAGE(STATUS "Check floating point format - IEEE-754, big endian")
		ELSEIF(UB_IEEE754_LITTLE_LITTLE)
			MESSAGE(STATUS "Check floating point format - IEEE-754, little endian")
		ELSEIF(UB_IEEE754_BIG_LITTLE)
			MESSAGE(STATUS "Check floating point format - IEEE-754, bytes are big endian, words are little endian")
		ELSEIF(UB_IEEE754_LITTLE_BIG)
			MESSAGE(STATUS "Check floating point format - IEEE-754, bytes are little endian, words are big endian")
		ELSE()
			MESSAGE(STATUS "Check floating point format - unknown")
		ENDIF()

	ENDIF()
ENDMACRO(UB_CHECK_FLOATING_POINT_FORMAT IEEE754_FLOATS FLOAT_BYTES_BIGENDIAN FLOAT_WORDS_BIGENDIAN)