Andres Lagar-Cavilla
2011-Nov-14 21:53 UTC
[Xen-devel] [PATCH 0 of 2] Fixes for cross-compiling 32 bit tools on 64 bit host
Using this patch series, we routinely compile the entire toolstack in 32 bit mode on a 64 bit box, no erros or warnings (compilatio-/ linking-related). Please apply. Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org> Signed-off-by: Adin Scannell <adin@scannell.ca> config/x86_32.mk | 1 + config/x86_64.mk | 1 + tools/Makefile | 8 +++++++- tools/blktap/drivers/Makefile | 1 + tools/blktap2/vhd/lib/Makefile | 1 + tools/debugger/gdbsx/Makefile | 2 +- tools/libaio/src/Makefile | 2 +- tools/libfsimage/common/Makefile | 4 ++-- 8 files changed, 15 insertions(+), 5 deletions(-) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Andres Lagar-Cavilla
2011-Nov-14 21:53 UTC
[Xen-devel] [PATCH 1 of 2] Add linker flags to makefile rules to enable cross compiling
config/x86_32.mk | 1 + config/x86_64.mk | 1 + 2 files changed, 2 insertions(+), 0 deletions(-) For cross-compiling, the link step must also include necessary architecture flags (otherwise there''s a mismatch between input objects and the output we''re trying to produce). Signed-off-by: Adin Scannell <adin@scannell.ca> diff -r 1f9e4cde0093 -r bf47f7aaf669 config/x86_32.mk --- a/config/x86_32.mk +++ b/config/x86_32.mk @@ -8,6 +8,7 @@ CONFIG_XCUTILS := y CONFIG_IOEMU := y CFLAGS += -m32 -march=i686 +LDFLAGS += -m32 -march=i686 # Use only if calling $(LD) directly. LDFLAGS_DIRECT_OpenBSD = _obsd diff -r 1f9e4cde0093 -r bf47f7aaf669 config/x86_64.mk --- a/config/x86_64.mk +++ b/config/x86_64.mk @@ -9,6 +9,7 @@ CONFIG_XCUTILS := y CONFIG_IOEMU := y CFLAGS += -m64 +LDFLAGS += -m64 LIBLEAFDIR = $(LIBLEAFDIR_x86_64) LIBDIR = $(LIBDIR_x86_64) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Andres Lagar-Cavilla
2011-Nov-14 21:53 UTC
[Xen-devel] [PATCH 2 of 2] Fixes for cross-compiling 32-bit tools on 64-bit host
tools/Makefile | 8 +++++++- tools/blktap/drivers/Makefile | 1 + tools/blktap2/vhd/lib/Makefile | 1 + tools/debugger/gdbsx/Makefile | 2 +- tools/libaio/src/Makefile | 2 +- tools/libfsimage/common/Makefile | 4 ++-- 6 files changed, 13 insertions(+), 5 deletions(-) With this patch a full 32 bit build of the tool set is possible on a 64 bit host. No errors or warnigns. Signed-off-by: Adin Scannell <adin@scannell.ca> Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org> diff -r bf47f7aaf669 -r 19a5a2cddad3 tools/Makefile --- a/tools/Makefile +++ b/tools/Makefile @@ -74,7 +74,13 @@ distclean: subdirs-distclean rm -rf ioemu-dir ioemu-remote ifneq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH)) -IOEMU_CONFIGURE_CROSS ?= --cpu=$(XEN_TARGET_ARCH) \ +ifeq ($(XEN_TARGET_ARCH),x86_32) +# The qemu build uses i386 instead of x86_32. +IOEMU_CONFIGURE_CPU ?= --cpu=i386 +else +IOEMU_CONFIGURE_CPU ?= --cpu=$(XEN_TARGET_ARCH) +endif +IOEMU_CONFIGURE_CROSS ?= $(IOEMU_CONFIGURE_CPU) \ --cross-prefix=$(CROSS_COMPILE) \ --interp-prefix=$(CROSS_SYS_ROOT) endif diff -r bf47f7aaf669 -r 19a5a2cddad3 tools/blktap/drivers/Makefile --- a/tools/blktap/drivers/Makefile +++ b/tools/blktap/drivers/Makefile @@ -14,6 +14,7 @@ CFLAGS += $(CFLAGS_libxenstore) CFLAGS += -I $(LIBAIO_DIR) CFLAGS += -I $(MEMSHR_DIR) CFLAGS += -D_GNU_SOURCE +CFLAGS += -D_FILE_OFFSET_BITS=64 ifeq ($(shell . ./check_gcrypt $(CC)),yes) CFLAGS += -DUSE_GCRYPT diff -r bf47f7aaf669 -r 19a5a2cddad3 tools/blktap2/vhd/lib/Makefile --- a/tools/blktap2/vhd/lib/Makefile +++ b/tools/blktap2/vhd/lib/Makefile @@ -18,6 +18,7 @@ CFLAGS += -I../../include CFLAGS += -D_GNU_SOURCE CFLAGS += -fPIC CFLAGS += -g +CFLAGS += -D_FILE_OFFSET_BITS=64 ifeq ($(CONFIG_Linux),y) LIBS := -luuid diff -r bf47f7aaf669 -r 19a5a2cddad3 tools/debugger/gdbsx/Makefile --- a/tools/debugger/gdbsx/Makefile +++ b/tools/debugger/gdbsx/Makefile @@ -18,7 +18,7 @@ install: all $(INSTALL_PROG) gdbsx $(DESTDIR)$(SBINDIR)/gdbsx gdbsx: gx/gx_all.a xg/xg_all.a - $(CC) -o $@ $^ + $(CC) $(LDFLAGS) -o $@ $^ xg/xg_all.a: $(MAKE) -C xg diff -r bf47f7aaf669 -r 19a5a2cddad3 tools/libaio/src/Makefile --- a/tools/libaio/src/Makefile +++ b/tools/libaio/src/Makefile @@ -6,7 +6,7 @@ includedir=$(prefix)/include libdir=$(prefix)/lib ARCH := $(shell uname -m | sed -e s/i.86/i386/) -CFLAGS = -nostdlib -nostartfiles -Wall -I. -g -fomit-frame-pointer -O2 -fPIC +CFLAGS := $(CFLAGS) -nostdlib -nostartfiles -Wall -I. -g -fomit-frame-pointer -O2 -fPIC SO_CFLAGS=-shared $(CFLAGS) L_CFLAGS=$(CFLAGS) LINK_FLAGSdiff -r bf47f7aaf669 -r 19a5a2cddad3 tools/libfsimage/common/Makefile --- a/tools/libfsimage/common/Makefile +++ b/tools/libfsimage/common/Makefile @@ -4,8 +4,8 @@ include $(XEN_ROOT)/tools/Rules.mk MAJOR = 1.0 MINOR = 0 -LDFLAGS-$(CONFIG_SunOS) = -Wl,-M -Wl,mapfile-SunOS -LDFLAGS-$(CONFIG_Linux) = -Wl,mapfile-GNU +LDFLAGS-$(CONFIG_SunOS) := $(LDFLAGS) -Wl,-M -Wl,mapfile-SunOS +LDFLAGS-$(CONFIG_Linux) := $(LDFLAGS) -Wl,mapfile-GNU LDFLAGS = $(LDFLAGS-y) LIB_SRCS-y = fsimage.c fsimage_plugin.c fsimage_grub.c _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Campbell
2011-Nov-15 08:55 UTC
Re: [Xen-devel] [PATCH 1 of 2] Add linker flags to makefile rules to enable cross compiling
On Mon, 2011-11-14 at 21:53 +0000, Andres Lagar-Cavilla wrote:> config/x86_32.mk | 1 + > config/x86_64.mk | 1 + > 2 files changed, 2 insertions(+), 0 deletions(-) > > > For cross-compiling, the link step must also include necessary architecture > flags (otherwise there''s a mismatch between input objects and the output we''re > trying to produce). > > Signed-off-by: Adin Scannell <adin@scannell.ca> > > diff -r 1f9e4cde0093 -r bf47f7aaf669 config/x86_32.mk > --- a/config/x86_32.mk > +++ b/config/x86_32.mk > @@ -8,6 +8,7 @@ CONFIG_XCUTILS := y > CONFIG_IOEMU := y > > CFLAGS += -m32 -march=i686 > +LDFLAGS += -m32 -march=i686I think when Adin posted this we determined that it only worked by coincidence, since when we invoke ld directly it is as ld $(LDFLAGS) -melf_x86_64 so while -m32 -march= are unknown to ld the -nelf_xx (which is a valid ld option) takes precedence and things work ok. The consensus then was that we need to split LDFLAGS-for-gcc-as-linker from LDFLAGS-for-ld-directly into two variables. See Jan''s response in <4E844703020000780005868E@nat28.tlf.novell.com>. Ian.> > # Use only if calling $(LD) directly. > LDFLAGS_DIRECT_OpenBSD = _obsd > diff -r 1f9e4cde0093 -r bf47f7aaf669 config/x86_64.mk > --- a/config/x86_64.mk > +++ b/config/x86_64.mk > @@ -9,6 +9,7 @@ CONFIG_XCUTILS := y > CONFIG_IOEMU := y > > CFLAGS += -m64 > +LDFLAGS += -m64 > > LIBLEAFDIR = $(LIBLEAFDIR_x86_64) > LIBDIR = $(LIBDIR_x86_64) > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel