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