Patchwork [v2,3/3] configure/Make: Build libfdt from submodule DTC

login
register
mail settings
Submitter Peter Crosthwaite
Date Feb. 19, 2013, 4:19 a.m.
Message ID <dafee84aec559117663e43ae87a01062416a19ab.1361246789.git.peter.crosthwaite@xilinx.com>
Download mbox | patch
Permalink /patch/221617/
State New
Headers show

Comments

Peter Crosthwaite - Feb. 19, 2013, 4:19 a.m.
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 <david.holsgrove@xilinx.com>
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---

 Makefile  |   10 ++++++++++
 configure |   29 +++++++++++++++++++++++++----
 2 files changed, 35 insertions(+), 4 deletions(-)
Peter Maydell - Feb. 28, 2013, 3:30 p.m.
On 19 February 2013 04:19, Peter Crosthwaite
<peter.crosthwaite@xilinx.com> wrote:
> 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 <david.holsgrove@xilinx.com>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
>
>  Makefile  |   10 ++++++++++
>  configure |   29 +++++++++++++++++++++++++----
>  2 files changed, 35 insertions(+), 4 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 0d9099a..a8956d2 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -136,6 +136,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"
> +
> +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,)

This doesn't work if you configured with --cc='ccache gcc'.
I think you have insufficient quoting here.

> +
> +dtc/%:
> +       mkdir -p $@
> +
>  $(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y)
>
>  ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
> @@ -253,6 +262,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 088909b..6e40624 100755
> --- a/configure
> +++ b/configure
> @@ -2376,11 +2376,28 @@ if test "$fdt" != "no" ; then
>  int main(void) { return 0; }
>  EOF
>    if compile_prog "" "$fdt_libs" ; then
> +    #system DTC is good - use it

Spaces between the comment char and the comment would be nice.

>      fdt=yes
> -  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
> +    echo "ERROR: DTC not present. Your options:"
> +    echo "  (1) Preferred: Install the DTC devel package"
> +    echo "  (2) Fetch the DTC submodule, using:"
> +    echo "      git submodule update --init dtc"
> +    exit 1
> +  else
> +    #dont have and dont want

Missing apostrophes.

>      fdt_libs=
>      fdt=no
>    fi
> @@ -3259,7 +3276,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"
> @@ -4299,6 +4316,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"
>  DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas"
> --
> 1.7.0.4
>

-- PMM
Peter Crosthwaite - March 4, 2013, 4:55 a.m.
On Fri, Mar 1, 2013 at 1:30 AM, Peter Maydell <peter.maydell@linaro.org> wrote:
> On 19 February 2013 04:19, Peter Crosthwaite
> <peter.crosthwaite@xilinx.com> wrote:
>> 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 <david.holsgrove@xilinx.com>
>> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>> ---
>>
>>  Makefile  |   10 ++++++++++
>>  configure |   29 +++++++++++++++++++++++++----
>>  2 files changed, 35 insertions(+), 4 deletions(-)
>>
>> diff --git a/Makefile b/Makefile
>> index 0d9099a..a8956d2 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -136,6 +136,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"
>> +
>> +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,)
>
> This doesn't work if you configured with --cc='ccache gcc'.
> I think you have insufficient quoting here.
>

Yes, CC AR and LD need quotes. Fixed in v3.

Thanks,
Peter

>> +
>> +dtc/%:
>> +       mkdir -p $@
>> +
>>  $(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y)
>>
>>  ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
>> @@ -253,6 +262,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 088909b..6e40624 100755
>> --- a/configure
>> +++ b/configure
>> @@ -2376,11 +2376,28 @@ if test "$fdt" != "no" ; then
>>  int main(void) { return 0; }
>>  EOF
>>    if compile_prog "" "$fdt_libs" ; then
>> +    #system DTC is good - use it
>
> Spaces between the comment char and the comment would be nice.
>
>>      fdt=yes
>> -  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
>> +    echo "ERROR: DTC not present. Your options:"
>> +    echo "  (1) Preferred: Install the DTC devel package"
>> +    echo "  (2) Fetch the DTC submodule, using:"
>> +    echo "      git submodule update --init dtc"
>> +    exit 1
>> +  else
>> +    #dont have and dont want
>
> Missing apostrophes.
>
>>      fdt_libs=
>>      fdt=no
>>    fi
>> @@ -3259,7 +3276,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"
>> @@ -4299,6 +4316,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"
>>  DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas"
>> --
>> 1.7.0.4
>>
>
> -- PMM
>

Patch

diff --git a/Makefile b/Makefile
index 0d9099a..a8956d2 100644
--- a/Makefile
+++ b/Makefile
@@ -136,6 +136,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"
+
+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))
@@ -253,6 +262,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 088909b..6e40624 100755
--- a/configure
+++ b/configure
@@ -2376,11 +2376,28 @@  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
-  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
+    echo "ERROR: DTC not present. Your options:"
+    echo "  (1) Preferred: Install the DTC devel package"
+    echo "  (2) Fetch the DTC submodule, using:"
+    echo "      git submodule update --init dtc"
+    exit 1
+  else
+    #dont have and dont want
     fdt_libs=
     fdt=no
   fi
@@ -3259,7 +3276,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"
@@ -4299,6 +4316,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"
 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas"