Make KVM compile on split source/object kernel configurations
PATCH 1/1 Make KVM compile on split source/object kernel configurations
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE).
To keep compatible and have users have a good experience on building KVM on any distribution, this patch attempts to rebuild the logic from the kernel Makefile as closely as possible. With it I successfully built KVM on a current SUSE system.
Please check and see if it breaks the build process for anyone else. Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.
configure +7 -0
@@ -1,6 +1,7 @@ #!/bin/bash prefix=/usr/local +kernelsourcedir= kerneldir=/lib/modules/$(uname -r)/build cc=gcc ld=ld
@@ -102,6 +103,11 @@ if [ "$arch" = "powerpc" ]; then qemu_ldflags="$qemu_ldflags -L $PWD/libfdt" fi +# see if we have split build and source directories +if [ -d "$kerneldir/include2" ]; then + kernelsourcedir=${kerneldir%/*}/source +fi + #configure user dir (cd user; ./configure --prefix="$prefix" --kerneldir="$libkvm_kerneldir" \ --arch="$arch" \
@@ -124,6 +130,7 @@ cat <<EOF > config.mak ARCH=$arch PREFIX=$prefix KERNELDIR=$kerneldir +KERNELSOURCEDIR=$kernelsourcedir LIBKVM_KERNELDIR=$libkvm_kerneldir WANT_MODULE=$want_module CROSS_COMPILE=$cross_prefix
kernel/Makefile +3 -1
@@ -36,7 +36,9 @@ hack-files = $(hack-files-$(ARCH_DIR)) all:: header-link prerequisite # include header priority 1) $LINUX 2) $KERNELDIR 3) include-compat $(MAKE) -C $(KERNELDIR) M=`pwd` \ - LINUXINCLUDE="-I`pwd`/include -Iinclude -Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \ + LINUXINCLUDE="-I`pwd`/include -Iinclude \ + $(if $(KERNELSOURCEDIR),-Iinclude2 -I$(KERNELSOURCEDIR)/include) \ + -Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \ -include include/linux/autoconf.h \ -include `pwd`/$(ARCH_DIR)/external-module-compat.h" "$$@"
Quoted 8 lines · Alexander Graf
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE). To keep compatible and have users have a good experience on building KVM on any distribution, this patch attempts to rebuild the logic from the kernel
Makefileas closely as possible. With it I successfully built KVM on a current SUSE system.
Quoted 5 lines
Signed-off-by Alexander Graf <[email protected]>Please check and see if it breaks the build process for anyone else. Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.
Hi, Graf
what problems did you meet when building kvm/ia64 ?
Xiantao
Quoted 11 lines · Xiantao
Quoted 10 lines · Alexander Graf
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE). To keep compatible and have users have a good experience on building KVM on any distribution, this patch attempts to rebuild the logic from the kernel
Makefileas closely as possible. With it I successfully built KVM on a current SUSE system.Signed-off-by Alexander Graf <[email protected]>
Quoted 7 lines
Quoted 3 lines
Please check and see if it breaks the build process for anyone else. Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.
Hi, Graf
what problems did you meet when building kvm/ia64 ?
Xiantao
This is the list of stuff I had to modify to get kvm-74 to run. I haven't tried anything more recent yet.
1) -mno-sdata does not work. Qemu CFLAGS need to be -msdata
2) In qemu/ia64.ld SEARCH_DIR is invalid for SUSE. It shouldn't search in /usr/ia64-linux but in /usr/ia64-suse-linux.
3) TARGET_PAGE_BITS is wrong
4) kernel/ia64/Makefile.pre assumes to find .S files in $KERNELDIR. They are in $SOURCEDIR.
5) kernel/ia64/Makefile.pre suffers from the same problem my original fix for x86 addressed.
6) The IA64 kernel build system is broken. The file asm-ia64/nr-irqs.h gets generated during the kernel build, but is not exported as obj, so it won't be in the split obj directory. Since the source-dir is clean though, the file simply does not exist on SUSE rpms.
I will attach the patch I use in our local buildsystem to make KVM compile on IA64. Please do not take this as fixes, most of them are simple workarounds and should rather be fixed properly. We were just hitting deadlines internally.
Alex
From 8ec9fd6df253413cd0d2a07202e31c86d22e8f6d Mon Sep 17 00:00:00 2001
From: Raymund Will <[email protected]>
Date: Thu, 4 Sep 2008 11:14:59 +0200
Subject: [PATCH] KVM-ia64 build fix for SuSE Linux
--- qemu/Makefile.target | 6 ++++-- qemu/ia64.ld | 2 +- qemu/target-ia64/cpu.h | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-)
qemu/Makefile.target +4 -2
@@ -150,8 +150,10 @@ BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH) endif ifeq ($(ARCH),ia64) -CFLAGS+=-mno-sdata -OP_CFLAGS+=-mno-sdata +#CFLAGS+=-mno-sdata +#OP_CFLAGS+=-mno-sdata +CFLAGS+=-msdata +OP_CFLAGS+=-msdata endif ifeq ($(ARCH),arm)
qemu/ia64.ld +1 -1
@@ -3,7 +3,7 @@ OUTPUT_FORMAT("elf64-ia64-little", "elf6 "elf64-ia64-little") OUTPUT_ARCH(ia64) ENTRY(_start) -SEARCH_DIR("/usr/ia64-linux/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); +SEARCH_DIR("/usr/ia64-suse-linux/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); /* Do we need any of these for elf? __DYNAMIC = 0; */ SECTIONS
qemu/target-ia64/cpu.h +1 -1
@@ -30,7 +30,7 @@#define TARGET_LONG_BITS 64 -#define TARGET_PAGE_BITS 16 +#define TARGET_PAGE_BITS 14#define ELF_MACHINE EM_IA_64
kernel/ia64/Makefile.pre +3 -3
@@ -1,6 +1,6 @@ prerequisite: asm-offsets.h ia64/memset.S ia64/memcpy.S - cp -f $(KERNELDIR)/arch/ia64/lib/memcpy.S ia64/memcpy.S - cp -f $(KERNELDIR)/arch/ia64/lib/memset.S ia64/memset.S + cp -f /usr/src/linux/arch/ia64/lib/memcpy.S ia64/memcpy.S + cp -f /usr/src/linux/arch/ia64/lib/memset.S ia64/memset.S cmp -s asm-offset.h ia64/asm-offset.h || mv -f asm-offsets.* ia64/ asm-offsets.h: asm-offsets.s
@@ -20,4 +20,4 @@ asm-offsets.h: asm-offsets.s echo "#endif") <$< >$@ asm-offsets.s: ia64/asm-offsets.c - gcc -S -D__KERNEL__ -I$(KERNELDIR)/include -I$(KERNELDIR)/arch/ia64/include -I./include ia64/asm-offsets.c + gcc -S -D__KERNEL__ -I$(KERNELDIR)/include -I$(KERNELDIR)/arch/ia64/include -Iinclude2 -I/usr/src/linux/include -I/usr/src/linux/arch/ia64/include -I./include ia64/asm-offsets.c
kernel/include/asm-ia64/nr-irqs.h new file +12 -0
@@ -0,0 +1,12 @@ +#ifndef __ASM_NR_IRQS_H__ +#define __ASM_NR_IRQS_H__ +/* +* DO NOT MODIFY. +* +* This file was generated by Kbuild +* +*/ + +#define NR_IRQS 1024/* sizeof (union paravirt_nr_irqs_max) // */ + +#endif
Quoted 22 lines · Alexander Graf
Quoted 11 lines · Xiantao
Quoted 10 lines · Alexander Graf
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE). To keep compatible and have users have a good experience on building KVM on any distribution, this patch attempts to rebuild the logic from the kernel
Makefileas closely as possible. With it I successfully built KVM on a current SUSE system.Signed-off-by Alexander Graf <[email protected]>Quoted 7 lines
Quoted 3 lines
Please check and see if it breaks the build process for anyone else. Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.
Hi, Graf
what problems did you meet when building kvm/ia64 ?
Xiantao
Quoted 4 lines
This is the list of stuff I had to modify to get kvm-74 to run. I haven't tried anything more recent yet.
1) -mno-sdata does not work. Qemu CFLAGS need to be -msdata
Which version of GCC are you using ?
Quoted 2 lines
2) In qemu/ia64.ld
SEARCH_DIRis invalid for SUSE. It shouldn't search in/usr/ia64-linuxbut in/usr/ia64-suse-linux.
You can make a patch to fix it.
Quoted 1 line
3)
TARGET_PAGE_BITSis wrong
Currently, we just set TARGET_PAGE_BITS to 16 by hardcoding in Qemu. In the future, we should add the logic to make it equal to kernel's PAGE_SHIFT.
Quoted 2 lines
4)
kernel/ia64/Makefile.preassumes to find .S files in $KERNELDIR. They are in $SOURCEDIR.
There is no issue here, I think. You have to set corrent $KERNELDIR through ./configure --kerneldir=xxxx once target machine and build machine is not same.
Quoted 2 lines
5)
kernel/ia64/Makefile.presuffers from the same problem my original fix for x86 addressed.
Ditto.
Quoted 4 lines
6) The IA64 kernel build system is broken. The file
asm-ia64/nr-irqs.hgets generated during the kernel build, but is not exported as obj, so it won't be in the split obj directory. Since the source-dir is clean though, the file simply does not exist on SUSE rpms.
You mean the source-dir is clean ? So the generated header files including (linux/autoconf.h, asm-offsets.h...)should be removed wholely? I don't think they can be built with a clean source for most modules.
Quoted 6 lines
I will attach the patch I use in our local buildsystem to make KVM compile on IA64. Please do not take this as fixes, most of them are simple workarounds and should rather be fixed properly. We were just hitting deadlines internally.
Alex
Quoted 25 lines · Xiantao
Quoted 24 lines · Alexander Graf
Quoted 20 lines · Xiantao
Quoted 9 lines · Alexander Graf
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE). To keep compatible and have users have a good experience on building
KVM on any distribution, this patch attempts to rebuild the logic from the kernelMakefileas closely as possible. With it I successfully built KVM on a current SUSE system.Quoted 6 lines
Signed-off-by Alexander Graf <[email protected]>Please check and see if it breaks the build process for anyone else.
Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.Hi, Graf
what problems did you meet when building kvm/ia64 ?
Xiantao
Quoted 6 lines
Quoted 4 lines
This is the list of stuff I had to modify to get kvm-74 to run. I haven't tried anything more recent yet.
1) -mno-sdata does not work. Qemu CFLAGS need to be -msdata
Which version of GCC are you using ?
# gcc --version gcc (SUSE Linux) 4.3.2 20080815 (prerelease) [gcc-4_3-branch revision 139129]
Quoted 6 lines
Quoted 5 lines
2) In qemu/ia64.ld
SEARCH_DIRis invalid for SUSE. It shouldn't search
in/usr/ia64-linuxbut in/usr/ia64-suse-linux.You can make a patch to fix it.
Right, this one should be really easy to fix.
Quoted 5 lines
Quoted 1 line
3)
TARGET_PAGE_BITSis wrongCurrently, we just set
TARGET_PAGE_BITSto 16 by hardcoding in Qemu. In
the future, we should add the logic to make it equal to kernel'sPAGE_SHIFT.
From what I read on the KVM IA64 ML, this is not the first time
someone ran into this issue. Sounds like a really good idea to add the logic ;-).
Quoted 6 lines
Quoted 2 lines
4)
kernel/ia64/Makefile.preassumes to find .S files in $KERNELDIR. They are in $SOURCEDIR.There is no issue here, I think. You have to set corrent $KERNELDIR through ./configure --kerneldir=xxxx once target machine and build machine is not same.
No, since $KERNELDIR is the build dir, as that one contains all the configurations. The source dir only contains the sources.
Quoted 12 lines
Quoted 2 lines
5)
kernel/ia64/Makefile.presuffers from the same problem my original fix for x86 addressed.Ditto.
Quoted 6 lines
6) The IA64 kernel build system is broken. The file asm-ia64/nr-
irqs.h
gets generated during the kernel build, but is not exported as obj, so
it won't be in the split obj directory. Since the source-dir is clean though, the file simply does not exist on SUSE rpms.
Quoted 4 lines
You mean the source-dir is clean ? So the generated header files including (
linux/autoconf.h, asm-offsets.h...)should be removed wholely?
I don't think they can be built with a clean source for most modules.
This is what I'm talking about all the time :-). For SUSE kernels there are two distinct directories:
# ls -l /usr/src drwxr-xr-x 24 root root 4096 Aug 27 14:51 linux-2.6.27-rc4- HEAD_20080825213702 drwxr-xr-x 3 root root 4096 Aug 25 23:28 linux-2.6.27-rc4- HEAD_20080825213702-obj
whereas the normal directory contains the sources and the -obj directory contains all files that were generated during the build. Scratch that with the 2 rpm files - they are all in kernel-sources.
# ls -l /usr/src/linux-2.6.27-rc4-HEAD_20080825213702-obj/ia64/default/ total 568 -rw-r--r-- 1 root root 76287 Aug 25 23:27 .config -rw-r--r-- 2 root root 554 Aug 25 23:28 Makefile -rw-r--r-- 1 root root 468615 Aug 25 23:51 Module.symvers drwxr-xr-x 3 root root 4096 Aug 26 18:01 arch drwxr-xr-x 5 root root 4096 Aug 26 18:01 include drwxr-xr-x 2 root root 4096 Aug 26 18:01 include2 drwxr-xr-x 2 root root 4096 Aug 25 23:28 kernel drwxr-xr-x 6 root root 4096 Aug 26 18:01 scripts
The problem is now that a lot of people assume these two directories to be one. This is the default mode when you compile a kernel. SUSE does not take this route though, and hasn't for quite a while now. I don't know about other distributions, but I guess we're not the only ones ;-).
Alex
Quoted 105 lines · Alexander Graf
Quoted 24 lines · Xiantao
Quoted 23 lines · Alexander Graf
Quoted 19 lines · Xiantao
Quoted 9 lines · Alexander Graf
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE).
To keep compatible and have users have a good experience on building KVM on any distribution, this patch attempts to rebuild the logic from the kernelMakefileas closely as possible. With it I successfully built KVM on a current SUSE system.Quoted 5 lines
Signed-off-by Alexander Graf <[email protected]>Please check and see if it breaks the build process for anyone else. Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.
Hi, Graf
what problems did you meet when building kvm/ia64 ?
XiantaoQuoted 6 lines
Quoted 4 lines
This is the list of stuff I had to modify to get kvm-74 to run. I haven't tried anything more recent yet.
1) -mno-sdata does not work. Qemu CFLAGS need to be -msdata
Which version of GCC are you using ?
# gcc --version gcc (SUSE Linux) 4.3.2 20080815 (prerelease) [gcc-4_3-branch revision 139129]Quoted 5 lines
Quoted 4 lines
2) In qemu/ia64.ld
SEARCH_DIRis invalid for SUSE. It shouldn't search in/usr/ia64-linuxbut in/usr/ia64-suse-linux.You can make a patch to fix it.
Right, this one should be really easy to fix.
Quoted 4 lines
Quoted 1 line
3)
TARGET_PAGE_BITSis wrongCurrently, we just set
TARGET_PAGE_BITSto 16 by hardcoding in Qemu. In the future, we should add the logic to make it equal to kernel'sPAGE_SHIFT.From what I read on the KVM IA64 ML, this is not the first time
someone ran into this issue. Sounds like a really good idea to add the logic ;-).Quoted 6 lines
Quoted 2 lines
4)
kernel/ia64/Makefile.preassumes to find .S files in $KERNELDIR. They are in $SOURCEDIR.There is no issue here, I think. You have to set corrent $KERNELDIR through ./configure --kerneldir=xxxx once target machine and build machine is not same.
No, since $KERNELDIR is the build dir, as that one contains all the configurations. The source dir only contains the sources.
Quoted 11 lines
Quoted 2 lines
5)
kernel/ia64/Makefile.presuffers from the same problem my original fix for x86 addressed.Ditto.
Quoted 5 lines
6) The IA64 kernel build system is broken. The file asm-ia64/nr-
irqs.hgets generated during the kernel build, but is not exported as obj, so it won't be in the split obj directory. Since the source-dir is clean though, the file simply does not exist on SUSE rpms.Quoted 4 lines
You mean the source-dir is clean ? So the generated header files including (
linux/autoconf.h, asm-offsets.h...)should be removed wholely? I don't think they can be built with a clean source for most modules.This is what I'm talking about all the time :-). For SUSE kernels there are two distinct directories:
# ls -l /usr/src drwxr-xr-x 24 root root 4096 Aug 27 14:51 linux-2.6.27-rc4- HEAD_20080825213702 drwxr-xr-x 3 root root 4096 Aug 25 23:28 linux-2.6.27-rc4- HEAD_20080825213702-objwhereas the normal directory contains the sources and the -obj directory contains all files that were generated during the build. Scratch that with the 2 rpm files - they are all in kernel-sources.
# ls -l /usr/src/linux-2.6.27-rc4-HEAD_20080825213702-obj/ia64/default/ total 568(quoted diff) +0
-3-rw-r--r-- 1 root root 76287 Aug 25 23:27 .config -rw-r--r-- 2 root root 554 Aug 25 23:28 Makefile -rw-r--r-- 1 root root 468615 Aug 25 23:51 Module.symversdrwxr-xr-x 3 root root 4096 Aug 26 18:01 arch drwxr-xr-x 5 root root 4096 Aug 26 18:01 include drwxr-xr-x 2 root root 4096 Aug 26 18:01 include2 drwxr-xr-x 2 root root 4096 Aug 25 23:28 kernel drwxr-xr-x 6 root root 4096 Aug 26 18:01 scripts
Quoted 5 lines
The problem is now that a lot of people assume these two directories to be one. This is the default mode when you compile a kernel. SUSE does not take this route though, and hasn't for quite a while now. I don't know about other distributions, but I guess we're not the only ones ;-).
Okay, I see now. But due to shortage of Suse OS at hand, I can't try it . Anyway once you found any issues related to the compability with Suse OS, welcome to post patches to fix them. :)
Xiantao
Am 18.09.2008 um 04:12 schrieb "Zhang, Xiantao"
<[email protected]>:
Quoted 107 lines
Quoted 106 lines · Alexander Graf
Quoted 24 lines · Xiantao
Quoted 23 lines · Alexander Graf
Quoted 19 lines · Xiantao
Quoted 9 lines · Alexander Graf
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE).
To keep compatible and have users have a good experience on building KVM on any distribution, this patch attempts to rebuild the logic from the kernelMakefileas closely as possible. With it I successfully built KVM on a current SUSE system.Quoted 5 lines
Signed-off-by Alexander Graf <[email protected]>Please check and see if it breaks the build process for anyone else. Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.
Hi, Graf
what problems did you meet when building kvm/ia64 ?
XiantaoQuoted 6 lines
Quoted 4 lines
This is the list of stuff I had to modify to get kvm-74 to run. I haven't tried anything more recent yet.
1) -mno-sdata does not work. Qemu CFLAGS need to be -msdata
Which version of GCC are you using ?
# gcc --version gcc (SUSE Linux) 4.3.2 20080815 (prerelease) [gcc-4_3-branch revision 139129]Quoted 5 lines
Quoted 4 lines
2) In qemu/ia64.ld
SEARCH_DIRis invalid for SUSE. It shouldn't search in/usr/ia64-linuxbut in/usr/ia64-suse-linux.You can make a patch to fix it.
Right, this one should be really easy to fix.
Quoted 4 lines
Quoted 1 line
3)
TARGET_PAGE_BITSis wrongCurrently, we just set
TARGET_PAGE_BITSto 16 by hardcoding in Qemu. In the future, we should add the logic to make it equal to kernel'sPAGE_SHIFT.From what I read on the KVM IA64 ML, this is not the first time someone ran into this issue. Sounds like a really good idea to add the
logic ;-).Quoted 6 lines
Quoted 2 lines
4)
kernel/ia64/Makefile.preassumes to find .S files in $KERNELDIR. They are in $SOURCEDIR.There is no issue here, I think. You have to set corrent $KERNELDIR through ./configure --kerneldir=xxxx once target machine and build machine is not same.
No, since $KERNELDIR is the build dir, as that one contains all the configurations. The source dir only contains the sources.
Quoted 11 lines
Quoted 2 lines
5)
kernel/ia64/Makefile.presuffers from the same problem my original fix for x86 addressed.Ditto.
Quoted 5 lines
6) The IA64 kernel build system is broken. The file asm-ia64/nr-
irqs.hgets generated during the kernel build, but is not exported as obj, so it won't be in the split obj directory. Since the source-dir is clean though, the file simply does not exist on SUSE rpms.Quoted 4 lines
You mean the source-dir is clean ? So the generated header files including (
linux/autoconf.h, asm-offsets.h...)should be removed wholely? I don't think they can be built with a clean source for most modules.This is what I'm talking about all the time :-). For SUSE kernels there are two distinct directories:
# ls -l /usr/src drwxr-xr-x 24 root root 4096 Aug 27 14:51 linux-2.6.27-rc4- HEAD_20080825213702 drwxr-xr-x 3 root root 4096 Aug 25 23:28 linux-2.6.27-rc4- HEAD_20080825213702-objwhereas the normal directory contains the sources and the -obj directory contains all files that were generated during the build. Scratch that with the 2 rpm files - they are all in kernel-sources.
# ls -l /usr/src/linux-2.6.27-rc4-HEAD_20080825213702-obj/ia64/default/ total 568(quoted diff) +0
-3-rw-r--r-- 1 root root 76287 Aug 25 23:27 .config -rw-r--r-- 2 root root 554 Aug 25 23:28 Makefile -rw-r--r-- 1 root root 468615 Aug 25 23:51 Module.symversdrwxr-xr-x 3 root root 4096 Aug 26 18:01 arch drwxr-xr-x 5 root root 4096 Aug 26 18:01 include drwxr-xr-x 2 root root 4096 Aug 26 18:01 include2 drwxr-xr-x 2 root root 4096 Aug 25 23:28 kernel drwxr-xr-x 6 root root 4096 Aug 26 18:01 scripts
Quoted 10 lines
Quoted 5 lines
The problem is now that a lot of people assume these two directories to be one. This is the default mode when you compile a kernel. SUSE does not take this route though, and hasn't for quite a while now. I don't know about other distributions, but I guess we're not the only ones ;-).
Okay, I see now. But due to shortage of Suse OS at hand, I can't try it
. Anyway once you found any issues related to the compability with Suse
OS, welcome to post patches to fix them. :)
Oh I will :). I just wanted to make sure x86 compiles for everyone first, as that probably hurts more users :).
Thanks for caring!
Alex
Quoted 8 lines · Alexander Graf
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE). To keep compatible and have users have a good experience on building KVM on any distribution, this patch attempts to rebuild the logic from the kernel
Makefileas closely as possible. With it I successfully built KVM on a current SUSE system.
Quoted 5 lines
Signed-off-by Alexander Graf <[email protected]>Please check and see if it breaks the build process for anyone else. Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.
Hi, Graf
I am confused by this patch. Why not use ./configure --kerneldir= your_kernel_source_directory ? It should be also workable for you. In the Makefile, KERNELDIR means the kernel source directory of target machine, and is set to /lib/modules/$(uname -r)/build of build machine by default. But you can change it at your will through configure or modifying config.mak.
Xiantao
Quoted 15 lines · Xiantao
Quoted 8 lines · Alexander Graf
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE). To keep compatible and have users have a good experience on building KVM on any distribution, this patch attempts to rebuild the logic from the kernel
Makefileas closely as possible. With it I successfully built KVM on a current SUSE system.Quoted 5 lines
Signed-off-by Alexander Graf <[email protected]>Please check and see if it breaks the build process for anyone else. Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.
Quoted 7 lines
Hi, Graf
I am confused by this patch. Why not use ./configure --kerneldir=your_kernel_source_directory? It should be also workable for you. In theMakefile, KERNELDIR means the kernel source directory of target machine, and is set to /lib/modules/$(uname -r)/build of build machine by default. But you can change it at your will through configure or modifying config.mak.
On SUSE kernels, there are two directories that are completely separate. One is linked to from /lib/modules/$(uname -r)/build (that's the object dir), while the other one is linked to from /lib/modules/$(uname -r)/source (that's the source dir).
The build dir contains files that were built during a kernel build. The source dir is the one the kernel was built from. Almost all of the code in KVM assumes, that these are at one location. This is true for self-built kernels, as they generate the obj files in your source dir. It is not true for SUSE kernels you install from RPMs though.
Alex
Any further comments on this? I would really like to see KVM build out-of-the-box on SUSE kernels (and kernels built with O= at the same time).
Alex
Quoted 56 lines · Alexander Graf
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE).
To keep compatible and have users have a good experience on building KVM on any distribution, this patch attempts to rebuild the logic from the kernelMakefileas closely as possible. With it I successfully built KVM on a current SUSE system.Signed-off-by Alexander Graf <[email protected]>Please check and see if it breaks the build process for anyone else. Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.
configure +0
-0@@ -1,6 +1,7 @@ #!/bin/bashprefix=/usr/local
+kernelsourcedir=
kerneldir=/lib/modules/$(uname -r)/build
cc=gcc
ld=ldconfigure +0
-0@@ -102,6 +103,11 @@ if [ "$arch" = "powerpc" ]; then qemu_ldflags="$qemu_ldflags -L $PWD/libfdt"fi
configure +5
-0+# see if we have split build and source directories +if [ -d "$kerneldir/include2" ]; then + kernelsourcedir=${kerneldir%/*}/source +fi +#configure user dir
(cd user; ./configure --prefix="$prefix" --kerneldir="$libkvm_kerneldir" \ --arch="$arch" \configure +0
-0@@ -124,6 +130,7 @@ cat <<EOF > config.makARCH=$arch
PREFIX=$prefix
KERNELDIR=$kerneldir
+KERNELSOURCEDIR=$kernelsourcedir
LIBKVM_KERNELDIR=$libkvm_kerneldir
WANT_MODULE=$want_module
CROSS_COMPILE=$cross_prefixkernel/Makefile +0
-0@@ -36,7 +36,9 @@ hack-files = $(hack-files-$(ARCH_DIR))all:: header-link prerequisite
# include header priority 1) $LINUX 2) $KERNELDIR 3) include-compat$(MAKE) -C $(KERNELDIR) M=`pwd` \kernel/Makefile +0
-1- LINUXINCLUDE="-I`pwd`/include -Iinclude -Iarch/${ARCH_DIR}/include -I
pwd/include-compat \kernel/Makefile +3
-0+ LINUXINCLUDE="-I`pwd`/include -Iinclude \ + $(if $(KERNELSOURCEDIR),-Iinclude2 -I$(KERNELSOURCEDIR)/include) \ + -Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \-include include/linux/autoconf.h \ -include `pwd`/$(ARCH_DIR)/external-module-compat.h" "$$@"
Quoted 5 lines · Alexander Graf
Any further comments on this? I would really like to see KVM build out-of-the-box on SUSE kernels (and kernels built with O= at the same time).
Alex
/me, too. And my colleagues @work. We carry around an old hack to build against SuSE, now waiting for your clean solution to be merged.
Jan
Quoted 74 lines · Alexander Graf
Quoted 66 lines
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE). To keep compatible and have users have a good experience on building KVM on any distribution, this patch attempts to rebuild the logic from the kernel
Makefileas closely as possible. With it I successfully built KVM on a current SUSE system.Signed-off-by Alexander Graf <[email protected]>Please check and see if it breaks the build process for anyone else. Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.
configure +0
-0@@ -1,6 +1,7 @@ #!/bin/bashprefix=/usr/local
+kernelsourcedir=
kerneldir=/lib/modules/$(uname -r)/build
cc=gcc
ld=ldconfigure +0
-0@@ -102,6 +103,11 @@ if [ "$arch" = "powerpc" ]; then qemu_ldflags="$qemu_ldflags -L $PWD/libfdt"fi
configure +5
-0+# see if we have split build and source directories +if [ -d "$kerneldir/include2" ]; then + kernelsourcedir=${kerneldir%/*}/source +fi +#configure user dir
(cd user; ./configure --prefix="$prefix"--kerneldir="$libkvm_kerneldir" \ --arch="$arch" \configure +0
-0@@ -124,6 +130,7 @@ cat <<EOF > config.makARCH=$arch
PREFIX=$prefix
KERNELDIR=$kerneldir
+KERNELSOURCEDIR=$kernelsourcedir
LIBKVM_KERNELDIR=$libkvm_kerneldir
WANT_MODULE=$want_module
CROSS_COMPILE=$cross_prefixkernel/Makefile +0
-0@@ -36,7 +36,9 @@ hack-files = $(hack-files-$(ARCH_DIR))all:: header-link prerequisite
# include header priority 1) $LINUX 2) $KERNELDIR 3) include-compat$(MAKE) -C $(KERNELDIR) M=`pwd` \kernel/Makefile +3
-3- LINUXINCLUDE="-I`pwd`/include -Iinclude -Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \ + LINUXINCLUDE="-I`pwd`/include -Iinclude \ + $(if $(KERNELSOURCEDIR),-Iinclude2 -I$(KERNELSOURCEDIR)/include) \ + -Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \ -include include/linux/autoconf.h \ -include `pwd`/$(ARCH_DIR)/external-module-compat.h" "$$@"Signature · 3 lines
To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
With your patch, I still can't build with a split kernel source/object dir.
Don't know if it's a difference of configure options or what. Here's mine just in case:
./configure --disable-gfx-check --disable-sdl --with-patched-kernel --prefix=/usr
I needed the attached patch as well.
Quoted 67 lines · Alexander Graf
Any further comments on this? I would really like to see KVM build out- of-the-box on SUSE kernels (and kernels built with O= at the same time).
Alex
Quoted 61 lines · Alexander Graf
KVM as is assumes that the kernel obj dir and the kernel source dir are at the same location. This is true for most self-built vanilla kernels, but some distributions split these up (e.g. SUSE). To keep compatible and have users have a good experience on building KVM on any distribution, this patch attempts to rebuild the logic from the kernel
Makefileas closely as possible. With it I successfully built KVM on a current SUSE system.Signed-off-by Alexander Graf <[email protected]>Please check and see if it breaks the build process for anyone else. Building with IA64 on SUSE-kernels is still broken due to similar but separate problems.
configure +0
-0@@ -1,6 +1,7 @@ #!/bin/bashprefix=/usr/local
+kernelsourcedir=
kerneldir=/lib/modules/$(uname -r)/build
cc=gcc
ld=ldconfigure +0
-0@@ -102,6 +103,11 @@ if [ "$arch" = "powerpc" ]; then qemu_ldflags="$qemu_ldflags -L $PWD/libfdt"fi
configure +5
-0+# see if we have split build and source directories +if [ -d "$kerneldir/include2" ]; then + kernelsourcedir=${kerneldir%/*}/source +fi +#configure user dir
(cd user; ./configure --prefix="$prefix" --kerneldir="$libkvm_kerneldir" \ --arch="$arch" \configure +0
-0@@ -124,6 +130,7 @@ cat <<EOF > config.makARCH=$arch
PREFIX=$prefix
KERNELDIR=$kerneldir
+KERNELSOURCEDIR=$kernelsourcedir
LIBKVM_KERNELDIR=$libkvm_kerneldir
WANT_MODULE=$want_module
CROSS_COMPILE=$cross_prefixkernel/Makefile +0
-0@@ -36,7 +36,9 @@ hack-files = $(hack-files-$(ARCH_DIR))all:: header-link prerequisite
# include header priority 1) $LINUX 2) $KERNELDIR 3) include-compat$(MAKE) -C $(KERNELDIR) M=`pwd` \kernel/Makefile +0
-1- LINUXINCLUDE="-I`pwd`/include -Iinclude -Iarch/${ARCH_DIR}/include -I
pwd/include-compat \kernel/Makefile +3
-0+ LINUXINCLUDE="-I`pwd`/include -Iinclude \ + $(if $(KERNELSOURCEDIR),-Iinclude2 -I$(KERNELSOURCEDIR)/include) \ + -Iarch/${ARCH_DIR}/include -I`pwd`/include-compat \
Quoted 8 lines
Quoted 3 lines
-include include/linux/autoconf.h \ -include `pwd`/$(ARCH_DIR)/external-module-compat.h" "$$@"--
To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
kernel/Makefile +2 -2
@@ -58,8 +58,8 @@ T = $(subst -sync,,$@)-tmp header-sync: rm -rf $T rsync -R \ - "$(LINUX)"/./include/linux/kvm*.h \ - "$(LINUX)"/./include/asm-*/kvm*.h \ + "$(subst build,source,$(LINUX))"/./include/linux/kvm*.h \ + "$(subst build,source,$(LINUX))"/./include/asm-*/kvm*.h \ $T/ -rsync -R \ "$(LINUX)"/arch/$(ARCH_DIR)/include/asm/./kvm*.h \
Quoted 8 lines · Brian Jackson
With your patch, I still can't build with a split kernel source/object dir.
Don't know if it's a difference of configure options or what. Here's mine just in case:
./configure --disable-gfx-check --disable-sdl --with-patched-kernel --prefix=/usrI needed the attached patch as well.
Does --with-patched-kernel work again? I thought that's broken anyways.
Alex
Works for me with that patch... I don't know if it's working the way it's supposed to. I just have a build script that's always used that.
If it doesn't work, maybe we should disable or remove it.
Quoted 20 lines · Alexander Graf
Quoted 10 lines · Brian Jackson
With your patch, I still can't build with a split kernel source/ object dir.
Don't know if it's a difference of configure options or what. Here's mine just
in case:
./configure --disable-gfx-check --disable-sdl --with-patched-kernel --prefix=/usrI needed the attached patch as well.
Does --with-patched-kernel work again? I thought that's broken anyways.
Alex
--
To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html