qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v5 3/3] configure/Make: Build libfdt from submod


From: Blue Swirl
Subject: Re: [Qemu-devel] [PATCH v5 3/3] configure/Make: Build libfdt from submodule DTC
Date: Sat, 20 Apr 2013 18:42:29 +0000

On Thu, Apr 18, 2013 at 4:47 AM,  <address@hidden> wrote:
> From: Peter Crosthwaite <address@hidden>
>
> Configure to use the DTC submodule to build libfdt when no system libfdt
> is found. Prompt to install the DTC submodule if --enable-fdt is set but
> no DTC can be found.
>
> DTC has no out-of-tree build capability, so the configure will symlink
> the Makefile and scripts directory in the out of tree build directory
> and pass in all the needed DTC arguments to make out of tree build happen.
> Ideally we fix the DTC make to support out of tree, but did it this way to
> avoid commits to DTC.
>
> Signed-off-by: David Holsgrove <address@hidden>
> Signed-off-by: Peter Crosthwaite <address@hidden>
> Reviewed-by: Peter Maydell <address@hidden>
> ---
> changed from v4:
> Use error_exit fn (PMM review)
> changed from v3:
> Rebased against recent devls.
> Fixed some cosmetics.
> changed from v2:
> Fixed quoting of Make arguments (PMM review)
> Fixed comment styling and typos (PMM review)
>
>  Makefile  |   10 ++++++++++
>  configure |   31 ++++++++++++++++++++++++++-----
>  2 files changed, 36 insertions(+), 5 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 67f19f2..88375dc 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -145,6 +145,15 @@ pixman/Makefile: $(SRC_PATH)/pixman/configure
>  $(SRC_PATH)/pixman/configure:
>         (cd $(SRC_PATH)/pixman; autoreconf -v --install)
>
> +DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" 
> LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
> +DTC_CFLAGS=$(CFLAGS) $(extra_cflags) -I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc 
> -I$(SRC_PATH)/dtc/libfdt

This is not entirely correct, I get these errors:
mingw32:
     CC libfdt/fdt.o
cc1: warnings being treated as errors
/src/qemu/dtc/libfdt/fdt.c:1: warning: -fPIC ignored for target (all
code is position independent)

Other flags, including -fPIC, is missing for Clang:
     LD libfdt/libfdt-1.3.0.so
/usr/bin/ld: libfdt/fdt.o: relocation R_X86_64_32S against `.rodata'
can not be used when making a shared object; recompile with -fPIC

My build script also passes additional CFLAGS to both.

Perhaps the fix is to use QEMU_CFLAGS instead of (or in addition to)
CFLAGS above for DTC_CFLAGS? Or add -fPIC as with pixman?

> +
> +subdir-dtc:dtc/libfdt dtc/tests
> +       $(call quiet-command,$(MAKE) $(DTC_MAKE_ARGS) 
> CPPFLAGS="$(DTC_CFLAGS)" LDFLAGS="$(LDFLAGS)" ARFLAGS="$(ARFLAGS)" CC="$(CC)" 
> AR="$(AR)" LD="$(LD)" $(SUBDIR_MAKEFLAGS) libfdt,)
> +
> +dtc/%:
> +       mkdir -p $@
> +
>  $(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y)
>
>  ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
> @@ -262,6 +271,7 @@ distclean: clean
>         rm -rf $$d || exit 1 ; \
>          done
>         if test -f pixman/config.log; then make -C pixman distclean; fi
> +       if test -f dtc/version_gen.h; then make $(DTC_MAKE_ARGS) clean; fi
>
>  KEYMAPS=da     en-gb  et  fr     fr-ch  is  lt  modifiers  no  pt-br  sv \
>  ar      de     en-us  fi  fr-be  hr     it  lv  nl         pl  ru     th \
> diff --git a/configure b/configure
> index d5f1516..7546799 100755
> --- a/configure
> +++ b/configure
> @@ -2496,17 +2496,34 @@ if test "$fdt" != "no" ; then
>  int main(void) { return 0; }
>  EOF
>    if compile_prog "" "$fdt_libs" ; then
> +    # system DTC is good - use it
>      fdt=yes
> -    libs_softmmu="$libs_softmmu $fdt_libs"
> -  else
> -    if test "$fdt" = "yes" ; then
> -      feature_not_found "fdt"
> +  elif test -d ${source_path}/dtc/libfdt ; then
> +    # have submodule DTC - use it
> +    fdt=yes
> +    dtc_internal="yes"
> +    mkdir -p dtc
> +    if [ "$source_path" != `pwd` ] ; then
> +       symlink "$source_path/dtc/Makefile" "dtc/Makefile"
> +       symlink "$source_path/dtc/scripts" "dtc/scripts"
>      fi
> +    fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
> +    fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
> +  elif test "$fdt" = "yes" ; then
> +    # have neither and want - prompt for system/submodule install
> +    error_exit "ERROR: DTC not present. Your options:" \
> +        "  (1) Preferred: Install the DTC devel package" \
> +        "  (2) Fetch the DTC submodule, using:" \
> +        "      git submodule update --init dtc"
> +  else
> +    # don't have and don't want
>      fdt_libs=
>      fdt=no
>    fi
>  fi
>
> +libs_softmmu="$libs_softmmu $fdt_libs"
> +
>  ##########################################
>  # GLX probe, used by milkymist-tmu2
>  if test "$glx" != "no" ; then
> @@ -3452,7 +3469,7 @@ if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; 
> then
>  fi
>
>  # add pixman flags after all config tests are done
> -QEMU_CFLAGS="$QEMU_CFLAGS $pixman_cflags"
> +QEMU_CFLAGS="$QEMU_CFLAGS $pixman_cflags $fdt_cflags"
>  libs_softmmu="$libs_softmmu $pixman_libs"
>
>  echo "Install prefix    $prefix"
> @@ -4515,6 +4532,10 @@ if [ "$pixman" = "internal" ]; then
>    echo "config-host.h: subdir-pixman" >> $config_host_mak
>  fi
>
> +if [ "$dtc_internal" = "yes" ]; then
> +  echo "config-host.h: subdir-dtc" >> $config_host_mak
> +fi
> +
>  # build tree in object directory in case the source is not in the current 
> directory
>  DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos"
>  DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas"
> --
> 1.7.0.4
>
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]