[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-2.12? 1/4] configure: Really use local libfd
From: |
Thomas Huth |
Subject: |
Re: [Qemu-devel] [PATCH for-2.12? 1/4] configure: Really use local libfdt if the system one is too old |
Date: |
Mon, 16 Apr 2018 07:22:08 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 |
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é <address@hidden>
> ---
> 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 <address@hidden>