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