sim: common: add basic model assert
[external/binutils.git] / sim / common / acinclude.m4
1 # This file contains common code used by all simulators.
2 #
3 # SIM_AC_COMMON invokes AC macros used by all simulators and by the common
4 # directory.  It is intended to be invoked before any target specific stuff.
5 # SIM_AC_OUTPUT is a cover function to AC_OUTPUT to generate the Makefile.
6 # It is intended to be invoked last.
7 #
8 # The simulator's configure.ac should look like:
9 #
10 # dnl Process this file with autoconf to produce a configure script.
11 # AC_PREREQ(2.64)dnl
12 # AC_INIT(Makefile.in)
13 # sinclude(../common/aclocal.m4)
14 #
15 # SIM_AC_COMMON
16 #
17 # ... target specific stuff ...
18 #
19 # SIM_AC_OUTPUT
20
21 # Include global overrides and fixes for Autoconf.
22 m4_include(../../config/override.m4)
23 sinclude([../../config/zlib.m4])
24 m4_include([../../config/plugins.m4])
25 m4_include([../../libtool.m4])
26 m4_include([../../ltoptions.m4])
27 m4_include([../../ltsugar.m4])
28 m4_include([../../ltversion.m4])
29 m4_include([../../lt~obsolete.m4])
30 sinclude([../../config/depstand.m4])
31
32 AC_DEFUN([SIM_AC_COMMON],
33 [
34 AC_REQUIRE([AC_PROG_CC])
35 # autoconf.info says this should be called right after AC_INIT.
36 AC_CONFIG_HEADER(ifelse([$1],,config.h,[$1]):config.in)
37 AC_CANONICAL_SYSTEM
38 AC_USE_SYSTEM_EXTENSIONS
39 AC_ARG_PROGRAM
40 AC_PROG_INSTALL
41
42 # Put a plausible default for CC_FOR_BUILD in Makefile.
43 if test "x$cross_compiling" = "xno"; then
44   CC_FOR_BUILD='$(CC)'
45 else
46   CC_FOR_BUILD=gcc
47 fi
48 AC_SUBST(CC_FOR_BUILD)
49
50 AC_SUBST(CFLAGS)
51 AC_SUBST(HDEFINES)
52 AR=${AR-ar}
53 AC_SUBST(AR)
54 AC_PROG_RANLIB
55
56 dnl Pull in the target configuration file directly.
57 AH_BOTTOM([#include "tconfig.h"])
58
59 # Some of the common include files depend on bfd.h, and bfd.h checks
60 # that config.h is included first by testing that the PACKAGE macro
61 # is defined.
62 PACKAGE=sim
63 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package. ])
64 AC_SUBST(PACKAGE)
65
66 # Dependency checking.
67 ZW_CREATE_DEPDIR
68 ZW_PROG_COMPILER_DEPENDENCIES([CC])
69
70 # Check for the 'make' the user wants to use.
71 AC_CHECK_PROGS(MAKE, make)
72 MAKE_IS_GNU=
73 case "`$MAKE --version 2>&1 | sed 1q`" in
74   *GNU*)
75     MAKE_IS_GNU=yes
76     ;;
77 esac
78 AM_CONDITIONAL(GMAKE, test "$MAKE_IS_GNU" = yes)
79
80 dnl We don't use gettext, but bfd does.  So we do the appropriate checks
81 dnl to see if there are intl libraries we should link against.
82 ALL_LINGUAS=
83 ZW_GNU_GETTEXT_SISTER_DIR(../../intl)
84
85 # Check for common headers.
86 # FIXME: Seems to me this can cause problems for i386-windows hosts.
87 # At one point there were hardcoded AC_DEFINE's if ${host} = i386-*-windows*.
88 AC_CHECK_HEADERS(stdlib.h string.h strings.h unistd.h time.h)
89 AC_CHECK_HEADERS(sys/time.h sys/resource.h)
90 AC_CHECK_HEADERS(fcntl.h fpu_control.h)
91 AC_CHECK_HEADERS(dlfcn.h errno.h sys/stat.h)
92 AC_CHECK_FUNCS(getrusage time sigaction __setfpucw)
93
94 # Check for socket libraries
95 AC_CHECK_LIB(socket, bind)
96 AC_CHECK_LIB(nsl, gethostbyname)
97
98 # BFD conditionally uses zlib, so we must link it in if libbfd does, by
99 # using the same condition.
100 AM_ZLIB
101
102 # BFD uses libdl when when plugins enabled.
103 AC_PLUGINS
104 AM_CONDITIONAL(PLUGINS, test "$plugins" = yes)
105 LT_INIT([dlopen])
106 AC_SUBST(lt_cv_dlopen_libs)
107
108 . ${srcdir}/../../bfd/configure.host
109
110 dnl Standard (and optional) simulator options.
111 dnl Eventually all simulators will support these.
112 dnl Do not add any here that cannot be supported by all simulators.
113 dnl Do not add similar but different options to a particular simulator,
114 dnl all shall eventually behave the same way.
115
116
117 dnl We don't use automake, but we still want to support
118 dnl --enable-maintainer-mode.
119 AM_MAINTAINER_MODE
120
121
122 dnl This is a generic option to enable special byte swapping
123 dnl insns on *any* cpu.
124 AC_ARG_ENABLE(sim-bswap,
125 [  --enable-sim-bswap                   Use Host specific BSWAP instruction.],
126 [case "${enableval}" in
127   yes)  sim_bswap="-DWITH_BSWAP=1 -DUSE_BSWAP=1";;
128   no)   sim_bswap="-DWITH_BSWAP=0";;
129   *)    AC_MSG_ERROR("--enable-sim-bswap does not take a value"); sim_bswap="";;
130 esac
131 if test x"$silent" != x"yes" && test x"$sim_bswap" != x""; then
132   echo "Setting bswap flags = $sim_bswap" 6>&1
133 fi],[sim_bswap=""])dnl
134 AC_SUBST(sim_bswap)
135
136
137 AC_ARG_ENABLE(sim-cflags,
138 [  --enable-sim-cflags=opts             Extra CFLAGS for use in building simulator],
139 [case "${enableval}" in
140   yes)   sim_cflags="-O2 -fomit-frame-pointer";;
141   trace) AC_MSG_ERROR("Please use --enable-sim-debug instead."); sim_cflags="";;
142   no)    sim_cflags="";;
143   *)     sim_cflags=`echo "${enableval}" | sed -e "s/,/ /g"`;;
144 esac
145 if test x"$silent" != x"yes" && test x"$sim_cflags" != x""; then
146   echo "Setting sim cflags = $sim_cflags" 6>&1
147 fi],[sim_cflags=""])dnl
148 AC_SUBST(sim_cflags)
149
150
151 dnl --enable-sim-debug is for developers of the simulator
152 dnl the allowable values are work-in-progress
153 AC_ARG_ENABLE(sim-debug,
154 [  --enable-sim-debug=opts              Enable debugging flags],
155 [case "${enableval}" in
156   yes) sim_debug="-DDEBUG=7 -DWITH_DEBUG=7";;
157   no)  sim_debug="-DDEBUG=0 -DWITH_DEBUG=0";;
158   *)   sim_debug="-DDEBUG='(${enableval})' -DWITH_DEBUG='(${enableval})'";;
159 esac
160 if test x"$silent" != x"yes" && test x"$sim_debug" != x""; then
161   echo "Setting sim debug = $sim_debug" 6>&1
162 fi],[sim_debug=""])dnl
163 AC_SUBST(sim_debug)
164
165
166 dnl --enable-sim-stdio is for users of the simulator
167 dnl It determines if IO from the program is routed through STDIO (buffered)
168 AC_ARG_ENABLE(sim-stdio,
169 [  --enable-sim-stdio                   Specify whether to use stdio for console input/output.],
170 [case "${enableval}" in
171   yes)  sim_stdio="-DWITH_STDIO=DO_USE_STDIO";;
172   no)   sim_stdio="-DWITH_STDIO=DONT_USE_STDIO";;
173   *)    AC_MSG_ERROR("Unknown value $enableval passed to --enable-sim-stdio"); sim_stdio="";;
174 esac
175 if test x"$silent" != x"yes" && test x"$sim_stdio" != x""; then
176   echo "Setting stdio flags = $sim_stdio" 6>&1
177 fi],[sim_stdio=""])dnl
178 AC_SUBST(sim_stdio)
179
180
181 dnl --enable-sim-trace is for users of the simulator
182 dnl The argument is either a bitmask of things to enable [exactly what is
183 dnl up to the simulator], or is a comma separated list of names of tracing
184 dnl elements to enable.  The latter is only supported on simulators that
185 dnl use WITH_TRACE.
186 AC_ARG_ENABLE(sim-trace,
187 [  --enable-sim-trace=opts              Enable tracing flags],
188 [case "${enableval}" in
189   yes)  sim_trace="-DWITH_TRACE=-1";;
190   no)   sim_trace="-DWITH_TRACE=0";;
191   [[-0-9]]*)
192         sim_trace="-DWITH_TRACE='(${enableval})'";;
193   [[[:lower:]]]*)
194         sim_trace=""
195         for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
196           if test x"$sim_trace" = x; then
197             sim_trace="-DWITH_TRACE='(TRACE_$x"
198           else
199             sim_trace="${sim_trace}|TRACE_$x"
200           fi
201         done
202         sim_trace="$sim_trace)'" ;;
203 esac
204 if test x"$silent" != x"yes" && test x"$sim_trace" != x""; then
205   echo "Setting sim trace = $sim_trace" 6>&1
206 fi],[sim_trace=""])dnl
207 AC_SUBST(sim_trace)
208
209
210 dnl --enable-sim-profile
211 dnl The argument is either a bitmask of things to enable [exactly what is
212 dnl up to the simulator], or is a comma separated list of names of profiling
213 dnl elements to enable.  The latter is only supported on simulators that
214 dnl use WITH_PROFILE.
215 AC_ARG_ENABLE(sim-profile,
216 [  --enable-sim-profile=opts            Enable profiling flags],
217 [case "${enableval}" in
218   yes)  sim_profile="-DPROFILE=1 -DWITH_PROFILE=-1";;
219   no)   sim_profile="-DPROFILE=0 -DWITH_PROFILE=0";;
220   [[-0-9]]*)
221         sim_profile="-DPROFILE='(${enableval})' -DWITH_PROFILE='(${enableval})'";;
222   [[a-z]]*)
223         sim_profile=""
224         for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
225           if test x"$sim_profile" = x; then
226             sim_profile="-DWITH_PROFILE='(PROFILE_$x"
227           else
228             sim_profile="${sim_profile}|PROFILE_$x"
229           fi
230         done
231         sim_profile="$sim_profile)'" ;;
232 esac
233 if test x"$silent" != x"yes" && test x"$sim_profile" != x""; then
234   echo "Setting sim profile = $sim_profile" 6>&1
235 fi],[sim_profile="-DPROFILE=1 -DWITH_PROFILE=-1"])dnl
236 AC_SUBST(sim_profile)
237
238 ACX_PKGVERSION([SIM])
239 ACX_BUGURL([http://www.gnu.org/software/gdb/bugs/])
240 AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"], [Additional package description])
241 AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"], [Bug reporting address])
242
243 dnl Types used by common code
244 AC_TYPE_SIGNAL
245
246 dnl Detect exe extension
247 AC_EXEEXT
248
249 dnl These are available to append to as desired.
250 sim_link_files=
251 sim_link_links=
252
253 # targ-vals.def points to the libc macro description file.
254 case "${target}" in
255 *-*-*) TARG_VALS_DEF=../common/nltvals.def ;;
256 esac
257 sim_link_files="${sim_link_files} ${TARG_VALS_DEF}"
258 sim_link_links="${sim_link_links} targ-vals.def"
259
260 ]) dnl End of SIM_AC_COMMON
261
262
263 dnl Additional SIM options that can (optionally) be configured
264 dnl For optional simulator options, a macro SIM_AC_OPTION_* is defined.
265 dnl Simulators that wish to use the relevant option specify the macro
266 dnl in the simulator specific configure.ac file between the SIM_AC_COMMON
267 dnl and SIM_AC_OUTPUT lines.
268
269
270 dnl Specify the running environment.
271 dnl If the simulator invokes this in its configure.ac then without this option
272 dnl the default is the user environment and all are runtime selectable.
273 dnl If the simulator doesn't invoke this, only the user environment is
274 dnl supported.
275 dnl ??? Until there is demonstrable value in doing something more complicated,
276 dnl let's not.
277 AC_DEFUN([SIM_AC_OPTION_ENVIRONMENT],
278 [
279 AC_ARG_ENABLE(sim-environment,
280 [  --enable-sim-environment=environment Specify mixed, user, virtual or operating environment.],
281 [case "${enableval}" in
282   all | ALL)             sim_environment="-DWITH_ENVIRONMENT=ALL_ENVIRONMENT";;
283   user | USER)           sim_environment="-DWITH_ENVIRONMENT=USER_ENVIRONMENT";;
284   virtual | VIRTUAL)     sim_environment="-DWITH_ENVIRONMENT=VIRTUAL_ENVIRONMENT";;
285   operating | OPERATING) sim_environment="-DWITH_ENVIRONMENT=OPERATING_ENVIRONMENT";;
286   *)   AC_MSG_ERROR("Unknown value $enableval passed to --enable-sim-environment");
287        sim_environment="";;
288 esac
289 if test x"$silent" != x"yes" && test x"$sim_environment" != x""; then
290   echo "Setting sim environment = $sim_environment" 6>&1
291 fi],
292 [sim_environment="-DWITH_ENVIRONMENT=ALL_ENVIRONMENT"])dnl
293 ])
294 AC_SUBST(sim_environment)
295
296
297 dnl Specify the alignment restrictions of the target architecture.
298 dnl Without this option all possible alignment restrictions are accommodated.
299 dnl arg[1] is hardwired target alignment
300 dnl arg[2] is default target alignment
301 AC_DEFUN([SIM_AC_OPTION_ALIGNMENT],
302 wire_alignment="[$1]"
303 default_alignment="[$2]"
304 [
305 AC_ARG_ENABLE(sim-alignment,
306 [  --enable-sim-alignment=align         Specify strict,  nonstrict or forced alignment of memory accesses.],
307 [case "${enableval}" in
308   strict | STRICT)       sim_alignment="-DWITH_ALIGNMENT=STRICT_ALIGNMENT";;
309   nonstrict | NONSTRICT) sim_alignment="-DWITH_ALIGNMENT=NONSTRICT_ALIGNMENT";;
310   forced | FORCED)       sim_alignment="-DWITH_ALIGNMENT=FORCED_ALIGNMENT";;
311   yes) if test x"$wire_alignment" != x; then
312          sim_alignment="-DWITH_ALIGNMENT=${wire_alignment}"
313        else
314          if test x"$default_alignment" != x; then
315            sim_alignment="-DWITH_ALIGNMENT=${default_alignment}"
316          else
317            echo "No hard-wired alignment for target $target" 1>&6
318            sim_alignment="-DWITH_ALIGNMENT=0"
319          fi
320        fi;;
321   no)  if test x"$default_alignment" != x; then
322          sim_alignment="-DWITH_DEFAULT_ALIGNMENT=${default_alignment}"
323        else
324          if test x"$wire_alignment" != x; then
325            sim_alignment="-DWITH_DEFAULT_ALIGNMENT=${wire_alignment}"
326          else
327            echo "No default alignment for target $target" 1>&6
328            sim_alignment="-DWITH_DEFAULT_ALIGNMENT=0"
329          fi
330        fi;;
331   *)   AC_MSG_ERROR("Unknown value $enableval passed to --enable-sim-alignment"); sim_alignment="";;
332 esac
333 if test x"$silent" != x"yes" && test x"$sim_alignment" != x""; then
334   echo "Setting alignment flags = $sim_alignment" 6>&1
335 fi],
336 [if test x"$default_alignment" != x; then
337   sim_alignment="-DWITH_DEFAULT_ALIGNMENT=${default_alignment}"
338 else
339   if test x"$wire_alignment" != x; then
340     sim_alignment="-DWITH_ALIGNMENT=${wire_alignment}"
341   else
342     sim_alignment=
343   fi
344 fi])dnl
345 ])dnl
346 AC_SUBST(sim_alignment)
347
348
349 dnl Conditionally compile in assertion statements.
350 AC_DEFUN([SIM_AC_OPTION_ASSERT],
351 [
352 AC_ARG_ENABLE(sim-assert,
353 [  --enable-sim-assert                  Specify whether to perform random assertions.],
354 [case "${enableval}" in
355   yes)  sim_assert="-DWITH_ASSERT=1";;
356   no)   sim_assert="-DWITH_ASSERT=0";;
357   *)    AC_MSG_ERROR("--enable-sim-assert does not take a value"); sim_assert="";;
358 esac
359 if test x"$silent" != x"yes" && test x"$sim_assert" != x""; then
360   echo "Setting assert flags = $sim_assert" 6>&1
361 fi],[sim_assert=""])dnl
362 ])
363 AC_SUBST(sim_assert)
364
365
366
367 dnl --enable-sim-bitsize is for developers of the simulator
368 dnl It specifies the number of BITS in the target.
369 dnl arg[1] is the number of bits in a word
370 dnl arg[2] is the number assigned to the most significant bit
371 dnl arg[3] is the number of bits in an address
372 dnl arg[4] is the number of bits in an OpenFirmware cell.
373 dnl FIXME: this information should be obtained from bfd/archure
374 AC_DEFUN([SIM_AC_OPTION_BITSIZE],
375 wire_word_bitsize="[$1]"
376 wire_word_msb="[$2]"
377 wire_address_bitsize="[$3]"
378 wire_cell_bitsize="[$4]"
379 [AC_ARG_ENABLE(sim-bitsize,
380 [  --enable-sim-bitsize=N               Specify target bitsize (32 or 64).],
381 [sim_bitsize=
382 case "${enableval}" in
383   64,63 | 64,63,* ) sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=64 -DWITH_TARGET_WORD_MSB=63";;
384   32,31 | 32,31,* ) sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=31";;
385   64,0 | 64,0,* ) sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=0";;
386   32,0 | 64,0,* ) sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=0";;
387   32) if test x"$wire_word_msb" != x -a x"$wire_word_msb" != x0; then
388         sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=31"
389       else
390         sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=0"
391       fi ;;
392   64) if test x"$wire_word_msb" != x -a x"$wire_word_msb" != x0; then
393         sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=64 -DWITH_TARGET_WORD_MSB=63"
394       else
395         sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=64 -DWITH_TARGET_WORD_MSB=0"
396       fi ;;
397   *)  AC_MSG_ERROR("--enable-sim-bitsize was given $enableval.  Expected 32 or 64") ;;
398 esac
399 # address bitsize
400 tmp=`echo "${enableval}" | sed -e "s/^[[0-9]]*,*[[0-9]]*,*//"`
401 case x"${tmp}" in
402   x ) ;;
403   x32 | x32,* ) sim_bitsize="${sim_bitsize} -DWITH_TARGET_ADDRESS_BITSIZE=32" ;;
404   x64 | x64,* ) sim_bitsize="${sim_bitsize} -DWITH_TARGET_ADDRESS_BITSIZE=64" ;;
405   * ) AC_MSG_ERROR("--enable-sim-bitsize was given address size $enableval.  Expected 32 or 64") ;;
406 esac
407 # cell bitsize
408 tmp=`echo "${enableval}" | sed -e "s/^[[0-9]]*,*[[0-9*]]*,*[[0-9]]*,*//"`
409 case x"${tmp}" in
410   x ) ;;
411   x32 | x32,* ) sim_bitsize="${sim_bitsize} -DWITH_TARGET_CELL_BITSIZE=32" ;;
412   x64 | x64,* ) sim_bitsize="${sim_bitsize} -DWITH_TARGET_CELL_BITSIZE=64" ;;
413   * ) AC_MSG_ERROR("--enable-sim-bitsize was given cell size $enableval.  Expected 32 or 64") ;;
414 esac
415 if test x"$silent" != x"yes" && test x"$sim_bitsize" != x""; then
416   echo "Setting bitsize flags = $sim_bitsize" 6>&1
417 fi],
418 [sim_bitsize=""
419 if test x"$wire_word_bitsize" != x; then
420   sim_bitsize="$sim_bitsize -DWITH_TARGET_WORD_BITSIZE=$wire_word_bitsize"
421 fi
422 if test x"$wire_word_msb" != x; then
423   sim_bitsize="$sim_bitsize -DWITH_TARGET_WORD_MSB=$wire_word_msb"
424 fi
425 if test x"$wire_address_bitsize" != x; then
426   sim_bitsize="$sim_bitsize -DWITH_TARGET_ADDRESS_BITSIZE=$wire_address_bitsize"
427 fi
428 if test x"$wire_cell_bitsize" != x; then
429   sim_bitsize="$sim_bitsize -DWITH_TARGET_CELL_BITSIZE=$wire_cell_bitsize"
430 fi])dnl
431 ])
432 AC_SUBST(sim_bitsize)
433
434
435
436 dnl --enable-sim-endian={yes,no,big,little} is for simulators
437 dnl that support both big and little endian targets.
438 dnl arg[1] is hardwired target endianness.
439 dnl arg[2] is default target endianness.
440 AC_DEFUN([SIM_AC_OPTION_ENDIAN],
441 [
442 wire_endian="[$1]"
443 default_endian="[$2]"
444 AC_ARG_ENABLE(sim-endian,
445 [  --enable-sim-endian=endian           Specify target byte endian orientation.],
446 [case "${enableval}" in
447   b*|B*) sim_endian="-DWITH_TARGET_BYTE_ORDER=BIG_ENDIAN";;
448   l*|L*) sim_endian="-DWITH_TARGET_BYTE_ORDER=LITTLE_ENDIAN";;
449   yes)   if test x"$wire_endian" != x; then
450            sim_endian="-DWITH_TARGET_BYTE_ORDER=${wire_endian}"
451          else
452            if test x"$default_endian" != x; then
453              sim_endian="-DWITH_TARGET_BYTE_ORDER=${default_endian}"
454            else
455              echo "No hard-wired endian for target $target" 1>&6
456              sim_endian="-DWITH_TARGET_BYTE_ORDER=0"
457            fi
458          fi;;
459   no)    if test x"$default_endian" != x; then
460            sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=${default_endian}"
461          else
462            if test x"$wire_endian" != x; then
463              sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=${wire_endian}"
464            else
465              echo "No default endian for target $target" 1>&6
466              sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=0"
467            fi
468          fi;;
469   *)     AC_MSG_ERROR("Unknown value $enableval for --enable-sim-endian"); sim_endian="";;
470 esac
471 if test x"$silent" != x"yes" && test x"$sim_endian" != x""; then
472   echo "Setting endian flags = $sim_endian" 6>&1
473 fi],
474 [if test x"$default_endian" != x; then
475   sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=${default_endian}"
476 else
477   if test x"$wire_endian" != x; then
478     sim_endian="-DWITH_TARGET_BYTE_ORDER=${wire_endian}"
479   else
480     sim_endian=
481   fi
482 fi])dnl
483 ])
484 AC_SUBST(sim_endian)
485
486
487 dnl --enable-sim-hostendian is for users of the simulator when
488 dnl they find that AC_C_BIGENDIAN does not function correctly
489 dnl (for instance in a canadian cross)
490 AC_DEFUN([SIM_AC_OPTION_HOSTENDIAN],
491 [
492 AC_ARG_ENABLE(sim-hostendian,
493 [  --enable-sim-hostendian=end          Specify host byte endian orientation.],
494 [case "${enableval}" in
495   no)    sim_hostendian="-DWITH_HOST_BYTE_ORDER=0";;
496   b*|B*) sim_hostendian="-DWITH_HOST_BYTE_ORDER=BIG_ENDIAN";;
497   l*|L*) sim_hostendian="-DWITH_HOST_BYTE_ORDER=LITTLE_ENDIAN";;
498   *)     AC_MSG_ERROR("Unknown value $enableval for --enable-sim-hostendian"); sim_hostendian="";;
499 esac
500 if test x"$silent" != x"yes" && test x"$sim_hostendian" != x""; then
501   echo "Setting hostendian flags = $sim_hostendian" 6>&1
502 fi],[
503 if test "x$cross_compiling" = "xno"; then
504   AC_C_BIGENDIAN
505   if test $ac_cv_c_bigendian = yes; then
506     sim_hostendian="-DWITH_HOST_BYTE_ORDER=BIG_ENDIAN"
507   else
508     sim_hostendian="-DWITH_HOST_BYTE_ORDER=LITTLE_ENDIAN"
509   fi
510 else
511   sim_hostendian="-DWITH_HOST_BYTE_ORDER=0"
512 fi])dnl
513 ])
514 AC_SUBST(sim_hostendian)
515
516
517 dnl --enable-sim-float is for developers of the simulator
518 dnl It specifies the presence of hardware floating point
519 dnl And optionally the bitsize of the floating point register.
520 dnl arg[1] specifies the presence (or absence) of floating point hardware
521 dnl arg[2] specifies the number of bits in a floating point register
522 AC_DEFUN([SIM_AC_OPTION_FLOAT],
523 [
524 default_sim_float="[$1]"
525 default_sim_float_bitsize="[$2]"
526 AC_ARG_ENABLE(sim-float,
527 [  --enable-sim-float                   Specify that the target processor has floating point hardware.],
528 [case "${enableval}" in
529   yes | hard)   sim_float="-DWITH_FLOATING_POINT=HARD_FLOATING_POINT";;
530   no | soft)    sim_float="-DWITH_FLOATING_POINT=SOFT_FLOATING_POINT";;
531   32)           sim_float="-DWITH_FLOATING_POINT=HARD_FLOATING_POINT -DWITH_TARGET_FLOATING_POINT_BITSIZE=32";;
532   64)           sim_float="-DWITH_FLOATING_POINT=HARD_FLOATING_POINT -DWITH_TARGET_FLOATING_POINT_BITSIZE=64";;
533   *)            AC_MSG_ERROR("Unknown value $enableval passed to --enable-sim-float"); sim_float="";;
534 esac
535 if test x"$silent" != x"yes" && test x"$sim_float" != x""; then
536   echo "Setting float flags = $sim_float" 6>&1
537 fi],[
538 sim_float=
539 if test x"${default_sim_float}" != x""; then
540   sim_float="-DWITH_FLOATING_POINT=${default_sim_float}"
541 fi
542 if test x"${default_sim_float_bitsize}" != x""; then
543   sim_float="$sim_float -DWITH_TARGET_FLOATING_POINT_BITSIZE=${default_sim_float_bitsize}"
544 fi
545 ])dnl
546 ])
547 AC_SUBST(sim_float)
548
549
550 dnl The argument is the default cache size if none is specified.
551 AC_DEFUN([SIM_AC_OPTION_SCACHE],
552 [
553 default_sim_scache="ifelse([$1],,0,[$1])"
554 AC_ARG_ENABLE(sim-scache,
555 [  --enable-sim-scache=size             Specify simulator execution cache size.],
556 [case "${enableval}" in
557   yes)  sim_scache="-DWITH_SCACHE=${default_sim_scache}";;
558   no)   sim_scache="-DWITH_SCACHE=0" ;;
559   [[0-9]]*) sim_scache="-DWITH_SCACHE=${enableval}";;
560   *)    AC_MSG_ERROR("Bad value $enableval passed to --enable-sim-scache");
561         sim_scache="";;
562 esac
563 if test x"$silent" != x"yes" && test x"$sim_scache" != x""; then
564   echo "Setting scache size = $sim_scache" 6>&1
565 fi],[sim_scache="-DWITH_SCACHE=${default_sim_scache}"])
566 ])
567 AC_SUBST(sim_scache)
568
569
570 dnl The argument is the default model if none is specified.
571 AC_DEFUN([SIM_AC_OPTION_DEFAULT_MODEL],
572 [
573 default_sim_default_model="ifelse([$1],,0,[$1])"
574 AC_ARG_ENABLE(sim-default-model,
575 [  --enable-sim-default-model=model     Specify default model to simulate.],
576 [case "${enableval}" in
577   yes|no) AC_MSG_ERROR("Missing argument to --enable-sim-default-model");;
578   *)    sim_default_model="-DWITH_DEFAULT_MODEL='\"${enableval}\"'";;
579 esac
580 if test x"$silent" != x"yes" && test x"$sim_default_model" != x""; then
581   echo "Setting default model = $sim_default_model" 6>&1
582 fi],[sim_default_model="-DWITH_DEFAULT_MODEL='\"${default_sim_default_model}\"'"])
583 ])
584 AC_SUBST(sim_default_model)
585
586
587 dnl --enable-sim-hardware is for users of the simulator
588 dnl arg[1] Enable sim-hw by default? ("yes" or "no")
589 dnl arg[2] is a space separated list of devices that override the defaults
590 dnl arg[3] is a space separated list of extra target specific devices.
591 AC_DEFUN([SIM_AC_OPTION_HARDWARE],
592 [
593 if test "[$2]"; then
594   hardware="[$2]"
595 else
596   hardware="cfi core pal glue"
597 fi
598 hardware="$hardware [$3]"
599
600 sim_hw_cflags="-DWITH_HW=1"
601 sim_hw="$hardware"
602 sim_hw_objs="\$(SIM_COMMON_HW_OBJS) `echo $sim_hw | sed -e 's/\([[^ ]][[^ ]]*\)/dv-\1.o/g'`"
603
604 AC_ARG_ENABLE(sim-hardware,
605   [AS_HELP_STRING([--enable-sim-hardware=LIST],
606                   [Specify the hardware to be included in the build.])],
607   ,[enable_sim_hardware="[$1]"])
608 case ${enable_sim_hardware} in
609   yes|no) ;;
610   ,*) hardware="${hardware} `echo ${enableval} | sed -e 's/,/ /'`";;
611   *,) hardware="`echo ${enableval} | sed -e 's/,/ /'` ${hardware}";;
612   *)  hardware="`echo ${enableval} | sed -e 's/,/ /'`"'';;
613 esac
614
615 if test "$enable_sim_hardware" = no; then
616   sim_hw_objs=
617   sim_hw_cflags="-DWITH_HW=0"
618   sim_hw=
619 else
620   sim_hw_cflags="-DWITH_HW=1"
621   # remove duplicates
622   sim_hw=""
623   sim_hw_objs="\$(SIM_COMMON_HW_OBJS)"
624   for i in $hardware ; do
625     case " $sim_hw " in
626       *" $i "*) ;;
627       *) sim_hw="$sim_hw $i" ; sim_hw_objs="$sim_hw_objs dv-$i.o";;
628     esac
629   done
630   # mingw does not support sockser
631   case ${host} in
632     *mingw*) ;;
633     *) # TODO: We don't add dv-sockser to sim_hw as it is not a "real" device
634        # that you instatiate.  Instead, other code will call into it directly.
635        # At some point, we should convert it over.
636        sim_hw_objs="$sim_hw_objs dv-sockser.o"
637        AC_DEFINE_UNQUOTED(
638          [HAVE_DV_SOCKSER], 1, [Define if dv-sockser is usable.])
639        ;;
640   esac
641   if test x"$silent" != x"yes"; then
642     echo "Setting hardware to $sim_hw_cflags, $sim_hw, $sim_hw_objs"
643   fi
644   dnl Some devices require extra libraries.
645   case " $hardware " in
646     *" cfi "*) AC_CHECK_LIB(m, log2);;
647   esac
648 fi
649 ])
650 AC_SUBST(sim_hw_cflags)
651 AC_SUBST(sim_hw_objs)
652 AC_SUBST(sim_hw)
653
654
655 dnl --enable-sim-inline is for users that wish to ramp up the simulator's
656 dnl performance by inlining functions.
657 dnl Guarantee that unconfigured simulators do not do any inlining
658 sim_inline="-DDEFAULT_INLINE=0"
659 AC_DEFUN([SIM_AC_OPTION_INLINE],
660 [
661 default_sim_inline="ifelse([$1],,,-DDEFAULT_INLINE=[$1])"
662 AC_ARG_ENABLE(sim-inline,
663 [  --enable-sim-inline=inlines          Specify which functions should be inlined.],
664 [sim_inline=""
665 case "$enableval" in
666   no)           sim_inline="-DDEFAULT_INLINE=0";;
667   0)            sim_inline="-DDEFAULT_INLINE=0";;
668   yes | 2)      sim_inline="-DDEFAULT_INLINE=ALL_C_INLINE";;
669   1)            sim_inline="-DDEFAULT_INLINE=INLINE_LOCALS";;
670   *) for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
671        new_flag=""
672        case "$x" in
673          *_INLINE=*)    new_flag="-D$x";;
674          *=*)           new_flag=`echo "$x" | sed -e "s/=/_INLINE=/" -e "s/^/-D/"`;;
675          *_INLINE)      new_flag="-D$x=ALL_C_INLINE";;
676          *)             new_flag="-D$x""_INLINE=ALL_C_INLINE";;
677        esac
678        if test x"$sim_inline" = x""; then
679          sim_inline="$new_flag"
680        else
681          sim_inline="$sim_inline $new_flag"
682        fi
683      done;;
684 esac
685 if test x"$silent" != x"yes" && test x"$sim_inline" != x""; then
686   echo "Setting inline flags = $sim_inline" 6>&1
687 fi],[
688 if test "x$cross_compiling" = "xno"; then
689   if test x"$GCC" != "x" -a x"${default_sim_inline}" != "x" ; then
690     sim_inline="${default_sim_inline}"
691     if test x"$silent" != x"yes"; then
692       echo "Setting inline flags = $sim_inline" 6>&1
693     fi
694   else
695     sim_inline=""
696   fi
697 else
698   sim_inline="-DDEFAULT_INLINE=0"
699 fi])dnl
700 ])
701 AC_SUBST(sim_inline)
702
703
704 AC_DEFUN([SIM_AC_OPTION_PACKAGES],
705 [
706 AC_ARG_ENABLE(sim-packages,
707 [  --enable-sim-packages=list           Specify the packages to be included in the build.],
708 [packages=disklabel
709 case "${enableval}" in
710   yes)  ;;
711   no)   AC_MSG_ERROR("List of packages must be specified for --enable-sim-packages"); packages="";;
712   ,*)   packages="${packages}${enableval}";;
713   *,)   packages="${enableval}${packages}";;
714   *)    packages="${enableval}"'';;
715 esac
716 sim_pk_src=`echo $packages | sed -e 's/,/.c pk_/g' -e 's/^/pk_/' -e 's/$/.c/'`
717 sim_pk_obj=`echo $sim_pk_src | sed -e 's/\.c/.o/g'`
718 if test x"$silent" != x"yes" && test x"$packages" != x""; then
719   echo "Setting packages to $sim_pk_src, $sim_pk_obj"
720 fi],[packages=disklabel
721 sim_pk_src=`echo $packages | sed -e 's/,/.c pk_/g' -e 's/^/pk_/' -e 's/$/.c/'`
722 sim_pk_obj=`echo $sim_pk_src | sed -e 's/\.c/.o/g'`
723 if test x"$silent" != x"yes"; then
724   echo "Setting packages to $sim_pk_src, $sim_pk_obj"
725 fi])dnl
726 ])
727 AC_SUBST(sim_packages)
728
729
730 AC_DEFUN([SIM_AC_OPTION_REGPARM],
731 [
732 AC_ARG_ENABLE(sim-regparm,
733 [  --enable-sim-regparm=nr-parm         Pass parameters in registers instead of on the stack - x86/GCC specific.],
734 [case "${enableval}" in
735   0*|1*|2*|3*|4*|5*|6*|7*|8*|9*) sim_regparm="-DWITH_REGPARM=${enableval}";;
736   no)                            sim_regparm="" ;;
737   yes)                           sim_regparm="-DWITH_REGPARM=3";;
738   *)   AC_MSG_ERROR("Unknown value $enableval for --enable-sim-regparm"); sim_regparm="";;
739 esac
740 if test x"$silent" != x"yes" && test x"$sim_regparm" != x""; then
741   echo "Setting regparm flags = $sim_regparm" 6>&1
742 fi],[sim_regparm=""])dnl
743 ])
744 AC_SUBST(sim_regparm)
745
746
747 AC_DEFUN([SIM_AC_OPTION_RESERVED_BITS],
748 [
749 default_sim_reserved_bits="ifelse([$1],,1,[$1])"
750 AC_ARG_ENABLE(sim-reserved-bits,
751 [  --enable-sim-reserved-bits           Specify whether to check reserved bits in instruction.],
752 [case "${enableval}" in
753   yes)  sim_reserved_bits="-DWITH_RESERVED_BITS=1";;
754   no)   sim_reserved_bits="-DWITH_RESERVED_BITS=0";;
755   *)    AC_MSG_ERROR("--enable-sim-reserved-bits does not take a value"); sim_reserved_bits="";;
756 esac
757 if test x"$silent" != x"yes" && test x"$sim_reserved_bits" != x""; then
758   echo "Setting reserved flags = $sim_reserved_bits" 6>&1
759 fi],[sim_reserved_bits="-DWITH_RESERVED_BITS=${default_sim_reserved_bits}"])dnl
760 ])
761 AC_SUBST(sim_reserved_bits)
762
763
764 AC_DEFUN([SIM_AC_OPTION_SMP],
765 [
766 default_sim_smp="ifelse([$1],,5,[$1])"
767 AC_ARG_ENABLE(sim-smp,
768 [  --enable-sim-smp=n                   Specify number of processors to configure for (default ${default_sim_smp}).],
769 [case "${enableval}" in
770   yes)  sim_smp="-DWITH_SMP=5" ; sim_igen_smp="-N 5";;
771   no)   sim_smp="-DWITH_SMP=0" ; sim_igen_smp="-N 0";;
772   *)    sim_smp="-DWITH_SMP=$enableval" ; sim_igen_smp="-N $enableval";;
773 esac
774 if test x"$silent" != x"yes" && test x"$sim_smp" != x""; then
775   echo "Setting smp flags = $sim_smp" 6>&1
776 fi],[sim_smp="-DWITH_SMP=${default_sim_smp}" ; sim_igen_smp="-N ${default_sim_smp}"
777 if test x"$silent" != x"yes"; then
778   echo "Setting smp flags = $sim_smp" 6>&1
779 fi])dnl
780 ])
781 AC_SUBST(sim_smp)
782
783
784 AC_DEFUN([SIM_AC_OPTION_STDCALL],
785 [
786 AC_ARG_ENABLE(sim-stdcall,
787 [  --enable-sim-stdcall=type            Use an alternative function call/return mechanism - x86/GCC specific.],
788 [case "${enableval}" in
789   no)           sim_stdcall="" ;;
790   std*)         sim_stdcall="-DWITH_STDCALL=1";;
791   yes)          sim_stdcall="-DWITH_STDCALL=1";;
792   *)   AC_MSG_ERROR("Unknown value $enableval for --enable-sim-stdcall"); sim_stdcall="";;
793 esac
794 if test x"$silent" != x"yes" && test x"$sim_stdcall" != x""; then
795   echo "Setting function call flags = $sim_stdcall" 6>&1
796 fi],[sim_stdcall=""])dnl
797 ])
798 AC_SUBST(sim_stdcall)
799
800
801 AC_DEFUN([SIM_AC_OPTION_XOR_ENDIAN],
802 [
803 default_sim_xor_endian="ifelse([$1],,8,[$1])"
804 AC_ARG_ENABLE(sim-xor-endian,
805 [  --enable-sim-xor-endian=n            Specify number bytes involved in XOR bi-endian mode (default ${default_sim_xor_endian}).],
806 [case "${enableval}" in
807   yes)  sim_xor_endian="-DWITH_XOR_ENDIAN=8";;
808   no)   sim_xor_endian="-DWITH_XOR_ENDIAN=0";;
809   *)    sim_xor_endian="-DWITH_XOR_ENDIAN=$enableval";;
810 esac
811 if test x"$silent" != x"yes" && test x"$sim_xor_endian" != x""; then
812   echo "Setting xor-endian flag = $sim_xor_endian" 6>&1
813 fi],[sim_xor_endian="-DWITH_XOR_ENDIAN=${default_sim_xor_endian}"])dnl
814 ])
815 AC_SUBST(sim_xor_endian)
816
817
818 dnl --enable-build-warnings is for developers of the simulator.
819 dnl it enables extra GCC specific warnings.
820 AC_DEFUN([SIM_AC_OPTION_WARNINGS],
821 [
822 AC_ARG_ENABLE(werror,
823   AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]),
824   [case "${enableval}" in
825      yes | y) ERROR_ON_WARNING="yes" ;;
826      no | n)  ERROR_ON_WARNING="no" ;;
827      *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;;
828    esac])
829
830 # Enable -Werror by default when using gcc
831 if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
832     ERROR_ON_WARNING=yes
833 fi
834
835 WERROR_CFLAGS=""
836 if test "${ERROR_ON_WARNING}" = yes ; then
837 # NOTE: Disabled in the sim dir due to most sims generating warnings.
838 #    WERROR_CFLAGS="-Werror"
839      true
840 fi
841
842 build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
843 -Wpointer-sign \
844 -Wno-unused -Wunused-value -Wunused-function \
845 -Wno-switch -Wno-char-subscripts -Wmissing-prototypes
846 -Wdeclaration-after-statement -Wempty-body -Wmissing-parameter-type \
847 -Wold-style-declaration -Wold-style-definition"
848
849 # Enable -Wno-format by default when using gcc on mingw since many
850 # GCC versions complain about %I64.
851 case "${host}" in
852   *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
853   *) build_warnings="$build_warnings -Wformat-nonliteral" ;;
854 esac
855
856 AC_ARG_ENABLE(build-warnings,
857 AS_HELP_STRING([--enable-build-warnings], [enable build-time compiler warnings if gcc is used]),
858 [case "${enableval}" in
859   yes)  ;;
860   no)   build_warnings="-w";;
861   ,*)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
862         build_warnings="${build_warnings} ${t}";;
863   *,)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
864         build_warnings="${t} ${build_warnings}";;
865   *)    build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
866 esac
867 if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
868   echo "Setting compiler warning flags = $build_warnings" 6>&1
869 fi])dnl
870 AC_ARG_ENABLE(sim-build-warnings,
871 AS_HELP_STRING([--enable-sim-build-warnings], [enable SIM specific build-time compiler warnings if gcc is used]),
872 [case "${enableval}" in
873   yes)  ;;
874   no)   build_warnings="-w";;
875   ,*)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
876         build_warnings="${build_warnings} ${t}";;
877   *,)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
878         build_warnings="${t} ${build_warnings}";;
879   *)    build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
880 esac
881 if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
882   echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1
883 fi])dnl
884 WARN_CFLAGS=""
885 if test "x${build_warnings}" != x -a "x$GCC" = xyes
886 then
887     AC_MSG_CHECKING(compiler warning flags)
888     # Separate out the -Werror flag as some files just cannot be
889     # compiled with it enabled.
890     for w in ${build_warnings}; do
891         case $w in
892         -Werr*) WERROR_CFLAGS=-Werror ;;
893         *) # Check that GCC accepts it
894             saved_CFLAGS="$CFLAGS"
895             CFLAGS="$CFLAGS $w"
896             AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",)
897             CFLAGS="$saved_CFLAGS"
898         esac
899     done
900     AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS})
901 fi
902 ])
903 AC_SUBST(WARN_CFLAGS)
904 AC_SUBST(WERROR_CFLAGS)
905
906
907 dnl Generate the Makefile in a target specific directory.
908 dnl Substitutions aren't performed on the file in AC_SUBST_FILE,
909 dnl so this is a cover macro to tuck the details away of how we cope.
910 dnl We cope by having autoconf generate two files and then merge them into
911 dnl one afterwards.  The two pieces of the common fragment are inserted into
912 dnl the target's fragment at the appropriate points.
913
914 AC_DEFUN([SIM_AC_OUTPUT],
915 [
916 AC_LINK_FILES($sim_link_files, $sim_link_links)
917 dnl Make @cgen_breaks@ non-null only if the sim uses CGEN.
918 cgen_breaks=""
919 if grep CGEN_MAINT $srcdir/Makefile.in >/dev/null; then
920 cgen_breaks="break cgen_rtx_error";
921 fi
922 AC_SUBST(cgen_breaks)
923 AC_CONFIG_FILES(Makefile.sim:Makefile.in)
924 AC_CONFIG_FILES(Make-common.sim:../common/Make-common.in)
925 AC_CONFIG_FILES(.gdbinit:../common/gdbinit.in)
926 AC_CONFIG_COMMANDS([Makefile],
927 [echo "Merging Makefile.sim+Make-common.sim into Makefile ..."
928  rm -f Makesim1.tmp Makesim2.tmp Makefile
929  sed -n -e '/^## COMMON_PRE_/,/^## End COMMON_PRE_/ p' <Make-common.sim >Makesim1.tmp
930  sed -n -e '/^## COMMON_POST_/,/^## End COMMON_POST_/ p' <Make-common.sim >Makesim2.tmp
931  sed -e '/^## COMMON_PRE_/ r Makesim1.tmp' \
932         -e '/^## COMMON_POST_/ r Makesim2.tmp' \
933         <Makefile.sim >Makefile
934  rm -f Makefile.sim Make-common.sim Makesim1.tmp Makesim2.tmp
935 ])
936 AC_CONFIG_COMMANDS([stamp-h], [echo > stamp-h])
937 AC_OUTPUT
938 ])
939
940 sinclude(../../config/gettext-sister.m4)
941 sinclude(../../config/acx.m4)
942
943 dnl --enable-cgen-maint support
944 AC_DEFUN([SIM_AC_OPTION_CGEN_MAINT],
945 [
946 cgen_maint=no
947 dnl Default is to use one in build tree.
948 cgen=guile
949 cgendir='$(srcdir)/../../cgen'
950 dnl Having --enable-maintainer-mode take arguments is another way to go.
951 dnl ??? One can argue --with is more appropriate if one wants to specify
952 dnl a directory name, but what we're doing here is an enable/disable kind
953 dnl of thing and specifying both --enable and --with is klunky.
954 dnl If you reeely want this to be --with, go ahead and change it.
955 AC_ARG_ENABLE(cgen-maint,
956 [  --enable-cgen-maint[=DIR]    build cgen generated files],
957 [case "${enableval}" in
958   yes)  cgen_maint=yes ;;
959   no)   cgen_maint=no ;;
960   *)
961         # argument is cgen install directory (not implemented yet).
962         # Having a `share' directory might be more appropriate for the .scm,
963         # .cpu, etc. files.
964         cgendir=${cgen_maint}/lib/cgen
965         cgen=guile
966         ;;
967 esac])dnl
968 dnl AM_CONDITIONAL(CGEN_MAINT, test x${cgen_maint} != xno)
969 if test x${cgen_maint} != xno ; then
970   CGEN_MAINT=''
971 else
972   CGEN_MAINT='#'
973 fi
974 AC_SUBST(CGEN_MAINT)
975 AC_SUBST(cgendir)
976 AC_SUBST(cgen)
977 ])