1 # This file contains common code used by all simulators.
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.
8 # The simulator's configure.in should look like:
10 # dnl Process this file with autoconf to produce a configure script.
12 # AC_INIT(Makefile.in)
13 # sinclude(../common/aclocal.m4)
17 # ... target specific stuff ...
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])
32 AC_DEFUN([SIM_AC_COMMON],
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)
38 AC_USE_SYSTEM_EXTENSIONS
42 # Put a plausible default for CC_FOR_BUILD in Makefile.
43 if test "x$cross_compiling" = "xno"; then
48 AC_SUBST(CC_FOR_BUILD)
56 dnl Pull in the target configuration file directly.
57 AH_BOTTOM([#include "tconfig.h"])
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
63 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package. ])
66 # Dependency checking.
68 ZW_PROG_COMPILER_DEPENDENCIES([CC])
70 # Check for the 'make' the user wants to use.
71 AC_CHECK_PROGS(MAKE, make)
73 case "`$MAKE --version 2>&1 | sed 1q`" in
78 AM_CONDITIONAL(GMAKE, test "$MAKE_IS_GNU" = yes)
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.
83 ZW_GNU_GETTEXT_SISTER_DIR(../../intl)
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)
94 # Check for socket libraries
95 AC_CHECK_LIB(socket, bind)
96 AC_CHECK_LIB(nsl, gethostbyname)
98 # BFD conditionally uses zlib, so we must link it in if libbfd does, by
99 # using the same condition.
102 # BFD uses libdl when when plugins enabled.
104 AM_CONDITIONAL(PLUGINS, test "$plugins" = yes)
106 AC_SUBST(lt_cv_dlopen_libs)
108 . ${srcdir}/../../bfd/configure.host
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.
117 dnl We don't use automake, but we still want to support
118 dnl --enable-maintainer-mode.
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="";;
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
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="";;
143 *) sim_cflags=`echo "${enableval}" | sed -e "s/,/ /g"`;;
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
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})'";;
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
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="";;
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
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
186 AC_ARG_ENABLE(sim-trace,
187 [ --enable-sim-trace=opts Enable tracing flags],
188 [case "${enableval}" in
189 yes) sim_trace="-DTRACE=1 -DWITH_TRACE=-1";;
190 no) sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
192 sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
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"
199 sim_trace="${sim_trace}|TRACE_$x"
202 sim_trace="$sim_trace)'" ;;
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
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";;
221 sim_profile="-DPROFILE='(${enableval})' -DWITH_PROFILE='(${enableval})'";;
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"
228 sim_profile="${sim_profile}|PROFILE_$x"
231 sim_profile="$sim_profile)'" ;;
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)
238 ACX_PKGVERSION([GDB])
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])
243 dnl Types used by common code
246 dnl Detect exe extension
249 dnl These are available to append to as desired.
253 # targ-vals.def points to the libc macro description file.
255 *-*-*) TARG_VALS_DEF=../common/nltvals.def ;;
257 sim_link_files="${sim_link_files} ${TARG_VALS_DEF}"
258 sim_link_links="${sim_link_links} targ-vals.def"
260 ]) dnl End of SIM_AC_COMMON
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.in file between the SIM_AC_COMMON
267 dnl and SIM_AC_OUTPUT lines.
270 dnl Specify the running environment.
271 dnl If the simulator invokes this in its configure.in 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
275 dnl ??? Until there is demonstrable value in doing something more complicated,
277 AC_DEFUN([SIM_AC_OPTION_ENVIRONMENT],
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");
289 if test x"$silent" != x"yes" && test x"$sim_environment" != x""; then
290 echo "Setting sim environment = $sim_environment" 6>&1
292 [sim_environment="-DWITH_ENVIRONMENT=ALL_ENVIRONMENT"])dnl
294 AC_SUBST(sim_environment)
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]"
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}"
314 if test x"$default_alignment" != x; then
315 sim_alignment="-DWITH_ALIGNMENT=${default_alignment}"
317 echo "No hard-wired alignment for target $target" 1>&6
318 sim_alignment="-DWITH_ALIGNMENT=0"
321 no) if test x"$default_alignment" != x; then
322 sim_alignment="-DWITH_DEFAULT_ALIGNMENT=${default_alignment}"
324 if test x"$wire_alignment" != x; then
325 sim_alignment="-DWITH_DEFAULT_ALIGNMENT=${wire_alignment}"
327 echo "No default alignment for target $target" 1>&6
328 sim_alignment="-DWITH_DEFAULT_ALIGNMENT=0"
331 *) AC_MSG_ERROR("Unknown value $enableval passed to --enable-sim-alignment"); sim_alignment="";;
333 if test x"$silent" != x"yes" && test x"$sim_alignment" != x""; then
334 echo "Setting alignment flags = $sim_alignment" 6>&1
336 [if test x"$default_alignment" != x; then
337 sim_alignment="-DWITH_DEFAULT_ALIGNMENT=${default_alignment}"
339 if test x"$wire_alignment" != x; then
340 sim_alignment="-DWITH_ALIGNMENT=${wire_alignment}"
346 AC_SUBST(sim_alignment)
349 dnl Conditionally compile in assertion statements.
350 AC_DEFUN([SIM_AC_OPTION_ASSERT],
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="";;
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
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]"
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).],
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"
390 sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=0"
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"
395 sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=64 -DWITH_TARGET_WORD_MSB=0"
397 *) AC_MSG_ERROR("--enable-sim-bitsize was given $enableval. Expected 32 or 64") ;;
400 tmp=`echo "${enableval}" | sed -e "s/^[[0-9]]*,*[[0-9]]*,*//"`
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") ;;
408 tmp=`echo "${enableval}" | sed -e "s/^[[0-9]]*,*[[0-9*]]*,*[[0-9]]*,*//"`
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") ;;
415 if test x"$silent" != x"yes" && test x"$sim_bitsize" != x""; then
416 echo "Setting bitsize flags = $sim_bitsize" 6>&1
419 if test x"$wire_word_bitsize" != x; then
420 sim_bitsize="$sim_bitsize -DWITH_TARGET_WORD_BITSIZE=$wire_word_bitsize"
422 if test x"$wire_word_msb" != x; then
423 sim_bitsize="$sim_bitsize -DWITH_TARGET_WORD_MSB=$wire_word_msb"
425 if test x"$wire_address_bitsize" != x; then
426 sim_bitsize="$sim_bitsize -DWITH_TARGET_ADDRESS_BITSIZE=$wire_address_bitsize"
428 if test x"$wire_cell_bitsize" != x; then
429 sim_bitsize="$sim_bitsize -DWITH_TARGET_CELL_BITSIZE=$wire_cell_bitsize"
432 AC_SUBST(sim_bitsize)
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],
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}"
452 if test x"$default_endian" != x; then
453 sim_endian="-DWITH_TARGET_BYTE_ORDER=${default_endian}"
455 echo "No hard-wired endian for target $target" 1>&6
456 sim_endian="-DWITH_TARGET_BYTE_ORDER=0"
459 no) if test x"$default_endian" != x; then
460 sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=${default_endian}"
462 if test x"$wire_endian" != x; then
463 sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=${wire_endian}"
465 echo "No default endian for target $target" 1>&6
466 sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=0"
469 *) AC_MSG_ERROR("Unknown value $enableval for --enable-sim-endian"); sim_endian="";;
471 if test x"$silent" != x"yes" && test x"$sim_endian" != x""; then
472 echo "Setting endian flags = $sim_endian" 6>&1
474 [if test x"$default_endian" != x; then
475 sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=${default_endian}"
477 if test x"$wire_endian" != x; then
478 sim_endian="-DWITH_TARGET_BYTE_ORDER=${wire_endian}"
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],
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="";;
500 if test x"$silent" != x"yes" && test x"$sim_hostendian" != x""; then
501 echo "Setting hostendian flags = $sim_hostendian" 6>&1
503 if test "x$cross_compiling" = "xno"; then
505 if test $ac_cv_c_bigendian = yes; then
506 sim_hostendian="-DWITH_HOST_BYTE_ORDER=BIG_ENDIAN"
508 sim_hostendian="-DWITH_HOST_BYTE_ORDER=LITTLE_ENDIAN"
511 sim_hostendian="-DWITH_HOST_BYTE_ORDER=0"
514 AC_SUBST(sim_hostendian)
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],
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="";;
535 if test x"$silent" != x"yes" && test x"$sim_float" != x""; then
536 echo "Setting float flags = $sim_float" 6>&1
539 if test x"${default_sim_float}" != x""; then
540 sim_float="-DWITH_FLOATING_POINT=${default_sim_float}"
542 if test x"${default_sim_float_bitsize}" != x""; then
543 sim_float="$sim_float -DWITH_TARGET_FLOATING_POINT_BITSIZE=${default_sim_float_bitsize}"
550 dnl The argument is the default cache size if none is specified.
551 AC_DEFUN([SIM_AC_OPTION_SCACHE],
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");
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}"])
570 dnl The argument is the default model if none is specified.
571 AC_DEFUN([SIM_AC_OPTION_DEFAULT_MODEL],
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}\"'";;
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}\"'"])
584 AC_SUBST(sim_default_model)
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],
593 if test x"[$1]" != x"no"; then
594 enable_sim_hardware=yes
596 enable_sim_hardware=no
602 hardware="cfi core pal glue"
604 hardware="$hardware [$3]"
606 sim_hw_cflags="-DWITH_HW=1"
608 sim_hw_objs="\$(SIM_COMMON_HW_OBJS) `echo $sim_hw | sed -e 's/\([[^ ]][[^ ]]*\)/dv-\1.o/g'`"
610 AC_ARG_ENABLE(sim-hardware,
611 [AS_HELP_STRING([--enable-sim-hardware=LIST],
612 [Specify the hardware to be included in the build.])])
613 case ${enable_sim_hardware} in
615 ,*) hardware="${hardware} `echo ${enableval} | sed -e 's/,/ /'`";;
616 *,) hardware="`echo ${enableval} | sed -e 's/,/ /'` ${hardware}";;
617 *) hardware="`echo ${enableval} | sed -e 's/,/ /'`"'';;
620 if test "$enable_sim_hardware" = no; then
622 sim_hw_cflags="-DWITH_HW=0"
625 sim_hw_cflags="-DWITH_HW=1"
628 sim_hw_objs="\$(SIM_COMMON_HW_OBJS)"
629 for i in $hardware ; do
632 *) sim_hw="$sim_hw $i" ; sim_hw_objs="$sim_hw_objs dv-$i.o";;
635 # mingw does not support sockser
638 *) # TODO: We don't add dv-sockser to sim_hw as it is not a "real" device
639 # that you instatiate. Instead, other code will call into it directly.
640 # At some point, we should convert it over.
641 sim_hw_objs="$sim_hw_objs dv-sockser.o"
643 [HAVE_DV_SOCKSER], 1, [Define if dv-sockser is usable.])
646 if test x"$silent" != x"yes"; then
647 echo "Setting hardware to $sim_hw_cflags, $sim_hw, $sim_hw_objs"
649 dnl Some devices require extra libraries.
650 case " $hardware " in
651 *" cfi "*) AC_CHECK_LIB(m, log2);;
655 AC_SUBST(sim_hw_cflags)
656 AC_SUBST(sim_hw_objs)
660 dnl --enable-sim-inline is for users that wish to ramp up the simulator's
661 dnl performance by inlining functions.
662 dnl Guarantee that unconfigured simulators do not do any inlining
663 sim_inline="-DDEFAULT_INLINE=0"
664 AC_DEFUN([SIM_AC_OPTION_INLINE],
666 default_sim_inline="ifelse([$1],,,-DDEFAULT_INLINE=[$1])"
667 AC_ARG_ENABLE(sim-inline,
668 [ --enable-sim-inline=inlines Specify which functions should be inlined.],
671 no) sim_inline="-DDEFAULT_INLINE=0";;
672 0) sim_inline="-DDEFAULT_INLINE=0";;
673 yes | 2) sim_inline="-DDEFAULT_INLINE=ALL_C_INLINE";;
674 1) sim_inline="-DDEFAULT_INLINE=INLINE_LOCALS";;
675 *) for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
678 *_INLINE=*) new_flag="-D$x";;
679 *=*) new_flag=`echo "$x" | sed -e "s/=/_INLINE=/" -e "s/^/-D/"`;;
680 *_INLINE) new_flag="-D$x=ALL_C_INLINE";;
681 *) new_flag="-D$x""_INLINE=ALL_C_INLINE";;
683 if test x"$sim_inline" = x""; then
684 sim_inline="$new_flag"
686 sim_inline="$sim_inline $new_flag"
690 if test x"$silent" != x"yes" && test x"$sim_inline" != x""; then
691 echo "Setting inline flags = $sim_inline" 6>&1
693 if test "x$cross_compiling" = "xno"; then
694 if test x"$GCC" != "x" -a x"${default_sim_inline}" != "x" ; then
695 sim_inline="${default_sim_inline}"
696 if test x"$silent" != x"yes"; then
697 echo "Setting inline flags = $sim_inline" 6>&1
703 sim_inline="-DDEFAULT_INLINE=0"
709 AC_DEFUN([SIM_AC_OPTION_PACKAGES],
711 AC_ARG_ENABLE(sim-packages,
712 [ --enable-sim-packages=list Specify the packages to be included in the build.],
714 case "${enableval}" in
716 no) AC_MSG_ERROR("List of packages must be specified for --enable-sim-packages"); packages="";;
717 ,*) packages="${packages}${enableval}";;
718 *,) packages="${enableval}${packages}";;
719 *) packages="${enableval}"'';;
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" && test x"$packages" != x""; then
724 echo "Setting packages to $sim_pk_src, $sim_pk_obj"
725 fi],[packages=disklabel
726 sim_pk_src=`echo $packages | sed -e 's/,/.c pk_/g' -e 's/^/pk_/' -e 's/$/.c/'`
727 sim_pk_obj=`echo $sim_pk_src | sed -e 's/\.c/.o/g'`
728 if test x"$silent" != x"yes"; then
729 echo "Setting packages to $sim_pk_src, $sim_pk_obj"
732 AC_SUBST(sim_packages)
735 AC_DEFUN([SIM_AC_OPTION_REGPARM],
737 AC_ARG_ENABLE(sim-regparm,
738 [ --enable-sim-regparm=nr-parm Pass parameters in registers instead of on the stack - x86/GCC specific.],
739 [case "${enableval}" in
740 0*|1*|2*|3*|4*|5*|6*|7*|8*|9*) sim_regparm="-DWITH_REGPARM=${enableval}";;
741 no) sim_regparm="" ;;
742 yes) sim_regparm="-DWITH_REGPARM=3";;
743 *) AC_MSG_ERROR("Unknown value $enableval for --enable-sim-regparm"); sim_regparm="";;
745 if test x"$silent" != x"yes" && test x"$sim_regparm" != x""; then
746 echo "Setting regparm flags = $sim_regparm" 6>&1
747 fi],[sim_regparm=""])dnl
749 AC_SUBST(sim_regparm)
752 AC_DEFUN([SIM_AC_OPTION_RESERVED_BITS],
754 default_sim_reserved_bits="ifelse([$1],,1,[$1])"
755 AC_ARG_ENABLE(sim-reserved-bits,
756 [ --enable-sim-reserved-bits Specify whether to check reserved bits in instruction.],
757 [case "${enableval}" in
758 yes) sim_reserved_bits="-DWITH_RESERVED_BITS=1";;
759 no) sim_reserved_bits="-DWITH_RESERVED_BITS=0";;
760 *) AC_MSG_ERROR("--enable-sim-reserved-bits does not take a value"); sim_reserved_bits="";;
762 if test x"$silent" != x"yes" && test x"$sim_reserved_bits" != x""; then
763 echo "Setting reserved flags = $sim_reserved_bits" 6>&1
764 fi],[sim_reserved_bits="-DWITH_RESERVED_BITS=${default_sim_reserved_bits}"])dnl
766 AC_SUBST(sim_reserved_bits)
769 AC_DEFUN([SIM_AC_OPTION_SMP],
771 default_sim_smp="ifelse([$1],,5,[$1])"
772 AC_ARG_ENABLE(sim-smp,
773 [ --enable-sim-smp=n Specify number of processors to configure for (default ${default_sim_smp}).],
774 [case "${enableval}" in
775 yes) sim_smp="-DWITH_SMP=5" ; sim_igen_smp="-N 5";;
776 no) sim_smp="-DWITH_SMP=0" ; sim_igen_smp="-N 0";;
777 *) sim_smp="-DWITH_SMP=$enableval" ; sim_igen_smp="-N $enableval";;
779 if test x"$silent" != x"yes" && test x"$sim_smp" != x""; then
780 echo "Setting smp flags = $sim_smp" 6>&1
781 fi],[sim_smp="-DWITH_SMP=${default_sim_smp}" ; sim_igen_smp="-N ${default_sim_smp}"
782 if test x"$silent" != x"yes"; then
783 echo "Setting smp flags = $sim_smp" 6>&1
789 AC_DEFUN([SIM_AC_OPTION_STDCALL],
791 AC_ARG_ENABLE(sim-stdcall,
792 [ --enable-sim-stdcall=type Use an alternative function call/return mechanism - x86/GCC specific.],
793 [case "${enableval}" in
794 no) sim_stdcall="" ;;
795 std*) sim_stdcall="-DWITH_STDCALL=1";;
796 yes) sim_stdcall="-DWITH_STDCALL=1";;
797 *) AC_MSG_ERROR("Unknown value $enableval for --enable-sim-stdcall"); sim_stdcall="";;
799 if test x"$silent" != x"yes" && test x"$sim_stdcall" != x""; then
800 echo "Setting function call flags = $sim_stdcall" 6>&1
801 fi],[sim_stdcall=""])dnl
803 AC_SUBST(sim_stdcall)
806 AC_DEFUN([SIM_AC_OPTION_XOR_ENDIAN],
808 default_sim_xor_endian="ifelse([$1],,8,[$1])"
809 AC_ARG_ENABLE(sim-xor-endian,
810 [ --enable-sim-xor-endian=n Specify number bytes involved in XOR bi-endian mode (default ${default_sim_xor_endian}).],
811 [case "${enableval}" in
812 yes) sim_xor_endian="-DWITH_XOR_ENDIAN=8";;
813 no) sim_xor_endian="-DWITH_XOR_ENDIAN=0";;
814 *) sim_xor_endian="-DWITH_XOR_ENDIAN=$enableval";;
816 if test x"$silent" != x"yes" && test x"$sim_xor_endian" != x""; then
817 echo "Setting xor-endian flag = $sim_xor_endian" 6>&1
818 fi],[sim_xor_endian="-DWITH_XOR_ENDIAN=${default_sim_xor_endian}"])dnl
820 AC_SUBST(sim_xor_endian)
823 dnl --enable-build-warnings is for developers of the simulator.
824 dnl it enables extra GCC specific warnings.
825 AC_DEFUN([SIM_AC_OPTION_WARNINGS],
827 AC_ARG_ENABLE(werror,
828 AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]),
829 [case "${enableval}" in
830 yes | y) ERROR_ON_WARNING="yes" ;;
831 no | n) ERROR_ON_WARNING="no" ;;
832 *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;;
835 # Enable -Werror by default when using gcc
836 if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
841 if test "${ERROR_ON_WARNING}" = yes ; then
842 # NOTE: Disabled in the sim dir due to most sims generating warnings.
843 # WERROR_CFLAGS="-Werror"
847 build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
849 -Wno-unused -Wunused-value -Wunused-function \
850 -Wno-switch -Wno-char-subscripts -Wmissing-prototypes
851 -Wdeclaration-after-statement -Wempty-body -Wmissing-parameter-type \
852 -Wold-style-declaration -Wold-style-definition"
854 # Enable -Wno-format by default when using gcc on mingw since many
855 # GCC versions complain about %I64.
857 *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
858 *) build_warnings="$build_warnings -Wformat-nonliteral" ;;
861 AC_ARG_ENABLE(build-warnings,
862 AS_HELP_STRING([--enable-build-warnings], [enable build-time compiler warnings if gcc is used]),
863 [case "${enableval}" in
865 no) build_warnings="-w";;
866 ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"`
867 build_warnings="${build_warnings} ${t}";;
868 *,) t=`echo "${enableval}" | sed -e "s/,/ /g"`
869 build_warnings="${t} ${build_warnings}";;
870 *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
872 if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
873 echo "Setting compiler warning flags = $build_warnings" 6>&1
875 AC_ARG_ENABLE(sim-build-warnings,
876 AS_HELP_STRING([--enable-sim-build-warnings], [enable SIM specific build-time compiler warnings if gcc is used]),
877 [case "${enableval}" in
879 no) build_warnings="-w";;
880 ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"`
881 build_warnings="${build_warnings} ${t}";;
882 *,) t=`echo "${enableval}" | sed -e "s/,/ /g"`
883 build_warnings="${t} ${build_warnings}";;
884 *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
886 if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
887 echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1
890 if test "x${build_warnings}" != x -a "x$GCC" = xyes
892 AC_MSG_CHECKING(compiler warning flags)
893 # Separate out the -Werror flag as some files just cannot be
894 # compiled with it enabled.
895 for w in ${build_warnings}; do
897 -Werr*) WERROR_CFLAGS=-Werror ;;
898 *) # Check that GCC accepts it
899 saved_CFLAGS="$CFLAGS"
901 AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",)
902 CFLAGS="$saved_CFLAGS"
905 AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS})
908 AC_SUBST(WARN_CFLAGS)
909 AC_SUBST(WERROR_CFLAGS)
912 dnl Generate the Makefile in a target specific directory.
913 dnl Substitutions aren't performed on the file in AC_SUBST_FILE,
914 dnl so this is a cover macro to tuck the details away of how we cope.
915 dnl We cope by having autoconf generate two files and then merge them into
916 dnl one afterwards. The two pieces of the common fragment are inserted into
917 dnl the target's fragment at the appropriate points.
919 AC_DEFUN([SIM_AC_OUTPUT],
921 AC_LINK_FILES($sim_link_files, $sim_link_links)
922 dnl Make @cgen_breaks@ non-null only if the sim uses CGEN.
924 if grep CGEN_MAINT $srcdir/Makefile.in >/dev/null; then
925 cgen_breaks="break cgen_rtx_error";
927 AC_SUBST(cgen_breaks)
928 AC_CONFIG_FILES(Makefile.sim:Makefile.in)
929 AC_CONFIG_FILES(Make-common.sim:../common/Make-common.in)
930 AC_CONFIG_FILES(.gdbinit:../common/gdbinit.in)
931 AC_CONFIG_COMMANDS([Makefile],
932 [echo "Merging Makefile.sim+Make-common.sim into Makefile ..."
933 rm -f Makesim1.tmp Makesim2.tmp Makefile
934 sed -n -e '/^## COMMON_PRE_/,/^## End COMMON_PRE_/ p' <Make-common.sim >Makesim1.tmp
935 sed -n -e '/^## COMMON_POST_/,/^## End COMMON_POST_/ p' <Make-common.sim >Makesim2.tmp
936 sed -e '/^## COMMON_PRE_/ r Makesim1.tmp' \
937 -e '/^## COMMON_POST_/ r Makesim2.tmp' \
938 <Makefile.sim >Makefile
939 rm -f Makefile.sim Make-common.sim Makesim1.tmp Makesim2.tmp
941 AC_CONFIG_COMMANDS([stamp-h], [echo > stamp-h])
945 sinclude(../../config/gettext-sister.m4)
946 sinclude(../../config/acx.m4)
948 dnl --enable-cgen-maint support
949 AC_DEFUN([SIM_AC_OPTION_CGEN_MAINT],
952 dnl Default is to use one in build tree.
954 cgendir='$(srcdir)/../../cgen'
955 dnl Having --enable-maintainer-mode take arguments is another way to go.
956 dnl ??? One can argue --with is more appropriate if one wants to specify
957 dnl a directory name, but what we're doing here is an enable/disable kind
958 dnl of thing and specifying both --enable and --with is klunky.
959 dnl If you reeely want this to be --with, go ahead and change it.
960 AC_ARG_ENABLE(cgen-maint,
961 [ --enable-cgen-maint[=DIR] build cgen generated files],
962 [case "${enableval}" in
963 yes) cgen_maint=yes ;;
966 # argument is cgen install directory (not implemented yet).
967 # Having a `share' directory might be more appropriate for the .scm,
969 cgendir=${cgen_maint}/lib/cgen
973 dnl AM_CONDITIONAL(CGEN_MAINT, test x${cgen_maint} != xno)
974 if test x${cgen_maint} != xno ; then