On Thu, Jun 28, 2018 at 6:17 AM Andrew Morton <a...@linux-foundation.org> wrote: > > On Wed, 20 Jun 2018 16:04:34 +0200 Matteo Croce <mcr...@redhat.com> wrote: > > > Use $(OBJDUMP) instead of literal 'objdump' to avoid > > using host toolchain when cross compiling. > > > > I'm still having issues here, with ld. > > x86_64 machine, ARCH=i386: > > y:/usr/src/25> make V=1 M=net/bpfilter > test -e include/generated/autoconf.h -a -e include/config/auto.conf || ( > \ > echo >&2; \ > echo >&2 " ERROR: Kernel configuration is invalid."; \ > echo >&2 " include/generated/autoconf.h or include/config/auto.conf > are missing.";\ > echo >&2 " Run 'make oldconfig && make prepare' on kernel src to fix > it."; \ > echo >&2 ; \ > /bin/false) > mkdir -p net/bpfilter/.tmp_versions ; rm -f net/bpfilter/.tmp_versions/* > make -f ./scripts/Makefile.build obj=net/bpfilter > (cat /dev/null; echo kernel/net/bpfilter/bpfilter.ko;) > > net/bpfilter/modules.order > ld -m elf_i386 -r -o net/bpfilter/bpfilter.o net/bpfilter/bpfilter_kern.o > net/bpfilter/bpfilter_umh.o ; scripts/mod/modpost net/bpfilter/bpfilter.o > ld: i386:x86-64 architecture of input file `net/bpfilter/bpfilter_umh.o' is > incompatible with i386 output > scripts/Makefile.build:530: recipe for target 'net/bpfilter/bpfilter.o' failed > make[1]: *** [net/bpfilter/bpfilter.o] Error 1 > Makefile:1518: recipe for target '_module_net/bpfilter' failed > make: *** [_module_net/bpfilter] Error 2 > > y:/usr/src/25> ld --version > GNU ld (GNU Binutils for Ubuntu) 2.29.1 > >
Hi Andrew, That's because the Makefile does `HOSTCC:=$(CC)` which replaces the tools compiler with the target one. The problem is that for i386 and x86_64 the compiler is the same, it's just called with different arguments, -m32 and -m64. This ends up with mixed i386 and x86_64 binaries which obviously can't link together. Personally I think that we should add infrastructure to build target progs like we do with hostprogs-y instead of keeping messing with variables and flags. If you want a quick and dirty hack to build it, I'm using this. Regards, diff --git a/net/bpfilter/Makefile b/net/bpfilter/Makefile index 051dc18b8ccb..5de353cfd26b 100644 --- a/net/bpfilter/Makefile +++ b/net/bpfilter/Makefile @@ -5,8 +5,9 @@ hostprogs-y := bpfilter_umh bpfilter_umh-objs := main.o -HOSTCFLAGS += -I. -Itools/include/ -Itools/include/uapi HOSTCC := $(CC) +HOSTCFLAGS := $(KBUILD_CFLAGS) -I. -Itools/include/ -Itools/include/uapi +HOSTLOADLIBES_bpfilter_umh := $(KBUILD_CFLAGS) ifeq ($(CONFIG_BPFILTER_UMH), y) # builtin bpfilter_umh should be compiled with -static -- Matteo Croce per aspera ad upstream