Message ID | dafee84aec559117663e43ae87a01062416a19ab.1361246789.git.peter.crosthwaite@xilinx.com |
---|---|
State | New |
Headers | show |
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
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 >
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"