On 16.04.2018 01:05, Philippe Mathieu-Daudé wrote: > QEMU requires libfdt version >= 1.4.2. > If the host has an older libfdt installed, the configure script will use > a (git cloned) local version. > > Example with Debian 8: > $ dpkg-query --showformat='${Version}\n' --show libfdt-dev > 1.4.0+dfsg-1 > $ ./configure > [...] > fdt support yes # from git submodule 'dtc' > > If this case occurs, the linker will have 2 different libfdt available in > the library search path. The default behavior is to search the system path > first, then the local path. > > Even if the configure script noticed the libfdt is too old and clone a more > recent locally, when linking the system library is selected first, and the > link process eventually fails: > > LINK mips64el-softmmu/qemu-system-mips64el > ../hw/core/loader-fit.o: In function `load_fit': > /root/src/github.com/philmd/qemu/hw/core/loader-fit.c:278: undefined > reference to `fdt_first_subnode' > /root/src/github.com/philmd/qemu/hw/core/loader-fit.c:286: undefined > reference to `fdt_next_subnode' > /root/src/github.com/philmd/qemu/hw/core/loader-fit.c:277: undefined > reference to `fdt_first_subnode' > collect2: error: ld returned 1 exit status > Makefile:201: recipe for target 'qemu-system-mips64el' failed > make[1]: *** [qemu-system-mips64el] Error 1 > > QEMU already uses a kludge to enforce local CFLAGS before system ones for > libpixman and libfdt, add a similar kludge for the LDFLAGS to enforce using > the local libfdt. > > Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > configure | 6 +++++- > rules.mak | 2 +- > 2 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/configure b/configure > index 0a19b033bc..162e804b49 100755 > --- a/configure > +++ b/configure > @@ -3773,7 +3773,8 @@ EOF > symlink "$source_path/dtc/scripts" "dtc/scripts" > fi > fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" > - fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs" > + fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt" > + fdt_libs="$fdt_libs" > elif test "$fdt" = "yes" ; then > # Not a git build & no libfdt found, prompt for system install > error_exit "DTC (libfdt) version >= 1.4.2 not present." \ > @@ -5715,6 +5716,7 @@ echo_version() { > > # prepend pixman and ftd flags after all config tests are done > QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" > +QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" > libs_softmmu="$pixman_libs $libs_softmmu"
I think the pixman lines could be removed now that we do not have an internal pixman version anymore (but that's something for a separate patch) > echo "Install prefix $prefix" > @@ -5745,6 +5747,7 @@ echo "ARFLAGS $ARFLAGS" > echo "CFLAGS $CFLAGS" > echo "QEMU_CFLAGS $QEMU_CFLAGS" > echo "LDFLAGS $LDFLAGS" > +echo "QEMU_LDFLAGS $QEMU_LDFLAGS" > echo "make $make" > echo "install $install" > echo "python $python" > @@ -6679,6 +6682,7 @@ else > fi > echo "LDFLAGS=$LDFLAGS" >> $config_host_mak > echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak > +echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak > echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak > echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak > echo "LIBS+=$LIBS" >> $config_host_mak > diff --git a/rules.mak b/rules.mak > index 93a07027b0..04c7f74d07 100644 > --- a/rules.mak > +++ b/rules.mak > @@ -73,7 +73,7 @@ expand-objs = $(strip $(sort $(filter %.o,$1)) \ > # must link with the C++ compiler, not the plain C compiler. > LINKPROG = $(or $(CXX),$(CC)) > > -LINK = $(call quiet-command, $(LINKPROG) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) > -o $@ \ > +LINK = $(call quiet-command, $(LINKPROG) $(QEMU_LDFLAGS) $(QEMU_CFLAGS) > $(CFLAGS) $(LDFLAGS) -o $@ \ > $(call process-archive-undefs, $1) \ > $(version-obj-y) $(call extract-libs,$1) > $(LIBS),"LINK","$(TARGET_DIR)$@") Looks reasonable. Reviewed-by: Thomas Huth <th...@redhat.com>