Commit e205c790 authored by Jan Kiszka's avatar Jan Kiszka Committed by Marcelo Tosatti
Browse files

Switch build system to accompanied kernel headers



This helps reducing our build-time checks for feature support in the
available Linux kernel headers. And it helps users that do not have
sufficiently recent headers installed on their build machine.

Consequently, the patch removes and build-time checks for kvm and vhost
in configure, the --kerneldir switch, and KVM_CFLAGS. Kernel headers are
supposed to be provided by QEMU only.

s390 needs some extra love as it carries redefinitions from kernel
headers.

CC: Alexander Graf <agraf@suse.de>
Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
parent 51b24e34
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ endif

TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
$(call set-vpath, $(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw)
QEMU_CFLAGS+= -I.. -I$(TARGET_PATH) -DNEED_CPU_H
QEMU_CFLAGS+= -I.. -I../linux-headers -I$(TARGET_PATH) -DNEED_CPU_H

include $(SRC_PATH)/Makefile.objs

@@ -37,8 +37,6 @@ ifndef CONFIG_HAIKU
LIBS+=-lm
endif

kvm.o kvm-all.o vhost.o vhost_net.o kvmclock.o: QEMU_CFLAGS+=$(KVM_CFLAGS)

config-target.h: config-target.h-timestamp
config-target.h-timestamp: config-target.mak

+19 −132
Original line number Diff line number Diff line
@@ -113,8 +113,7 @@ curl=""
curses=""
docs=""
fdt=""
kvm=""
kvm_para=""
kvm="yes"
nptl=""
sdl=""
vnc="yes"
@@ -130,7 +129,7 @@ xen=""
xen_ctrl_version=""
linux_aio=""
attr=""
vhost_net=""
vhost_net="yes"
xfs=""

gprof="no"
@@ -166,7 +165,6 @@ guest_base=""
uname_release=""
io_thread="no"
mixemu="no"
kerneldir=""
aix="no"
blobs="yes"
pkgversion=""
@@ -715,8 +713,6 @@ for opt do
  ;;
  --disable-blobs) blobs="no"
  ;;
  --kerneldir=*) kerneldir="$optarg"
  ;;
  --with-pkgversion=*) pkgversion=" ($optarg)"
  ;;
  --disable-docs) docs="no"
@@ -1005,7 +1001,6 @@ echo " --disable-attr disables attr and xattr support"
echo "  --enable-attr            enable attr and xattr support"
echo "  --enable-io-thread       enable IO thread"
echo "  --disable-blobs          disable installing provided firmware blobs"
echo "  --kerneldir=PATH         look for kernel includes in PATH"
echo "  --enable-docs            enable documentation build"
echo "  --disable-docs           disable documentation build"
echo "  --disable-vhost-net      disable vhost-net acceleration support"
@@ -1778,124 +1773,6 @@ EOF
  fi
fi

##########################################
# kvm probe
if test "$kvm" != "no" ; then
    cat > $TMPC <<EOF
#include <linux/kvm.h>
#if !defined(KVM_API_VERSION) || KVM_API_VERSION < 12 || KVM_API_VERSION > 12
#error Invalid KVM version
#endif
EOF
    must_have_caps="KVM_CAP_USER_MEMORY \
                    KVM_CAP_DESTROY_MEMORY_REGION_WORKS \
                    KVM_CAP_COALESCED_MMIO \
                    KVM_CAP_SYNC_MMU \
                   "
    if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) ; then
      must_have_caps="$caps \
                      KVM_CAP_SET_TSS_ADDR \
                      KVM_CAP_EXT_CPUID \
                      KVM_CAP_CLOCKSOURCE \
                      KVM_CAP_NOP_IO_DELAY \
                      KVM_CAP_PV_MMU \
                      KVM_CAP_MP_STATE \
                      KVM_CAP_USER_NMI \
                     "
    fi
    for c in $must_have_caps ; do
      cat >> $TMPC <<EOF
#if !defined($c)
#error Missing KVM capability $c
#endif
EOF
    done
    cat >> $TMPC <<EOF
int main(void) { return 0; }
EOF
  if test "$kerneldir" != "" ; then
      kvm_cflags=-I"$kerneldir"/include
      if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) \
         -a -d "$kerneldir/arch/x86/include" ; then
            kvm_cflags="$kvm_cflags -I$kerneldir/arch/x86/include"
	elif test "$cpu" = "ppc" -a -d "$kerneldir/arch/powerpc/include" ; then
	    kvm_cflags="$kvm_cflags -I$kerneldir/arch/powerpc/include"
	elif test "$cpu" = "s390x" -a -d "$kerneldir/arch/s390/include" ; then
	    kvm_cflags="$kvm_cflags -I$kerneldir/arch/s390/include"
        elif test -d "$kerneldir/arch/$cpu/include" ; then
            kvm_cflags="$kvm_cflags -I$kerneldir/arch/$cpu/include"
      fi
  else
    kvm_cflags=`$pkg_config --cflags kvm-kmod 2>/dev/null`
  fi
  if compile_prog "$kvm_cflags" "" ; then
    kvm=yes
    cat > $TMPC <<EOF
#include <linux/kvm_para.h>
int main(void) { return 0; }
EOF
    if compile_prog "$kvm_cflags" "" ; then
      kvm_para=yes
    fi
  else
    if test "$kvm" = "yes" ; then
      if has awk && has grep; then
        kvmerr=`LANG=C $cc $QEMU_CFLAGS -o $TMPE $kvm_cflags $TMPC 2>&1 \
	| grep "error: " \
	| awk -F "error: " '{if (NR>1) printf(", "); printf("%s",$2);}'`
        if test "$kvmerr" != "" ; then
          echo -e "${kvmerr}\n\
NOTE: To enable KVM support, update your kernel to 2.6.29+ or install \
recent kvm-kmod from http://sourceforge.net/projects/kvm."
        fi
      fi
      feature_not_found "kvm"
    fi
    kvm=no
  fi
fi

##########################################
# test for ppc kvm pvr setting

if test "$kvm" = "yes" && test "$cpu" = "ppc" -o "$cpu" = "ppc64"; then
            cat > $TMPC <<EOF
    #include <asm/kvm.h>
    int main(void) { struct kvm_sregs s; s.pvr = 0; return 0; }
EOF
    if compile_prog "$kvm_cflags" "" ; then
        kvm_ppc_pvr=yes
    else
        kvm_ppc_pvr=no
    fi
fi

##########################################
# test for vhost net

if test "$vhost_net" != "no"; then
    if test "$kvm" != "no"; then
            cat > $TMPC <<EOF
    #include <linux/vhost.h>
    int main(void) { return 0; }
EOF
            if compile_prog "$kvm_cflags" "" ; then
                vhost_net=yes
            else
                if test "$vhost_net" = "yes" ; then
                    feature_not_found "vhost-net"
                fi
                vhost_net=no
            fi
    else
            if test "$vhost_net" = "yes" ; then
                echo "NOTE: vhost-net feature requires KVM (--enable-kvm)."
                feature_not_found "vhost-net"
            fi
            vhost_net=no
    fi
fi

##########################################
# pthread probe
PTHREADLIBS_LIST="-lpthread -lpthreadGC2"
@@ -3346,17 +3223,12 @@ case "$target_arch2" in
      \( "$target_arch2" = "x86_64" -a "$cpu" = "i386"   \) -o \
      \( "$target_arch2" = "i386"   -a "$cpu" = "x86_64" \) \) ; then
      echo "CONFIG_KVM=y" >> $config_target_mak
      echo "KVM_CFLAGS=$kvm_cflags" >> $config_target_mak
      if test "$kvm_para" = "yes"; then
      echo "CONFIG_KVM_PARA=y" >> $config_target_mak
      fi
      if test $vhost_net = "yes" ; then
        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
      fi
      if test "$kvm_ppc_pvr" = "yes" ; then
      echo "CONFIG_KVM_PPC_PVR=y" >> $config_target_mak
    fi
    fi
esac
if test "$target_bigendian" = "yes" ; then
  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
@@ -3546,6 +3418,21 @@ if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
  esac
fi

# use included Linux headers
includes="-I\$(SRC_PATH)/linux-headers $includes"
mkdir -p linux-headers
case "$cpu" in
i386|x86_64)
  symlink $source_path/linux-headers/asm-x86 linux-headers/asm
  ;;
ppcemb|ppc|ppc64)
  symlink $source_path/linux-headers/asm-x86 linux-headers/asm
  ;;
s390x)
  symlink $source_path/linux-headers/asm-s390 linux-headers/asm
  ;;
esac

echo "LDFLAGS+=$ldflags" >> $config_target_mak
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
echo "QEMU_INCLUDES+=$includes" >> $config_target_mak
+0 −10
Original line number Diff line number Diff line
@@ -313,16 +313,6 @@ CPUState *s390_cpu_addr2state(uint16_t cpu_addr);
/* from s390-virtio-bus */
extern const target_phys_addr_t virtio_size;

#ifndef KVM_S390_SIGP_STOP
#define KVM_S390_SIGP_STOP              0
#define KVM_S390_PROGRAM_INT            0
#define KVM_S390_SIGP_SET_PREFIX        0
#define KVM_S390_RESTART                0
#define KVM_S390_INT_VIRTIO             0
#define KVM_S390_INT_SERVICE            0
#define KVM_S390_INT_EMERGENCY          0
#endif

#endif
void cpu_lock(void);
void cpu_unlock(void);
+1 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#include "helpers.h"
#include <string.h>
#include "kvm.h"
#include <linux/kvm.h>
#include "qemu-timer.h"

/*****************************************************************************/