X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=configure.ac;h=f941b81af7f215e1a909210ce96dc71cc88a5d32;hb=fc259b522c0f8b7bbca8e7adcd3da63330094a34;hp=c3433336523c58cc403af3dd9895ffb7a77da974;hpb=1fc1d82e960ea0556c8caffc125fec0a860a45ad;p=thirdparty%2Fgcc.git diff --git a/configure.ac b/configure.ac index c3433336523c..f941b81af7f2 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, # 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, -# 2014, 2015, 2016 Free Software Foundation, Inc. +# 2014, 2015, 2016, 2019, 2022 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -23,6 +23,7 @@ m4_include(config/acx.m4) m4_include(config/override.m4) m4_include(config/proginstall.m4) m4_include(config/elf.m4) +m4_include(config/ax_cxx_compile_stdcxx.m4) m4_include([libtool.m4]) m4_include([ltoptions.m4]) m4_include([ltsugar.m4]) @@ -31,7 +32,6 @@ m4_include([lt~obsolete.m4]) m4_include([config/isl.m4]) AC_INIT(move-if-change) -AC_PREREQ(2.64) AC_DISABLE_OPTION_CHECKING progname=$0 @@ -132,7 +132,7 @@ build_tools="build-texinfo build-flex build-bison build-m4 build-fixincludes" # these libraries are used by various programs built for the host environment #f -host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libdecnumber gmp mpfr mpc isl libelf libiconv" +host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libcody libdecnumber gmp mpfr mpc isl libelf libiconv libctf" # these tools are built for the host environment # Note, the powerpc-eabi build depends on sim occurring before gdb in order to @@ -140,7 +140,7 @@ host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktr # binutils, gas and ld appear in that order because it makes sense to run # "make check" in that particular order. # If --enable-gold is used, "gold" may replace "ld". -host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools" +host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gdbserver gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools c++tools" # these libraries are built for the target environment, and are built after # the host libraries and the host tools (which may be a cross compiler) @@ -151,20 +151,20 @@ target_libraries="target-libgcc \ target-newlib \ target-libgomp \ target-liboffloadmic \ - target-libhsail-rt \ target-libatomic \ target-libitm \ target-libstdc++-v3 \ target-libsanitizer \ target-libvtv \ - target-libmpx \ target-libssp \ target-libquadmath \ target-libgfortran \ target-libffi \ target-libobjc \ target-libada \ - target-libgo" + target-libgo \ + target-libphobos \ + target-zlib" # these tools are built using the target libraries, and are intended to # run only in the target environment @@ -299,6 +299,14 @@ AC_ARG_ENABLE(offload-targets, fi ], [enable_offload_targets=]) +AC_ARG_ENABLE(offload-defaulted, +[AS_HELP_STRING([--enable-offload-defaulted] + [If enabled, configured but not installed offload compilers and + libgomp plugins are silently ignored. Useful for distribution + compilers where those are in separate optional packages.])], +[enable_offload_defaulted=$enableval], +[enable_offload_defaulted=]) + # Handle --enable-gold, --enable-ld. # --disable-gold [--enable-ld] # Build only ld. Default option. @@ -345,7 +353,7 @@ case "${ENABLE_GOLD}" in # Check for target supported by gold. case "${target}" in i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \ - | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*) + | aarch64*-*-* | mips*-*-* | s390*-*-* | loongarch*-*-*) configdirs="$configdirs gold" if test x${ENABLE_GOLD} = xdefault; then default_ld=gold @@ -512,7 +520,7 @@ if test x$enable_libgomp = x ; then ;; *-*-darwin* | *-*-aix*) ;; - nvptx*-*-*) + nvptx*-*-* | amdgcn*-*-*) ;; *) noconfigdirs="$noconfigdirs target-libgomp" @@ -600,42 +608,6 @@ if test -d ${srcdir}/libvtv; then fi fi - -# Enable libmpx on supported systems by request. -if test -d ${srcdir}/libmpx; then - if test x$enable_libmpx = x; then - AC_MSG_CHECKING([for libmpx support]) - if (srcdir=${srcdir}/libmpx; \ - . ${srcdir}/configure.tgt; \ - test "$LIBMPX_SUPPORTED" != "yes") - then - AC_MSG_RESULT([no]) - noconfigdirs="$noconfigdirs target-libmpx" - else - AC_MSG_RESULT([yes]) - fi - fi -fi - -# Disable libhsail-rt on unsupported systems. -if test -d ${srcdir}/libhsail-rt; then - if test x$enable_libhsail_rt = x; then - AC_MSG_CHECKING([for libhsail-rt support]) - if (srcdir=${srcdir}/libhsail-rt; \ - . ${srcdir}/configure.tgt; \ - test -n "$UNSUPPORTED") - then - AC_MSG_RESULT([no]) - unsupported_languages="$unsupported_languages brig" - # This implicitly disables also target-libhsail-rt as it won't - # get added to the build without BRIG FE. - else - AC_MSG_RESULT([yes]) - fi - fi -fi - - # Disable libquadmath for some systems. case "${target}" in avr-*-*) @@ -654,9 +626,16 @@ case "${target}" in # No hosted I/O support. noconfigdirs="$noconfigdirs target-libssp" ;; + bpf-*-*) + noconfigdirs="$noconfigdirs target-libssp" + ;; powerpc-*-aix* | rs6000-*-aix*) noconfigdirs="$noconfigdirs target-libssp" ;; + pru-*-*) + # No hosted I/O support. + noconfigdirs="$noconfigdirs target-libssp" + ;; rl78-*-*) # libssp uses a misaligned load to trigger a fault, but the RL78 # doesn't fault for those - instead, it gives a build-time error @@ -670,13 +649,17 @@ case "${target}" in esac # Disable libstdc++-v3 for some systems. -# Allow user to override this if they pass --enable-libstdc++-v3 +# Allow user to override this if they pass --enable-libstdcxx if test "${ENABLE_LIBSTDCXX}" = "default" ; then case "${target}" in *-*-vxworks*) # VxWorks uses the Dinkumware C++ library. noconfigdirs="$noconfigdirs target-libstdc++-v3" ;; + amdgcn*-*-*) + # Not ported/fails to build when using newlib. + noconfigdirs="$noconfigdirs target-libstdc++-v3" + ;; arm*-wince-pe*) # the C++ libraries don't build on top of CE's C libraries noconfigdirs="$noconfigdirs target-libstdc++-v3" @@ -684,18 +667,83 @@ if test "${ENABLE_LIBSTDCXX}" = "default" ; then avr-*-*) noconfigdirs="$noconfigdirs target-libstdc++-v3" ;; + bpf-*-*) + noconfigdirs="$noconfigdirs target-libstdc++-v3" + ;; ft32-*-*) noconfigdirs="$noconfigdirs target-libstdc++-v3" ;; esac fi +# Disable C++ on systems where it is known to not work. +# For testing, you can override this with --enable-languages=c++. +case ,${enable_languages}, in + *,c++,*) + ;; + *) + case "${target}" in + bpf-*-*) + unsupported_languages="$unsupported_languages c++" + ;; + esac + ;; +esac + +# Disable Objc on systems where it is known to not work. +# For testing, you can override this with --enable-languages=objc. +case ,${enable_languages}, in + *,objc,*) + ;; + *) + case "${target}" in + bpf-*-*) + unsupported_languages="$unsupported_languages objc" + ;; + esac + ;; +esac + +# Disable D on systems where it is known to not work. +# For testing, you can override this with --enable-languages=d. +case ,${enable_languages}, in + *,d,*) + ;; + *) + case "${target}" in + bpf-*-*) + unsupported_languages="$unsupported_languages d" + ;; + esac + ;; +esac + +# Disable libphobos on unsupported systems. +# For testing, you can override this with --enable-libphobos. +if test -d ${srcdir}/libphobos; then + if test x$enable_libphobos = x; then + AC_MSG_CHECKING([for libphobos support]) + if (srcdir=${srcdir}/libphobos; \ + . ${srcdir}/configure.tgt; \ + test "$LIBPHOBOS_SUPPORTED" != "yes") + then + AC_MSG_RESULT([no]) + noconfigdirs="$noconfigdirs target-libphobos" + else + AC_MSG_RESULT([yes]) + fi + fi +fi + # Disable Fortran for some systems. case "${target}" in mmix-*-*) # See . unsupported_languages="$unsupported_languages fortran" ;; + bpf-*-*) + unsupported_languages="$unsupported_languages fortran" + ;; esac # Disable libffi for some systems. @@ -742,6 +790,9 @@ case "${target}" in arm*-*-symbianelf*) noconfigdirs="$noconfigdirs target-libffi" ;; + bpf-*-*) + noconfigdirs="$noconfigdirs target-libffi" + ;; cris-*-* | crisv32-*-*) case "${target}" in *-*-linux*) @@ -788,11 +839,27 @@ esac # Disable the go frontend on systems where it is known to not work. Please keep # this in sync with contrib/config-list.mk. case "${target}" in -*-*-darwin* | *-*-cygwin* | *-*-mingw*) +*-*-darwin* | *-*-cygwin* | *-*-mingw* | bpf-* ) unsupported_languages="$unsupported_languages go" ;; esac +# Only allow gdbserver on some systems. +if test -d ${srcdir}/gdbserver; then + if test x$enable_gdbserver = x; then + AC_MSG_CHECKING([for gdbserver support]) + if (srcdir=${srcdir}/gdbserver; \ + . ${srcdir}/configure.srv; \ + test -n "$UNSUPPORTED") + then + AC_MSG_RESULT([no]) + noconfigdirs="$noconfigdirs gdbserver" + else + AC_MSG_RESULT([yes]) + fi + fi +fi + # Disable libgo for some systems where it is known to not work. # For testing, you can easily override this with --enable-libgo. if test x$enable_libgo = x; then @@ -804,6 +871,9 @@ if test x$enable_libgo = x; then *-*-cygwin* | *-*-mingw*) noconfigdirs="$noconfigdirs target-libgo" ;; + bpf-*-*) + noconfigdirs="$noconfigdirs target-libgo" + ;; esac fi @@ -829,6 +899,9 @@ case "${target}" in i[[3456789]]86-*-*) libgloss_dir=i386 ;; + loongarch*-*-*) + libgloss_dir=loongarch + ;; m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*) libgloss_dir=m68hc11 ;; @@ -841,6 +914,9 @@ case "${target}" in powerpc*-*-*) libgloss_dir=rs6000 ;; + pru-*-*) + libgloss_dir=pru + ;; sparc*-*-*) libgloss_dir=sparc ;; @@ -872,6 +948,9 @@ case "${target}" in sparc-*-sunos4*) noconfigdirs="$noconfigdirs target-newlib target-libgloss" ;; + bpf-*-*) + noconfigdirs="$noconfigdirs target-newlib target-libgloss" + ;; *-*-aix*) noconfigdirs="$noconfigdirs target-newlib target-libgloss" ;; @@ -920,6 +999,8 @@ case "${target}" in noconfigdirs="$noconfigdirs ld gas gdb gprof" noconfigdirs="$noconfigdirs sim target-rda" ;; + amdgcn*-*-*) + ;; arm-*-darwin*) noconfigdirs="$noconfigdirs ld gas gdb gprof" noconfigdirs="$noconfigdirs sim target-rda" @@ -943,7 +1024,8 @@ case "${target}" in *-*-dragonfly*) ;; *-*-freebsd*) - if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \ + if test "x$with_gmp" = x \ + && ! test -d ${srcdir}/gmp \ && test -f /usr/local/include/gmp.h; then with_gmp=/usr/local fi @@ -983,6 +1065,9 @@ case "${target}" in # newlib is not 64 bit ready noconfigdirs="$noconfigdirs target-newlib target-libgloss" ;; + bpf-*-*) + noconfigdirs="$noconfigdirs target-libobjc target-libbacktrace" + ;; sh*-*-pe|mips*-*-pe|*arm-wince-pe) noconfigdirs="$noconfigdirs tcl tk itcl libgui sim" ;; @@ -1108,6 +1193,13 @@ case "${target}" in mt-*-*) noconfigdirs="$noconfigdirs sim" ;; + nfp-*-*) + noconfigdirs="$noconfigdirs ld gas gdb gprof sim" + noconfigdirs="$noconfigdirs $target_libraries" + ;; + pdp11-*-*) + noconfigdirs="$noconfigdirs gdb gprof" + ;; powerpc-*-aix*) # copied from rs6000-*-* entry noconfigdirs="$noconfigdirs gprof" @@ -1182,9 +1274,6 @@ case "${target}" in tic6x-*-*) noconfigdirs="$noconfigdirs sim" ;; - tilepro*-*-* | tilegx*-*-*) - noconfigdirs="$noconfigdirs sim" - ;; v810-*-*) noconfigdirs="$noconfigdirs bfd binutils gas gdb ld opcodes target-libgloss" ;; @@ -1194,6 +1283,11 @@ case "${target}" in wasm32-*-*) noconfigdirs="$noconfigdirs ld" ;; + loongarch*-*-linux*) + ;; + loongarch*-*-*) + noconfigdirs="$noconfigdirs gprof" + ;; esac # If we aren't building newlib, then don't build libgloss, since libgloss @@ -1229,7 +1323,7 @@ case "${host}" in hppa*-*) host_makefile_frag="config/mh-pa" ;; - *-*-darwin*) + i?86-*-darwin[[89]]* | i?86-*-darwin1[[0-7]]* | powerpc*-*-darwin*) host_makefile_frag="config/mh-darwin" ;; powerpc-*-aix*) @@ -1245,9 +1339,12 @@ if test "${build}" != "${host}" ; then AR_FOR_BUILD=${AR_FOR_BUILD-ar} AS_FOR_BUILD=${AS_FOR_BUILD-as} CC_FOR_BUILD=${CC_FOR_BUILD-gcc} + CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CC_FOR_BUILD) -E}" CXX_FOR_BUILD=${CXX_FOR_BUILD-g++} + DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil} GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran} GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo} + GDC_FOR_BUILD=${GDC_FOR_BUILD-gdc} DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool} LD_FOR_BUILD=${LD_FOR_BUILD-ld} NM_FOR_BUILD=${NM_FOR_BUILD-nm} @@ -1259,8 +1356,10 @@ else AS_FOR_BUILD="\$(AS)" CC_FOR_BUILD="\$(CC)" CXX_FOR_BUILD="\$(CXX)" + DSYMUTIL_FOR_BUILD="\$(DSYMUTIL)" GFORTRAN_FOR_BUILD="\$(GFORTRAN)" GOC_FOR_BUILD="\$(GOC)" + GDC_FOR_BUILD="\$(GDC)" DLLTOOL_FOR_BUILD="\$(DLLTOOL)" LD_FOR_BUILD="\$(LD)" NM_FOR_BUILD="\$(NM)" @@ -1269,7 +1368,7 @@ else WINDMC_FOR_BUILD="\$(WINDMC)" fi -AC_PROG_CC +AC_PROG_CC_C99 AC_PROG_CXX # We must set the default linker to the linker used by gcc for the correct @@ -1299,11 +1398,11 @@ if test "$GCC" = yes; then LDFLAGS="$LDFLAGS -static-libstdc++ -static-libgcc" AC_MSG_CHECKING([whether g++ accepts -static-libstdc++ -static-libgcc]) AC_LANG_PUSH(C++) - AC_LINK_IFELSE([ + AC_LINK_IFELSE([AC_LANG_SOURCE([ #if (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) #error -static-libstdc++ not implemented #endif -int main() {}], +int main() {}])], [AC_MSG_RESULT([yes]); have_static_libs=yes], [AC_MSG_RESULT([no])]) AC_LANG_POP(C++) @@ -1312,6 +1411,7 @@ int main() {}], fi ACX_PROG_GNAT +ACX_PROG_GDC ACX_PROG_CMP_IGNORE_INITIAL AC_ARG_ENABLE([bootstrap], @@ -1357,12 +1457,78 @@ case "$have_compiler:$host:$target:$enable_bootstrap" in ;; esac -# When bootstrapping with GCC, build stage 1 in C++98 mode to ensure that a -# C++98 compiler can still start the bootstrap. +# When bootstrapping with GCC, build stage 1 in C++11 mode to ensure that a +# C++11 compiler can still start the bootstrap. Otherwise, if building GCC, +# require C++11 (or higher). if test "$enable_bootstrap:$GXX" = "yes:yes"; then - CXX="$CXX -std=gnu++98" + CXX="$CXX -std=c++11" +elif test "$have_compiler" = yes; then + AX_CXX_COMPILE_STDCXX(11) + + if test "${build}" != "${host}"; then + AX_CXX_COMPILE_STDCXX(11, [], [], [_FOR_BUILD]) + fi fi +AC_ARG_ENABLE([pgo-build], +[AS_HELP_STRING([--enable-pgo-build[[=lto]]], + [enable the PGO build])], +[enable_pgo_build=$enableval], +[enable_pgo_build=no]) + +# Issue errors and warnings for invalid/strange PGO build combinations. +case "$have_compiler:$host:$target:$enable_pgo_build" in + *:*:*:no) ;; + + # Allow the PGO build only if we aren't building a compiler and + # we are in a native configuration. + no:$build:$build:yes | no:$build:$build:lto) ;; + + # Disallow the PGO bootstrap if we are building a compiler. + yes:*:*:yes | yes:*:*:lto) + AC_MSG_ERROR([cannot perform the PGO bootstrap when building a compiler]) ;; + + *) + AC_MSG_ERROR([invalid option for --enable-pgo-build]) + ;; +esac + +if test "$enable_pgo_build" != "no"; then + AC_MSG_CHECKING([whether the compiler supports -fprofile-generate]) + old_CFLAGS="$CFLAGS" + PGO_BUILD_GEN_CFLAGS="-fprofile-generate" + CFLAGS="$CFLAGS $PGO_BUILD_CFLAGS" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([int foo;])],, + [PGO_BUILD_GEN_CFLAGS=]) + CFLAGS="$old_CFLAGS" + if test -n "$PGO_BUILD_GEN_CFLAGS"; then + AC_MSG_RESULT([yes]) + PGO_BUILD_USE_CFLAGS="-fprofile-use" + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([cannot perform the PGO build without -fprofile-generate]) + fi + + if test "$enable_pgo_build" = "lto"; then + AC_MSG_CHECKING([whether the compiler supports -flto=jobserver -ffat-lto-objects]) + old_CFLAGS="$CFLAGS" + PGO_BUILD_LTO_CFLAGS="-flto=jobserver -ffat-lto-objects" + CFLAGS="$CFLAGS $PGO_BUILD_LTO_CFLAGS" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([int foo;])],, + [PGO_BUILD_LTO_CFLAGS=]) + CFLAGS="$old_CFLAGS" + if test -n "$PGO_BUILD_LTO_CFLAGS"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_WARN([LTO is disabled for the PGO build]) + fi + fi +fi +AC_SUBST(PGO_BUILD_GEN_CFLAGS) +AC_SUBST(PGO_BUILD_USE_CFLAGS) +AC_SUBST(PGO_BUILD_LTO_CFLAGS) + # Used for setting $lt_cv_objdir _LT_CHECK_OBJDIR @@ -1407,11 +1573,6 @@ fi # Specify a location for mpfr # check for this first so it ends up on the link line before gmp. -AC_ARG_WITH(mpfr-dir, -[AS_HELP_STRING([--with-mpfr-dir=PATH], [this option has been REMOVED])], -[AC_MSG_ERROR([The --with-mpfr-dir=PATH option has been removed. -Use --with-mpfr=PATH or --with-mpfr-include=PATH plus --with-mpfr-lib=PATH])]) - AC_ARG_WITH(mpfr, [AS_HELP_STRING([--with-mpfr=PATH], [specify prefix directory for installed MPFR package. @@ -1451,11 +1612,6 @@ Building GCC with MPFR in the source tree is only handled for MPFR 3.1.0+.]) fi # Specify a location for gmp -AC_ARG_WITH(gmp-dir, -[AS_HELP_STRING([--with-gmp-dir=PATH], [this option has been REMOVED])], -[AC_MSG_ERROR([The --with-gmp-dir=PATH option has been removed. -Use --with-gmp=PATH or --with-gmp-include=PATH plus --with-gmp-lib=PATH])]) - AC_ARG_WITH(gmp, [AS_HELP_STRING([--with-gmp=PATH], [specify prefix directory for the installed GMP package. @@ -1519,12 +1675,12 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then AC_MSG_CHECKING([for the correct version of mpfr.h]) AC_TRY_COMPILE([#include #include ],[ - #if MPFR_VERSION < MPFR_VERSION_NUM(2,4,0) + #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,0) choke me #endif ], [AC_TRY_COMPILE([#include #include ],[ - #if MPFR_VERSION < MPFR_VERSION_NUM(2,4,2) + #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,6) choke me #endif ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])])], @@ -1559,9 +1715,9 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then int t; mpfr_init (n); mpfr_init (x); - mpfr_atan2 (n, n, x, GMP_RNDN); - mpfr_erfc (n, x, GMP_RNDN); - mpfr_subnormalize (x, t, GMP_RNDN); + mpfr_atan2 (n, n, x, MPFR_RNDN); + mpfr_erfc (n, x, MPFR_RNDN); + mpfr_subnormalize (x, t, MPFR_RNDN); mpfr_clear(n); mpfr_clear(x); mpc_init2 (c, 53); @@ -1579,11 +1735,11 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then # The library versions listed in the error message below should match # the HARD-minimums enforced above. if test x$have_gmp != xyes; then - AC_MSG_ERROR([Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+. + AC_MSG_ERROR([Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+. Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify their locations. Source code for these libraries can be found at their respective hosting sites as well as at -ftp://gcc.gnu.org/pub/gcc/infrastructure/. See also +https://gcc.gnu.org/pub/gcc/infrastructure/. See also http://gcc.gnu.org/install/prerequisites.html for additional info. If you obtained GMP, MPFR and/or MPC from a vendor distribution package, make sure that you have installed both the libraries and the header @@ -1610,6 +1766,19 @@ AC_ARG_WITH(stage1-libs, [stage1_libs=]) AC_SUBST(stage1_libs) +# Whether or not to use -static-libstdc++ and -static-libgcc. The +# default is yes if gcc is being built; no otherwise. The reason for +# this default is that gdb is sometimes linked against GNU Source +# Highlight, which is a shared library that uses C++ exceptions. In +# this case, -static-libstdc++ will cause crashes. +AC_ARG_WITH(static-standard-libraries, +[AS_HELP_STRING([--with-static-standard-libraries], + [use -static-libstdc++ and -static-libgcc (default=auto)])], +[], [with_static_standard_libraries=auto]) +if test "$with_static_standard_libraries" = auto; then + with_static_standard_libraries=$have_compiler +fi + # Linker flags to use for stage1 or when not bootstrapping. AC_ARG_WITH(stage1-ldflags, [AS_HELP_STRING([--with-stage1-ldflags=FLAGS], [linker flags for stage1])], @@ -1622,7 +1791,8 @@ AC_ARG_WITH(stage1-ldflags, # In stage 1, default to linking libstdc++ and libgcc statically with GCC # if supported. But if the user explicitly specified the libraries to use, # trust that they are doing what they want. - if test "$stage1_libs" = "" -a "$have_static_libs" = yes; then + if test "$with_static_standard_libraries" = yes -a "$stage1_libs" = "" \ + -a "$have_static_libs" = yes; then stage1_ldflags="-static-libstdc++ -static-libgcc" fi]) AC_SUBST(stage1_ldflags) @@ -1744,7 +1914,20 @@ AC_SUBST(extra_linker_plugin_flags) AC_ARG_ENABLE(host-shared, [AS_HELP_STRING([--enable-host-shared], [build host code as shared libraries])], -[host_shared=$enableval], [host_shared=no]) +[host_shared=$enableval + case $target in + x86_64-*-darwin* | aarch64-*-darwin*) + if test x$host_shared != xyes ; then + # PIC is the default, and actually cannot be switched off. + echo configure.ac: warning: PIC code is required for the configured target, host-shared setting ignored. 1>&2 + host_shared=yes + fi ;; + *) ;; + esac], +[case $target in + x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;; + *) host_shared=no ;; + esac]) AC_SUBST(host_shared) # By default, C and C++ are the only stage 1 languages. @@ -1959,10 +2142,31 @@ if test -d ${srcdir}/gcc; then ;; esac + # Disable D if no preexisting GDC is available. + case ${add_this_lang}:${language}:${have_gdc} in + yes:d:no) + # Specifically requested language; tell them. + AC_MSG_ERROR([GDC is required to build $language]) + ;; + all:d:no) + AC_MSG_WARN([GDC is required to build $language]) + add_this_lang=unsupported + ;; + *:d:no) + # Silently disable. + add_this_lang=unsupported + ;; + esac + # Disable jit if -enable-host-shared not specified - case ${add_this_lang}:${language}:${host_shared} in - yes:jit:no) - # PR jit/64780: explicitly specify --enable-host-shared + # but not if building for Mingw. All code in Windows + # is position independent code (PIC). + case $target in + *mingw*) ;; + *) + case ${add_this_lang}:${language}:${host_shared} in + yes:jit:no) + # PR jit/64780: explicitly specify --enable-host-shared AC_MSG_ERROR([ Enabling language "jit" requires --enable-host-shared. @@ -1973,16 +2177,18 @@ If you want to build both the jit and the regular compiler, it is often best to do this via two separate configure/builds, in separate directories, to avoid imposing the performance cost of --enable-host-shared on the regular compiler.]) - ;; - all:jit:no) - AC_MSG_WARN([--enable-host-shared required to build $language]) - add_this_lang=unsupported - ;; - *:jit:no) - # Silently disable. - add_this_lang=unsupported - ;; - esac + ;; + all:jit:no) + AC_MSG_WARN([--enable-host-shared required to build $language]) + add_this_lang=unsupported + ;; + *:jit:no) + # Silently disable. + add_this_lang=unsupported + ;; + esac + ;; + esac # Disable a language that is unsupported by the target. case "${add_this_lang}: $unsupported_languages " in @@ -2019,7 +2225,7 @@ directories, to avoid imposing the performance cost of *) stage1_languages="${stage1_languages}${language}," ;; esac # We need to bootstrap any supporting libraries. - bootstrap_target_libs="${bootstrap_target_libs}${target_libs}," + bootstrap_target_libs=`echo "${bootstrap_target_libs}${target_libs}," | sed "s/ /,/g"` ;; esac ;; @@ -2151,6 +2357,16 @@ case ,${enable_languages}, in ;; esac +# If gcc/ is not in the source tree then we'll not be building a +# target compiler, assume in that case we don't want to build any +# target libraries or tools. +# +# This was added primarily for the benefit for binutils-gdb who reuse +# this configure script, but don't always have target tools available. +if test ! -d ${srcdir}/gcc; then + skipdirs="${skipdirs} ${target_configdirs}" +fi + # Remove the entries in $skipdirs and $noconfigdirs from $configdirs, # $build_configdirs and $target_configdirs. # If we have the source for $noconfigdirs entries, add them to $notsupp. @@ -2679,7 +2895,7 @@ fi # or bootstrap-ubsan, bootstrap it. if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then case "$BUILD_CONFIG" in - *bootstrap-asan* | *bootstrap-ubsan* ) + *bootstrap-hwasan* | *bootstrap-asan* | *bootstrap-ubsan* ) bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer, bootstrap_fixincludes=yes ;; @@ -2692,12 +2908,12 @@ if echo " ${target_configdirs} " | grep " libvtv " > /dev/null 2>&1 && bootstrap_target_libs=${bootstrap_target_libs}target-libvtv, fi -# If we are building libmpx and $BUILD_CONFIG contains bootstrap-mpx, -# bootstrap it. -if echo " ${target_configdirs} " | grep " libmpx " > /dev/null 2>&1; then - case "$BUILD_CONFIG" in - *bootstrap-mpx* ) - bootstrap_target_libs=${bootstrap_target_libs}target-libmpx, +# If we are building libatomic and the list of enabled languages includes the +# D frontend, bootstrap it. +if echo " ${target_configdirs} " | grep " libatomic " > /dev/null 2>&1; then + case ,${enable_languages}, in + *,d,*) + bootstrap_target_libs=${bootstrap_target_libs}target-libatomic, ;; esac fi @@ -2730,6 +2946,21 @@ esac CONFIGURE_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-configure-/g` INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g` +# gdb and gdbserver depend on gnulib and gdbsupport, but as nothing +# else does, only include them if one of these is built. The Makefile +# provides the ordering, so it's enough here to add to the list. +case " ${configdirs} " in + *\ gdb\ *) + configdirs="${configdirs} gnulib gdbsupport" + ;; + *\ gdbserver\ *) + configdirs="${configdirs} gnulib gdbsupport" + ;; + *\ sim\ *) + configdirs="${configdirs} gnulib" + ;; +esac + # Strip out unwanted targets. # While at that, we remove Makefiles if we were started for recursive @@ -2742,7 +2973,9 @@ INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g` # extrasub-{build,host,target} not because there is any reason to split # the substitutions up that way, but only to remain below the limit of # 99 commands in a script, for HP-UX sed. -# Do not nest @if/@endif pairs, because configure will not warn you at all. + +# Do not nest @if/@endif or @unless/@endunless pairs, because +# configure will not warn you at all. case "$enable_bootstrap:$ENABLE_GOLD: $configdirs :,$stage1_languages," in yes:yes:*\ gold\ *:*,c++,*) ;; @@ -2761,8 +2994,10 @@ for module in ${build_configdirs} ; do extrasub_build="$extrasub_build /^@if build-$module\$/d /^@endif build-$module\$/d +/^@unless build-$module\$/,/^@endunless build-$module\$/d /^@if build-$module-$bootstrap_suffix\$/d -/^@endif build-$module-$bootstrap_suffix\$/d" +/^@endif build-$module-$bootstrap_suffix\$/d +/^@unless build-$module-$bootstrap_suffix\$/,/^@endunless build-$module-$bootstrap_suffix\$/d" done extrasub_host= for module in ${configdirs} ; do @@ -2781,8 +3016,10 @@ for module in ${configdirs} ; do extrasub_host="$extrasub_host /^@if $module\$/d /^@endif $module\$/d +/^@unless $module\$/,/^@endunless $module\$/d /^@if $module-$host_bootstrap_suffix\$/d -/^@endif $module-$host_bootstrap_suffix\$/d" +/^@endif $module-$host_bootstrap_suffix\$/d +/^@unless $module-$host_bootstrap_suffix\$/,/^@endunless $module-$host_bootstrap_suffix\$/d" done extrasub_target= for module in ${target_configdirs} ; do @@ -2801,13 +3038,23 @@ for module in ${target_configdirs} ; do extrasub_target="$extrasub_target /^@if target-$module\$/d /^@endif target-$module\$/d +/^@unless target-$module\$/,/^@endunless target-$module\$/d /^@if target-$module-$target_bootstrap_suffix\$/d -/^@endif target-$module-$target_bootstrap_suffix\$/d" +/^@endif target-$module-$target_bootstrap_suffix\$/d +/^@unless target-$module-$target_bootstrap_suffix\$/,/^@endunless target-$module-$target_bootstrap_suffix\$/d" done # Do the final fixup along with target modules. extrasub_target="$extrasub_target -/^@if /,/^@endif /d" +/^@if /,/^@endif /d +/^@unless /d +/^@endunless /d" + +if test "$enable_pgo_build" != "no"; then + extrasub_build="$extrasub_build +/^@if pgo-build\$/d +/^@endif pgo-build\$/d" +fi # Create the serialization dependencies. This uses a temporary file. @@ -3177,6 +3424,7 @@ esac # our build compiler if desired. if test x"${build}" = x"${host}" ; then CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}} + CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}} CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}} LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}} fi @@ -3243,11 +3491,15 @@ AC_SUBST(AR_FOR_BUILD) AC_SUBST(AS_FOR_BUILD) AC_SUBST(CC_FOR_BUILD) AC_SUBST(CFLAGS_FOR_BUILD) +AC_SUBST(CPP_FOR_BUILD) +AC_SUBST(CPPFLAGS_FOR_BUILD) AC_SUBST(CXXFLAGS_FOR_BUILD) AC_SUBST(CXX_FOR_BUILD) AC_SUBST(DLLTOOL_FOR_BUILD) +AC_SUBST(DSYMUTIL_FOR_BUILD) AC_SUBST(GFORTRAN_FOR_BUILD) AC_SUBST(GOC_FOR_BUILD) +AC_SUBST(GDC_FOR_BUILD) AC_SUBST(LDFLAGS_FOR_BUILD) AC_SUBST(LD_FOR_BUILD) AC_SUBST(NM_FOR_BUILD) @@ -3324,6 +3576,7 @@ esac NCN_STRICT_CHECK_TOOLS(AR, ar) NCN_STRICT_CHECK_TOOLS(AS, as) NCN_STRICT_CHECK_TOOLS(DLLTOOL, dlltool) +NCN_STRICT_CHECK_TOOLS(DSYMUTIL, dsymutil) NCN_STRICT_CHECK_TOOLS(LD, ld) NCN_STRICT_CHECK_TOOLS(LIPO, lipo) NCN_STRICT_CHECK_TOOLS(NM, nm) @@ -3333,11 +3586,14 @@ NCN_STRICT_CHECK_TOOLS(WINDRES, windres) NCN_STRICT_CHECK_TOOLS(WINDMC, windmc) NCN_STRICT_CHECK_TOOLS(OBJCOPY, objcopy) NCN_STRICT_CHECK_TOOLS(OBJDUMP, objdump) +NCN_STRICT_CHECK_TOOLS(OTOOL, otool) NCN_STRICT_CHECK_TOOLS(READELF, readelf) AC_SUBST(CC) AC_SUBST(CXX) AC_SUBST(CFLAGS) AC_SUBST(CXXFLAGS) +AC_SUBST(GDC) +AC_SUBST(GDCFLAGS) # Target tools. AC_ARG_WITH([build-time-tools], @@ -3357,15 +3613,18 @@ NCN_STRICT_CHECK_TARGET_TOOLS(CXX_FOR_TARGET, c++ g++ cxx gxx) NCN_STRICT_CHECK_TARGET_TOOLS(GCC_FOR_TARGET, gcc, ${CC_FOR_TARGET}) NCN_STRICT_CHECK_TARGET_TOOLS(GFORTRAN_FOR_TARGET, gfortran) NCN_STRICT_CHECK_TARGET_TOOLS(GOC_FOR_TARGET, gccgo) +NCN_STRICT_CHECK_TARGET_TOOLS(GDC_FOR_TARGET, gdc) ACX_CHECK_INSTALLED_TARGET_TOOL(AR_FOR_TARGET, ar) ACX_CHECK_INSTALLED_TARGET_TOOL(AS_FOR_TARGET, as) ACX_CHECK_INSTALLED_TARGET_TOOL(DLLTOOL_FOR_TARGET, dlltool) +ACX_CHECK_INSTALLED_TARGET_TOOL(DSYMUTIL_FOR_TARGET, dsymutil) ACX_CHECK_INSTALLED_TARGET_TOOL(LD_FOR_TARGET, ld) ACX_CHECK_INSTALLED_TARGET_TOOL(LIPO_FOR_TARGET, lipo) ACX_CHECK_INSTALLED_TARGET_TOOL(NM_FOR_TARGET, nm) ACX_CHECK_INSTALLED_TARGET_TOOL(OBJCOPY_FOR_TARGET, objcopy) ACX_CHECK_INSTALLED_TARGET_TOOL(OBJDUMP_FOR_TARGET, objdump) +ACX_CHECK_INSTALLED_TARGET_TOOL(OTOOL_FOR_TARGET, otool) ACX_CHECK_INSTALLED_TARGET_TOOL(RANLIB_FOR_TARGET, ranlib) ACX_CHECK_INSTALLED_TARGET_TOOL(READELF_FOR_TARGET, readelf) ACX_CHECK_INSTALLED_TARGET_TOOL(STRIP_FOR_TARGET, strip) @@ -3385,16 +3644,20 @@ GCC_TARGET_TOOL(c++ for libstdc++, RAW_CXX_FOR_TARGET, CXX, [gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc -nostdinc++ -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs], c++) GCC_TARGET_TOOL(dlltool, DLLTOOL_FOR_TARGET, DLLTOOL, [binutils/dlltool]) +GCC_TARGET_TOOL(dsymutil, DSYMUTIL_FOR_TARGET, DSYMUTIL) GCC_TARGET_TOOL(gcc, GCC_FOR_TARGET, , [gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/]) GCC_TARGET_TOOL(gfortran, GFORTRAN_FOR_TARGET, GFORTRAN, [gcc/gfortran -B$$r/$(HOST_SUBDIR)/gcc/], fortran) GCC_TARGET_TOOL(gccgo, GOC_FOR_TARGET, GOC, [gcc/gccgo -B$$r/$(HOST_SUBDIR)/gcc/], go) +GCC_TARGET_TOOL(gdc, GDC_FOR_TARGET, GDC, + [gcc/gdc -B$$r/$(HOST_SUBDIR)/gcc/], d) GCC_TARGET_TOOL(ld, LD_FOR_TARGET, LD, [ld/ld-new]) GCC_TARGET_TOOL(lipo, LIPO_FOR_TARGET, LIPO) GCC_TARGET_TOOL(nm, NM_FOR_TARGET, NM, [binutils/nm-new]) GCC_TARGET_TOOL(objcopy, OBJCOPY_FOR_TARGET, OBJCOPY, [binutils/objcopy]) GCC_TARGET_TOOL(objdump, OBJDUMP_FOR_TARGET, OBJDUMP, [binutils/objdump]) +GCC_TARGET_TOOL(otool, OTOOL_FOR_TARGET, OTOOL) GCC_TARGET_TOOL(ranlib, RANLIB_FOR_TARGET, RANLIB, [binutils/ranlib]) GCC_TARGET_TOOL(readelf, READELF_FOR_TARGET, READELF, [binutils/readelf]) GCC_TARGET_TOOL(strip, STRIP_FOR_TARGET, STRIP, [binutils/strip-new]) @@ -3517,8 +3780,8 @@ AC_SUBST(stage2_werror_flag) compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/*" case "$target" in hppa*64*-*-hpux*) ;; - hppa*-*-hpux*) compare_exclusions="gcc/cc*-checksum\$(objext) | */libgcc/lib2funcs* | gcc/ada/*tools/* | gcc/function-tests.o" ;; - powerpc*-ibm-aix*) compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/* | *libgomp*\$(objext)" ;; + hppa*-*-hpux*) compare_exclusions="$compare_exclusions | */libgcc/lib2funcs* | gcc/function-tests.o" ;; + powerpc*-ibm-aix*) compare_exclusions="$compare_exclusions | *libgomp*\$(objext)" ;; esac AC_SUBST(compare_exclusions)