Patchwork [v3,04/29] build: move *-user/ objects to nested Makefile.objs

login
register
mail settings
Submitter Paolo Bonzini
Date June 7, 2012, 7:39 a.m.
Message ID <1339054814-20939-5-git-send-email-pbonzini@redhat.com>
Download mbox | patch
Permalink /patch/163518/
State New
Headers show

Comments

Paolo Bonzini - June 7, 2012, 7:39 a.m.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 Makefile.target                    |   32 ++++++++++----------------------
 bsd-user/Makefile.objs             |    2 ++
 configure                          |    8 +++++++-
 linux-user/Makefile.objs           |    7 +++++++
 linux-user/arm/nwfpe/Makefile.objs |    2 ++
 5 files changed, 28 insertions(+), 23 deletions(-)
 create mode 100644 bsd-user/Makefile.objs
 create mode 100644 linux-user/Makefile.objs
 create mode 100644 linux-user/arm/nwfpe/Makefile.objs
Alex Barcelo - June 26, 2012, 6:24 a.m.
I'm the only one whom this patch breaks compilation? Is a
cross-compiled qemu, but the make had run smoothly until now, and a
git bisect has driven me here.

My configuration is a bit strange:

configure:
PKG_CONFIG_PATH=/usr/powerpc-linux-gnu/lib/pkgconfig ./configure
--prefix=/mnt/DATA/DARCO/alien --enable-debug-tcg --enable-debug
--enable-trace-backend=simple --disable-strip --disable-kvm
--enable-profiler --target-list=i386-softmmu --static --disable-curl
--cross-prefix=powerpc-linux-gnu- --with-coroutine=sigaltstack

errors:
/usr/lib/gcc/powerpc-linux-gnu/4.4.5/../../../../powerpc-linux-gnu/bin/ld:
i386 architecture of input file `hw/device-hotplug.o' is incompatible
with powerpc:common output
(and also with other input file on hw: kvmapic.o, multiboot.o,
smbios.o, vga.o, target-i386/machine.o, target-i386/translate.o)

followed by (maybe related?)
"relocation truncated to fit:"
for various files ended. It all (the compilation crash) ends with
/mnt/DATA/DARCO/qemu-git/qemu-file.h:142: additional relocation
overflows omitted from the output
/usr/lib/gcc/powerpc-linux-gnu/4.4.5/../../../../powerpc-linux-gnu/bin/ld:
BFD (GNU Binutils for Debian) 2.20.1.20100303 internal error, aborting
at ../../bfd/elf32-ppc.c line 7447 in ppc_elf_relocate_section

/usr/lib/gcc/powerpc-linux-gnu/4.4.5/../../../../powerpc-linux-gnu/bin/ld:
Please report this bug.

I'm not a guru on makefiles, so I'm sure I'm missing important things.
Could anyone give me some pointers? What to check? Do I start a new
thread with more detailed information and compilation output? Do I try
to isolate the problem? Is this a easy thing to fix that I have
overlooked?

Thanks,
Alex Barcelo

On Thu, Jun 7, 2012 at 9:39 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  Makefile.target                    |   32 ++++++++++----------------------
>  bsd-user/Makefile.objs             |    2 ++
>  configure                          |    8 +++++++-
>  linux-user/Makefile.objs           |    7 +++++++
>  linux-user/arm/nwfpe/Makefile.objs |    2 ++
>  5 files changed, 28 insertions(+), 23 deletions(-)
>  create mode 100644 bsd-user/Makefile.objs
>  create mode 100644 linux-user/Makefile.objs
>  create mode 100644 linux-user/arm/nwfpe/Makefile.objs
>
> diff --git a/Makefile.target b/Makefile.target
> index 40b774a..5cc577b 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -113,32 +113,20 @@ user-exec.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
>
>  # Note: this is a workaround. The real fix is to avoid compiling
>  # cpu_signal_handler() in user-exec.c.
> -signal.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
> +%/signal.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
>
>  #########################################################
>  # Linux user emulator target
>
>  ifdef CONFIG_LINUX_USER
>
> -$(call set-vpath, $(SRC_PATH)/linux-user:$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR))
> -
>  QEMU_CFLAGS+=-I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR) -I$(SRC_PATH)/linux-user
> -obj-y = main.o syscall.o strace.o mmap.o signal.o thunk.o \
> -      elfload.o linuxload.o uaccess.o gdbstub.o cpu-uname.o \
> -      user-exec.o $(oslib-obj-y)
> -
> -obj-$(TARGET_HAS_BFLT) += flatload.o
> -
> -obj-$(TARGET_I386) += vm86.o
>
> +obj-y += linux-user/
> +obj-y += gdbstub.o thunk.o user-exec.o $(oslib-obj-y)
>  obj-i386-y += ioport-user.o
> -
> -nwfpe-obj-y = fpa11.o fpa11_cpdo.o fpa11_cpdt.o fpa11_cprt.o fpopcode.o
> -nwfpe-obj-y += single_cpdo.o double_cpdo.o extended_cpdo.o
> -obj-arm-y +=  $(addprefix nwfpe/, $(nwfpe-obj-y))
> -obj-arm-y += arm-semi.o
> -
> -obj-m68k-y += m68k-sim.o m68k-semi.o
> +obj-$(TARGET_ARM) += arm-semi.o
> +obj-$(TARGET_M68K) += m68k-semi.o
>
>  obj-y += $(addprefix ../, $(universal-obj-y))
>  obj-y += $(addprefix ../libuser/, $(user-obj-y))
> @@ -152,13 +140,10 @@ endif #CONFIG_LINUX_USER
>
>  ifdef CONFIG_BSD_USER
>
> -$(call set-vpath, $(SRC_PATH)/bsd-user)
> -
>  QEMU_CFLAGS+=-I$(SRC_PATH)/bsd-user -I$(SRC_PATH)/bsd-user/$(TARGET_ARCH)
>
> -obj-y = main.o bsdload.o elfload.o mmap.o signal.o strace.o syscall.o \
> -        gdbstub.o uaccess.o user-exec.o
> -
> +obj-y += bsd-user/
> +obj-y += gdbstub.o user-exec.o
>  obj-i386-y += ioport-user.o
>
>  obj-y += $(addprefix ../, $(universal-obj-y))
> @@ -408,6 +393,9 @@ endif # CONFIG_LINUX_USER
>
>  obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o
>
> +nested-vars = obj-y
> +dummy := $(call unnest-vars)
> +
>  ifdef QEMU_PROGW
>  # The linker builds a windows executable. Make also a console executable.
>  $(QEMU_PROGW): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y)
> diff --git a/bsd-user/Makefile.objs b/bsd-user/Makefile.objs
> new file mode 100644
> index 0000000..5e77f57
> --- /dev/null
> +++ b/bsd-user/Makefile.objs
> @@ -0,0 +1,2 @@
> +obj-y = main.o bsdload.o elfload.o mmap.o signal.o strace.o syscall.o \
> +               uaccess.o
> diff --git a/configure b/configure
> index 76dd57f..2c44488 100755
> --- a/configure
> +++ b/configure
> @@ -3520,8 +3520,14 @@ mkdir -p $target_dir/ide
>  mkdir -p $target_dir/usb
>  mkdir -p $target_dir/9pfs
>  mkdir -p $target_dir/kvm
> +if test "$target_linux_user" = yes; then
> +  mkdir -p $target_dir/linux-user
> +fi
> +if test "$target_bsd_user" = yes; then
> +  mkdir -p $target_dir/bsd-user
> +fi
>  if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-user" -o "$target" = "arm-bsd-user" -o "$target" = "armeb-bsd-user" ; then
> -  mkdir -p $target_dir/nwfpe
> +  mkdir -p $target_dir/linux-user/arm/nwfpe
>  fi
>  symlink "$source_path/Makefile.target" "$target_dir/Makefile"
>
> diff --git a/linux-user/Makefile.objs b/linux-user/Makefile.objs
> new file mode 100644
> index 0000000..5899d72
> --- /dev/null
> +++ b/linux-user/Makefile.objs
> @@ -0,0 +1,7 @@
> +obj-y = main.o syscall.o strace.o mmap.o signal.o \
> +       elfload.o linuxload.o uaccess.o cpu-uname.o
> +
> +obj-$(TARGET_HAS_BFLT) += flatload.o
> +obj-$(TARGET_I386) += vm86.o
> +obj-$(TARGET_ARM) += arm/nwfpe/
> +obj-$(TARGET_M68K) += m68k-sim.o
> diff --git a/linux-user/arm/nwfpe/Makefile.objs b/linux-user/arm/nwfpe/Makefile.objs
> new file mode 100644
> index 0000000..51b0c32
> --- /dev/null
> +++ b/linux-user/arm/nwfpe/Makefile.objs
> @@ -0,0 +1,2 @@
> +obj-y = fpa11.o fpa11_cpdo.o fpa11_cpdt.o fpa11_cprt.o fpopcode.o
> +obj-y += single_cpdo.o double_cpdo.o extended_cpdo.o
> --
> 1.7.10.1
>
>
>

Patch

diff --git a/Makefile.target b/Makefile.target
index 40b774a..5cc577b 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -113,32 +113,20 @@  user-exec.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
 
 # Note: this is a workaround. The real fix is to avoid compiling
 # cpu_signal_handler() in user-exec.c.
-signal.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
+%/signal.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
 
 #########################################################
 # Linux user emulator target
 
 ifdef CONFIG_LINUX_USER
 
-$(call set-vpath, $(SRC_PATH)/linux-user:$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR))
-
 QEMU_CFLAGS+=-I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR) -I$(SRC_PATH)/linux-user
-obj-y = main.o syscall.o strace.o mmap.o signal.o thunk.o \
-      elfload.o linuxload.o uaccess.o gdbstub.o cpu-uname.o \
-      user-exec.o $(oslib-obj-y)
-
-obj-$(TARGET_HAS_BFLT) += flatload.o
-
-obj-$(TARGET_I386) += vm86.o
 
+obj-y += linux-user/
+obj-y += gdbstub.o thunk.o user-exec.o $(oslib-obj-y)
 obj-i386-y += ioport-user.o
-
-nwfpe-obj-y = fpa11.o fpa11_cpdo.o fpa11_cpdt.o fpa11_cprt.o fpopcode.o
-nwfpe-obj-y += single_cpdo.o double_cpdo.o extended_cpdo.o
-obj-arm-y +=  $(addprefix nwfpe/, $(nwfpe-obj-y))
-obj-arm-y += arm-semi.o
-
-obj-m68k-y += m68k-sim.o m68k-semi.o
+obj-$(TARGET_ARM) += arm-semi.o
+obj-$(TARGET_M68K) += m68k-semi.o
 
 obj-y += $(addprefix ../, $(universal-obj-y))
 obj-y += $(addprefix ../libuser/, $(user-obj-y))
@@ -152,13 +140,10 @@  endif #CONFIG_LINUX_USER
 
 ifdef CONFIG_BSD_USER
 
-$(call set-vpath, $(SRC_PATH)/bsd-user)
-
 QEMU_CFLAGS+=-I$(SRC_PATH)/bsd-user -I$(SRC_PATH)/bsd-user/$(TARGET_ARCH)
 
-obj-y = main.o bsdload.o elfload.o mmap.o signal.o strace.o syscall.o \
-        gdbstub.o uaccess.o user-exec.o
-
+obj-y += bsd-user/
+obj-y += gdbstub.o user-exec.o
 obj-i386-y += ioport-user.o
 
 obj-y += $(addprefix ../, $(universal-obj-y))
@@ -408,6 +393,9 @@  endif # CONFIG_LINUX_USER
 
 obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o
 
+nested-vars = obj-y
+dummy := $(call unnest-vars)
+
 ifdef QEMU_PROGW
 # The linker builds a windows executable. Make also a console executable.
 $(QEMU_PROGW): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y)
diff --git a/bsd-user/Makefile.objs b/bsd-user/Makefile.objs
new file mode 100644
index 0000000..5e77f57
--- /dev/null
+++ b/bsd-user/Makefile.objs
@@ -0,0 +1,2 @@ 
+obj-y = main.o bsdload.o elfload.o mmap.o signal.o strace.o syscall.o \
+	        uaccess.o
diff --git a/configure b/configure
index 76dd57f..2c44488 100755
--- a/configure
+++ b/configure
@@ -3520,8 +3520,14 @@  mkdir -p $target_dir/ide
 mkdir -p $target_dir/usb
 mkdir -p $target_dir/9pfs
 mkdir -p $target_dir/kvm
+if test "$target_linux_user" = yes; then
+  mkdir -p $target_dir/linux-user
+fi
+if test "$target_bsd_user" = yes; then
+  mkdir -p $target_dir/bsd-user
+fi
 if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-user" -o "$target" = "arm-bsd-user" -o "$target" = "armeb-bsd-user" ; then
-  mkdir -p $target_dir/nwfpe
+  mkdir -p $target_dir/linux-user/arm/nwfpe
 fi
 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
 
diff --git a/linux-user/Makefile.objs b/linux-user/Makefile.objs
new file mode 100644
index 0000000..5899d72
--- /dev/null
+++ b/linux-user/Makefile.objs
@@ -0,0 +1,7 @@ 
+obj-y = main.o syscall.o strace.o mmap.o signal.o \
+	elfload.o linuxload.o uaccess.o cpu-uname.o
+
+obj-$(TARGET_HAS_BFLT) += flatload.o
+obj-$(TARGET_I386) += vm86.o
+obj-$(TARGET_ARM) += arm/nwfpe/
+obj-$(TARGET_M68K) += m68k-sim.o
diff --git a/linux-user/arm/nwfpe/Makefile.objs b/linux-user/arm/nwfpe/Makefile.objs
new file mode 100644
index 0000000..51b0c32
--- /dev/null
+++ b/linux-user/arm/nwfpe/Makefile.objs
@@ -0,0 +1,2 @@ 
+obj-y = fpa11.o fpa11_cpdo.o fpa11_cpdt.o fpa11_cprt.o fpopcode.o
+obj-y += single_cpdo.o double_cpdo.o extended_cpdo.o