public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Allow for Cross compile of user tools
@ 2007-10-01 18:56 Jerone Young
  2007-10-02  5:59 ` Avi Kivity
  0 siblings, 1 reply; 3+ messages in thread
From: Jerone Young @ 2007-10-01 18:56 UTC (permalink / raw)
  To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

[-- Attachment #1: Type: text/plain, Size: 856 bytes --]

This is the first of many patches to begin to make kvm source a lot
better for compiling for other architecture support (that is not x86 or
x86-64).

This patch makes it possible so that someone on an x86 machine can cross
compile for an x86-64 machine and vice versa. So now you will have
config-$(arch).mak for each architecture, with specific architecture
rules. 

An example of this is for compiling x86-64 on an x86 machine is:
make KERNELDIR=~/tmp/kvm ARCH=x86_64

This allows for someone with an x86 machine to compile for x86_64. Later
patches that I will be submitting will be for ppc and will make a few
more changes.

What I would like though is comments on how everyone feels about this
approach. We are need of something like this to start ading ppc related
code.

Signed-off-by: Jerone Young <jyoung5-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

[-- Attachment #2: kvm_user_cross_comp.patch --]
[-- Type: text/x-patch, Size: 2823 bytes --]

diff --git a/user/Makefile b/user/Makefile
index 26eb530..aebba58 100644
--- a/user/Makefile
+++ b/user/Makefile
@@ -1,5 +1,12 @@
 
-include config.mak
+ARCH ?= $(shell uname -m | sed -e s/i.86/x86/)
+
+KERNELDIR ?= /lib/modules/$(shell uname -r)/build/
+
+DESTDIR ?=
+
+#include architecure specific make rules
+include config-$(ARCH).mak
 
 # cc-option
 # Usage: OP_CFLAGS+=$(call cc-option, -falign-functions=0, -malign-functions=0)
@@ -7,8 +14,8 @@ include config.mak
 cc-option = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null \
               > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
 
-CFLAGS = -I $(KERNELDIR)/include $(autodepend-flags) -g -fomit-frame-pointer \
-	-Wall -m$(bits)
+CFLAGS += -I $(KERNELDIR)/include $(autodepend-flags) -g -fomit-frame-pointer \
+	-Wall
 CFLAGS += $(call cc-option, -fno-stack-protector, "")
 CFLAGS += $(call cc-option, -fno-stack-protector-all, "")
 
@@ -18,20 +25,6 @@ CXXFLAGS = $(autodepend-flags)
 
 autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d
 
-DESTDIR = 
-
-ifeq ($(shell uname -m), x86_64)
-LIBDIR = /lib64
-cstart.o = test/cstart64.o
-bits = 64
-ldarch = elf64-x86-64
-else
-LIBDIR = /lib
-cstart.o = test/cstart.o
-bits = 32
-ldarch = elf32-i386
-endif
-
 all: kvmctl libkvm.a flatfiles
 
 kvmctl: LDFLAGS += -pthread -lrt
@@ -45,11 +38,7 @@ libkvm.a: kvmctl.o
 
 flatfiles-common = test/bootstrap test/vmexit.flat test/smp.flat
 
-flatfiles-32 =
-
-flatfiles-64 = test/access.flat test/irq.flat test/sieve.flat test/simple.flat test/stringio.flat test/memtest1.flat
-
-flatfiles: $(flatfiles-common) $(flatfiles-$(bits))
+flatfiles: $(flatfiles-common) $(flatfiles)
 
 install:
 	install -D kvmctl.h $(DESTDIR)/$(PREFIX)/include/kvmctl.h
@@ -60,13 +49,13 @@ install:
 	install -D libkvm.a $(DESTDIR)/$(PREFIX)/$(LIBDIR)/libkvm.a
 
 %.flat: %.o
-	gcc $(CFLAGS) -nostdlib -o $@ -Wl,-T,flat.lds $^
+	$(CC) $(CFLAGS) -nostdlib -o $@ -Wl,-T,flat.lds $^
 
 test/bootstrap: test/bootstrap.o
-	gcc -nostdlib -o $@ -Wl,-T,bootstrap.lds $^
+	$(CC) -nostdlib -o $@ -Wl,-T,bootstrap.lds $^
 
 %.o: %.S
-	gcc $(CFLAGS) -c -nostdlib -o $@ $^
+	$(CC) $(CFLAGS) -c -nostdlib -o $@ $^
 
 test/irq.flat: test/print.o
 
diff --git a/user/config-x86.mak b/user/config-x86.mak
new file mode 100644
index 0000000..d2d181b
--- /dev/null
+++ b/user/config-x86.mak
@@ -0,0 +1,7 @@
+LIBDIR = /lib
+cstart.o = test/cstart.o
+bits = 32
+ldarch = elf32-i386
+CFLAGS += -m32
+
+flatfiles=
diff --git a/user/config-x86_64.mak b/user/config-x86_64.mak
new file mode 100644
index 0000000..19ebc46
--- /dev/null
+++ b/user/config-x86_64.mak
@@ -0,0 +1,7 @@
+LIBDIR = /lib64
+cstart.o = test/cstart64.o
+bits = 64
+ldarch = elf64-x86-64
+CFLAGS += -m64
+
+flatfiles = test/access.flat test/irq.flat test/sieve.flat test/simple.flat test/stringio.flat test/memtest1.flat

[-- Attachment #3: Type: text/plain, Size: 228 bytes --]

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

[-- Attachment #4: Type: text/plain, Size: 186 bytes --]

_______________________________________________
kvm-devel mailing list
kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/kvm-devel

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] Allow for Cross compile of user tools
  2007-10-01 18:56 [PATCH] Allow for Cross compile of user tools Jerone Young
@ 2007-10-02  5:59 ` Avi Kivity
       [not found]   ` <4701DE24.4030109-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Avi Kivity @ 2007-10-02  5:59 UTC (permalink / raw)
  To: jyoung5-r/Jw6+rmf7HQT0dZR+AlfA; +Cc: kvm-devel

Jerone Young wrote:
> This is the first of many patches to begin to make kvm source a lot
> better for compiling for other architecture support (that is not x86 or
> x86-64).
>
> This patch makes it possible so that someone on an x86 machine can cross
> compile for an x86-64 machine and vice versa. So now you will have
> config-$(arch).mak for each architecture, with specific architecture
> rules. 
>
> An example of this is for compiling x86-64 on an x86 machine is:
> make KERNELDIR=~/tmp/kvm ARCH=x86_64
>   

This should be done via ./configure (I dislike ?= intensely).

> This allows for someone with an x86 machine to compile for x86_64. Later
> patches that I will be submitting will be for ppc and will make a few
> more changes.
>
> What I would like though is comments on how everyone feels about this
> approach. We are need of something like this to start ading ppc related
> code.
>
>   

No problem for user/.  I'd like to see this accepted by qemu-devel as well.

-- 
Any sufficiently difficult bug is indistinguishable from a feature.


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Allow for Cross compile of user tools
       [not found]   ` <4701DE24.4030109-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
@ 2007-10-02 16:48     ` Jerone Young
  0 siblings, 0 replies; 3+ messages in thread
From: Jerone Young @ 2007-10-02 16:48 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm-devel

On Tue, 2007-10-02 at 07:59 +0200, Avi Kivity wrote:
> Jerone Young wrote:
> > This is the first of many patches to begin to make kvm source a lot
> > better for compiling for other architecture support (that is not x86 or
> > x86-64).
> >
> > This patch makes it possible so that someone on an x86 machine can cross
> > compile for an x86-64 machine and vice versa. So now you will have
> > config-$(arch).mak for each architecture, with specific architecture
> > rules. 
> >
> > An example of this is for compiling x86-64 on an x86 machine is:
> > make KERNELDIR=~/tmp/kvm ARCH=x86_64
> >   
> 
> This should be done via ./configure (I dislike ?= intensely).

This is something that could be done via the ./configure script. What
will need to add is ARCH=, CC=, LD= as variables as well. 

I can create a patch for this.


> 
> > This allows for someone with an x86 machine to compile for x86_64. Later
> > patches that I will be submitting will be for ppc and will make a few
> > more changes.
> >
> > What I would like though is comments on how everyone feels about this
> > approach. We are need of something like this to start ading ppc related
> > code.
> >
> >   
> 
> No problem for user/.  I'd like to see this accepted by qemu-devel as well.

Well qemu pretty much has this problem taken care of. In qemu you can
just use the autoconf system. So for our purposes with PPC development
we need to compile the binaries on an x86 machine (as the embedded
boards are of course much slower, then our super x86 machines). So you
just launch configure in qemu with the options:

./configure \
	--cpu=powerpc \
	--cross-prefix=powerpc-440-linux-gnu-

This will compile qemu for the target CPU powerpc and will use cross
compile tools with prefix "powerpc-440-linux-gnu-" that are in our PATH.
So we have for example powerpc-440-linux-gnu-gcc which is used to
compile the proper ppc binary.

All in all these patches whouldn't be needed in qemu because it already
has this problem taken care of. But the test case directory /user do not
have this problem taken care of. It assumes that you will run on the
machine that you are compiling on.

> 


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-10-02 16:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-01 18:56 [PATCH] Allow for Cross compile of user tools Jerone Young
2007-10-02  5:59 ` Avi Kivity
     [not found]   ` <4701DE24.4030109-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-02 16:48     ` Jerone Young

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox