d1cbd70abb
Fix numerous problems with PENDING_* code. In old gencode simulator, don't double tick each cycle. Add BREAK instruction to MIPS16 gencode simulator.
520 lines
16 KiB
Text
520 lines
16 KiB
Text
dnl Process this file with autoconf to produce a configure script.
|
|
sinclude(../common/aclocal.m4)
|
|
AC_PREREQ(2.5)dnl
|
|
AC_INIT(Makefile.in)
|
|
|
|
SIM_AC_COMMON
|
|
|
|
dnl Options available in this module
|
|
SIM_AC_OPTION_INLINE()
|
|
SIM_AC_OPTION_ALIGNMENT(NONSTRICT_ALIGNMENT)
|
|
SIM_AC_OPTION_HOSTENDIAN
|
|
SIM_AC_OPTION_WARNINGS
|
|
|
|
# Ensure a reasonable default simulator is constructed: (DEPRECATED)
|
|
case "${target}" in
|
|
# start-sanitize-tx19
|
|
mipstx19*-*-*) SIMCONF="-mips1 -mcpu=r1900 -mno-fp --warnings";;
|
|
# end-sanitize-tx19
|
|
# start-sanitize-tx49
|
|
mips64tx49*-*-*) SIMCONF="-mips3 --warnings -mcpu=r4900";;
|
|
# end-sanitize-tx49
|
|
# start-sanitize-r5900
|
|
mips64r59*-*-*) SIMCONF="-mips3 --warnings -mcpu=r5900";;
|
|
# end-sanitize-r5900
|
|
mips64vr4100-*-*) SIMCOMF="-mips0 -mcpu=r4100 -mgp64 --warnings" ;;
|
|
mips64*-*-*) SIMCONF="-mips0 --warnings";;
|
|
mips16*-*-*) SIMCONF="-mips0 --warnings";;
|
|
mips*-*-*) SIMCONF="-mips2 --warnings";;
|
|
*) SIMCONF="-mips0 --warnings";;
|
|
esac
|
|
AC_SUBST(SIMCONF)
|
|
|
|
# DEPRECATED
|
|
#
|
|
# Instead of defining a `subtarget' macro, code should be checking
|
|
# the value of {STATE,CPU}_ARCHITECTURE to identify the architecture
|
|
# in question.
|
|
#
|
|
case "${target}" in
|
|
# start-sanitize-tx19
|
|
mipstx19*-*-*) SIM_SUBTARGET="-DSUBTARGET_R3900=1";;
|
|
# end-sanitize-tx19
|
|
mips*tx39*) SIM_SUBTARGET="-DSUBTARGET_R3900=1";;
|
|
*) SIM_SUBTARGET="";;
|
|
esac
|
|
AC_SUBST(SIM_SUBTARGET)
|
|
|
|
|
|
|
|
#
|
|
# Select the byte order of the target
|
|
#
|
|
mips_endian=
|
|
default_endian=
|
|
case "${target}" in
|
|
# start-sanitize-tx19
|
|
mipstx19*-*-*) default_endian=BIG_ENDIAN ;;
|
|
# end-sanitize-tx19
|
|
# start-sanitize-r5900
|
|
mips64r59*-*-*) mips_endian=LITTLE_ENDIAN ;;
|
|
# end-sanitize-r5900
|
|
mips64el*-*-*) mips_endian=LITTLE_ENDIAN ;;
|
|
mips64*-*-*) default_endian=BIG_ENDIAN ;;
|
|
mips16*-*-*) default_endian=BIG_ENDIAN ;;
|
|
mips*-*-*) default_endian=BIG_ENDIAN ;;
|
|
*) default_endian=BIG_ENDIAN ;;
|
|
esac
|
|
SIM_AC_OPTION_ENDIAN($mips_endian,$default_endian)
|
|
|
|
|
|
|
|
#
|
|
# Select the bitsize of the target
|
|
#
|
|
mips_addr_bitsize=
|
|
case "${target}" in
|
|
# start-sanitize-tx19
|
|
mipstx19*-*-*) mips_bitsize=32 ; mips_msb=31 ;;
|
|
# end-sanitize-tx19
|
|
# start-sanitize-r5900
|
|
mips64r59*-*-*) mips_bitsize=64 ; mips_msb=63 ; mips_addr_bitsize=32;;
|
|
# end-sanitize-r5900
|
|
# start-sanitize-sky
|
|
mips64*-sky*-*) mips_bitsize=64 ; mips_msb=63 ; mips_addr_bitsize=32;;
|
|
# end-sanitize-sky
|
|
mips64*-*-*) mips_bitsize=64 ; mips_msb=63 ;;
|
|
mips16*-*-*) mips_bitsize=64 ; mips_msb=63 ;;
|
|
mips*-*-*) mips_bitsize=32 ; mips_msb=31 ;;
|
|
*) mips_bitsize=64 ; mips_msb=63 ;;
|
|
esac
|
|
SIM_AC_OPTION_BITSIZE($mips_bitsize,$mips_msb,$mips_addr_bitsize)
|
|
|
|
|
|
|
|
#
|
|
# Select the floating hardware support of the target
|
|
#
|
|
mips_fpu=HARDWARE_FLOATING_POINT
|
|
mips_fpu_bitsize=
|
|
case "${target}" in
|
|
# start-sanitize-tx19
|
|
mipstx19*-*-*) mips_fpu=SOFT_FLOATING_POINT ;;
|
|
# end-sanitize-tx19
|
|
mips*tx39*) mips_fpu=HARD_FLOATING_POINT
|
|
mips_fpu_bitsize=32
|
|
;;
|
|
# start-sanitize-r5900
|
|
mips64r59*-*-*) mips_fpu=HARD_FLOATING_POINT ; mips_fpu_bitsize=32 ;;
|
|
# end-sanitize-r5900
|
|
# start-sanitize-sky
|
|
mips64*-sky*-*) mips_fpu=HARD_FLOATING_POINT ; mips_fpu_bitsize=32 ;;
|
|
# end-sanitize-sky
|
|
mips64*-*-*) mips_fpu=HARD_FLOATING_POINT ;;
|
|
mips16*-*-*) mips_fpu=HARD_FLOATING_POINT ;;
|
|
mips*-*-*) mips_fpu=HARD_FLOATING_POINT ; mips_fpu_bitsize=32 ;;
|
|
*) mips_fpu=HARD_FLOATING_POINT ;;
|
|
esac
|
|
SIM_AC_OPTION_FLOAT($mips_fpu,$mips_fpu_bitsize)
|
|
|
|
|
|
|
|
#
|
|
# Select the level of SMP support
|
|
#
|
|
case "${target}" in
|
|
# start-sanitize-r5900
|
|
mips64r59*-*-*) mips_smp=1 ;;
|
|
# end-sanitize-r5900
|
|
*) mips_smp=0 ;;
|
|
esac
|
|
SIM_AC_OPTION_SMP($mips_smp)
|
|
|
|
|
|
|
|
#
|
|
# Select the IGEN architecture
|
|
#
|
|
sim_use_gen=IGEN
|
|
sim_igen_machine="-M mipsIV"
|
|
sim_m16_machine="-M mips16"
|
|
sim_igen_filter="32,64,f"
|
|
sim_m16_filter="16"
|
|
case "${target}" in
|
|
# start-sanitize-tx19
|
|
mipstx19*-*-*) sim_default_gen=M16
|
|
sim_use_gen=M16
|
|
sim_igen_machine="-M tx19"
|
|
sim_m16_machine="-M tx19"
|
|
sim_igen_filter="32"
|
|
sim_m16_filter="16"
|
|
;;
|
|
# end-sanitize-tx19
|
|
mips*tx39*) sim_default_gen=IGEN
|
|
sim_use_gen=IGEN
|
|
sim_igen_filter="32,f"
|
|
sim_igen_machine="-M r3900"
|
|
;;
|
|
# start-sanitize-r5900
|
|
mips64r59*-*-*) sim_default_gen=IGEN
|
|
sim_use_gen=IGEN
|
|
sim_igen_machine="-M r5900"
|
|
;;
|
|
# end-sanitize-r5900
|
|
# start-sanitize-vr4320
|
|
mips64vr4320-*-*) sim_default_gen=IGEN
|
|
sim_use_gen=IGEN
|
|
sim_igen_machine="-M mipsIV,vr4320 -G gen-multi-sim=vr4320"
|
|
;;
|
|
# end-sanitize-vr4320
|
|
mips64vr43*-*-*) sim_default_gen=IGEN
|
|
sim_use_gen=IGEN
|
|
sim_igen_machine="-M mipsIV"
|
|
# start-sanitize-vr4320
|
|
sim_igen_machine="-M mipsIV,vr4320 -G gen-multi-sim=mipsIV"
|
|
# end-sanitize-vr4320
|
|
;;
|
|
# start-sanitize-cygnus
|
|
mips64vr54*-*-*) sim_default_gen=IGEN
|
|
sim_use_gen=IGEN
|
|
sim_igen_machine="-M vr5000,vr5400 -G gen-multi-sim=vr5400"
|
|
;;
|
|
# end-sanitize-cygnus
|
|
mips64vr5*-*-*) sim_default_gen=IGEN
|
|
sim_use_gen=IGEN
|
|
sim_igen_machine="-M vr5000"
|
|
# start-sanitize-cygnus
|
|
sim_igen_machine="-M vr5000,vr5400 -G gen-multi-sim=vr5000"
|
|
# end-sanitize-cygnus
|
|
;;
|
|
mips64vr4100-*-*) echo "NOTE: mips64vr4100 still uses gencode"
|
|
sim_use_gen=NO
|
|
;;
|
|
mips64*-*-*) sim_default_gen=IGEN
|
|
sim_igen_filter="32,64,f"
|
|
sim_use_gen=IGEN
|
|
;;
|
|
mips16*-*-*) sim_default_gen=M16
|
|
sim_igen_filter="32,64,f"
|
|
sim_m16_filter="16"
|
|
sim_use_igen=NO
|
|
;;
|
|
mips-lsi-*) echo "NOTE: mips-lsi-elf still uses gencode"
|
|
sim_use_gen=NO
|
|
;;
|
|
|
|
mips*-*-*) sim_default_gen=IGEN
|
|
sim_igen_filter="32,f"
|
|
sim_use_gen=IGEN
|
|
;;
|
|
esac
|
|
sim_igen_flags="-F ${sim_igen_filter} ${sim_igen_machine} ${sim_igen_smp}"
|
|
sim_m16_flags=" -F ${sim_m16_filter} ${sim_m16_machine} ${sim_igen_smp}"
|
|
AC_SUBST(sim_igen_flags)
|
|
AC_SUBST(sim_m16_flags)
|
|
|
|
|
|
|
|
#
|
|
# Enable igen
|
|
#
|
|
AC_ARG_ENABLE(sim-igen,
|
|
[ --enable-sim-igen=opts Enable IGEN simulator],
|
|
[case "${enableval}" in
|
|
yes) sim_gen="${sim_default_gen}";;
|
|
no) sim_gen=NO;;
|
|
16) sim_gen=M16;;
|
|
*) AC_MSG_ERROR("Unknown value $enableval passed to --enable-sim-igen"); sim_gen="";;
|
|
esac
|
|
if test x"$silent" != x"yes" && test x"$sim_gen" != x""; then
|
|
echo "Setting sim_igen = $sim_gen" 6>&1
|
|
fi],[sim_gen="${sim_use_gen}"])dnl
|
|
AC_SUBST(sim_gen)
|
|
|
|
|
|
#
|
|
# Add simulated hardware devices
|
|
#
|
|
hw_enabled=no
|
|
case "${target}" in
|
|
# start-sanitize-tx3904
|
|
mips*tx39*)
|
|
hw_enabled=yes
|
|
hw_extra_devices="tx3904cpu tx3904irc tx3904tmr tx3904sio"
|
|
mips_extra_objs="dv-sockser.o"
|
|
SIM_SUBTARGET="$SIM_SUBTARGET -DTARGET_TX3904=1"
|
|
;;
|
|
# end-sanitize-tx3904
|
|
# start-sanitize-sky
|
|
mips64r59*-sky-*)
|
|
mips_extra_objs='$(SIM_SKY_OBJS)'
|
|
SIM_SUBTARGET="-DTARGET_SKY -DWITH_DEVICES=1 -DDEVICE_INIT=1"
|
|
;;
|
|
mips64*-skyb-*)
|
|
mips_extra_objs='$(SIM_SKY_OBJS)'
|
|
SIM_SUBTARGET="-DTARGET_SKY -DTARGET_SKY_B -DWITH_DEVICES=1 -DDEVICE_INIT=1"
|
|
;;
|
|
# end-sanitize-sky
|
|
*)
|
|
mips_extra_objs=""
|
|
;;
|
|
esac
|
|
SIM_AC_OPTION_HARDWARE($hw_enabled,$hw_devices,$hw_extra_devices)
|
|
AC_SUBST(mips_extra_objs)
|
|
|
|
|
|
# Choose simulator engine
|
|
case "${target}" in
|
|
# start-sanitize-sky
|
|
mips64r59*-sky-*)
|
|
mips_igen_engine=""
|
|
;;
|
|
mips64*-skyb-*)
|
|
mips_igen_engine=""
|
|
;;
|
|
# end-sanitize-sky
|
|
*) mips_igen_engine="engine.o"
|
|
;;
|
|
esac
|
|
AC_SUBST(mips_igen_engine)
|
|
|
|
|
|
AC_PATH_X
|
|
mips_extra_libs=""
|
|
# start-sanitize-sky
|
|
# Enable GPU2 library
|
|
AC_ARG_WITH(sim-gpu2,
|
|
[ --with-sim-gpu2=path Use GPU2 library under given directory],
|
|
[if test -d "${withval}"
|
|
then
|
|
SIM_SUBTARGET="${SIM_SUBTARGET} -DSKY_GPU2 -I${withval}/include"
|
|
mips_extra_libs="-L${withval}/lib -lgpu2 -L${x_libraries} -lX11 -lXext"
|
|
WITH_GPU2="yes" ; export WITH_GPU2
|
|
|
|
# complex X/etc. detection; stolen shamelessly from tcl/tk/gdb configury. --angela
|
|
|
|
#--------------------------------------------------------------------
|
|
# Locate the X11 header files and the X11 library archive. Try
|
|
# the ac_path_x macro first, but if it doesn't find the X stuff
|
|
# (e.g. because there's no xmkmf program) then check through
|
|
# a list of possible directories. Under some conditions the
|
|
# autoconf macro will return an include directory that contains
|
|
# no include files, so double-check its result just to be safe.
|
|
#--------------------------------------------------------------------
|
|
|
|
AC_PATH_X
|
|
not_really_there=""
|
|
if test "$no_x" = ""; then
|
|
if test "$x_includes" = ""; then
|
|
AC_TRY_CPP([#include <X11/XIntrinsic.h>], , not_really_there="yes")
|
|
else
|
|
if test ! -r $x_includes/X11/Intrinsic.h; then
|
|
not_really_there="yes"
|
|
fi
|
|
fi
|
|
fi
|
|
if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
|
|
AC_MSG_CHECKING(for X11 header files)
|
|
XINCLUDES="# no special path needed"
|
|
AC_TRY_CPP([#include <X11/Intrinsic.h>], , XINCLUDES="nope")
|
|
if test "$XINCLUDES" = nope; then
|
|
dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include"
|
|
for i in $dirs ; do
|
|
if test -r $i/X11/Intrinsic.h; then
|
|
AC_MSG_RESULT($i)
|
|
XINCLUDES=" -I$i"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
else
|
|
if test "$x_includes" != ""; then
|
|
XINCLUDES=-I$x_includes
|
|
else
|
|
XINCLUDES="# no special path needed"
|
|
fi
|
|
fi
|
|
if test "$XINCLUDES" = nope; then
|
|
AC_MSG_RESULT(couldn't find any!)
|
|
XINCLUDES="# no include files found"
|
|
fi
|
|
|
|
if test "$no_x" = yes; then
|
|
AC_MSG_CHECKING(for X11 libraries)
|
|
XLIBSW=nope
|
|
dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/lib/X11 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib"
|
|
for i in $dirs ; do
|
|
if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl; then
|
|
AC_MSG_RESULT($i)
|
|
XLIBSW="-L$i -lX11"
|
|
x_libraries="$i"
|
|
break
|
|
fi
|
|
done
|
|
else
|
|
if test "$x_libraries" = ""; then
|
|
XLIBSW=-lX11
|
|
else
|
|
XLIBSW="-L$x_libraries -lX11"
|
|
fi
|
|
fi
|
|
if test "$XLIBSW" = nope ; then
|
|
AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
|
|
fi
|
|
if test "$XLIBSW" = nope ; then
|
|
AC_MSG_RESULT(couldn't find any! Using -lX11.)
|
|
XLIBSW=-lX11
|
|
fi
|
|
|
|
#--------------------------------------------------------------------
|
|
# Various manipulations on the search path used at runtime to
|
|
# find shared libraries:
|
|
# 1. If the X library binaries are in a non-standard directory,
|
|
# add the X library location into that search path.
|
|
# 2. On systems such as AIX and Ultrix that use "-L" as the
|
|
# search path option, colons cannot be used to separate
|
|
# directories from each other. Change colons to " -L".
|
|
# 3. Create two sets of search flags, one for use in cc lines
|
|
# and the other for when the linker is invoked directly. In
|
|
# the second case, '-Wl,' must be stripped off and commas must
|
|
# be replaced by spaces.
|
|
#--------------------------------------------------------------------
|
|
|
|
#
|
|
# CYGNUS LOCAL: statically link on Solaris, HPUX & SunOS so that
|
|
# we don't have problems with people not having libraries
|
|
# installed or not having LD_LIBRARY_PATH set.
|
|
#
|
|
|
|
case "$host" in
|
|
#
|
|
# gdb linked statically w/ Solaris iff GCC and GNU ld are used,
|
|
# otherwise dynamic
|
|
#
|
|
sparc-sun-solaris2*)
|
|
sol_xlibsw=
|
|
if test "x$GCC" = "xyes" ; then
|
|
# This is probably the simplest way to test for GNU ld.
|
|
# It only works with relatively recent versions of GNU
|
|
# ld.
|
|
gld_text=`$CC -Wl,--version 2>&1 | sed 1q`
|
|
case "$gld_text" in
|
|
GNU* | *BFD*)
|
|
# Why do we link against libX11 twice? Because the
|
|
# Openwin X11 and Xext libraries are seriously broken.
|
|
sol_xlibsw="-Wl,-Bstatic $XLIBSW -lXext -lX11 -Wl,-Bdynamic"
|
|
;;
|
|
esac
|
|
fi
|
|
if test -z "$sol_xlibsw"; then
|
|
if test "x$x_libraries" != "x"; then
|
|
XLIBSW="$XLIBSW -R$x_libraries"
|
|
fi
|
|
else
|
|
XLIBSW=$sol_xlibsw
|
|
suppress_enable_shared=yes
|
|
fi
|
|
;;
|
|
#
|
|
# gdb linked statically w/ SunOS or HPUX
|
|
#
|
|
m68k-hp-hpux*|hppa*-hp-hpux*|sparc-sun-sunos*)
|
|
if test "x$x_libraries" != "x" ;
|
|
then
|
|
XLIBSW="$x_libraries/libX11.a"
|
|
else
|
|
XLIBSW="/usr/lib/libX11.a"
|
|
fi
|
|
suppress_enable_shared=yes
|
|
;;
|
|
#
|
|
# default is to link dynamically
|
|
#
|
|
*)
|
|
;;
|
|
esac
|
|
#
|
|
# END CYGNUS LOCAL
|
|
|
|
|
|
#--------------------------------------------------------------------
|
|
# Check for the existence of various libraries. The order here
|
|
# is important, so that then end up in the right order in the
|
|
# command line generated by make. The -lsocket and -lnsl libraries
|
|
# require a couple of special tricks:
|
|
# 1. Use "connect" and "accept" to check for -lsocket, and
|
|
# "gethostbyname" to check for -lnsl.
|
|
# 2. Use each function name only once: can't redo a check because
|
|
# autoconf caches the results of the last check and won't redo it.
|
|
# 3. Use -lnsl and -lsocket only if they supply procedures that
|
|
# aren't already present in the normal libraries. This is because
|
|
# IRIX 5.2 has libraries, but they aren't needed and they're
|
|
# bogus: they goof up name resolution if used.
|
|
# 4. On some SVR4 systems, can't use -lsocket without -lnsl too.
|
|
# To get around this problem, check for both libraries together
|
|
# if -lsocket doesn't work by itself.
|
|
#--------------------------------------------------------------------
|
|
|
|
AC_CHECK_LIB(Xbsd, main, [SOCKLIBSW="$SOCKLIBSW -lXbsd"])
|
|
|
|
# CYGNUS LOCAL: Store any socket library(ies) in the cache, and don't
|
|
# mess up the cache values of the functions we check for.
|
|
AC_CACHE_CHECK([for socket libraries], sim_cv_lib_sockets,
|
|
[sim_cv_lib_sockets=
|
|
sim_checkBoth=0
|
|
unset ac_cv_func_connect
|
|
AC_CHECK_FUNC(connect, sim_checkSocket=0, sim_checkSocket=1)
|
|
if test "$sim_checkSocket" = 1; then
|
|
unset ac_cv_func_connect
|
|
AC_CHECK_LIB(socket, main, sim_cv_lib_sockets="-lsocket",
|
|
sim_checkBoth=1)
|
|
fi
|
|
if test "$sim_checkBoth" = 1; then
|
|
sim_oldLibs=$SOCKLIBSW
|
|
SOCKLIBSW="$SOCKLIBSW -lsocket -lnsl"
|
|
unset ac_cv_func_accept
|
|
AC_CHECK_FUNC(accept,
|
|
[sim_checkNsl=0
|
|
sim_cv_lib_sockets="-lsocket -lnsl"])
|
|
unset ac_cv_func_accept
|
|
SOCKLIBSW=$sim_oldLibs
|
|
fi
|
|
unset ac_cv_func_gethostbyname
|
|
sim_oldLibs=$SOCKLIBSW
|
|
SOCKLIBSW="$SOCKLIBSW $sim_cv_lib_sockets"
|
|
AC_CHECK_FUNC(gethostbyname, ,
|
|
[AC_CHECK_LIB(nsl, main,
|
|
[sim_cv_lib_sockets="$sim_cv_lib_sockets -lnsl"])])
|
|
unset ac_cv_func_gethostbyname
|
|
SOCKLIBSW=$sim_oldSOCKLIBSW
|
|
])
|
|
test -z "$sim_cv_lib_sockets" || SOCKLIBSW="$SOCKLIBSW $sim_cv_lib_sockets"
|
|
|
|
mips_extra_libs="-L${withval}/lib -lgpu2 -lm $XLIBSW $SOCKLIBSW"
|
|
cat > simConfig.sh << --EOF--
|
|
mips_extra_libs="$mips_extra_libs"
|
|
--EOF--
|
|
|
|
else
|
|
AC_MSG_ERROR("Directory ${withval} does not exist.");
|
|
fi])dnl
|
|
|
|
|
|
# Enable target accurate FP library
|
|
AC_ARG_WITH(sim-funit,
|
|
[ --with-sim-funit=path Use target FP library under given directory],
|
|
[if test -d "${withval}"
|
|
then
|
|
SIM_SUBTARGET="${SIM_SUBTARGET} -DSKY_FUNIT -I${withval}/include"
|
|
mips_extra_libs="${mips_extra_libs} -L${withval}/lib -lfunit"
|
|
else
|
|
AC_MSG_ERROR("Directory ${withval} does not exist.");
|
|
fi])dnl
|
|
# end-sanitize-sky
|
|
AC_SUBST(mips_extra_libs)
|
|
|
|
AC_CHECK_HEADERS(string.h strings.h stdlib.h stdlib.h)
|
|
AC_CHECK_LIB(m, fabs)
|
|
AC_CHECK_FUNCS(aint anint sqrt)
|
|
|
|
SIM_AC_OUTPUT
|