mirror of
https://github.com/Vita3K/unicorn.git
synced 2024-11-27 15:20:42 +00:00
1938 lines
49 KiB
Bash
Executable File
1938 lines
49 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# qemu configure script (c) 2003 Fabrice Bellard
|
|
#
|
|
|
|
# Unset some variables known to interfere with behavior of common tools,
|
|
# just as autoconf does.
|
|
CLICOLOR_FORCE= GREP_OPTIONS=
|
|
unset CLICOLOR_FORCE GREP_OPTIONS
|
|
|
|
# Temporary directory used for files created while
|
|
# configure runs. Since it is in the build directory
|
|
# we can safely blow away any previous version of it
|
|
# (and we need not jump through hoops to try to delete
|
|
# it when configure exits.)
|
|
TMPDIR1="config-temp"
|
|
rm -rf "${TMPDIR1}"
|
|
mkdir -p "${TMPDIR1}"
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: failed to create temporary directory"
|
|
exit 1
|
|
fi
|
|
|
|
TMPB="qemu-conf"
|
|
TMPC="${TMPDIR1}/${TMPB}.c"
|
|
TMPO="${TMPDIR1}/${TMPB}.o"
|
|
TMPL="${TMPDIR1}/${TMPB}.lo"
|
|
TMPA="${TMPDIR1}/lib${TMPB}.la"
|
|
TMPE="${TMPDIR1}/${TMPB}.exe"
|
|
|
|
rm -f config.log
|
|
|
|
# Print a helpful header at the top of config.log
|
|
echo "# QEMU configure log $(date)" >> config.log
|
|
printf "# Configured with:" >> config.log
|
|
printf " '%s'" "$0" "$@" >> config.log
|
|
echo >> config.log
|
|
echo "#" >> config.log
|
|
|
|
error_exit() {
|
|
echo
|
|
echo "ERROR: $1"
|
|
while test -n "$2"; do
|
|
echo " $2"
|
|
shift
|
|
done
|
|
echo
|
|
exit 1
|
|
}
|
|
|
|
do_compiler() {
|
|
# Run the compiler, capturing its output to the log. First argument
|
|
# is compiler binary to execute.
|
|
local compiler="$1"
|
|
shift
|
|
echo $compiler "$@" >> config.log
|
|
$compiler "$@" >> config.log 2>&1 || return $?
|
|
# Test passed. If this is an --enable-werror build, rerun
|
|
# the test with -Werror and bail out if it fails. This
|
|
# makes warning-generating-errors in configure test code
|
|
# obvious to developers.
|
|
if test "$werror" != "yes"; then
|
|
return 0
|
|
fi
|
|
# Don't bother rerunning the compile if we were already using -Werror
|
|
case "$*" in
|
|
*-Werror*)
|
|
return 0
|
|
;;
|
|
esac
|
|
echo $compiler -Werror "$@" >> config.log
|
|
$compiler -Werror "$@" >> config.log 2>&1 && return $?
|
|
error_exit "configure test passed without -Werror but failed with -Werror." \
|
|
"This is probably a bug in the configure script. The failing command" \
|
|
"will be at the bottom of config.log." \
|
|
"You can run configure with --disable-werror to bypass this check."
|
|
}
|
|
|
|
do_cc() {
|
|
do_compiler "$cc" "$@"
|
|
}
|
|
|
|
compile_object() {
|
|
do_cc $QEMU_CFLAGS -c -o $TMPO $TMPC
|
|
}
|
|
|
|
compile_prog() {
|
|
local_cflags="$1"
|
|
local_ldflags="$2"
|
|
do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
|
|
}
|
|
|
|
do_libtool() {
|
|
local mode=$1
|
|
shift
|
|
# Run the compiler, capturing its output to the log.
|
|
echo $libtool $mode --tag=CC $cc "$@" >> config.log
|
|
$libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
|
|
# Test passed. If this is an --enable-werror build, rerun
|
|
# the test with -Werror and bail out if it fails. This
|
|
# makes warning-generating-errors in configure test code
|
|
# obvious to developers.
|
|
if test "$werror" != "yes"; then
|
|
return 0
|
|
fi
|
|
# Don't bother rerunning the compile if we were already using -Werror
|
|
case "$*" in
|
|
*-Werror*)
|
|
return 0
|
|
;;
|
|
esac
|
|
echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
|
|
$libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
|
|
error_exit "configure test passed without -Werror but failed with -Werror." \
|
|
"This is probably a bug in the configure script. The failing command" \
|
|
"will be at the bottom of config.log." \
|
|
"You can run configure with --disable-werror to bypass this check."
|
|
}
|
|
|
|
libtool_prog() {
|
|
do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
|
|
do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
|
|
}
|
|
|
|
# symbolically link $1 to $2. Portable version of "ln -sf".
|
|
symlink() {
|
|
rm -rf "$2"
|
|
mkdir -p "$(dirname "$2")"
|
|
ln -s "$1" "$2"
|
|
}
|
|
|
|
# check whether a command is available to this shell (may be either an
|
|
# executable or a builtin)
|
|
has() {
|
|
type "$1" >/dev/null 2>&1
|
|
}
|
|
|
|
# search for an executable in PATH
|
|
path_of() {
|
|
local_command="$1"
|
|
local_ifs="$IFS"
|
|
local_dir=""
|
|
|
|
# pathname has a dir component?
|
|
if [ "${local_command#*/}" != "$local_command" ]; then
|
|
if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
|
|
echo "$local_command"
|
|
return 0
|
|
fi
|
|
fi
|
|
if [ -z "$local_command" ]; then
|
|
return 1
|
|
fi
|
|
|
|
IFS=:
|
|
for local_dir in $PATH; do
|
|
if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
|
|
echo "$local_dir/$local_command"
|
|
IFS="${local_ifs:-$(printf ' \t\n')}"
|
|
return 0
|
|
fi
|
|
done
|
|
# not found
|
|
IFS="${local_ifs:-$(printf ' \t\n')}"
|
|
return 1
|
|
}
|
|
|
|
# default parameters
|
|
source_path=`dirname "$0"`
|
|
cpu=""
|
|
interp_prefix="/usr/gnemul/qemu-%M"
|
|
static="no"
|
|
cross_prefix=""
|
|
host_cc="cc"
|
|
libs_softmmu=""
|
|
cc_i386=i386-pc-linux-gnu-gcc
|
|
debug_info="yes"
|
|
stack_protector=""
|
|
|
|
# Don't accept a target_list environment variable.
|
|
unset target_list
|
|
|
|
# Default value for a variable defining feature "foo".
|
|
# * foo="no" feature will only be used if --enable-foo arg is given
|
|
# * foo="" feature will be searched for, and if found, will be used
|
|
# unless --disable-foo is given
|
|
# * foo="yes" this value will only be set by --enable-foo flag.
|
|
# feature will searched for,
|
|
# if not found, configure exits with error
|
|
#
|
|
# Always add --enable-foo and --disable-foo command line args.
|
|
# Distributions want to ensure that several features are compiled in, and it
|
|
# is impossible without a --enable-foo that exits if a feature is not found.
|
|
|
|
debug_tcg="no"
|
|
debug="no"
|
|
strip_opt="yes"
|
|
tcg_interpreter="no"
|
|
bigendian="no"
|
|
mingw32="no"
|
|
EXESUF=""
|
|
DSOSUF=".so"
|
|
LDFLAGS_SHARED="-shared"
|
|
prefix="/usr/local"
|
|
mandir="\${prefix}/share/man"
|
|
qemu_docdir="\${prefix}/share/doc/qemu"
|
|
bindir="\${prefix}/bin"
|
|
libdir="\${prefix}/lib"
|
|
libexecdir="\${prefix}/libexec"
|
|
includedir="\${prefix}/include"
|
|
sysconfdir="\${prefix}/etc"
|
|
local_statedir="\${prefix}/var"
|
|
confsuffix="/qemu"
|
|
bsd="no"
|
|
linux="no"
|
|
solaris="no"
|
|
softmmu="yes"
|
|
aix="no"
|
|
pkgversion=""
|
|
pie=""
|
|
zero_malloc=""
|
|
win_sdk="no"
|
|
zlib="yes"
|
|
|
|
# parse CC options first
|
|
for opt do
|
|
optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
|
|
case "$opt" in
|
|
--cross-prefix=*) cross_prefix="$optarg"
|
|
;;
|
|
--cc=*) CC="$optarg"
|
|
;;
|
|
--source-path=*) source_path="$optarg"
|
|
;;
|
|
--cpu=*) cpu="$optarg"
|
|
;;
|
|
--extra-cflags=*) QEMU_CFLAGS="$optarg $QEMU_CFLAGS"
|
|
EXTRA_CFLAGS="$optarg"
|
|
;;
|
|
--extra-ldflags=*) LDFLAGS="$optarg $LDFLAGS"
|
|
EXTRA_LDFLAGS="$optarg"
|
|
;;
|
|
--enable-debug-info) debug_info="yes"
|
|
;;
|
|
--disable-debug-info) debug_info="no"
|
|
;;
|
|
esac
|
|
done
|
|
# OS specific
|
|
# Using uname is really, really broken. Once we have the right set of checks
|
|
# we can eliminate its usage altogether.
|
|
|
|
# Preferred compiler:
|
|
# ${CC} (if set)
|
|
# ${cross_prefix}gcc (if cross-prefix specified)
|
|
# system compiler
|
|
if test -z "${CC}${cross_prefix}"; then
|
|
cc="$host_cc"
|
|
else
|
|
cc="${CC-${cross_prefix}gcc}"
|
|
fi
|
|
|
|
ar="${AR-${cross_prefix}ar}"
|
|
as="${AS-${cross_prefix}as}"
|
|
cpp="${CPP-$cc -E}"
|
|
objcopy="${OBJCOPY-${cross_prefix}objcopy}"
|
|
ld="${LD-${cross_prefix}ld}"
|
|
libtool="${LIBTOOL-${cross_prefix}libtool}"
|
|
nm="${NM-${cross_prefix}nm}"
|
|
strip="${STRIP-${cross_prefix}strip}"
|
|
windres="${WINDRES-${cross_prefix}windres}"
|
|
pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
|
|
query_pkg_config() {
|
|
"${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
|
|
}
|
|
pkg_config=query_pkg_config
|
|
|
|
# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
|
|
ARFLAGS="${ARFLAGS-rv}"
|
|
|
|
# default flags for all hosts
|
|
QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
|
|
QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
|
|
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
|
|
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
|
|
QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
|
|
if test "$debug_info" = "yes"; then
|
|
CFLAGS="-g $CFLAGS"
|
|
LDFLAGS="-g $LDFLAGS"
|
|
else
|
|
CFLAGS="-O3 $CFLAGS"
|
|
LDFLAGS="-O3 $LDFLAGS"
|
|
fi
|
|
|
|
# make source path absolute
|
|
source_path=`cd "$source_path"; pwd`
|
|
|
|
# running configure in the source tree?
|
|
# we know that's the case if configure is there.
|
|
if test -f "./configure"; then
|
|
pwd_is_source_path="y"
|
|
else
|
|
pwd_is_source_path="n"
|
|
fi
|
|
|
|
check_define() {
|
|
cat > $TMPC <<EOF
|
|
#if !defined($1)
|
|
#error $1 not defined
|
|
#endif
|
|
int main(void) { return 0; }
|
|
EOF
|
|
compile_object
|
|
}
|
|
|
|
if check_define __linux__ ; then
|
|
targetos="Linux"
|
|
elif check_define _WIN32 ; then
|
|
targetos='MINGW32'
|
|
elif check_define __OpenBSD__ ; then
|
|
targetos='OpenBSD'
|
|
elif check_define __sun__ ; then
|
|
targetos='SunOS'
|
|
elif check_define __HAIKU__ ; then
|
|
targetos='Haiku'
|
|
else
|
|
targetos=`uname -s`
|
|
fi
|
|
|
|
# Some host OSes need non-standard checks for which CPU to use.
|
|
# Note that these checks are broken for cross-compilation: if you're
|
|
# cross-compiling to one of these OSes then you'll need to specify
|
|
# the correct CPU with the --cpu option.
|
|
case $targetos in
|
|
Darwin)
|
|
# on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
|
|
# run 64-bit userspace code.
|
|
# If the user didn't specify a CPU explicitly and the kernel says this is
|
|
# 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
|
|
if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
|
|
cpu="x86_64"
|
|
fi
|
|
;;
|
|
SunOS)
|
|
# `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
|
|
if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
|
|
cpu="x86_64"
|
|
fi
|
|
esac
|
|
|
|
if test ! -z "$cpu" ; then
|
|
# command line argument
|
|
:
|
|
elif check_define __i386__ ; then
|
|
cpu="i386"
|
|
elif check_define __x86_64__ ; then
|
|
if check_define __ILP32__ ; then
|
|
cpu="x32"
|
|
else
|
|
cpu="x86_64"
|
|
fi
|
|
elif check_define __sparc__ ; then
|
|
if check_define __arch64__ ; then
|
|
cpu="sparc64"
|
|
else
|
|
cpu="sparc"
|
|
fi
|
|
elif check_define _ARCH_PPC ; then
|
|
if check_define _ARCH_PPC64 ; then
|
|
cpu="ppc64"
|
|
else
|
|
cpu="ppc"
|
|
fi
|
|
elif check_define __mips__ ; then
|
|
cpu="mips"
|
|
elif check_define __ia64__ ; then
|
|
cpu="ia64"
|
|
elif check_define __s390__ ; then
|
|
if check_define __s390x__ ; then
|
|
cpu="s390x"
|
|
else
|
|
cpu="s390"
|
|
fi
|
|
elif check_define __arm__ ; then
|
|
cpu="arm"
|
|
elif check_define __aarch64__ ; then
|
|
cpu="aarch64"
|
|
elif check_define __hppa__ ; then
|
|
cpu="hppa"
|
|
else
|
|
cpu=`uname -m`
|
|
fi
|
|
|
|
ARCH=
|
|
# Normalise host CPU name and set ARCH.
|
|
# Note that this case should only have supported host CPUs, not guests.
|
|
case "$cpu" in
|
|
ia64|ppc|ppc64|s390|s390x|sparc64|x32)
|
|
cpu="$cpu"
|
|
;;
|
|
i386|i486|i586|i686|i86pc|BePC)
|
|
cpu="i386"
|
|
;;
|
|
x86_64|amd64)
|
|
cpu="x86_64"
|
|
;;
|
|
armv*b|armv*l|arm)
|
|
cpu="arm"
|
|
;;
|
|
aarch64)
|
|
cpu="aarch64"
|
|
;;
|
|
mips*)
|
|
cpu="mips"
|
|
;;
|
|
sparc|sun4[cdmuv])
|
|
cpu="sparc"
|
|
;;
|
|
*)
|
|
# This will result in either an error or falling back to TCI later
|
|
ARCH=unknown
|
|
;;
|
|
esac
|
|
if test -z "$ARCH"; then
|
|
ARCH="$cpu"
|
|
fi
|
|
|
|
# OS specific
|
|
|
|
# host *BSD for user mode
|
|
HOST_VARIANT_DIR=""
|
|
|
|
case $targetos in
|
|
CYGWIN*)
|
|
linux="yes"
|
|
;;
|
|
MINGW32*)
|
|
mingw32="yes"
|
|
;;
|
|
GNU/kFreeBSD)
|
|
bsd="yes"
|
|
;;
|
|
FreeBSD)
|
|
bsd="yes"
|
|
make="${MAKE-gmake}"
|
|
# needed for kinfo_getvmmap(3) in libutil.h
|
|
LIBS="-lutil $LIBS"
|
|
HOST_VARIANT_DIR="freebsd"
|
|
;;
|
|
DragonFly)
|
|
bsd="yes"
|
|
make="${MAKE-gmake}"
|
|
HOST_VARIANT_DIR="dragonfly"
|
|
;;
|
|
NetBSD)
|
|
bsd="yes"
|
|
make="${MAKE-gmake}"
|
|
HOST_VARIANT_DIR="netbsd"
|
|
;;
|
|
OpenBSD)
|
|
bsd="yes"
|
|
make="${MAKE-gmake}"
|
|
HOST_VARIANT_DIR="openbsd"
|
|
;;
|
|
Darwin)
|
|
bsd="yes"
|
|
darwin="yes"
|
|
LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
|
|
if [ "$cpu" = "x86_64" ] ; then
|
|
QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
|
|
LDFLAGS="-arch x86_64 $LDFLAGS"
|
|
fi
|
|
# Disable attempts to use ObjectiveC features in os/object.h since they
|
|
# won't work when we're compiling with gcc as a C compiler.
|
|
QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
|
|
HOST_VARIANT_DIR="darwin"
|
|
;;
|
|
SunOS)
|
|
solaris="yes"
|
|
make="${MAKE-gmake}"
|
|
install="${INSTALL-ginstall}"
|
|
ld="gld"
|
|
needs_libsunmath="no"
|
|
solarisrev=`uname -r | cut -f2 -d.`
|
|
if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
|
|
if test "$solarisrev" -le 9 ; then
|
|
if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
|
|
needs_libsunmath="yes"
|
|
QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
|
|
LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
|
|
LIBS="-lsunmath $LIBS"
|
|
else
|
|
error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
|
|
"libsunmath from the Sun Studio compilers tools, due to a lack of" \
|
|
"C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
|
|
"Studio 11 can be downloaded from www.sun.com."
|
|
fi
|
|
fi
|
|
fi
|
|
# needed for CMSG_ macros in sys/socket.h
|
|
QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
|
|
# needed for TIOCWIN* defines in termios.h
|
|
QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
|
|
QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
|
|
solarisnetlibs="-lsocket -lnsl -lresolv"
|
|
LIBS="$solarisnetlibs $LIBS"
|
|
;;
|
|
AIX)
|
|
aix="yes"
|
|
make="${MAKE-gmake}"
|
|
;;
|
|
Haiku)
|
|
haiku="yes"
|
|
QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
|
|
LIBS="-lposix_error_mapper -lnetwork $LIBS"
|
|
;;
|
|
*)
|
|
linux="yes"
|
|
;;
|
|
esac
|
|
|
|
: ${make=${MAKE-make}}
|
|
: ${install=${INSTALL-install}}
|
|
: ${python=${PYTHON-python}}
|
|
|
|
# Default objcc to clang if available, otherwise use CC
|
|
if has clang; then
|
|
objcc=clang
|
|
else
|
|
objcc="$cc"
|
|
fi
|
|
|
|
if test "$mingw32" = "yes" ; then
|
|
EXESUF=".exe"
|
|
DSOSUF=".dll"
|
|
QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
|
|
# enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
|
|
QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
|
|
LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
|
|
cat > $TMPC << EOF
|
|
int main(void) { return 0; }
|
|
EOF
|
|
if compile_prog "" "-liberty" ; then
|
|
LIBS="-liberty $LIBS"
|
|
fi
|
|
prefix="c:/Program Files/QEMU"
|
|
mandir="\${prefix}"
|
|
qemu_docdir="\${prefix}"
|
|
bindir="\${prefix}"
|
|
sysconfdir="\${prefix}"
|
|
local_statedir=
|
|
confsuffix=""
|
|
fi
|
|
|
|
werror=""
|
|
|
|
for opt do
|
|
optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
|
|
case "$opt" in
|
|
--help|-h) show_help=yes
|
|
;;
|
|
--version|-V) exec cat $source_path/VERSION
|
|
;;
|
|
--prefix=*) prefix="$optarg"
|
|
;;
|
|
--interp-prefix=*) interp_prefix="$optarg"
|
|
;;
|
|
--source-path=*)
|
|
;;
|
|
--cross-prefix=*)
|
|
;;
|
|
--cc=*)
|
|
;;
|
|
--host-cc=*) host_cc="$optarg"
|
|
;;
|
|
--objcc=*) objcc="$optarg"
|
|
;;
|
|
--make=*) make="$optarg"
|
|
;;
|
|
--install=*) install="$optarg"
|
|
;;
|
|
--python=*) python="$optarg"
|
|
;;
|
|
--extra-cflags=*)
|
|
;;
|
|
--extra-ldflags=*)
|
|
;;
|
|
--enable-debug-info)
|
|
;;
|
|
--disable-debug-info)
|
|
;;
|
|
--cpu=*)
|
|
;;
|
|
--target-list=*) target_list="$optarg"
|
|
;;
|
|
--static)
|
|
static="yes"
|
|
LDFLAGS="-static $LDFLAGS"
|
|
QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
|
|
;;
|
|
--mandir=*) mandir="$optarg"
|
|
;;
|
|
--bindir=*) bindir="$optarg"
|
|
;;
|
|
--libdir=*) libdir="$optarg"
|
|
;;
|
|
--libexecdir=*) libexecdir="$optarg"
|
|
;;
|
|
--includedir=*) includedir="$optarg"
|
|
;;
|
|
--with-confsuffix=*) confsuffix="$optarg"
|
|
;;
|
|
--docdir=*) qemu_docdir="$optarg"
|
|
;;
|
|
--sysconfdir=*) sysconfdir="$optarg"
|
|
;;
|
|
--localstatedir=*) local_statedir="$optarg"
|
|
;;
|
|
--sbindir=*|--sharedstatedir=*|\
|
|
--oldincludedir=*|--datarootdir=*|--infodir=*|\
|
|
--htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
|
|
# These switches are silently ignored, for compatibility with
|
|
# autoconf-generated configure scripts. This allows QEMU's
|
|
# configure to be used by RPM and similar macros that set
|
|
# lots of directory switches by default.
|
|
;;
|
|
--enable-debug-tcg) debug_tcg="yes"
|
|
;;
|
|
--disable-debug-tcg) debug_tcg="no"
|
|
;;
|
|
--enable-debug)
|
|
# Enable debugging options that aren't excessively noisy
|
|
debug_tcg="yes"
|
|
debug="yes"
|
|
strip_opt="no"
|
|
;;
|
|
--disable-strip) strip_opt="no"
|
|
;;
|
|
--enable-pie) pie="yes"
|
|
;;
|
|
--disable-pie) pie="no"
|
|
;;
|
|
--enable-werror) werror="yes"
|
|
;;
|
|
--disable-werror) werror="no"
|
|
;;
|
|
--enable-stack-protector) stack_protector="yes"
|
|
;;
|
|
--disable-stack-protector) stack_protector="no"
|
|
;;
|
|
--with-pkgversion=*) pkgversion=" ($optarg)"
|
|
;;
|
|
--with-win-sdk) win_sdk=""
|
|
;;
|
|
--with-win-sdk=*) win_sdk="$optarg"
|
|
;;
|
|
--without-win-sdk) win_sdk="no"
|
|
;;
|
|
*)
|
|
echo "ERROR: unknown option $opt"
|
|
echo "Try '$0 --help' for more information"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if ! has $python; then
|
|
error_exit "Python not found. Use --python=/path/to/python"
|
|
fi
|
|
|
|
# Note that if the Python conditional here evaluates True we will exit
|
|
# with status 1 which is a shell 'false' value.
|
|
if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
|
|
error_exit "Cannot use '$python', Python 2.4 or later is required." \
|
|
"Note that Python 3 or later is not yet supported." \
|
|
"Use --python=/path/to/python to specify a supported Python."
|
|
fi
|
|
|
|
# The -B switch was added in Python 2.6.
|
|
# If it is supplied, compiled files are not written.
|
|
# Use it for Python versions which support it.
|
|
if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
|
|
python="$python -B"
|
|
fi
|
|
|
|
case "$cpu" in
|
|
ppc)
|
|
CPU_CFLAGS="-m32"
|
|
LDFLAGS="-m32 $LDFLAGS"
|
|
;;
|
|
ppc64)
|
|
CPU_CFLAGS="-m64"
|
|
LDFLAGS="-m64 $LDFLAGS"
|
|
;;
|
|
sparc)
|
|
LDFLAGS="-m32 $LDFLAGS"
|
|
CPU_CFLAGS="-m32 -mcpu=ultrasparc"
|
|
;;
|
|
sparc64)
|
|
LDFLAGS="-m64 $LDFLAGS"
|
|
CPU_CFLAGS="-m64 -mcpu=ultrasparc"
|
|
;;
|
|
s390)
|
|
CPU_CFLAGS="-m31"
|
|
LDFLAGS="-m31 $LDFLAGS"
|
|
;;
|
|
s390x)
|
|
CPU_CFLAGS="-m64"
|
|
LDFLAGS="-m64 $LDFLAGS"
|
|
;;
|
|
i386)
|
|
CPU_CFLAGS="-m32"
|
|
LDFLAGS="-m32 $LDFLAGS"
|
|
cc_i386='$(CC) -m32'
|
|
;;
|
|
x86_64)
|
|
CPU_CFLAGS="-m64"
|
|
LDFLAGS="-m64 $LDFLAGS"
|
|
cc_i386='$(CC) -m32'
|
|
;;
|
|
x32)
|
|
CPU_CFLAGS="-mx32"
|
|
LDFLAGS="-mx32 $LDFLAGS"
|
|
cc_i386='$(CC) -m32'
|
|
;;
|
|
# No special flags required for other host CPUs
|
|
esac
|
|
|
|
QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
|
|
EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
|
|
|
|
default_target_list=""
|
|
|
|
mak_wilds=""
|
|
|
|
if [ "$softmmu" = "yes" ]; then
|
|
mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
|
|
fi
|
|
|
|
for config in $mak_wilds; do
|
|
default_target_list="${default_target_list} $(basename "$config" .mak)"
|
|
done
|
|
|
|
if test x"$show_help" = x"yes" ; then
|
|
cat << EOF
|
|
|
|
Usage: configure [options]
|
|
Options: [defaults in brackets after descriptions]
|
|
|
|
Standard options:
|
|
--help print this message
|
|
--prefix=PREFIX install in PREFIX [$prefix]
|
|
--interp-prefix=PREFIX where to find shared libraries, etc.
|
|
use %M for cpu name [$interp_prefix]
|
|
--target-list=LIST set target list (default: build everything)
|
|
$(echo Available targets: $default_target_list | \
|
|
fold -s -w 53 | sed -e 's/^/ /')
|
|
|
|
Advanced options (experts only):
|
|
--source-path=PATH path of source code [$source_path]
|
|
--cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
|
|
--cc=CC use C compiler CC [$cc]
|
|
--host-cc=CC use C compiler CC [$host_cc] for code run at
|
|
build time
|
|
--objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
|
|
--extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
|
|
--extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
|
|
--make=MAKE use specified make [$make]
|
|
--install=INSTALL use specified install [$install]
|
|
--python=PYTHON use specified python [$python]
|
|
--static enable static build [$static]
|
|
--mandir=PATH install man pages in PATH
|
|
--docdir=PATH install documentation in PATH$confsuffix
|
|
--bindir=PATH install binaries in PATH
|
|
--libdir=PATH install libraries in PATH
|
|
--sysconfdir=PATH install config in PATH$confsuffix
|
|
--localstatedir=PATH install local state in PATH (set at runtime on win32)
|
|
--with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
|
|
--enable-debug-tcg enable TCG debugging
|
|
--disable-debug-tcg disable TCG debugging (default)
|
|
--enable-debug-info enable debugging information (default)
|
|
--disable-debug-info disable debugging information
|
|
--enable-debug enable common debug build options
|
|
--disable-strip disable stripping binaries
|
|
--disable-werror disable compilation abort on warning
|
|
--disable-stack-protector disable compiler-provided stack protection
|
|
--enable-pie build Position Independent Executables
|
|
--disable-pie do not build Position Independent Executables
|
|
--cpu=CPU Build for host CPU [$cpu]
|
|
|
|
NOTE: The object files are built at the place where configure is launched
|
|
EOF
|
|
exit 0
|
|
fi
|
|
|
|
# Consult white-list to determine whether to enable werror
|
|
# by default. Only enable by default for git builds
|
|
z_version=`cut -f3 -d. $source_path/VERSION`
|
|
|
|
if test -z "$werror" ; then
|
|
if test -d "$source_path/.git" -a \
|
|
"$linux" = "yes" ; then
|
|
werror="yes"
|
|
else
|
|
werror="no"
|
|
fi
|
|
fi
|
|
|
|
# check that the C compiler works.
|
|
cat > $TMPC <<EOF
|
|
int main(void) { return 0; }
|
|
EOF
|
|
|
|
if compile_object ; then
|
|
: C compiler works ok
|
|
else
|
|
error_exit "\"$cc\" either does not exist or does not work"
|
|
fi
|
|
|
|
gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
|
|
gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
|
|
gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
|
|
gcc_flags="-Wendif-labels $gcc_flags"
|
|
gcc_flags="-Wno-initializer-overrides $gcc_flags"
|
|
gcc_flags="-Wno-string-plus-int $gcc_flags"
|
|
# Note that we do not add -Werror to gcc_flags here, because that would
|
|
# enable it for all configure tests. If a configure test failed due
|
|
# to -Werror this would just silently disable some features,
|
|
# so it's too error prone.
|
|
cat > $TMPC << EOF
|
|
int main(void) { return 0; }
|
|
EOF
|
|
for flag in $gcc_flags; do
|
|
# Use the positive sense of the flag when testing for -Wno-wombat
|
|
# support (gcc will happily accept the -Wno- form of unknown
|
|
# warning options).
|
|
optflag="$(echo $flag | sed -e 's/^-Wno-/-W/')"
|
|
if compile_prog "-Werror $optflag" "" ; then
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $flag"
|
|
fi
|
|
done
|
|
|
|
if test "$stack_protector" != "no"; then
|
|
gcc_flags="-fstack-protector-strong -fstack-protector-all"
|
|
sp_on=0
|
|
for flag in $gcc_flags; do
|
|
# We need to check both a compile and a link, since some compiler
|
|
# setups fail only on a .c->.o compile and some only at link time
|
|
if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
|
|
compile_prog "-Werror $flag" ""; then
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $flag"
|
|
LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
|
|
sp_on=1
|
|
break
|
|
fi
|
|
done
|
|
if test "$stack_protector" = yes; then
|
|
if test $sp_on = 0; then
|
|
error_exit "Stack protector not supported"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
|
|
# large functions that use global variables. The bug is in all releases of
|
|
# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
|
|
# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
|
|
cat > $TMPC << EOF
|
|
#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
|
|
int main(void) { return 0; }
|
|
#else
|
|
#error No bug in this compiler.
|
|
#endif
|
|
EOF
|
|
if compile_prog "-Werror -fno-gcse" "" ; then
|
|
TRANSLATE_OPT_CFLAGS=-fno-gcse
|
|
fi
|
|
|
|
if test "$static" = "yes" ; then
|
|
if test "$pie" = "yes" ; then
|
|
error_exit "static and pie are mutually incompatible"
|
|
else
|
|
pie="no"
|
|
fi
|
|
fi
|
|
|
|
if test "$pie" = ""; then
|
|
case "$cpu-$targetos" in
|
|
i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
|
|
;;
|
|
*)
|
|
pie="no"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if test "$pie" != "no" ; then
|
|
cat > $TMPC << EOF
|
|
|
|
#ifdef __linux__
|
|
# define THREAD __thread
|
|
#else
|
|
# define THREAD
|
|
#endif
|
|
|
|
static THREAD int tls_var;
|
|
|
|
int main(void) { return tls_var; }
|
|
|
|
EOF
|
|
if compile_prog "-fPIE -DPIE" "-pie"; then
|
|
QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
|
|
LDFLAGS="-pie $LDFLAGS"
|
|
pie="yes"
|
|
if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
|
|
LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
|
|
fi
|
|
else
|
|
if test "$pie" = "yes"; then
|
|
error_exit "PIE not available due to missing toolchain support"
|
|
else
|
|
echo "Disabling PIE due to missing toolchain support"
|
|
pie="no"
|
|
fi
|
|
fi
|
|
|
|
if compile_prog "-fno-pie" "-nopie"; then
|
|
CFLAGS_NOPIE="-fno-pie"
|
|
LDFLAGS_NOPIE="-nopie"
|
|
fi
|
|
fi
|
|
|
|
# check for broken gcc and libtool in RHEL5
|
|
if test -n "$libtool" -a "$pie" != "no" ; then
|
|
cat > $TMPC <<EOF
|
|
|
|
void *f(unsigned char *buf, int len);
|
|
void *g(unsigned char *buf, int len);
|
|
|
|
void *
|
|
f(unsigned char *buf, int len)
|
|
{
|
|
return (void*)0L;
|
|
}
|
|
|
|
void *
|
|
g(unsigned char *buf, int len)
|
|
{
|
|
return f(buf, len);
|
|
}
|
|
|
|
EOF
|
|
if ! libtool_prog; then
|
|
echo "Disabling libtool due to broken toolchain support"
|
|
libtool=
|
|
fi
|
|
fi
|
|
|
|
##########################################
|
|
# __sync_fetch_and_and requires at least -march=i486. Many toolchains
|
|
# use i686 as default anyway, but for those that don't, an explicit
|
|
# specification is necessary
|
|
|
|
if test "$cpu" = "i386"; then
|
|
cat > $TMPC << EOF
|
|
static int sfaa(int *ptr)
|
|
{
|
|
return __sync_fetch_and_and(ptr, 0);
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
int val = 42;
|
|
val = __sync_val_compare_and_swap(&val, 0, 1);
|
|
sfaa(&val);
|
|
return val;
|
|
}
|
|
EOF
|
|
if ! compile_prog "" "" ; then
|
|
QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
|
|
fi
|
|
fi
|
|
|
|
#########################################
|
|
# Solaris specific configure tool chain decisions
|
|
|
|
if test "$solaris" = "yes" ; then
|
|
if has $install; then
|
|
:
|
|
else
|
|
error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
|
|
"install fileutils from www.blastwave.org using pkg-get -i fileutils" \
|
|
"to get ginstall which is used by default (which lives in /opt/csw/bin)"
|
|
fi
|
|
if test "`path_of $install`" = "/usr/sbin/install" ; then
|
|
error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
|
|
"try ginstall from the GNU fileutils available from www.blastwave.org" \
|
|
"using pkg-get -i fileutils, or use --install=/usr/ucb/install"
|
|
fi
|
|
if has ar; then
|
|
:
|
|
else
|
|
if test -f /usr/ccs/bin/ar ; then
|
|
error_exit "No path includes ar" \
|
|
"Add /usr/ccs/bin to your path and rerun configure"
|
|
fi
|
|
error_exit "No path includes ar"
|
|
fi
|
|
fi
|
|
|
|
if test -z "${target_list+xxx}" ; then
|
|
target_list="$default_target_list"
|
|
else
|
|
target_list=`echo "$target_list" | sed -e 's/,/ /g'`
|
|
fi
|
|
|
|
# Check that we recognised the target name; this allows a more
|
|
# friendly error message than if we let it fall through.
|
|
for target in $target_list; do
|
|
case " $default_target_list " in
|
|
*" $target "*)
|
|
;;
|
|
*)
|
|
error_exit "Unknown target name '$target'"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# see if system emulation was really requested
|
|
case " $target_list " in
|
|
*"-softmmu "*) softmmu=yes
|
|
;;
|
|
*) softmmu=no
|
|
;;
|
|
esac
|
|
|
|
feature_not_found() {
|
|
feature=$1
|
|
remedy=$2
|
|
|
|
error_exit "User requested feature $feature" \
|
|
"configure was not able to find it." \
|
|
"$remedy"
|
|
}
|
|
|
|
# ---
|
|
# big/little endian test
|
|
cat > $TMPC << EOF
|
|
short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
|
|
short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
|
|
extern int foo(short *, short *);
|
|
int main(int argc, char *argv[]) {
|
|
return foo(big_endian, little_endian);
|
|
}
|
|
EOF
|
|
|
|
if compile_object ; then
|
|
if grep -q BiGeNdIaN $TMPO ; then
|
|
bigendian="yes"
|
|
elif grep -q LiTtLeEnDiAn $TMPO ; then
|
|
bigendian="no"
|
|
else
|
|
echo big/little test failed
|
|
fi
|
|
else
|
|
echo big/little test failed
|
|
fi
|
|
|
|
##########################################
|
|
# pkg-config probe
|
|
|
|
if ! has "$pkg_config_exe"; then
|
|
error_exit "pkg-config binary '$pkg_config_exe' not found"
|
|
fi
|
|
|
|
##########################################
|
|
# zlib check
|
|
|
|
if test "$zlib" != "no" ; then
|
|
cat > $TMPC << EOF
|
|
#include <zlib.h>
|
|
int main(void) { zlibVersion(); return 0; }
|
|
EOF
|
|
if compile_prog "" "-lz" ; then
|
|
:
|
|
else
|
|
error_exit "zlib check failed" \
|
|
"Make sure to have the zlib libs and headers installed."
|
|
fi
|
|
fi
|
|
LIBS="$LIBS -lz"
|
|
|
|
##########################################
|
|
# libtool probe
|
|
|
|
if ! has $libtool; then
|
|
libtool=
|
|
fi
|
|
|
|
# MacOSX ships with a libtool which isn't the GNU one; weed this
|
|
# out by checking whether libtool supports the --version switch
|
|
if test -n "$libtool"; then
|
|
if ! "$libtool" --version >/dev/null 2>&1; then
|
|
libtool=
|
|
fi
|
|
fi
|
|
|
|
##########################################
|
|
# glib support probe
|
|
|
|
if test "$mingw32" = yes; then
|
|
# g_poll is required in order to integrate with the glib main loop.
|
|
glib_req_ver=2.20
|
|
else
|
|
glib_req_ver=2.12
|
|
fi
|
|
glib_modules=gthread-2.0
|
|
|
|
for i in $glib_modules; do
|
|
if $pkg_config --atleast-version=$glib_req_ver $i; then
|
|
glib_cflags=`$pkg_config --cflags $i`
|
|
glib_libs=`$pkg_config --libs $i`
|
|
CFLAGS="$glib_cflags $CFLAGS"
|
|
LIBS="$glib_libs $LIBS"
|
|
else
|
|
error_exit "glib-$glib_req_ver $i is required to compile QEMU"
|
|
fi
|
|
done
|
|
|
|
# g_test_trap_subprocess added in 2.38. Used by some tests.
|
|
glib_subprocess=yes
|
|
if ! $pkg_config --atleast-version=2.38 glib-2.0; then
|
|
glib_subprocess=no
|
|
fi
|
|
|
|
##########################################
|
|
# pthread probe
|
|
PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
|
|
|
|
pthread=no
|
|
cat > $TMPC << EOF
|
|
#include <pthread.h>
|
|
static void *f(void *p) { return NULL; }
|
|
int main(void) {
|
|
pthread_t thread;
|
|
pthread_create(&thread, 0, f, 0);
|
|
return 0;
|
|
}
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
pthread=yes
|
|
else
|
|
for pthread_lib in $PTHREADLIBS_LIST; do
|
|
if compile_prog "" "$pthread_lib" ; then
|
|
pthread=yes
|
|
found=no
|
|
for lib_entry in $LIBS; do
|
|
if test "$lib_entry" = "$pthread_lib"; then
|
|
found=yes
|
|
break
|
|
fi
|
|
done
|
|
if test "$found" = "no"; then
|
|
LIBS="$pthread_lib $LIBS"
|
|
fi
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if test "$mingw32" != yes -a "$pthread" = no; then
|
|
error_exit "pthread check failed" \
|
|
"Make sure to have the pthread libs and headers installed."
|
|
fi
|
|
|
|
# check for pthread_setname_np
|
|
pthread_setname_np=no
|
|
cat > $TMPC << EOF
|
|
#include <pthread.h>
|
|
|
|
static void *f(void *p) { return NULL; }
|
|
int main(void)
|
|
{
|
|
pthread_t thread;
|
|
pthread_create(&thread, 0, f, 0);
|
|
pthread_setname_np(thread, "QEMU");
|
|
return 0;
|
|
}
|
|
EOF
|
|
if compile_prog "" "$pthread_lib" ; then
|
|
pthread_setname_np=yes
|
|
fi
|
|
|
|
# check if pipe2 is there
|
|
pipe2=no
|
|
cat > $TMPC << EOF
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
|
|
int main(void)
|
|
{
|
|
int pipefd[2];
|
|
return pipe2(pipefd, O_CLOEXEC);
|
|
}
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
pipe2=yes
|
|
fi
|
|
|
|
##########################################
|
|
# signalfd probe
|
|
signalfd="no"
|
|
cat > $TMPC << EOF
|
|
#include <unistd.h>
|
|
#include <sys/syscall.h>
|
|
#include <signal.h>
|
|
int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
signalfd=yes
|
|
fi
|
|
|
|
# check if eventfd is supported
|
|
eventfd=no
|
|
cat > $TMPC << EOF
|
|
#include <sys/eventfd.h>
|
|
|
|
int main(void)
|
|
{
|
|
return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
|
|
}
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
eventfd=yes
|
|
fi
|
|
|
|
# check for ppoll support
|
|
ppoll=no
|
|
cat > $TMPC << EOF
|
|
#include <poll.h>
|
|
|
|
int main(void)
|
|
{
|
|
struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
|
|
ppoll(&pfd, 1, 0, 0);
|
|
return 0;
|
|
}
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
ppoll=yes
|
|
fi
|
|
|
|
# check for prctl(PR_SET_TIMERSLACK , ... ) support
|
|
prctl_pr_set_timerslack=no
|
|
cat > $TMPC << EOF
|
|
#include <sys/prctl.h>
|
|
|
|
int main(void)
|
|
{
|
|
prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
|
|
return 0;
|
|
}
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
prctl_pr_set_timerslack=yes
|
|
fi
|
|
|
|
# Search for bswap_32 function
|
|
byteswap_h=no
|
|
cat > $TMPC << EOF
|
|
#include <byteswap.h>
|
|
int main(void) { return bswap_32(0); }
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
byteswap_h=yes
|
|
fi
|
|
|
|
# Search for bswap32 function
|
|
bswap_h=no
|
|
cat > $TMPC << EOF
|
|
#include <sys/endian.h>
|
|
#include <sys/types.h>
|
|
#include <machine/bswap.h>
|
|
int main(void) { return bswap32(0); }
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
bswap_h=yes
|
|
fi
|
|
|
|
##########################################
|
|
# Do we need libm
|
|
cat > $TMPC << EOF
|
|
#include <math.h>
|
|
int main(int argc, char **argv) { return isnan(sin((double)argc)); }
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
:
|
|
elif compile_prog "" "-lm" ; then
|
|
LIBS="-lm $LIBS"
|
|
else
|
|
error_exit "libm check failed"
|
|
fi
|
|
|
|
##########################################
|
|
# Do we need librt
|
|
# uClibc provides 2 versions of clock_gettime(), one with realtime
|
|
# support and one without. This means that the clock_gettime() don't
|
|
# need -lrt. We still need it for timer_create() so we check for this
|
|
# function in addition.
|
|
cat > $TMPC <<EOF
|
|
#include <signal.h>
|
|
#include <time.h>
|
|
int main(void) {
|
|
timer_create(CLOCK_REALTIME, NULL, NULL);
|
|
return clock_gettime(CLOCK_REALTIME, NULL);
|
|
}
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
:
|
|
# we need pthread for static linking. use previous pthread test result
|
|
elif compile_prog "" "$pthread_lib -lrt" ; then
|
|
LIBS="$LIBS -lrt"
|
|
fi
|
|
|
|
if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
|
|
"$aix" != "yes" -a "$haiku" != "yes" ; then
|
|
libs_softmmu="-lutil $libs_softmmu"
|
|
fi
|
|
|
|
########################################
|
|
# check if we have linux/magic.h
|
|
|
|
linux_magic_h=no
|
|
cat > $TMPC << EOF
|
|
#include <linux/magic.h>
|
|
int main(void) {
|
|
return 0;
|
|
}
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
linux_magic_h=yes
|
|
fi
|
|
|
|
########################################
|
|
# check whether we can disable warning option with a pragma (this is needed
|
|
# to silence warnings in the headers of some versions of external libraries).
|
|
# This test has to be compiled with -Werror as otherwise an unknown pragma is
|
|
# only a warning.
|
|
#
|
|
# If we can't selectively disable warning in the code, disable -Werror so that
|
|
# the build doesn't fail anyway.
|
|
|
|
pragma_disable_unused_but_set=no
|
|
cat > $TMPC << EOF
|
|
#pragma GCC diagnostic push
|
|
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
|
|
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
|
|
#pragma GCC diagnostic pop
|
|
|
|
int main(void) {
|
|
return 0;
|
|
}
|
|
EOF
|
|
if compile_prog "-Werror" "" ; then
|
|
pragma_diagnostic_available=yes
|
|
else
|
|
werror=no
|
|
fi
|
|
|
|
########################################
|
|
# check if we have valgrind/valgrind.h
|
|
|
|
valgrind_h=no
|
|
cat > $TMPC << EOF
|
|
#include <valgrind/valgrind.h>
|
|
int main(void) {
|
|
return 0;
|
|
}
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
valgrind_h=yes
|
|
fi
|
|
|
|
########################################
|
|
# check if environ is declared
|
|
|
|
has_environ=no
|
|
cat > $TMPC << EOF
|
|
#include <unistd.h>
|
|
int main(void) {
|
|
environ = 0;
|
|
return 0;
|
|
}
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
has_environ=yes
|
|
fi
|
|
|
|
########################################
|
|
# check if cpuid.h is usable.
|
|
|
|
cpuid_h=no
|
|
cat > $TMPC << EOF
|
|
#include <cpuid.h>
|
|
int main(void) {
|
|
unsigned a, b, c, d;
|
|
int max = __get_cpuid_max(0, 0);
|
|
|
|
if (max >= 1) {
|
|
__cpuid(1, a, b, c, d);
|
|
}
|
|
|
|
if (max >= 7) {
|
|
__cpuid_count(7, 0, a, b, c, d);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
cpuid_h=yes
|
|
fi
|
|
|
|
########################################
|
|
# check if __[u]int128_t is usable.
|
|
|
|
int128=no
|
|
cat > $TMPC << EOF
|
|
#if defined(__clang_major__) && defined(__clang_minor__)
|
|
# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
|
|
# error __int128_t does not work in CLANG before 3.2
|
|
# endif
|
|
#endif
|
|
__int128_t a;
|
|
__uint128_t b;
|
|
int main (void) {
|
|
a = a + b;
|
|
b = a * b;
|
|
a = a * a;
|
|
return 0;
|
|
}
|
|
EOF
|
|
if compile_prog "" "" ; then
|
|
int128=yes
|
|
fi
|
|
|
|
##########################################
|
|
# Disable zero malloc errors for official releases unless explicitly told to
|
|
# enable/disable
|
|
if test -z "$zero_malloc" ; then
|
|
if test "$z_version" = "50" ; then
|
|
zero_malloc="no"
|
|
else
|
|
zero_malloc="yes"
|
|
fi
|
|
fi
|
|
|
|
# Now we've finished running tests it's OK to add -Werror to the compiler flags
|
|
if test "$werror" = "yes"; then
|
|
QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
|
|
fi
|
|
|
|
if test "$solaris" = "no" ; then
|
|
if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
|
|
LDFLAGS="-Wl,--warn-common $LDFLAGS"
|
|
fi
|
|
fi
|
|
|
|
# Use ASLR, no-SEH and DEP if available
|
|
if test "$mingw32" = "yes" ; then
|
|
for flag in --dynamicbase --no-seh --nxcompat; do
|
|
if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
|
|
LDFLAGS="-Wl,$flag $LDFLAGS"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
qemu_confdir=$sysconfdir$confsuffix
|
|
qemu_moddir=$libdir$confsuffix
|
|
|
|
echo "Install prefix $prefix"
|
|
echo "binary directory `eval echo $bindir`"
|
|
echo "library directory `eval echo $libdir`"
|
|
echo "module directory `eval echo $qemu_moddir`"
|
|
echo "libexec directory `eval echo $libexecdir`"
|
|
echo "include directory `eval echo $includedir`"
|
|
echo "config directory `eval echo $sysconfdir`"
|
|
if test "$mingw32" = "no" ; then
|
|
echo "local state directory `eval echo $local_statedir`"
|
|
echo "Manual directory `eval echo $mandir`"
|
|
echo "ELF interp prefix $interp_prefix"
|
|
else
|
|
echo "local state directory queried at runtime"
|
|
echo "Windows SDK $win_sdk"
|
|
fi
|
|
echo "Source path $source_path"
|
|
echo "C compiler $cc"
|
|
echo "Host C compiler $host_cc"
|
|
echo "Objective-C compiler $objcc"
|
|
echo "ARFLAGS $ARFLAGS"
|
|
echo "CFLAGS $CFLAGS"
|
|
echo "QEMU_CFLAGS $QEMU_CFLAGS"
|
|
echo "LDFLAGS $LDFLAGS"
|
|
echo "make $make"
|
|
echo "install $install"
|
|
echo "python $python"
|
|
echo "host CPU $cpu"
|
|
echo "host big endian $bigendian"
|
|
echo "target list $target_list"
|
|
echo "tcg debug enabled $debug_tcg"
|
|
echo "strip binaries $strip_opt"
|
|
echo "static build $static"
|
|
echo "mingw32 support $mingw32"
|
|
if test -n "$sparc_cpu"; then
|
|
echo "Target Sparc Arch $sparc_cpu"
|
|
fi
|
|
echo "PIE $pie"
|
|
|
|
config_host_mak="config-host.mak"
|
|
|
|
echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
|
|
|
|
echo "# Automatically generated by configure - do not modify" > $config_host_mak
|
|
echo >> $config_host_mak
|
|
|
|
echo all: >> $config_host_mak
|
|
echo "prefix=$prefix" >> $config_host_mak
|
|
echo "bindir=$bindir" >> $config_host_mak
|
|
echo "libdir=$libdir" >> $config_host_mak
|
|
echo "libexecdir=$libexecdir" >> $config_host_mak
|
|
echo "includedir=$includedir" >> $config_host_mak
|
|
echo "mandir=$mandir" >> $config_host_mak
|
|
echo "sysconfdir=$sysconfdir" >> $config_host_mak
|
|
echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
|
|
echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
|
|
echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
|
|
echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
|
|
if test "$mingw32" = "no" ; then
|
|
echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
|
|
fi
|
|
echo "qemu_helperdir=$libexecdir" >> $config_host_mak
|
|
echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
|
|
echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
|
|
echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
|
|
|
|
echo "ARCH=$ARCH" >> $config_host_mak
|
|
|
|
if test "$debug_tcg" = "yes" ; then
|
|
echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
|
|
fi
|
|
if test "$strip_opt" = "yes" ; then
|
|
echo "STRIP=${strip}" >> $config_host_mak
|
|
fi
|
|
if test "$bigendian" = "yes" ; then
|
|
echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
|
|
fi
|
|
if test "$mingw32" = "yes" ; then
|
|
echo "CONFIG_WIN32=y" >> $config_host_mak
|
|
rc_version=`cat $source_path/VERSION`
|
|
version_major=${rc_version%%.*}
|
|
rc_version=${rc_version#*.}
|
|
version_minor=${rc_version%%.*}
|
|
rc_version=${rc_version#*.}
|
|
version_subminor=${rc_version%%.*}
|
|
version_micro=0
|
|
echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
|
|
echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
|
|
else
|
|
echo "CONFIG_POSIX=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$linux" = "yes" ; then
|
|
echo "CONFIG_LINUX=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$darwin" = "yes" ; then
|
|
echo "CONFIG_DARWIN=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$aix" = "yes" ; then
|
|
echo "CONFIG_AIX=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$solaris" = "yes" ; then
|
|
echo "CONFIG_SOLARIS=y" >> $config_host_mak
|
|
echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
|
|
if test "$needs_libsunmath" = "yes" ; then
|
|
echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
|
|
fi
|
|
fi
|
|
if test "$haiku" = "yes" ; then
|
|
echo "CONFIG_HAIKU=y" >> $config_host_mak
|
|
fi
|
|
if test "$static" = "yes" ; then
|
|
echo "CONFIG_STATIC=y" >> $config_host_mak
|
|
fi
|
|
qemu_version=`head $source_path/VERSION`
|
|
echo "VERSION=$qemu_version" >>$config_host_mak
|
|
echo "PKGVERSION=$pkgversion" >>$config_host_mak
|
|
echo "SRC_PATH=$source_path" >> $config_host_mak
|
|
echo "TARGET_DIRS=$target_list" >> $config_host_mak
|
|
if test "$pipe2" = "yes" ; then
|
|
echo "CONFIG_PIPE2=y" >> $config_host_mak
|
|
fi
|
|
if test "$eventfd" = "yes" ; then
|
|
echo "CONFIG_EVENTFD=y" >> $config_host_mak
|
|
fi
|
|
if test "$ppoll" = "yes" ; then
|
|
echo "CONFIG_PPOLL=y" >> $config_host_mak
|
|
fi
|
|
if test "$prctl_pr_set_timerslack" = "yes" ; then
|
|
echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
|
|
fi
|
|
if test "$byteswap_h" = "yes" ; then
|
|
echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
|
|
fi
|
|
if test "$bswap_h" = "yes" ; then
|
|
echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
|
|
fi
|
|
if test "glib_subprocess" = "yes" ; then
|
|
echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
|
|
fi
|
|
echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
|
|
if test "$signalfd" = "yes" ; then
|
|
echo "CONFIG_SIGNALFD=y" >> $config_host_mak
|
|
fi
|
|
if test "$tcg_interpreter" = "yes" ; then
|
|
echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
|
|
fi
|
|
|
|
# XXX: suppress that
|
|
if [ "$bsd" = "yes" ] ; then
|
|
echo "CONFIG_BSD=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$zero_malloc" = "yes" ; then
|
|
echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$linux_magic_h" = "yes" ; then
|
|
echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$pragma_diagnostic_available" = "yes" ; then
|
|
echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$valgrind_h" = "yes" ; then
|
|
echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$has_environ" = "yes" ; then
|
|
echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$cpuid_h" = "yes" ; then
|
|
echo "CONFIG_CPUID_H=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$int128" = "yes" ; then
|
|
echo "CONFIG_INT128=y" >> $config_host_mak
|
|
fi
|
|
|
|
# Hold two types of flag:
|
|
# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
|
|
# a thread we have a handle to
|
|
# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
|
|
# platform
|
|
if test "$pthread_setname_np" = "yes" ; then
|
|
echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
|
|
echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
|
|
fi
|
|
|
|
if test "$tcg_interpreter" = "yes"; then
|
|
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
|
|
elif test "$ARCH" = "sparc64" ; then
|
|
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
|
|
elif test "$ARCH" = "s390x" ; then
|
|
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
|
|
elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
|
|
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
|
|
elif test "$ARCH" = "ppc64" ; then
|
|
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
|
|
else
|
|
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
|
|
fi
|
|
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
|
|
|
|
echo "MAKE=$make" >> $config_host_mak
|
|
echo "INSTALL=$install" >> $config_host_mak
|
|
echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
|
|
echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
|
|
if test -n "$libtool"; then
|
|
echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
|
|
echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
|
|
else
|
|
echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
|
|
echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
|
|
fi
|
|
echo "PYTHON=$python" >> $config_host_mak
|
|
echo "CC=$cc" >> $config_host_mak
|
|
echo "CC_I386=$cc_i386" >> $config_host_mak
|
|
echo "HOST_CC=$host_cc" >> $config_host_mak
|
|
echo "OBJCC=$objcc" >> $config_host_mak
|
|
echo "AR=$ar" >> $config_host_mak
|
|
echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
|
|
echo "AS=$as" >> $config_host_mak
|
|
echo "CPP=$cpp" >> $config_host_mak
|
|
echo "OBJCOPY=$objcopy" >> $config_host_mak
|
|
echo "LD=$ld" >> $config_host_mak
|
|
echo "NM=$nm" >> $config_host_mak
|
|
echo "WINDRES=$windres" >> $config_host_mak
|
|
echo "LIBTOOL=$libtool" >> $config_host_mak
|
|
echo "CFLAGS=$CFLAGS" >> $config_host_mak
|
|
echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
|
|
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
|
|
echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
|
|
if test "$cross_prefix" != ""; then
|
|
echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
|
|
else
|
|
echo "AUTOCONF_HOST := " >> $config_host_mak
|
|
fi
|
|
echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
|
|
echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
|
|
echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
|
|
echo "LIBS+=$LIBS" >> $config_host_mak
|
|
echo "EXESUF=$EXESUF" >> $config_host_mak
|
|
echo "DSOSUF=$DSOSUF" >> $config_host_mak
|
|
echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
|
|
echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
|
|
|
|
for target in $target_list; do
|
|
target_dir="$target"
|
|
config_target_mak=$target_dir/config-target.mak
|
|
target_name=`echo $target | cut -d '-' -f 1`
|
|
target_bigendian="no"
|
|
|
|
case "$target_name" in
|
|
armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
|
|
target_bigendian=yes
|
|
;;
|
|
esac
|
|
target_softmmu="no"
|
|
target_user_only="no"
|
|
case "$target" in
|
|
${target_name}-softmmu)
|
|
target_softmmu="yes"
|
|
;;
|
|
*)
|
|
error_exit "Target '$target' not recognised"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
mkdir -p $target_dir
|
|
echo "# Automatically generated by configure - do not modify" > $config_target_mak
|
|
|
|
bflt="no"
|
|
interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
|
|
|
|
TARGET_ARCH="$target_name"
|
|
TARGET_BASE_ARCH=""
|
|
TARGET_ABI_DIR=""
|
|
|
|
case "$target_name" in
|
|
i386)
|
|
;;
|
|
x86_64)
|
|
TARGET_BASE_ARCH=i386
|
|
;;
|
|
alpha)
|
|
;;
|
|
arm|armeb)
|
|
TARGET_ARCH=arm
|
|
bflt="yes"
|
|
;;
|
|
aarch64)
|
|
TARGET_BASE_ARCH=arm
|
|
bflt="yes"
|
|
;;
|
|
cris)
|
|
;;
|
|
lm32)
|
|
;;
|
|
m68k)
|
|
bflt="yes"
|
|
;;
|
|
microblaze|microblazeel)
|
|
TARGET_ARCH=microblaze
|
|
bflt="yes"
|
|
;;
|
|
mips|mipsel)
|
|
TARGET_ARCH=mips
|
|
echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
|
|
;;
|
|
mipsn32|mipsn32el)
|
|
TARGET_ARCH=mips64
|
|
TARGET_BASE_ARCH=mips
|
|
echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
|
|
echo "TARGET_ABI32=y" >> $config_target_mak
|
|
;;
|
|
mips64|mips64el)
|
|
TARGET_ARCH=mips64
|
|
TARGET_BASE_ARCH=mips
|
|
echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
|
|
;;
|
|
tricore)
|
|
;;
|
|
moxie)
|
|
;;
|
|
or32)
|
|
TARGET_ARCH=openrisc
|
|
TARGET_BASE_ARCH=openrisc
|
|
;;
|
|
ppc)
|
|
;;
|
|
ppcemb)
|
|
TARGET_BASE_ARCH=ppc
|
|
TARGET_ABI_DIR=ppc
|
|
;;
|
|
ppc64)
|
|
TARGET_BASE_ARCH=ppc
|
|
TARGET_ABI_DIR=ppc
|
|
;;
|
|
ppc64le)
|
|
TARGET_ARCH=ppc64
|
|
TARGET_BASE_ARCH=ppc
|
|
TARGET_ABI_DIR=ppc
|
|
;;
|
|
ppc64abi32)
|
|
TARGET_ARCH=ppc64
|
|
TARGET_BASE_ARCH=ppc
|
|
TARGET_ABI_DIR=ppc
|
|
echo "TARGET_ABI32=y" >> $config_target_mak
|
|
;;
|
|
sh4|sh4eb)
|
|
TARGET_ARCH=sh4
|
|
bflt="yes"
|
|
;;
|
|
sparc)
|
|
;;
|
|
sparc64)
|
|
TARGET_BASE_ARCH=sparc
|
|
;;
|
|
sparc32plus)
|
|
TARGET_ARCH=sparc64
|
|
TARGET_BASE_ARCH=sparc
|
|
TARGET_ABI_DIR=sparc
|
|
echo "TARGET_ABI32=y" >> $config_target_mak
|
|
;;
|
|
s390x)
|
|
;;
|
|
unicore32)
|
|
;;
|
|
xtensa|xtensaeb)
|
|
TARGET_ARCH=xtensa
|
|
;;
|
|
*)
|
|
error_exit "Unsupported target CPU"
|
|
;;
|
|
esac
|
|
# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
|
|
if [ "$TARGET_BASE_ARCH" = "" ]; then
|
|
TARGET_BASE_ARCH=$TARGET_ARCH
|
|
fi
|
|
|
|
symlink "$source_path/Makefile.target" "$target_dir/Makefile"
|
|
|
|
upper() {
|
|
echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
|
|
}
|
|
|
|
target_arch_name="`upper $TARGET_ARCH`"
|
|
echo "TARGET_$target_arch_name=y" >> $config_target_mak
|
|
echo "TARGET_NAME=$target_name" >> $config_target_mak
|
|
echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
|
|
if [ "$TARGET_ABI_DIR" = "" ]; then
|
|
TARGET_ABI_DIR=$TARGET_ARCH
|
|
fi
|
|
echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
|
|
if [ "$HOST_VARIANT_DIR" != "" ]; then
|
|
echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
|
|
fi
|
|
if test "$target_bigendian" = "yes" ; then
|
|
echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
|
|
fi
|
|
if test "$target_softmmu" = "yes" ; then
|
|
echo "CONFIG_SOFTMMU=y" >> $config_target_mak
|
|
fi
|
|
if test "$target_user_only" = "yes" ; then
|
|
echo "CONFIG_USER_ONLY=y" >> $config_target_mak
|
|
echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
|
|
fi
|
|
list=""
|
|
if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
|
|
echo "TARGET_HAS_BFLT=y" >> $config_target_mak
|
|
fi
|
|
|
|
# generate QEMU_CFLAGS/LDFLAGS for targets
|
|
|
|
cflags=""
|
|
ldflags=""
|
|
|
|
if test "$tcg_interpreter" = "yes" ; then
|
|
echo "CONFIG_TCI_DIS=y" >> $config_target_mak
|
|
echo "CONFIG_TCI_DIS=y" >> config-all-disas.mak
|
|
fi
|
|
|
|
case "$ARCH" in
|
|
alpha)
|
|
# Ensure there's only a single GP
|
|
cflags="-msmall-data $cflags"
|
|
;;
|
|
esac
|
|
|
|
echo "LDFLAGS+=$ldflags" >> $config_target_mak
|
|
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
|
|
echo "QEMU_CFLAGS+=-include ${target_name}.h" >> $config_target_mak
|
|
|
|
done # for target in $targets
|
|
|
|
# Save the configure command line for later reuse.
|
|
cat <<EOD >config.status
|
|
#!/bin/sh
|
|
# Generated by configure.
|
|
# Run this file to recreate the current configuration.
|
|
# Compiler output produced by configure, useful for debugging
|
|
# configure, is in config.log if it exists.
|
|
EOD
|
|
printf "exec" >>config.status
|
|
printf " '%s'" "$0" "$@" >>config.status
|
|
echo >>config.status
|
|
chmod +x config.status
|
|
|
|
rm -r "$TMPDIR1"
|