cannam@125
|
1 dnl @synopsis MN_C_FIND_ENDIAN
|
cannam@125
|
2 dnl
|
cannam@125
|
3 dnl Determine endian-ness of target processor.
|
cannam@125
|
4 dnl @version 1.1 Mar 03 2002
|
cannam@125
|
5 dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
cannam@125
|
6 dnl
|
cannam@125
|
7 dnl Majority written from scratch to replace the standard autoconf macro
|
cannam@125
|
8 dnl AC_C_BIGENDIAN. Only part remaining from the original it the invocation
|
cannam@125
|
9 dnl of the AC_TRY_RUN macro.
|
cannam@125
|
10 dnl
|
cannam@125
|
11 dnl Permission to use, copy, modify, distribute, and sell this file for any
|
cannam@125
|
12 dnl purpose is hereby granted without fee, provided that the above copyright
|
cannam@125
|
13 dnl and this permission notice appear in all copies. No representations are
|
cannam@125
|
14 dnl made about the suitability of this software for any purpose. It is
|
cannam@125
|
15 dnl provided "as is" without express or implied warranty.
|
cannam@125
|
16
|
cannam@125
|
17 dnl Find endian-ness in the following way:
|
cannam@125
|
18 dnl 1) Look in <endian.h>.
|
cannam@125
|
19 dnl 2) If 1) fails, look in <sys/types.h> and <sys/param.h>.
|
cannam@125
|
20 dnl 3) If 1) and 2) fails and not cross compiling run a test program.
|
cannam@125
|
21 dnl 4) If 1) and 2) fails and cross compiling then guess based on target.
|
cannam@125
|
22
|
cannam@125
|
23 AC_DEFUN([MN_C_FIND_ENDIAN],
|
cannam@125
|
24 [AC_CACHE_CHECK(processor byte ordering,
|
cannam@125
|
25 ac_cv_c_byte_order,
|
cannam@125
|
26
|
cannam@125
|
27 # Initialize to unknown
|
cannam@125
|
28 ac_cv_c_byte_order=unknown
|
cannam@125
|
29
|
cannam@125
|
30 if test x$ac_cv_header_endian_h = xyes ; then
|
cannam@125
|
31
|
cannam@125
|
32 # First try <endian.h> which should set BYTE_ORDER.
|
cannam@125
|
33
|
cannam@125
|
34 [AC_TRY_LINK([
|
cannam@125
|
35 #include <endian.h>
|
cannam@125
|
36 #if BYTE_ORDER != LITTLE_ENDIAN
|
cannam@125
|
37 not big endian
|
cannam@125
|
38 #endif
|
cannam@125
|
39 ], return 0 ;,
|
cannam@125
|
40 ac_cv_c_byte_order=little
|
cannam@125
|
41 )]
|
cannam@125
|
42
|
cannam@125
|
43 [AC_TRY_LINK([
|
cannam@125
|
44 #include <endian.h>
|
cannam@125
|
45 #if BYTE_ORDER != BIG_ENDIAN
|
cannam@125
|
46 not big endian
|
cannam@125
|
47 #endif
|
cannam@125
|
48 ], return 0 ;,
|
cannam@125
|
49 ac_cv_c_byte_order=big
|
cannam@125
|
50 )]
|
cannam@125
|
51
|
cannam@125
|
52 fi
|
cannam@125
|
53
|
cannam@125
|
54 if test $ac_cv_c_byte_order = unknown ; then
|
cannam@125
|
55
|
cannam@125
|
56 [AC_TRY_LINK([
|
cannam@125
|
57 #include <sys/types.h>
|
cannam@125
|
58 #include <sys/param.h>
|
cannam@125
|
59 #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
|
cannam@125
|
60 bogus endian macros
|
cannam@125
|
61 #endif
|
cannam@125
|
62 ], return 0 ;,
|
cannam@125
|
63
|
cannam@125
|
64 [AC_TRY_LINK([
|
cannam@125
|
65 #include <sys/types.h>
|
cannam@125
|
66 #include <sys/param.h>
|
cannam@125
|
67 #if BYTE_ORDER != LITTLE_ENDIAN
|
cannam@125
|
68 not big endian
|
cannam@125
|
69 #endif
|
cannam@125
|
70 ], return 0 ;,
|
cannam@125
|
71 ac_cv_c_byte_order=little
|
cannam@125
|
72 )]
|
cannam@125
|
73
|
cannam@125
|
74 [AC_TRY_LINK([
|
cannam@125
|
75 #include <sys/types.h>
|
cannam@125
|
76 #include <sys/param.h>
|
cannam@125
|
77 #if BYTE_ORDER != LITTLE_ENDIAN
|
cannam@125
|
78 not big endian
|
cannam@125
|
79 #endif
|
cannam@125
|
80 ], return 0 ;,
|
cannam@125
|
81 ac_cv_c_byte_order=little
|
cannam@125
|
82 )]
|
cannam@125
|
83
|
cannam@125
|
84 )]
|
cannam@125
|
85
|
cannam@125
|
86 fi
|
cannam@125
|
87
|
cannam@125
|
88 if test $ac_cv_c_byte_order = unknown ; then
|
cannam@125
|
89 if test $cross_compiling = yes ; then
|
cannam@125
|
90 # This is the last resort. Try to guess the target processor endian-ness
|
cannam@125
|
91 # by looking at the target CPU type.
|
cannam@125
|
92 [
|
cannam@125
|
93 case "$target_cpu" in
|
cannam@125
|
94 alpha* | i?86* | mipsel* | ia64*)
|
cannam@125
|
95 ac_cv_c_byte_order=little
|
cannam@125
|
96 ;;
|
cannam@125
|
97
|
cannam@125
|
98 m68* | mips* | powerpc* | hppa* | sparc*)
|
cannam@125
|
99 ac_cv_c_byte_order=big
|
cannam@125
|
100 ;;
|
cannam@125
|
101
|
cannam@125
|
102 esac
|
cannam@125
|
103 ]
|
cannam@125
|
104 else
|
cannam@125
|
105 AC_TRY_RUN(
|
cannam@125
|
106 [[
|
cannam@125
|
107 int main (void)
|
cannam@125
|
108 { /* Are we little or big endian? From Harbison&Steele. */
|
cannam@125
|
109 union
|
cannam@125
|
110 { long l ;
|
cannam@125
|
111 char c [sizeof (long)] ;
|
cannam@125
|
112 } u ;
|
cannam@125
|
113 u.l = 1 ;
|
cannam@125
|
114 return (u.c [sizeof (long) - 1] == 1);
|
cannam@125
|
115 }
|
cannam@125
|
116 ]], , ac_cv_c_byte_order=big,
|
cannam@125
|
117 )
|
cannam@125
|
118
|
cannam@125
|
119 AC_TRY_RUN(
|
cannam@125
|
120 [[int main (void)
|
cannam@125
|
121 { /* Are we little or big endian? From Harbison&Steele. */
|
cannam@125
|
122 union
|
cannam@125
|
123 { long l ;
|
cannam@125
|
124 char c [sizeof (long)] ;
|
cannam@125
|
125 } u ;
|
cannam@125
|
126 u.l = 1 ;
|
cannam@125
|
127 return (u.c [0] == 1);
|
cannam@125
|
128 }]], , ac_cv_c_byte_order=little,
|
cannam@125
|
129 )
|
cannam@125
|
130 fi
|
cannam@125
|
131 fi
|
cannam@125
|
132
|
cannam@125
|
133 )
|
cannam@125
|
134
|
cannam@125
|
135 if test $ac_cv_c_byte_order = big ; then
|
cannam@125
|
136 ac_cv_c_big_endian=1
|
cannam@125
|
137 ac_cv_c_little_endian=0
|
cannam@125
|
138 elif test $ac_cv_c_byte_order = little ; then
|
cannam@125
|
139 ac_cv_c_big_endian=0
|
cannam@125
|
140 ac_cv_c_little_endian=1
|
cannam@125
|
141 else
|
cannam@125
|
142 ac_cv_c_big_endian=0
|
cannam@125
|
143 ac_cv_c_little_endian=0
|
cannam@125
|
144
|
cannam@125
|
145 AC_MSG_WARN([[*****************************************************************]])
|
cannam@125
|
146 AC_MSG_WARN([[*** Not able to determine endian-ness of target processor. ]])
|
cannam@125
|
147 AC_MSG_WARN([[*** The constants CPU_IS_BIG_ENDIAN and CPU_IS_LITTLE_ENDIAN in ]])
|
cannam@125
|
148 AC_MSG_WARN([[*** src/config.h may need to be hand editied. ]])
|
cannam@125
|
149 AC_MSG_WARN([[*****************************************************************]])
|
cannam@125
|
150 fi
|
cannam@125
|
151
|
cannam@125
|
152 ]
|
cannam@125
|
153 )# MN_C_FIND_ENDIAN
|
cannam@125
|
154
|
cannam@125
|
155
|