This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
fix in-tree building of ppl, cloog, libelf
- From: Alexandre Oliva <aoliva at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sun, 08 Nov 2009 06:45:26 -0200
- Subject: fix in-tree building of ppl, cloog, libelf
This patch fixes a number of problems I ran into attempting to bootstrap
gmp, mpfr, mpc, ppl, cloog and libelf along with GCC. It's not so much
that I wanted to bootstrap them in the first place, but I wanted to
build graphite et al on machines on which I couldn't easily install
precompiled versions thereof. I figured dropping them in the source
tree I pushed onto them would be simpler. Big mistake ;-)
I got ppl adn cloog --with-* flag handling to actually set things up for
the in-tree headers and libraries to be used. Setting with_cloog and
with_ppl by default was disabling the code that looked for the sources
in the build tree, so the include and link flags we're set up properly.
The top-level configure expected ppl to put headers and libraries at the
wrong place, so cloog would fail to configure and, getting past that,
gcc would fail to build. I arranged for cloog to be fed the same
CPPFLAGS and LDFLAGS that we give GCC to locate ppl, and I fixed them so
that the ppl headers and libraries would be located in the build tree.
I arranged for the version checks applied to ppl, cloog and libelf to be
skipped for in-tree builds.
I improved the portability of the test for whether C++ is enabled as a
bootstrap language, and I arranged for us to use the standard C++
compiler and flags during stage2 and stage3 otherwise, so that ppl and
cloog can build in all stages. Without a bootstrapped C++ compiler,
recompiling C++ stuff with the system C++ compiler is a bit of a waste,
but I couldn't think of a way to selectively disable bootstrapping of
certain programs. And then, I figured it might be useful to support
drop-in C++-requiring programs (think gold) without failing or demanding
a C++ bootstrap.
I dropped the none-vendor-os triples passed to nearly all drop-in
libraries. configure complains about it, and I can't figure out why
it's there at all.
Although there was some configury code (presumably cut&pasted from other
libs) that would have permitted libelf to build as a drop-in, that was
far from enough. I added what was missing and fixed what was broken, so
that it works.
I'd appreciate if someone who's been more active in configury would take
a look at the changes below, but if nobody objects, I'll check this in
about a week from now, after I return from my next trip (the last of the
year, yay! :-)
for ChangeLog
from Alexandre Oliva <aoliva@redhat.com>
* configure.ac: Add libelf to host_libs. Enable in-tree configury
of ppl and cloog. Fix in-tree configury of libelf, skip tests.
Fix portability of test of C++ as bootstrap language. Add
ppl/src/ppl-config.o to the bootstrap compare exclusion list.
* configure: Rebuild.
* Makefile.def: Drop host and target settings from gmp, mpfr, ppl,
and cloog. Fix in-tree ppl configuration. Introduce libelf
in-tree building.
* Makefile.tpl (POSTSTAGE1_CXX_EXPORT): New.
(POSTSTAGE1_HOST_EXPORTS): Use it.
(STAGE[+id+]_CXXFLAGS): New.
(BASE_FLAGS_TO_PASS): Pass it down.
(configure-stage[+id+]-[+prefix+][+module+]): Use it. Add
extra_exports.
(all-stage[+id+]-[+prefix+][+module+]): Likewise.
(configure-[+prefix+][+module+], all-[+prefix+][+module+]): Add
extra_exports.
* Makefile.in: Rebuild.
Index: configure.ac
===================================================================
--- configure.ac.orig 2009-11-08 05:09:49.000000000 -0200
+++ configure.ac 2009-11-08 05:17:17.000000000 -0200
@@ -161,7 +161,7 @@ build_tools="build-texinfo build-byacc b
# these libraries are used by various programs built for the host environment
#
-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr mpc ppl cloog libiconv"
+host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr mpc ppl cloog libelf libiconv"
# these tools are built for the host environment
# Note, the powerpc-eabi build depends on sim occurring before gdb in order to
@@ -1516,7 +1516,7 @@ pplinc=
AC_ARG_WITH(ppl, [ --with-ppl=PATH Specify prefix directory for the installed PPL package
Equivalent to --with-ppl-include=PATH/include
- plus --with-ppl-lib=PATH/lib],, with_ppl=yes)
+ plus --with-ppl-lib=PATH/lib])
AC_ARG_WITH(ppl_include, [ --with-ppl-include=PATH Specify directory for installed PPL include files])
AC_ARG_WITH(ppl_lib, [ --with-ppl-lib=PATH Specify the directory for the installed PPL library])
@@ -1524,7 +1524,7 @@ case $with_ppl in
no)
ppllibs=
;;
- yes)
+ "" | yes)
;;
*)
ppllibs="-L$with_ppl/lib -lppl_c -lppl -lgmpxx"
@@ -1538,8 +1538,9 @@ if test "x$with_ppl_lib" != x; then
ppllibs="-L$with_ppl_lib -lppl_c -lppl -lgmpxx"
fi
if test "x$with_ppl$with_ppl_include$with_ppl_lib" = x && test -d ${srcdir}/ppl; then
- ppllibs='-L$$r/$(HOST_SUBDIR)/ppl/.libs -L$$r/$(HOST_SUBDIR)/ppl/_libs -lppl_c -lppl -lgmpxx '
- pplinc='-I$$r/$(HOST_SUBDIR)/ppl/include -I$$s/ppl/include '
+ ppllibs='-L$$r/$(HOST_SUBDIR)/ppl/interfaces/C/.libs -L$$r/$(HOST_SUBDIR)/ppl/interfaces/C/_libs -L$$r/$(HOST_SUBDIR)/ppl/src/.libs -L$$r/$(HOST_SUBDIR)/ppl/src/_libs -lppl_c -lppl -lgmpxx '
+ pplinc='-I$$r/$(HOST_SUBDIR)/ppl/src -I$$r/$(HOST_SUBDIR)/ppl/interfaces/C '
+ enable_ppl_version_check=no
fi
AC_ARG_ENABLE(ppl-version-check,
@@ -1570,7 +1571,7 @@ clooginc=" -DCLOOG_PPL_BACKEND "
AC_ARG_WITH(cloog, [ --with-cloog=PATH Specify prefix directory for the installed CLooG-PPL package
Equivalent to --with-cloog-include=PATH/include
- plus --with-cloog-lib=PATH/lib],, with_cloog=yes)
+ plus --with-cloog-lib=PATH/lib])
AC_ARG_WITH(cloog_include, [ --with-cloog-include=PATH Specify directory for installed CLooG include files])
AC_ARG_WITH(cloog_lib, [ --with-cloog-lib=PATH Specify the directory for the installed CLooG library])
@@ -1583,7 +1584,7 @@ case $with_cloog in
clooglibs=
clooginc=
;;
- yes)
+ "" | yes)
;;
*)
clooglibs="-L$with_cloog/lib -lcloog"
@@ -1599,6 +1600,7 @@ fi
if test "x$with_cloog$with_cloog_include$with_cloog_lib" = x && test -d ${srcdir}/cloog; then
clooglibs='-L$$r/$(HOST_SUBDIR)/cloog/.libs -L$$r/$(HOST_SUBDIR)/cloog/_libs -lcloog '
clooginc='-I$$r/$(HOST_SUBDIR)/cloog/include -I$$s/cloog/include -DCLOOG_PPL_BACKEND '
+ enable_cloog_version_check=no
fi
AC_ARG_ENABLE(cloog-version-check,
@@ -1665,10 +1667,11 @@ if test x"$enable_lto" = x"yes" ; then
if test "x$with_libelf$with_libelf_include$with_libelf_lib" = x \
&& test -d ${srcdir}/libelf; then
- libelflibs='-L$$r/$(HOST_SUBDIR)/libelf/.libs -L$$r/$(HOST_SUBDIR)/libelf/_libs -lelf '
- libelfinc='-I$$r/$(HOST_SUBDIR)/libelf/include -I$$s/libelf/include'
+ libelflibs='-L$$r/$(HOST_SUBDIR)/libelf/lib -lelf '
+ libelfinc='-D__LIBELF_INTERNAL__ -I$$r/$(HOST_SUBDIR)/libelf/lib -I$$s/libelf/lib'
LIBS="$libelflibs $LIBS"
- fi
+
+ else
CFLAGS="$CFLAGS $libelfinc"
CPPFLAGS="$CPPFLAGS $libelfinc"
@@ -1738,6 +1741,8 @@ to specify its location.])
CPPFLAGS="$saved_CPPFLAGS"
LIBS="$saved_LIBS"
+ fi
+
# Flags needed for libelf.
AC_SUBST(libelflibs)
AC_SUBST(libelfinc)
@@ -1850,7 +1855,8 @@ if test -d ${srcdir}/gcc; then
exit 1
fi
- if test "$language" = "c++" -a "$ENABLE_BUILD_WITH_CXX" = "yes"; then
+ if test "$language" = "c++" \
+ && test "$ENABLE_BUILD_WITH_CXX" = "yes"; then
boot_language=yes
fi
@@ -3368,6 +3374,9 @@ case "$target" in
hppa*64*-*-hpux*) ;;
hppa*-*-hpux*) compare_exclusions="gcc/cc*-checksum\$(objext) | */libgcc/lib2funcs* | gcc/ada/*tools/*" ;;
esac
+case " $configdirs " in
+*" ppl "*) compare_exclusions="$compare_exclusions | ppl/src/ppl-config.o" ;;
+esac
AC_SUBST(compare_exclusions)
AC_CONFIG_FILES([Makefile],
Index: Makefile.def
===================================================================
--- Makefile.def.orig 2009-11-08 05:09:38.000000000 -0200
+++ Makefile.def 2009-11-08 05:09:57.000000000 -0200
@@ -62,27 +62,24 @@ host_modules= { module= gawk; };
host_modules= { module= gettext; };
host_modules= { module= gmp; lib_path=.libs; bootstrap=true;
extra_configure_flags='--disable-shared';
- no_install= true;
- host="none-${host_vendor}-${host_os}";
- target="none-${host_vendor}-${host_os}"; };
+ no_install= true; };
host_modules= { module= mpfr; lib_path=.libs; bootstrap=true;
extra_configure_flags='--disable-shared @extra_mpfr_configure_flags@';
- no_install= true;
- host="none-${host_vendor}-${host_os}";
- target="none-${host_vendor}-${host_os}"; };
+ no_install= true; };
host_modules= { module= mpc; lib_path=.libs; bootstrap=true;
extra_configure_flags='--disable-shared @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@';
no_install= true; };
-host_modules= { module= ppl; lib_path=.libs; bootstrap=true;
+host_modules= { module= ppl; lib_path=src/.libs; bootstrap=true;
extra_configure_flags='--disable-shared --with-libgmp-prefix=$$r/$(HOST_SUBDIR)/gmp/ --with-libgmpxx-prefix=$$r/$(HOST_SUBDIR)/gmp/';
- no_install= true;
- host="none-${host_vendor}-${host_os}";
- target="none-${host_vendor}-${host_os}"; };
+ no_install= true; };
host_modules= { module= cloog; lib_path=.libs; bootstrap=true;
- extra_configure_flags='--disable-shared --with-gmp-library=$$r/$(HOST_SUBDIR)/gmp/.libs --with-gmp-include=$$r/$(HOST_SUBDIR)/gmp --with-ppl=$$r/$(HOST_SUBDIR)/ppl/ --with-bits=gmp';
- no_install= true;
- host="none-${host_vendor}-${host_os}";
- target="none-${host_vendor}-${host_os}"; };
+ extra_configure_flags='--disable-shared --with-gmp-library=$$r/$(HOST_SUBDIR)/gmp/.libs --with-gmp-include=$$r/$(HOST_SUBDIR)/gmp --with-bits=gmp --with-ppl';
+ extra_exports='CPPFLAGS="${CPPFLAGS} ${HOST_PPLINC}"; export CPPFLAGS; LDFLAGS="$$LDFLAGS ${HOST_PPLLIBS}"; export LDFLAGS; ';
+ extra_make_flags='CPPFLAGS="${CPPFLAGS} ${HOST_PPLINC}" LDFLAGS="$$LDFLAGS"';
+ no_install= true; };
+host_modules= { module= libelf; lib_path=.libs; bootstrap=true;
+ extra_configure_flags='--disable-shared';
+ no_install= true; };
host_modules= { module= gnuserv; };
host_modules= { module= gold; bootstrap=true; };
host_modules= { module= gprof; };
@@ -326,6 +323,7 @@ dependencies = { module=all-gcc; on=all-
dependencies = { module=all-gcc; on=all-mpc; };
dependencies = { module=all-gcc; on=all-ppl; };
dependencies = { module=all-gcc; on=all-cloog; };
+dependencies = { module=all-gcc; on=all-libelf; };
dependencies = { module=all-gcc; on=all-build-texinfo; };
dependencies = { module=all-gcc; on=all-build-bison; };
dependencies = { module=all-gcc; on=all-build-byacc; };
Index: Makefile.tpl
===================================================================
--- Makefile.tpl.orig 2009-11-08 05:09:38.000000000 -0200
+++ Makefile.tpl 2009-11-08 05:09:57.000000000 -0200
@@ -229,6 +229,21 @@ HOST_EXPORTS = \
@endif gcc-bootstrap
$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
+POSTSTAGE1_CXX_EXPORT = \
+ CXX='$(CXX)'; export CXX; \
+ CXX_FOR_BUILD='$(CXX_FOR_BUILD)'; export CXX_FOR_BUILD;
+@if target-libstdc++-v3-bootstrap
+# Override the above if we're bootstrapping C++.
+POSTSTAGE1_CXX_EXPORT = \
+ CXX="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/g++$(exeext) \
+ -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ -nostdinc++ \
+ -I$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include/$(TARGET_SUBDIR) \
+ -I$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include \
+ -I$$s/libstdc++-v3/libsupc++ \
+ -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs"; export CXX; \
+ CXX_FOR_BUILD="$$CXX"; export CXX_FOR_BUILD;
+@endif target-libstdc++-v3-bootstrap
+
# Similar, for later GCC stages.
POSTSTAGE1_HOST_EXPORTS = \
$(HOST_EXPORTS) \
@@ -236,13 +251,7 @@ POSTSTAGE1_HOST_EXPORTS = \
-B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ \
$(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \
CC_FOR_BUILD="$$CC"; export CC_FOR_BUILD; \
- CXX="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/g++$(exeext) \
- -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ -nostdinc++ \
- -I$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include/$(TARGET_SUBDIR) \
- -I$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include \
- -I$$s/libstdc++-v3/libsupc++ \
- -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs"; export CXX; \
- CXX_FOR_BUILD="$$CXX"; export CXX_FOR_BUILD; \
+ $(POSTSTAGE1_CXX_EXPORT) \
GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \
LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)"; export LDFLAGS; \
HOST_LIBS="$(POSTSTAGE1_LIBS)"; export HOST_LIBS;
@@ -401,6 +410,11 @@ STAGE_CONFIGURE_FLAGS=@stage2_werror_fla
[+ FOR bootstrap-stage +]
# Defaults for stage [+id+]; some are overridden below.
STAGE[+id+]_CFLAGS = $(STAGE_CFLAGS)
+STAGE[+id+]_CXXFLAGS = $(CXXFLAGS)
+@if target-libstdc++-v3-bootstrap
+# Override the above if we're bootstrapping C++.
+STAGE[+id+]_CXXFLAGS = $(STAGE[+id+]_CFLAGS)
+@endif target-libstdc++-v3-bootstrap
STAGE[+id+]_TFLAGS = $(STAGE_TFLAGS)
STAGE[+id+]_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS)
[+ ENDFOR bootstrap-stage +]
@@ -412,8 +426,8 @@ STAGE[+id+]_CONFIGURE_FLAGS = $(STAGE_CO
# overrideable (for a bootstrap build stage1 also builds gcc.info).
STAGE1_CFLAGS = @stage1_cflags@
-STAGE1_CHECKING=@stage1_checking@
-STAGE1_LANGUAGES=@stage1_languages@
+STAGE1_CHECKING = @stage1_checking@
+STAGE1_LANGUAGES = @stage1_languages@
# * We force-disable intermodule optimizations, even if
# --enable-intermodule was passed, since the installed compiler
# probably can't handle them. Luckily, autoconf always respects
@@ -528,6 +542,7 @@ BASE_FLAGS_TO_PASS =[+ FOR flags_to_pass
"`echo '[+flag+]=$([+flag+])' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"[+ ELSE optional +] \
"[+flag+]=$([+flag+])"[+ ENDIF optional+][+ ENDFOR flags_to_pass +][+ FOR bootstrap-stage +] \
"STAGE[+id+]_CFLAGS=$(STAGE[+id+]_CFLAGS)" \
+ "STAGE[+id+]_CXXFLAGS=$(STAGE[+id+]_CXXFLAGS)" \
"STAGE[+id+]_TFLAGS=$(STAGE[+id+]_TFLAGS)"[+ ENDFOR bootstrap-stage +] \
"TFLAGS=$(TFLAGS)" \
"CONFIG_SHELL=$(SHELL)" \
@@ -575,8 +590,8 @@ POSTSTAGE1_FLAGS_TO_PASS = \
CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
CXX="$${CXX}" CXX_FOR_BUILD="$${CXX_FOR_BUILD}" \
GNATBIND="$${GNATBIND}" \
- LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)" \
- HOST_LIBS="$(POSTSTAGE1_LIBS)" \
+ LDFLAGS="$${LDFLAGS}" \
+ HOST_LIBS="$${HOST_LIBS}" \
"`echo 'ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
# Flags to pass down to makes which are built with the target environment.
@@ -918,7 +933,7 @@ configure-[+prefix+][+module+]: [+ IF bo
fi; \
[+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
- [+exports+] \
+ [+exports+] [+extra_exports+] \
echo Configuring in [+subdir+]/[+module+]; \
cd "[+subdir+]/[+module+]" || exit 1; \
case $(srcdir) in \
@@ -967,9 +982,10 @@ configure-stage[+id+]-[+prefix+][+module
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;[+ ELSE prefix +] \
CFLAGS="$(STAGE[+id+]_CFLAGS)"; export CFLAGS; \
- CXXFLAGS="$(STAGE[+id+]_CFLAGS)"; export CXXFLAGS;[+ IF prev +] \
+ CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"; export CXXFLAGS;[+ IF prev +] \
LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
- LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +]; export LIBCFLAGS;[+ ENDIF prefix +] \
+ LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +]; export LIBCFLAGS;[+
+ ENDIF prefix +] [+extra_exports+] \
echo Configuring stage [+id+] in [+subdir+]/[+module+] ; \
$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
cd [+subdir+]/[+module+] || exit 1; \
@@ -1005,7 +1021,7 @@ all-[+prefix+][+module+]: configure-[+pr
@: $(MAKE); $(unstage)[+ ENDIF bootstrap +]
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- [+exports+] \
+ [+exports+] [+extra_exports+] \
(cd [+subdir+]/[+module+] && \
$(MAKE) $(BASE_FLAGS_TO_PASS) [+args+] [+extra_make_flags+] \
$(TARGET-[+prefix+][+module+]))
@@ -1027,14 +1043,14 @@ all-stage[+id+]-[+prefix+][+module+]: co
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
[+exports+][+ IF prev +] \
- [+poststage1_exports+][+ ENDIF prev +] \
+ [+poststage1_exports+][+ ENDIF prev +] [+extra_exports+] \
cd [+subdir+]/[+module+] && \
$(MAKE) $(BASE_FLAGS_TO_PASS)[+ IF prefix +] \
CFLAGS="$(CFLAGS_FOR_TARGET)" \
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"[+ ELSE prefix +] \
CFLAGS="$(STAGE[+id+]_CFLAGS)" \
- CXXFLAGS="$(STAGE[+id+]_CFLAGS)"[+ IF prev +] \
+ CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"[+ IF prev +] \
LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +][+ ENDIF prefix +] \
CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
--
Alexandre Oliva, freedom fighter http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/ FSF Latin America board member
Free Software Evangelist Red Hat Brazil Compiler Engineer