* src/configure.in: check for endianess (even while cross-compiling)
[fw/sdcc] / configure.in
1 #!/bin/sh
2
3 AC_INIT(Makefile)
4 AC_CONFIG_HEADER(sdccconf.h:sdccconf_in.h)
5
6 AC_PROG_AWK
7
8 AC_MSG_CHECKING(version of the package)
9 if test -f .version; then
10   VERSION=`cat .version`
11 elif test -f ../.version; then
12   VERSION=`cat ../.version`
13 else
14   VERSION="0.0.0"
15 fi
16 VERSIONHI=`echo $VERSION|$AWK 'BEGIN {FS="."} {print $1}'`
17 VERSIONLO=`echo $VERSION|$AWK 'BEGIN {FS="."} {print $2}'`
18 VERSIONP=`echo $VERSION|$AWK 'BEGIN {FS="."} {print $3}'`
19 # Assume no special extension
20 EXEEXT=`echo $EXEEXT`
21
22 AC_MSG_RESULT(${VERSION})
23 AC_SUBST(VERSION)
24 AC_SUBST(VERSIONHI)
25 AC_SUBST(VERSIONLO)
26 AC_SUBST(VERSIONP)
27 AC_DEFINE_UNQUOTED(SDCC_VERSION_LO, ${VERSIONLO})
28 AC_DEFINE_UNQUOTED(SDCC_VERSION_HI, ${VERSIONHI})
29 AC_DEFINE_UNQUOTED(SDCC_VERSION_P, ${VERSIONP})
30 AC_DEFINE_UNQUOTED(SDCC_VERSION_STR, "${VERSION}")
31 AC_ARG_PROGRAM
32 sdcc_cv_version=$VERSION
33 sdcc_cv_versionhi=$VERSIONHI
34 sdcc_cv_versionlo=$VERSIONLO
35 sdcc_cv_versionp=$VERSIONP
36
37 # Required programs
38 #-------------------
39 AC_PROG_CC
40 AC_PROG_CXX
41 AC_PROG_CPP
42 AC_PROG_INSTALL
43 AC_PROG_RANLIB
44 AC_PROG_LEX(flex, :)
45 AC_CHECK_PROG(YACC, bison, bison -y, :)
46 AC_CHECK_PROG(AUTOCONF, autoconf, autoconf, :)
47 AC_CHECK_PROG(STRIP, strip, strip, :)
48 AC_CHECK_PROG(AS, as, as, :)
49 AC_CHECK_PROG(CP, cp, cp, :)
50
51 AC_DEFUN(SDCC_REQUIRE_PROG, 
52 [if test "$1" = ":"; then
53   AC_MSG_ERROR([Cannot find required program $2.])
54  fi
55 ])
56
57 SDCC_REQUIRE_PROG($YACC, bison)
58 SDCC_REQUIRE_PROG($LEX, lex)
59
60 AC_LANG_C
61
62 # Checking for header files.
63 # ===========================================================================
64 AC_HEADER_STDC
65 AC_CHECK_HEADERS(getopt.h)
66 AC_CHECK_HEADERS(unistd.h)
67 AC_CHECK_HEADERS(malloc.h)
68 AC_CHECK_HEADERS(sys/isa_defs.h)
69 AC_CHECK_HEADERS(sys/socket.h)
70 AC_HEADER_DIRENT
71
72 # This must be after CPP
73
74 AC_CACHE_CHECK(which header file defines FD_ macros, s51_cv_fd,
75 [sdcc_cv_fd="unknown"
76 AC_EGREP_CPP(yes, [
77 #include <sys/time.h>
78 #ifdef FD_ZERO
79 yes
80 #endif], sdcc_cv_fd="<sys/time.h>")
81 AC_EGREP_CPP(yes, [
82 #include <sys/types.h>
83 #ifdef FD_ZERO
84 yes
85 #endif], sdcc_cv_fd="<sys/types.h>")
86 AC_EGREP_CPP(yes, [
87 #include <sys/select.h>
88 #ifdef FD_ZERO
89 yes
90 #endif], sdcc_cv_fd="<sys/types.h>")])
91
92 AC_DEFINE(FD_HEADER_OK, 0)
93 if echo $sdcc_cv_fd|grep time >/dev/null 2>&1; then
94 AC_DEFINE(FD_NEED_TIME_H, 1)
95 AC_DEFINE(FD_HEADER_OK, 1)
96 else
97 AC_DEFINE(FD_NEED_TIME_H, 0)
98 fi
99 if echo $sdcc_cv_fd|grep types >/dev/null 2>&1; then
100 AC_DEFINE(FD_NEED_TYPES_H, 1)
101 AC_DEFINE(FD_HEADER_OK, 1)
102 else
103 AC_DEFINE(FD_NEED_TYPES_H, 0)
104 fi
105 if echo $sdcc_cv_fd|grep select >/dev/null 2>&1; then
106 AC_DEFINE(FD_NEED_SELECT_H, 1)
107 AC_DEFINE(FD_HEADER_OK, 1)
108 else
109 AC_DEFINE(FD_NEED_SELECT_H, 0)
110 fi
111
112 AC_DEFINE_UNQUOTED(HEADER_FD, ${sdcc_cv_fd})
113
114
115 # Checking for functions
116 # ===========================================================================
117 AC_CHECK_FUNCS(strlen strcpy strcat strstr strcmp strerror strtok strdup)
118 AC_CHECK_FUNCS(strchr memcpy vsnprintf snprintf vsprintf)
119 AC_CHECK_FUNCS(mkstemp)
120 dnl AC_CHECK_FUNCS(getline)
121 dnl AC_CHECK_FUNCS(getdelim)
122 AC_CHECK_FUNCS(fgets)
123 AC_CHECK_FUNCS(yylex)
124
125 # check if -lsocket && -lxnet is required to compile socket stuff
126 AC_SEARCH_LIBS(socket,socket)
127 AC_SEARCH_LIBS(inet_addr,nsl xnet)
128
129 # Macro definitions
130 ###################
131
132 # DD_COPT macro checks if the compiler specified as the 1st parameter
133 # supports option specified as the 2nd parameter
134 # For example: DD_CPORT(CXX, fPIC)
135
136 AC_DEFUN(DD_COPT, [
137 AC_CACHE_CHECK(whether $$1 accepts -$2,sdcc_cv_$1$2,
138 cat >_test_.c <<EOF
139 #include <stdio.h>
140 void main(void) {}
141 EOF
142 $$1 -v -$2 -c _test_.c 1>&5 2>&5
143 if test "$?" = "0"; then
144   sdcc_cv_$1$2="yes"
145 else
146   sdcc_cv_$1$2="no"
147 fi
148 rm -f _test_.* a.out)
149 ])
150
151
152 # Checking characteristics of compilers and other programs
153 # --------------------------------------------------------
154 AC_CACHE_CHECK(whether preprocessor accepts -MM or -M,sdcc_cv_MM,
155 echo "#include <stdio.h>" >_test_.c
156 echo "" >>_test_.c
157 $CPP -v -MM _test_.c 1>&5 2>&5
158 if test "$?" = "0"; then
159   sdcc_cv_MM="-MM"
160 else
161   sdcc_cv_MM="-M"
162 fi
163 rm -f _test_.*)
164 M_OR_MM=$sdcc_cv_MM
165 AC_SUBST(M_OR_MM)
166
167 # This is the first time when CFLAGS are set/modified!!
168 DD_COPT(CC, ggdb)
169 if test "$sdcc_cv_CCggdb" = "yes"; then
170   CFLAGS="-ggdb -O2"
171 fi
172
173 DD_COPT(CC, pipe)
174 if test "$sdcc_cv_CCpipe" = "yes"; then
175   CFLAGS="$CFLAGS -pipe"
176 fi
177
178
179 # Checks for typedefs, structures, and compiler characteristics.
180 # ===========================================================================
181 AC_TYPE_SIGNAL
182
183 if test "$cross_compiling" = "no"; then
184 AC_CHECK_SIZEOF(char)
185 AC_CHECK_SIZEOF(short)
186 AC_CHECK_SIZEOF(int)
187 AC_CHECK_SIZEOF(long)
188 else
189     if $CXX -v 2>&1|grep "mingw" >/dev/null 2>&1; then
190         ac_cv_sizeof_char=1
191         ac_cv_sizeof_short=2
192         ac_cv_sizeof_int=4 
193         ac_cv_sizeof_long=4
194     else
195         : # FIXME
196     fi
197 #echo
198 fi
199
200 type_name()
201 {
202     if expr "$ac_cv_sizeof_char" '>=' "$1" >/dev/null; then
203         echo "char"
204         exit
205     fi
206     if expr "$ac_cv_sizeof_short" '>=' "$1" >/dev/null; then
207         echo "short"
208         exit
209     fi
210     if expr "$ac_cv_sizeof_int" '>=' "$1" >/dev/null; then
211         echo "int"
212         exit
213     fi
214     if expr "$ac_cv_sizeof_long" '>=' "$1" >/dev/null; then
215         echo "long"
216         exit
217     fi
218     echo "long"
219 }
220
221 AC_MSG_CHECKING(type name for byte)
222 TYPE_BYTE=`type_name 1`
223 AC_MSG_RESULT($TYPE_BYTE)
224 AC_MSG_CHECKING(type name for word)
225 TYPE_WORD=`type_name 2`
226 AC_MSG_RESULT($TYPE_WORD)
227 AC_MSG_CHECKING(type name for dword)
228 TYPE_DWORD=`type_name 4`
229 AC_MSG_RESULT($TYPE_DWORD)
230 AC_DEFINE_UNQUOTED(TYPE_BYTE, $TYPE_BYTE)
231 AC_DEFINE_UNQUOTED(TYPE_WORD, $TYPE_WORD)
232 AC_DEFINE_UNQUOTED(TYPE_DWORD, $TYPE_DWORD)
233
234 AC_C_BIGENDIAN
235
236 #
237 #
238 if test "${prefix}" = "NONE"; then
239     prefix="/usr/local"
240 fi
241
242 config_in=`pwd`
243 sdcc_datadir=${datadir}/sdcc
244 AC_SUBST(sdcc_datadir)
245
246 # For some unknown reason, putting this assignment in a subshell
247 # like this causes the rvalue to be fully substituted. We need this
248 # for the defines below to generate the right thing. We keep this
249 # separate from the substituted sdcc_datadir because we want the
250 # latter for makefiles.
251 if test "${datadir}" = "\${prefix}/share"; then
252     sdcc_datadir_tmp=${prefix}/share/sdcc
253 else
254     sdcc_datadir_tmp=${datadir}/sdcc
255 fi
256
257 if test "${includedir}" = "\${prefix}/include"; then
258    AC_DEFINE_UNQUOTED(STANDARD_INCLUDE_DIR, "${sdcc_datadir_tmp}/include")
259    AC_DEFINE_UNQUOTED(SDCC_INCLUDE_DIR, "${sdcc_datadir_tmp}/include")
260 else 
261    AC_DEFINE_UNQUOTED(STANDARD_INCLUDE_DIR, "${includedir}")
262    AC_DEFINE_UNQUOTED(SDCC_INCLUDE_DIR, "${includedir}")
263 fi
264
265 AC_DEFINE_UNQUOTED(SDCC_LIB_DIR, "${sdcc_datadir_tmp}/lib")
266 AC_DEFINE_UNQUOTED(STD_LIB, "libsdcc")
267 AC_DEFINE_UNQUOTED(STD_INT_LIB, "libint")
268 AC_DEFINE_UNQUOTED(STD_LONG_LIB, "liblong")
269 AC_DEFINE_UNQUOTED(STD_FP_LIB, "libfloat")
270 AC_DEFINE_UNQUOTED(STD_DS390_LIB, "libds390")
271 AC_DEFINE_UNQUOTED(STD_xa51_LIB, "xa51")
272
273 AC_DEFINE_UNQUOTED(PREFIX, "${prefix}")
274 AC_DEFINE_UNQUOTED(DATADIR, "${sdcc_datadir_tmp}")
275 AC_DEFINE_UNQUOTED(SRCDIR, "${config_in}")
276
277
278
279 # Now handle the port selection
280 rm -f ports.all ports.build
281 AC_ARG_ENABLE(mcs51-port,[  --disable-mcs51-port    Excludes the Intel mcs51 port])
282 echo mcs51 >>ports.all
283 if test "$enable_mcs51_port" = "no"; then
284     AC_DEFINE_UNQUOTED(OPT_DISABLE_MCS51, 1)
285 else
286     echo mcs51 >>ports.build
287     AC_DEFINE_UNQUOTED(OPT_DISABLE_MCS51, 0)
288 fi
289
290 AC_ARG_ENABLE(gbz80-port,[  --disable-gbz80-port    Excludes the Gameboy gbz80 port])
291 echo z80 >>ports.all
292 if test "$enable_gbz80_port" = "no"; then
293     AC_DEFINE_UNQUOTED(OPT_DISABLE_GBZ80, 1)
294 else
295     echo z80 >>ports.build
296     AC_DEFINE_UNQUOTED(OPT_DISABLE_GBZ80, 0)
297 fi
298
299 AC_ARG_ENABLE(z80-port,[  --disable-z80-port      Excludes the z80 port])
300 echo z80 >>ports.all
301 if test "$enable_z80_port" = "no"; then
302     AC_DEFINE_UNQUOTED(OPT_DISABLE_Z80, 1)
303 else
304     echo z80 >>ports.build
305     AC_DEFINE_UNQUOTED(OPT_DISABLE_Z80, 0)
306 fi
307
308 AC_ARG_ENABLE(avr-port,[  --disable-avr-port      Excludes the AVR port])
309 echo avr >>ports.all
310 if test "$enable_avr_port" = "no"; then
311     AC_DEFINE_UNQUOTED(OPT_DISABLE_AVR, 1)
312 else
313     echo avr >>ports.build
314     AC_DEFINE_UNQUOTED(OPT_DISABLE_AVR, 0)
315 fi
316
317 AC_ARG_ENABLE(ds390-port,[  --disable-ds390-port    Excludes the DS390 port])
318 echo ds390 >>ports.all
319 if test "$enable_ds390_port" = "no"; then
320     AC_DEFINE_UNQUOTED(OPT_DISABLE_DS390, 1)
321     AC_DEFINE_UNQUOTED(OPT_DISABLE_TININative, 1)
322 else
323     echo ds390 >>ports.build
324     AC_DEFINE_UNQUOTED(OPT_DISABLE_DS390, 0)
325     AC_DEFINE_UNQUOTED(OPT_DISABLE_TININative, 0)
326 fi
327
328 AC_ARG_ENABLE(pic-port,[  --disable-pic-port      Excludes the PIC port])
329 echo pic >>ports.all
330 if test "$enable_pic_port" = "no"; then
331     AC_DEFINE_UNQUOTED(OPT_DISABLE_PIC, 1)
332 else
333     echo pic >>ports.build
334     AC_DEFINE_UNQUOTED(OPT_DISABLE_PIC, 0)
335 fi
336
337 AC_ARG_ENABLE(xa51-port,[  --disable-xa51-port Excludes the XA51 port])
338 echo xa51 >>ports.all
339 if test "$enable_xa51_port" = "no"; then
340     AC_DEFINE_UNQUOTED(OPT_DISABLE_XA51, 1)
341 else
342     echo xa51 >>ports.build
343     AC_DEFINE_UNQUOTED(OPT_DISABLE_XA51, 0)
344 fi
345
346 AC_ARG_ENABLE(ucsim,[  --disable-ucsim         Disables configuring and building of ucsim])
347 OPT_ENABLE_UCSIM=$enable_ucsim
348 AC_SUBST(OPT_ENABLE_UCSIM)
349
350 AC_ARG_ENABLE(device-lib-build,[  --disable-device-lib-build Disables automatically building device libraries])
351 OPT_ENABLE_DEVICE_LIB_BUILD=$enable_device_lib_build
352 AC_SUBST(OPT_ENABLE_DEVICE_LIB_BUILD)
353
354 AC_ARG_ENABLE(packihx,[  --disable-packihx       Disables building packihx])
355 OPT_ENABLE_PACKIHX=$enable_packihx
356 AC_SUBST(OPT_ENABLE_PACKIHX)
357
358 AC_ARG_ENABLE(libgc,[  --enable-libgc          Use the Bohem memory allocator.  Lower runtime footprint.])
359 if test "$enable_libgc" = "yes"; then
360         AC_CHECK_LIB(gc, GC_malloc)
361         OPT_ENABLE_LIBGC=1
362 else
363         OPT_ENABLE_LIBGC=0
364 fi
365 AC_DEFINE_UNQUOTED(OPT_ENABLE_LIBGC, $OPT_ENABLE_LIBGC)
366
367 #remove duplicates
368 cat ports.all | uniq >ports
369 mv ports ports.all
370 cat ports.build | uniq >ports
371 mv ports ports.build
372
373 # Generating output files
374 # ===========================================================================
375 AC_CONFIG_SUBDIRS(support/cpp2)
376 AC_CONFIG_SUBDIRS(packihx)
377 AC_CONFIG_SUBDIRS(sim/ucsim)
378 # MLH: removed as the rules are already in Makefile.common
379 #as/z80/Makefile
380 #link/z80/Makefile
381 AC_OUTPUT(main.mk:main_in.mk
382 src/Makefile
383 as/mcs51/Makefile
384 device/include/Makefile
385 device/lib/Makefile
386 debugger/mcs51/Makefile
387 Makefile.common:Makefile.common.in
388 )
389
390 # End of configure/configure.in