echo >> config.log
echo "#" >> config.log
-error_exit() {
- echo
+print_error() {
+ (echo
echo "ERROR: $1"
while test -n "$2"; do
echo " $2"
shift
done
- echo
+ echo) >&2
+}
+
+error_exit() {
+ print_error "$@"
exit 1
}
echo "$trace_backends" | grep "$1" >/dev/null
}
+glob() {
+ eval test -z '"${1#'"$2"'}"'
+}
+
+supported_hax_target() {
+ test "$hax" = "yes" || return 1
+ glob "$1" "*-softmmu" || return 1
+ case "${1%-softmmu}" in
+ i386|x86_64)
+ return 0
+ ;;
+ esac
+ return 1
+}
+
+supported_kvm_target() {
+ test "$kvm" = "yes" || return 1
+ glob "$1" "*-softmmu" || return 1
+ case "${1%-softmmu}:$cpu" in
+ arm:arm | aarch64:aarch64 | \
+ i386:i386 | i386:x86_64 | i386:x32 | \
+ x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
+ mips:mips | mipsel:mips | \
+ ppc:ppc | ppcemb:ppc | ppc64:ppc | \
+ ppc:ppc64 | ppcemb:ppc64 | ppc64:ppc64 | \
+ s390x:s390x)
+ return 0
+ ;;
+ esac
+ return 1
+}
+
+supported_xen_target() {
+ test "$xen" = "yes" || return 1
+ glob "$1" "*-softmmu" || return 1
+ case "${1%-softmmu}:$cpu" in
+ arm:arm | aarch64:aarch64 | \
+ i386:i386 | i386:x86_64 | x86_64:i386 | x86_64:x86_64)
+ return 0
+ ;;
+ esac
+ return 1
+}
+
+supported_target() {
+ case "$1" in
+ *-softmmu)
+ ;;
+ *-linux-user)
+ if test "$linux" != "yes"; then
+ print_error "Target '$target' is only available on a Linux host"
+ return 1
+ fi
+ ;;
+ *-bsd-user)
+ if test "$bsd" != "yes"; then
+ print_error "Target '$target' is only available on a BSD host"
+ return 1
+ fi
+ ;;
+ *)
+ print_error "Invalid target name '$target'"
+ return 1
+ ;;
+ esac
+ test "$tcg" = "yes" && return 0
+ supported_kvm_target "$1" && return 0
+ supported_xen_target "$1" && return 0
+ supported_hax_target "$1" && return 0
+ print_error "TCG disabled, but hardware accelerator not available for '$target'"
+ return 1
+}
+
# default parameters
source_path=$(dirname "$0")
cpu=""
attr=""
libattr=""
xfs=""
+tcg="yes"
vhost_net="no"
vhost_scsi="no"
;;
--enable-cap-ng) cap_ng="yes"
;;
+ --disable-tcg) tcg="no"
+ ;;
+ --enable-tcg) tcg="yes"
+ ;;
--disable-spice) spice="no"
;;
--enable-spice) spice="yes"
fi
if test -z "${target_list+xxx}" ; then
- target_list="$default_target_list"
+ for target in $default_target_list; do
+ supported_target $target 2>/dev/null && \
+ target_list="$target_list $target"
+ done
+ target_list="${target_list# }"
else
target_list=$(echo "$target_list" | sed -e 's/,/ /g')
+ for target in $target_list; do
+ # Check that we recognised the target name; this allows a more
+ # friendly error message than if we let it fall through.
+ case " $default_target_list " in
+ *" $target "*)
+ ;;
+ *)
+ error_exit "Unknown target name '$target'"
+ ;;
+ esac
+ supported_target $target || exit 1
+ done
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
# GTK probe
if test "$gtkabi" = ""; then
- # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
- # Use 3.0 as a fallback if that is available.
- if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
- gtkabi=2.0
- elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
+ # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
+ # Use 2.0 as a fallback if that is available.
+ if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
gtkabi=3.0
- else
+ elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
gtkabi=2.0
+ else
+ gtkabi=3.0
fi
fi
libs_softmmu="$gtk_libs $libs_softmmu"
gtk="yes"
elif test "$gtk" = "yes"; then
- feature_not_found "gtk" "Install gtk2 or gtk3 devel"
+ feature_not_found "gtk" "Install gtk3-devel"
else
gtk="no"
fi
# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
if test "$sdlabi" = ""; then
- if $pkg_config --exists "sdl"; then
- sdlabi=1.2
- elif $pkg_config --exists "sdl2"; then
+ if $pkg_config --exists "sdl2"; then
sdlabi=2.0
- else
+ elif $pkg_config --exists "sdl"; then
sdlabi=1.2
+ else
+ sdlabi=2.0
fi
fi
sdlversion=$($sdlconfig --version)
else
if test "$sdl" = "yes" ; then
- feature_not_found "sdl" "Install SDL devel"
+ feature_not_found "sdl" "Install SDL2-devel"
fi
sdl=no
fi
EOF
IFS=:
for curses_inc in $curses_inc_list; do
+ # Make sure we get the wide character prototypes
+ curses_inc="-DNCURSES_WIDECHAR $curses_inc"
IFS=:
for curses_lib in $curses_lib_list; do
unset IFS
echo "host CPU $cpu"
echo "host big endian $bigendian"
echo "target list $target_list"
-echo "tcg debug enabled $debug_tcg"
echo "gprof enabled $gprof"
echo "sparse enabled $sparse"
echo "strip binaries $strip_opt"
echo "Install blobs $blobs"
echo "KVM support $kvm"
echo "HAX support $hax"
+echo "TCG support $tcg"
+if test "$tcg" = "yes" ; then
+ echo "TCG debug enabled $debug_tcg"
+ echo "TCG interpreter $tcg_interpreter"
+fi
echo "RDMA support $rdma"
-echo "TCG interpreter $tcg_interpreter"
echo "fdt support $fdt"
echo "preadv support $preadv"
echo "fdatasync $fdatasync"
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
+if test "$tcg" = "yes"; then
+ echo "CONFIG_TCG=y" >> $config_host_mak
+ if test "$tcg_interpreter" = "yes" ; then
+ echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
+ fi
fi
if test "$fdatasync" = "yes" ; then
echo "CONFIG_FDATASYNC=y" >> $config_host_mak
target_softmmu="yes"
;;
${target_name}-linux-user)
- if test "$linux" != "yes" ; then
- error_exit "Target '$target' is only available on a Linux host"
- fi
target_user_only="yes"
target_linux_user="yes"
;;
${target_name}-bsd-user)
- if test "$bsd" != "yes" ; then
- error_exit "Target '$target' is only available on a BSD host"
- fi
target_user_only="yes"
target_bsd_user="yes"
;;
;;
m68k)
bflt="yes"
- gdb_xml_files="cf-core.xml cf-fp.xml"
+ gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
;;
microblaze|microblazeel)
TARGET_ARCH=microblaze
if [ "$HOST_VARIANT_DIR" != "" ]; then
echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
fi
-case "$target_name" in
- i386|x86_64)
- if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
- echo "CONFIG_XEN=y" >> $config_target_mak
- if test "$xen_pci_passthrough" = yes; then
+
+if supported_xen_target $target; then
+ echo "CONFIG_XEN=y" >> $config_target_mak
+ if test "$xen_pci_passthrough" = yes; then
echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
- fi
fi
- ;;
- *)
-esac
-case "$target_name" in
- aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
- # Make sure the target and host cpus are compatible
- if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
- \( "$target_name" = "$cpu" -o \
- \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
- \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
- \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
- \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
- \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
- \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
- \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
- \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
- \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
- echo "CONFIG_KVM=y" >> $config_target_mak
- if test "$vhost_net" = "yes" ; then
+fi
+if supported_kvm_target $target; then
+ echo "CONFIG_KVM=y" >> $config_target_mak
+ if test "$vhost_net" = "yes" ; then
echo "CONFIG_VHOST_NET=y" >> $config_target_mak
echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
- fi
fi
-esac
-if test "$hax" = "yes" ; then
- if test "$target_softmmu" = "yes" ; then
- case "$target_name" in
- i386|x86_64)
- echo "CONFIG_HAX=y" >> $config_target_mak
- ;;
- esac
- fi
+fi
+if supported_hax_target $target; then
+ echo "CONFIG_HAX=y" >> $config_target_mak
fi
if test "$target_bigendian" = "yes" ; then
echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak