#
# Makefile for directory with subdirs to build.
# Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation
+# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011, 2012, 2013, 2014, 2015, 2016, 2017
+# Free Software Foundation
#
# 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
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# along with this program; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
#
+# First, test for a proper version of make, but only where one is required.
+
+@if gcc
+ifeq (,$(.VARIABLES)) # The variable .VARIABLES, new with 3.80, is never empty.
+$(error GNU make version 3.80 or newer is required.)
+endif
+@endif gcc
+
# -------------------------------
# Standard Autoconf-set variables
# -------------------------------
VPATH=@srcdir@
-build_alias=@build_alias@
+build_alias=@build_noncanonical@
+build_vendor=@build_vendor@
+build_os=@build_os@
build=@build@
-host_alias=@host_alias@
+host_alias=@host_noncanonical@
+host_vendor=@host_vendor@
+host_os=@host_os@
host=@host@
-target_alias=@target_alias@
+target_alias=@target_noncanonical@
+target_vendor=@target_vendor@
+target_os=@target_os@
target=@target@
program_transform_name = @program_transform_name@
infodir = @infodir@
datarootdir = @datarootdir@
docdir = @docdir@
+pdfdir = @pdfdir@
htmldir = @htmldir@
mandir = @mandir@
man1dir = $(mandir)/man1
INSTALL_DATA = @INSTALL_DATA@
LN = @LN@
LN_S = @LN_S@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
# -------------------------------------------------
# Miscellaneous non-standard autoconf-set variables
tooldir = @tooldir@
build_tooldir = @build_tooldir@
-GDB_NLM_DEPS =
-
# This is the name of the environment variable used for the path to
# the libraries.
RPATH_ENVVAR = @RPATH_ENVVAR@
+# On targets where RPATH_ENVVAR is PATH, a subdirectory of the GCC build path
+# is used instead of the directory itself to avoid including built
+# executables in PATH.
+GCC_SHLIB_SUBDIR = @GCC_SHLIB_SUBDIR@
+
# Build programs are put under this directory.
BUILD_SUBDIR = @build_subdir@
# This is set by the configure script to the arguments to use when configuring
# directories built for the build system.
BUILD_CONFIGARGS = @build_configargs@ --with-build-subdir="$(BUILD_SUBDIR)"
+# Linker flags to use on the host, for stage1 or when not
+# bootstrapping.
+STAGE1_LDFLAGS = @stage1_ldflags@
+
+# Libraries to use on the host, for stage1 or when not bootstrapping.
+STAGE1_LIBS = @stage1_libs@
+
+# Linker flags to use for stage2 and later.
+POSTSTAGE1_LDFLAGS = @poststage1_ldflags@
+
+# Libraries to use for stage2 and later.
+POSTSTAGE1_LIBS = @poststage1_libs@
+
# This is the list of variables to export in the environment when
# configuring any subdirectory. It must also be exported whenever
# recursing into a build directory in case that directory's Makefile
BISON="$(BISON)"; export BISON; \
YACC="$(YACC)"; export YACC; \
M4="$(M4)"; export M4; \
+ SED="$(SED)"; export SED; \
+ AWK="$(AWK)"; export AWK; \
MAKEINFO="$(MAKEINFO)"; export MAKEINFO;
# This is the list of variables to export in the environment when
CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
CXX="$(CXX_FOR_BUILD)"; export CXX; \
CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
+ GOC="$(GOC_FOR_BUILD)"; export GOC; \
+ GOCFLAGS="$(GOCFLAGS_FOR_BUILD)"; export GOCFLAGS; \
DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
LD="$(LD_FOR_BUILD)"; export LD; \
LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
NM="$(NM_FOR_BUILD)"; export NM; \
RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES;
+ WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
+ WINDMC="$(WINDMC_FOR_BUILD)"; export WINDMC;
+
+# These variables must be set on the make command line for directories
+# built for the build system to override those in BASE_FLAGS_TO_PASS.
+EXTRA_BUILD_FLAGS = \
+ CFLAGS="$(CFLAGS_FOR_BUILD)" \
+ LDFLAGS="$(LDFLAGS_FOR_BUILD)"
# This is the list of directories to built for the host system.
SUBDIRS = @configdirs@
+TARGET_CONFIGDIRS = @target_configdirs@
# This is set by the configure script to the arguments to use when configuring
# directories built for the host system.
HOST_CONFIGARGS = @host_configargs@
HOST_EXPORTS = \
$(BASE_EXPORTS) \
CC="$(CC)"; export CC; \
+ ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \
CFLAGS="$(CFLAGS)"; export CFLAGS; \
CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
CXX="$(CXX)"; export CXX; \
CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
+ GFORTRAN="$(GFORTRAN)"; export GFORTRAN; \
+ GOC="$(GOC)"; export GOC; \
AR="$(AR)"; export AR; \
AS="$(AS)"; export AS; \
CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
LD="$(LD)"; export LD; \
- LDFLAGS="$(LDFLAGS)"; export LDFLAGS; \
+ LDFLAGS="$(STAGE1_LDFLAGS) $(LDFLAGS)"; export LDFLAGS; \
NM="$(NM)"; export NM; \
RANLIB="$(RANLIB)"; export RANLIB; \
WINDRES="$(WINDRES)"; export WINDRES; \
+ WINDMC="$(WINDMC)"; export WINDMC; \
OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
+ READELF="$(READELF)"; export READELF; \
AR_FOR_TARGET="$(AR_FOR_TARGET)"; export AR_FOR_TARGET; \
AS_FOR_TARGET="$(AS_FOR_TARGET)"; export AS_FOR_TARGET; \
GCC_FOR_TARGET="$(GCC_FOR_TARGET)"; export GCC_FOR_TARGET; \
LD_FOR_TARGET="$(LD_FOR_TARGET)"; export LD_FOR_TARGET; \
NM_FOR_TARGET="$(NM_FOR_TARGET)"; export NM_FOR_TARGET; \
OBJDUMP_FOR_TARGET="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP_FOR_TARGET; \
+ OBJCOPY_FOR_TARGET="$(OBJCOPY_FOR_TARGET)"; export OBJCOPY_FOR_TARGET; \
RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)"; export RANLIB_FOR_TARGET; \
+ READELF_FOR_TARGET="$(READELF_FOR_TARGET)"; export READELF_FOR_TARGET; \
TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
+ HOST_LIBS="$(STAGE1_LIBS)"; export HOST_LIBS; \
GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \
GMPINC="$(HOST_GMPINC)"; export GMPINC; \
+ ISLLIBS="$(HOST_ISLLIBS)"; export ISLLIBS; \
+ ISLINC="$(HOST_ISLINC)"; export ISLINC; \
+ ISLVER="$(HOST_ISLVER)"; export ISLVER; \
+ LIBELFLIBS="$(HOST_LIBELFLIBS)"; export LIBELFLIBS; \
+ LIBELFINC="$(HOST_LIBELFINC)"; export LIBELFINC; \
+ XGCC_FLAGS_FOR_TARGET="$(XGCC_FLAGS_FOR_TARGET)"; export XGCC_FLAGS_FOR_TARGET; \
@if gcc-bootstrap
$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
@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/xg++$(exeext) \
+ -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ -nostdinc++ \
+ -B$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \
+ -B$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs \
+ `if $(LEAN); then echo ' -isystem '; else echo ' -I'; fi`$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include/$(TARGET_SUBDIR) \
+ `if $(LEAN); then echo ' -isystem '; else echo ' -I'; fi`$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include \
+ `if $(LEAN); then echo ' -isystem '; else echo ' -I'; fi`$$s/libstdc++-v3/libsupc++ \
+ -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \
+ -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.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) \
CC="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \
- -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/"; export CC; \
- CC_FOR_BUILD="$(STAGE_CC_WRAPPER) \
- $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \
- -B$$r/$(HOST_SUBDIR)/prev-gcc/ \
- -B$(build_tooldir)/bin/"; export CC_FOR_BUILD;
+ -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; \
+ $(POSTSTAGE1_CXX_EXPORT) \
+ $(LTO_EXPORTS) \
+ GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \
+ LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)"; export LDFLAGS; \
+ HOST_LIBS="$(POSTSTAGE1_LIBS)"; export HOST_LIBS;
# Target libraries are put under this directory:
TARGET_SUBDIR = @target_subdir@
# directories built for the target.
TARGET_CONFIGARGS = @target_configargs@ --with-target-subdir="$(TARGET_SUBDIR)"
# This is the list of variables to export in the environment when
-# configuring subdirectories for the host system.
+# configuring subdirectories for the target system.
BASE_TARGET_EXPORTS = \
$(BASE_EXPORTS) \
AR="$(AR_FOR_TARGET)"; export AR; \
AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
+ CC="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \
CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- GFORTRAN="$(GFORTRAN_FOR_TARGET)"; export GFORTRAN; \
+ GFORTRAN="$(GFORTRAN_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GFORTRAN; \
+ GOC="$(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GOC; \
DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \
LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
LIPO="$(LIPO_FOR_TARGET)"; export LIPO; \
NM="$(COMPILER_NM_FOR_TARGET)"; export NM; \
OBJDUMP="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP; \
+ OBJCOPY="$(OBJCOPY_FOR_TARGET)"; export OBJCOPY; \
RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ READELF="$(READELF_FOR_TARGET)"; export READELF; \
STRIP="$(STRIP_FOR_TARGET)"; export STRIP; \
WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- $(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
+ WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
+@if gcc-bootstrap
+ $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
+@endif gcc-bootstrap
+ $(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
+ TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS;
RAW_CXX_TARGET_EXPORTS = \
$(BASE_TARGET_EXPORTS) \
CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
- CXX="$(RAW_CXX_FOR_TARGET)"; export CXX;
+ CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
NORMAL_TARGET_EXPORTS = \
$(BASE_TARGET_EXPORTS) \
- CXX="$(CXX_FOR_TARGET)"; export CXX;
+ CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
# Where to find GMP
HOST_GMPLIBS = @gmplibs@
HOST_GMPINC = @gmpinc@
+# Where to find isl
+HOST_ISLLIBS = @isllibs@
+HOST_ISLINC = @islinc@
+HOST_ISLVER = @islver@
+
+# Where to find libelf
+HOST_LIBELFLIBS = @libelflibs@
+HOST_LIBELFINC = @libelfinc@
+
# ----------------------------------------------
# Programs producing files for the BUILD machine
# ----------------------------------------------
-SHELL = @config_shell@
+SHELL = @SHELL@
# pwd command to use. Allow user to override default by setting PWDCMD in
# the environment to account for automounters. The make variable must not
# compilers to use to create programs which must be run in the build
# environment.
+AR_FOR_BUILD = @AR_FOR_BUILD@
+AS_FOR_BUILD = @AS_FOR_BUILD@
CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
-
-CXX_FOR_BUILD = $(CXX)
+CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
+CXX_FOR_BUILD = @CXX_FOR_BUILD@
+DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
+GFORTRAN_FOR_BUILD = @GFORTRAN_FOR_BUILD@
+GOC_FOR_BUILD = @GOC_FOR_BUILD@
+LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
+LD_FOR_BUILD = @LD_FOR_BUILD@
+NM_FOR_BUILD = @NM_FOR_BUILD@
+RANLIB_FOR_BUILD = @RANLIB_FOR_BUILD@
+WINDMC_FOR_BUILD = @WINDMC_FOR_BUILD@
+WINDRES_FOR_BUILD = @WINDRES_FOR_BUILD@
# Special variables passed down in EXTRA_GCC_FLAGS. They are defined
# here so that they can be overridden by Makefile fragments.
# here so that they can be overridden by Makefile fragments.
BOOT_CFLAGS= -g -O2
BOOT_LDFLAGS=
+BOOT_ADAFLAGS= -gnatpg
+AWK = @AWK@
+SED = @SED@
BISON = @BISON@
YACC = @YACC@
FLEX = @FLEX@
EXPECT = @EXPECT@
RUNTEST = @RUNTEST@
+AUTO_PROFILE = gcc-auto-profile -c 1000000
+
# This just becomes part of the MAKEINFO definition passed down to
# sub-makes. It lets flags be given on the command line while still
# using the makeinfo from the object tree.
NM = @NM@
OBJDUMP = @OBJDUMP@
RANLIB = @RANLIB@
+READELF = @READELF@
STRIP = @STRIP@
WINDRES = @WINDRES@
+WINDMC = @WINDMC@
+
+GNATBIND = @GNATBIND@
+GNATMAKE = @GNATMAKE@
CFLAGS = @CFLAGS@
-LDFLAGS =
+LDFLAGS = @LDFLAGS@
LIBCFLAGS = $(CFLAGS)
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
-PICFLAG =
+GOCFLAGS = $(CFLAGS)
+
+CREATE_GCOV = create_gcov
+
+TFLAGS =
+
+# Defaults for all stages; some are overridden below.
+
+STAGE_CFLAGS = $(BOOT_CFLAGS)
+STAGE_TFLAGS = $(TFLAGS)
+STAGE_CONFIGURE_FLAGS=@stage2_werror_flag@
+
+[+ 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 +]
+
+# By default, C and C++ are the only stage1 languages, because they are the
+# only ones we require to build with the bootstrap compiler, and also the
+# only ones useful for building stage2.
+
+STAGE1_CFLAGS = @stage1_cflags@
+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
+# the last argument when conflicting --enable arguments are passed.
+# * Likewise, we force-disable coverage flags, since the installed
+# compiler probably has never heard of them.
+# * We also disable -Wformat, since older GCCs don't understand newer %s.
+STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \
+ --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \
+ --disable-build-format-warnings
+
+STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate
+STAGEprofile_TFLAGS = $(STAGE2_TFLAGS)
+
+STAGEfeedback_CFLAGS = $(STAGE3_CFLAGS) -fprofile-use
+STAGEfeedback_TFLAGS = $(STAGE3_TFLAGS)
+
+STAGEautoprofile_CFLAGS = $(STAGE2_CFLAGS) -g
+STAGEautoprofile_TFLAGS = $(STAGE2_TFLAGS)
+
+STAGEautofeedback_CFLAGS = $(STAGE3_CFLAGS)
+STAGEautofeedback_TFLAGS = $(STAGE3_TFLAGS)
+
+do-compare = @do_compare@
+do-compare3 = $(do-compare)
# -----------------------------------------------
# Programs producing files for the TARGET machine
# -----------------------------------------------
-FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
-
AR_FOR_TARGET=@AR_FOR_TARGET@
AS_FOR_TARGET=@AS_FOR_TARGET@
-CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@ $(FLAGS_FOR_TARGET)
+CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@
# If GCC_FOR_TARGET is not overriden on the command line, then this
# variable is passed down to the gcc Makefile, where it is used to
# build libgcc2.a. We define it here so that it can itself be
# overridden on the command line.
-GCC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCC_FOR_TARGET@ $(FLAGS_FOR_TARGET)
-CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @CXX_FOR_TARGET@ $(FLAGS_FOR_TARGET)
-RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @RAW_CXX_FOR_TARGET@ $(FLAGS_FOR_TARGET)
-GCJ_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCJ_FOR_TARGET@ $(FLAGS_FOR_TARGET)
-GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) @GFORTRAN_FOR_TARGET@ $(FLAGS_FOR_TARGET)
+GCC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCC_FOR_TARGET@
+CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @CXX_FOR_TARGET@
+RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @RAW_CXX_FOR_TARGET@
+GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) @GFORTRAN_FOR_TARGET@
+GOC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GOC_FOR_TARGET@
DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
LD_FOR_TARGET=@LD_FOR_TARGET@
LIPO_FOR_TARGET=@LIPO_FOR_TARGET@
NM_FOR_TARGET=@NM_FOR_TARGET@
OBJDUMP_FOR_TARGET=@OBJDUMP_FOR_TARGET@
+OBJCOPY_FOR_TARGET=@OBJCOPY_FOR_TARGET@
RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
+READELF_FOR_TARGET=@READELF_FOR_TARGET@
STRIP_FOR_TARGET=@STRIP_FOR_TARGET@
WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@
+WINDMC_FOR_TARGET=@WINDMC_FOR_TARGET@
COMPILER_AS_FOR_TARGET=@COMPILER_AS_FOR_TARGET@
COMPILER_LD_FOR_TARGET=@COMPILER_LD_FOR_TARGET@
COMPILER_NM_FOR_TARGET=@COMPILER_NM_FOR_TARGET@
-# During gcc bootstrap, if we use some random cc for stage1 then
-# CFLAGS will be just -g. We want to ensure that TARGET libraries
-# (which we know are built with gcc) are built with optimizations so
-# prepend -O2 when setting CFLAGS_FOR_TARGET.
-CFLAGS_FOR_TARGET = -O2 $(CFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET)
-SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
-CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET)
+CFLAGS_FOR_TARGET = @CFLAGS_FOR_TARGET@
+CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@
+
LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
-LDFLAGS_FOR_TARGET =
-PICFLAG_FOR_TARGET =
+LDFLAGS_FOR_TARGET = @LDFLAGS_FOR_TARGET@
+GOCFLAGS_FOR_TARGET = -O2 -g
+
+FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
+SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
+DEBUG_PREFIX_CFLAGS_FOR_TARGET = @DEBUG_PREFIX_CFLAGS_FOR_TARGET@
+
+XGCC_FLAGS_FOR_TARGET = $(FLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)
# ------------------------------------
# Miscellaneous targets and flag lists
###
# This is the list of directories that may be needed in RPATH_ENVVAR
-# so that prorgams built for the target machine work.
+# so that programs built for the target machine work.
TARGET_LIB_PATH = [+ FOR target_modules +][+
IF lib_path +]$(TARGET_LIB_PATH_[+module+])[+ ENDIF lib_path +][+
ENDFOR target_modules +]$(HOST_LIB_PATH_gcc)
# Define HOST_LIB_PATH_gcc here, for the sake of TARGET_LIB_PATH, ouch
@if gcc
-HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc:$$r/$(HOST_SUBDIR)/prev-gcc:
+HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc$(GCC_SHLIB_SUBDIR):$$r/$(HOST_SUBDIR)/prev-gcc$(GCC_SHLIB_SUBDIR):
@endif gcc
[+ FOR host_modules +][+ IF lib_path +]
@endif [+module+]
[+ ENDIF lib_path +][+ ENDFOR host_modules +]
-# Flags to pass down to all sub-makes.
+CXX_FOR_TARGET_FLAG_TO_PASS = \
+ "CXX_FOR_TARGET=$(CXX_FOR_TARGET)"
+@if target-libstdc++-v3
+# CXX_FOR_TARGET is tricky to get right for target libs that require a
+# functional C++ compiler. When we recurse, if we expand
+# CXX_FOR_TARGET before configuring libstdc++-v3, we won't get
+# libstdc++ include flags from the script. Instead, we get an
+# -funconfigured-* word, so that we'll get errors if this invalid C++
+# command line is used for anything, but also so that we can use the
+# word to decide whether or not to pass on this CXX_FOR_TARGET. If we
+# don't pass it on, sub-make will use the default definition, that
+# re-expands it at the time of use, so we'll get it right when we need
+# it. One potential exception is the expansion of CXX_FOR_TARGET
+# passed down as part of CXX within TARGET_FLAGS, but this wouldn't
+# really work, for C++ host programs can't depend on the current-stage
+# C++ target library.
+CXX_FOR_TARGET_FLAG_TO_PASS = \
+ $(shell if echo "$(CXX_FOR_TARGET)" | grep " -funconfigured-" > /dev/null; then :; else echo '"CXX_FOR_TARGET=$(CXX_FOR_TARGET)"'; fi)
+@endif target-libstdc++-v3
+
+# Flags to pass down to all sub-makes. STAGE*FLAGS,
+# MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
+# overrideable (for a bootstrap build stage1 also builds gcc.info).
BASE_FLAGS_TO_PASS =[+ FOR flags_to_pass +][+ IF optional +] \
"`echo '[+flag+]=$([+flag+])' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"[+ ELSE optional +] \
- "[+flag+]=$([+flag+])"[+ ENDIF optional+][+ ENDFOR flags_to_pass +] \
+ "[+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 +] \
+ $(CXX_FOR_TARGET_FLAG_TO_PASS) \
+ "TFLAGS=$(TFLAGS)" \
"CONFIG_SHELL=$(SHELL)" \
- "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)"
+ "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
+ $(if $(LSAN_OPTIONS),"LSAN_OPTIONS=$(LSAN_OPTIONS)")
# We leave this in just in case, but it is not needed anymore.
RECURSE_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS)
'CC=$(CC)' \
'CXX=$(CXX)' \
'DLLTOOL=$(DLLTOOL)' \
+ 'GFORTRAN=$(GFORTRAN)' \
+ 'GOC=$(GOC)' \
'LD=$(LD)' \
'LIPO=$(LIPO)' \
'NM=$(NM)' \
'OBJDUMP=$(OBJDUMP)' \
'RANLIB=$(RANLIB)' \
+ 'READELF=$(READELF)' \
'STRIP=$(STRIP)' \
- 'WINDRES=$(WINDRES)'
+ 'WINDRES=$(WINDRES)' \
+ 'WINDMC=$(WINDMC)' \
+ 'CREATE_GCOV=$(CREATE_GCOV)'
FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)
-# Flags that are concerned with the location of the X11 include files
-# and library files
-#
-# NOTE: until the top-level is getting the values via autoconf, it only
-# causes problems to have this top-level Makefile overriding the autoconf-set
-# values in child directories. Only variables that don't conflict with
-# autoconf'ed ones should be passed by X11_FLAGS_TO_PASS for now.
-#
-X11_FLAGS_TO_PASS = \
- 'X11_EXTRA_CFLAGS=$(X11_EXTRA_CFLAGS)' \
- 'X11_EXTRA_LIBS=$(X11_EXTRA_LIBS)'
+# Flags to pass to stage1 or when not bootstrapping.
+
+STAGE1_FLAGS_TO_PASS = \
+ LDFLAGS="$${LDFLAGS}" \
+ HOST_LIBS="$${HOST_LIBS}"
+
+# Flags to pass to stage2 and later makes.
+
+POSTSTAGE1_FLAGS_TO_PASS = \
+ CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
+ CXX="$${CXX}" CXX_FOR_BUILD="$${CXX_FOR_BUILD}" \
+ GNATBIND="$${GNATBIND}" \
+ LDFLAGS="$${LDFLAGS}" \
+ HOST_LIBS="$${HOST_LIBS}" \
+ $(LTO_FLAGS_TO_PASS) \
+ "`echo 'ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
+
+@if gcc-bootstrap
+EXTRA_HOST_EXPORTS = if [ $(current_stage) != stage1 ]; then \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ fi;
+
+EXTRA_BOOTSTRAP_FLAGS = CC="$$CC" CXX="$$CXX" LDFLAGS="$$LDFLAGS"
+@endif gcc-bootstrap
# Flags to pass down to makes which are built with the target environment.
# The double $ decreases the length of the command line; those variables
# are set in BASE_FLAGS_TO_PASS, and the sub-make will expand them. The
-# COMPILER_ prefixed variables are not passed down so we expand them here.
+# *_CFLAGS_FOR_TARGET variables are not passed down and most often empty,
+# so we expand them here.
EXTRA_TARGET_FLAGS = \
'AR=$$(AR_FOR_TARGET)' \
'AS=$(COMPILER_AS_FOR_TARGET)' \
- 'CC=$$(CC_FOR_TARGET)' \
+ 'CC=$$(CC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
'CFLAGS=$$(CFLAGS_FOR_TARGET)' \
- 'CXX=$$(CXX_FOR_TARGET)' \
+ 'CXX=$$(CXX_FOR_TARGET) -B$$r/$$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \
+ -B$$r/$$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs \
+ $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \
'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \
+ 'GFORTRAN=$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
+ 'GOC=$$(GOC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
+ 'GOCFLAGS=$$(GOCFLAGS_FOR_TARGET)' \
'LD=$(COMPILER_LD_FOR_TARGET)' \
'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \
'NM=$(COMPILER_NM_FOR_TARGET)' \
'OBJDUMP=$$(OBJDUMP_FOR_TARGET)' \
+ 'OBJCOPY=$$(OBJCOPY_FOR_TARGET)' \
'RANLIB=$$(RANLIB_FOR_TARGET)' \
- 'WINDRES=$$(WINDRES_FOR_TARGET)'
+ 'READELF=$$(READELF_FOR_TARGET)' \
+ 'WINDRES=$$(WINDRES_FOR_TARGET)' \
+ 'WINDMC=$$(WINDMC_FOR_TARGET)' \
+ 'XGCC_FLAGS_FOR_TARGET=$(XGCC_FLAGS_FOR_TARGET)' \
+ 'STAGE1_LDFLAGS=$$(POSTSTAGE1_LDFLAGS)' \
+ 'STAGE1_LIBS=$$(POSTSTAGE1_LIBS)' \
+ "TFLAGS=$$TFLAGS"
TARGET_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS)
EXTRA_GCC_FLAGS = \
"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
"`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
- "`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
- "`echo 'LIBGCC2_CFLAGS=$(LIBGCC2_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
- "`echo 'LIBGCC2_DEBUG_CFLAGS=$(LIBGCC2_DEBUG_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
- "`echo 'LIBGCC2_INCLUDES=$(LIBGCC2_INCLUDES)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
+ "`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS)
+@if gcc
+BUILD_CONFIG = @BUILD_CONFIG@
+ifneq ($(BUILD_CONFIG),)
+include $(foreach CONFIG, $(BUILD_CONFIG), $(srcdir)/config/$(CONFIG).mk)
+endif
+@endif gcc
+
.PHONY: configure-host
configure-host: [+
FOR host_modules +] \
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+@if gcc-bootstrap
if [ -f stage_last ]; then \
+ TFLAGS="$(STAGE$(shell test ! -f stage_last || sed s,^stage,, stage_last)_TFLAGS)"; \
$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
else \
- $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target; \
- fi
+@endif gcc-bootstrap
+ $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target \
+@if gcc-bootstrap
+ ; \
+ fi \
+@endif gcc-bootstrap
+ && :
.PHONY: all-build
[+ FOR build_modules +]
.PHONY: all-target
[+ FOR target_modules +][+ IF bootstrap +]
-@if [+module+]-no-bootstrap[+ ENDIF bootstrap +]
+@if target-[+module+]-no-bootstrap[+ ENDIF bootstrap +]
all-target: maybe-all-target-[+module+][+ IF bootstrap +]
-@endif [+module+]-no-bootstrap[+ ENDIF bootstrap +][+ ENDFOR target_modules +]
+@endif target-[+module+]-no-bootstrap[+
+ ENDIF bootstrap +][+ ENDFOR target_modules +]
# Do a target for all the subdirectories. A ``make do-X'' will do a
# ``make X'' in all subdirectories (because, in general, there is a
# Here are the targets which correspond to the do-X targets.
-.PHONY: info installcheck dvi html install-info install-html
+.PHONY: info installcheck dvi pdf html
+.PHONY: install-info install-pdf install-html
.PHONY: clean distclean mostlyclean maintainer-clean realclean
.PHONY: local-clean local-distclean local-maintainer-clean
info: do-info
installcheck: do-installcheck
dvi: do-dvi
+pdf: do-pdf
html: do-html
# Make sure makeinfo is built before we do a `make info', if we're
install-info: do-install-info dir.info
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- if [ -f dir.info ] ; then \
- $(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info ; \
- else true ; fi
+ if [ -f dir.info ]; then \
+ $(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info; \
+ else true; fi
+
+install-pdf: do-install-pdf
install-html: do-install-html
local-distclean:
-rm -f Makefile config.status config.cache mh-frag mt-frag
- -rm -f maybedep.tmp serdep.tmp
+ -rm -f maybedep.tmp serdep.tmp stage_final
-if [ "$(TARGET_SUBDIR)" != "." ]; then \
rm -rf $(TARGET_SUBDIR); \
else true; fi
-rm -f texinfo/doc/Makefile texinfo/po/POTFILES
-rmdir texinfo/doc texinfo/info texinfo/intl texinfo/lib 2>/dev/null
-rmdir texinfo/makeinfo texinfo/po texinfo/util 2>/dev/null
- -rmdir fastjar gcc libiberty texinfo zlib 2>/dev/null
+ -rmdir fastjar gcc gnattools gotools libcc1 libiberty 2>/dev/null
+ -rmdir texinfo zlib 2>/dev/null
+ -find . -name config.cache -exec rm -f {} \; \; 2>/dev/null
local-maintainer-clean:
@echo "This command is intended for maintainers to use;"
maintainer-clean: local-distclean
realclean: maintainer-clean
-# Extra dependency for clean-target, owing to the mixed nature of gcc.
-clean-target: clean-target-libgcc
-clean-target-libgcc:
- test ! -d gcc || (cd gcc && $(MAKE) $@)
-
# Check target.
.PHONY: check do-check
chmod +x $@
echo If you really want to send e-mail, run ./$@ now
+# Local Vim config
+
+$(srcdir)/.local.vimrc:
+ $(LN_S) contrib/vimrc $@
+
+$(srcdir)/.lvimrc:
+ $(LN_S) contrib/vimrc $@
+
+vimrc: $(srcdir)/.local.vimrc $(srcdir)/.lvimrc
+
+.PHONY: vimrc
+
+# clang-format config
+
+$(srcdir)/.clang-format:
+ $(LN_S) contrib/clang-format $@
+
+clang-format: $(srcdir)/.clang-format
+
+.PHONY: clang-format
+
# Installation targets.
.PHONY: install uninstall
.PHONY: install.all
install.all: install-no-fixedincludes
- @if [ -f ./gcc/Makefile ] ; then \
- r=`${PWD_COMMAND}` ; export r ; \
+ @if [ -f ./gcc/Makefile ]; then \
+ r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
(cd ./gcc && \
- $(MAKE) $(FLAGS_TO_PASS) install-headers) ; \
+ $(MAKE) $(FLAGS_TO_PASS) install-headers); \
else \
- true ; \
+ true; \
fi
-# install-no-fixedincludes is used because Cygnus can not distribute
-# the fixed header files.
+# install-no-fixedincludes is used to allow the elaboration of binary packages
+# suitable for distribution, where we cannot include the fixed system header
+# files.
.PHONY: install-no-fixedincludes
install-no-fixedincludes: installdirs install-host-nogcc \
- install-target gcc-no-fixedincludes
+ install-target gcc-install-no-fixedincludes
+
+.PHONY: install-strip
+install-strip:
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(MAKE) $(RECURSE_FLAGS_TO_PASS) installdirs install-strip-host install-strip-target
+
+.PHONY: install-strip-host
+install-strip-host: [+
+ FOR host_modules +] \
+ maybe-install-strip-[+module+][+
+ ENDFOR host_modules +]
+
+.PHONY: install-strip-target
+install-strip-target: [+
+ FOR target_modules +] \
+ maybe-install-strip-target-[+module+][+
+ ENDFOR target_modules +]
+
### other supporting targets
$(SHELL) $(srcdir)/mkinstalldirs $(MAKEDIRS)
dir.info: do-install-info
- if [ -f $(srcdir)/texinfo/gen-info-dir ] ; then \
- $(srcdir)/texinfo/gen-info-dir $(DESTDIR)$(infodir) $(srcdir)/texinfo/dir.info-template > dir.info.new ; \
- mv -f dir.info.new dir.info ; \
- else true ; \
+ if [ -f $(srcdir)/texinfo/gen-info-dir ]; then \
+ $(srcdir)/texinfo/gen-info-dir $(DESTDIR)$(infodir) $(srcdir)/texinfo/dir.info-template > dir.info.new; \
+ mv -f dir.info.new dir.info; \
+ else true; \
fi
dist:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
[+ IF check_multilibs
+]echo "Checking multilib configuration for [+module+]..."; \
- $(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
- $(CC_FOR_TARGET) --print-multi-lib > [+subdir+]/[+module+]/multilib.tmp 2> /dev/null ; \
+ $(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+]; \
+ $(CC_FOR_TARGET) --print-multi-lib > [+subdir+]/[+module+]/multilib.tmp 2> /dev/null; \
if test -r [+subdir+]/[+module+]/multilib.out; then \
if cmp -s [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; then \
rm -f [+subdir+]/[+module+]/multilib.tmp; \
mv [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; \
fi; \
[+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
- $(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
- [+exports+] \
+ $(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+]; \
+ [+exports+] [+extra_exports+] \
echo Configuring in [+subdir+]/[+module+]; \
cd "[+subdir+]/[+module+]" || exit 1; \
case $(srcdir) in \
*) topdir=`echo [+subdir+]/[+module+]/ | \
sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
esac; \
- srcdiroption="--srcdir=$${topdir}/[+module+]"; \
- libsrcdir="$$s/[+module+]"; \
+ module_srcdir=[+? module_srcdir (get "module_srcdir") (get "module")+]; \
[+ IF no-config-site +]rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file [+ ENDIF +]$(SHELL) $${libsrcdir}/configure \
- [+args+] $${srcdiroption} [+extra_configure_flags+] \
+ CONFIG_SITE=no-such-file [+ ENDIF +]$(SHELL) \
+ $$s/$$module_srcdir/configure \
+ --srcdir=$${topdir}/$$module_srcdir \
+ [+args+] --build=${build_alias} --host=[+host_alias+] \
+ --target=[+target_alias+] [+extra_configure_flags+] \
|| exit 1
@endif [+prefix+][+module+]
@$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+]
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
[+ IF check_multilibs
+]echo "Checking multilib configuration for [+module+]..."; \
- $(CC_FOR_TARGET) --print-multi-lib > [+subdir+]/[+module+]/multilib.tmp 2> /dev/null ; \
+ $(CC_FOR_TARGET) --print-multi-lib > [+subdir+]/[+module+]/multilib.tmp 2> /dev/null; \
if test -r [+subdir+]/[+module+]/multilib.out; then \
if cmp -s [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; then \
rm -f [+subdir+]/[+module+]/multilib.tmp; \
fi; \
[+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
[+exports+][+ IF prev +] \
- [+poststage1_exports+][+ ENDIF prev +] \
- echo Configuring stage [+id+] in [+subdir+]/[+module+] ; \
- $(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
+ [+poststage1_exports+][+ ENDIF prev +][+ IF prefix +] \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;[+ ELSE prefix +] \
+ CFLAGS="$(STAGE[+id+]_CFLAGS)"; export CFLAGS; \
+ CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"; export CXXFLAGS;[+ IF prev +] \
+ LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
+ 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; \
case $(srcdir) in \
/* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
*) topdir=`echo [+subdir+]/[+module+]/ | \
sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
esac; \
- srcdiroption="--srcdir=$${topdir}/[+module+]"; \
- libsrcdir="$$s/[+module+]"; \
- $(SHELL) $${libsrcdir}/configure \
- [+args+] $${srcdiroption} \
- [+stage_configure_flags+] [+extra_configure_flags+]
+ module_srcdir=[+? module_srcdir (get "module_srcdir") (get "module")+]; \
+ $(SHELL) $$s/$$module_srcdir/configure \
+ --srcdir=$${topdir}/$$module_srcdir \
+ [+args+] --build=${build_alias} --host=[+host_alias+] \
+ --target=[+target_alias+] \
+ [+ IF prev +]--with-build-libsubdir=$(HOST_SUBDIR)[+ ENDIF prev +] \
+ $(STAGE[+id+]_CONFIGURE_FLAGS)[+ IF extra_configure_flags +] \
+ [+extra_configure_flags+][+ ENDIF extra_configure_flags +]
@endif [+prefix+][+module+]-bootstrap
[+ ENDFOR bootstrap_stage +]
[+ ENDIF bootstrap +]
@endif gcc-bootstrap
@if [+prefix+][+module+]
TARGET-[+prefix+][+module+]=[+
- IF target +][+target+][+ ELSE +]all[+ ENDIF target +]
+ IF all_target +][+all_target+][+ ELSE +]all[+ ENDIF all_target +]
maybe-all-[+prefix+][+module+]: all-[+prefix+][+module+]
all-[+prefix+][+module+]: configure-[+prefix+][+module+][+ IF bootstrap +][+ ELSE +]
@: $(MAKE); $(unstage)[+ ENDIF bootstrap +]
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- [+exports+] \
+ [+exports+] [+extra_exports+] \
(cd [+subdir+]/[+module+] && \
- $(MAKE) [+args+] [+extra_make_flags+] $(TARGET-[+prefix+][+module+]))
+ $(MAKE) $(BASE_FLAGS_TO_PASS) [+args+] [+stage1_args+] [+extra_make_flags+] \
+ $(TARGET-[+prefix+][+module+]))
@endif [+prefix+][+module+]
[+ IF bootstrap +]
@[ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start
@r=`${PWD_COMMAND}`; export r; \
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) [+args+] [+ IF prev
- +][+poststage1_args+][+ ENDIF prev
- +] [+stage_make_flags+] [+extra_make_flags+] \
+ [+autoprofile+] \
+ $(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+]_CXXFLAGS)"[+ IF prev +] \
+ LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
+ LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +][+ ENDIF prefix +] \
+ CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ [+args+] [+IF prev +][+poststage1_args+][+ ELSE prev +] \
+ [+stage1_args+][+ ENDIF prev +] [+extra_make_flags+] \
+ TFLAGS="$(STAGE[+id+]_TFLAGS)" [+profile_data+] \
$(TARGET-stage[+id+]-[+prefix+][+module+])
maybe-clean-stage[+id+]-[+prefix+][+module+]: clean-stage[+id+]-[+prefix+][+module+]
clean-stage[+id+]: clean-stage[+id+]-[+prefix+][+module+]
clean-stage[+id+]-[+prefix+][+module+]:
- @[ -f [+subdir+]/[+module+]/Makefile ] || [ -f [+subdir+]/stage[+id+]-[+module+]/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start; \
+ @if [ $(current_stage) = stage[+id+] ]; then \
+ [ -f [+subdir+]/[+module+]/Makefile ] || exit 0; \
+ else \
+ [ -f [+subdir+]/stage[+id+]-[+module+]/Makefile ] || exit 0; \
+ $(MAKE) stage[+id+]-start; \
+ fi; \
cd [+subdir+]/[+module+] && \
- $(MAKE) [+args+] [+ IF prev +] \
- [+poststage1_args+] [+ ENDIF prev +] \
- [+stage_make_flags+] [+extra_make_flags+] clean
+ $(MAKE) [+args+] [+ IF prev +][+poststage1_args+][+ ELSE prev +] \
+ [+stage1_args+][+ ENDIF prev +] [+extra_make_flags+] clean
@endif [+prefix+][+module+]-bootstrap
[+ ENDFOR bootstrap_stage +]
# --------------------------------------
[+ FOR build_modules +]
[+ configure prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)"
+ host_alias=(get "host" "${build_alias}")
+ target_alias=(get "target" "${target_alias}")
args="$(BUILD_CONFIGARGS)" no-config-site=true +]
-[+ all prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)" +]
+[+ all prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)"
+ args="$(EXTRA_BUILD_FLAGS)" +]
[+ ENDFOR build_module +]
# --------------------------------------
[+ configure prefix="" subdir="$(HOST_SUBDIR)"
exports="$(HOST_EXPORTS)"
poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
+ host_alias=(get "host" "${host_alias}")
+ target_alias=(get "target" "${target_alias}")
args="$(HOST_CONFIGARGS)" +]
[+ all prefix="" subdir="$(HOST_SUBDIR)"
exports="$(HOST_EXPORTS)"
poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
- args="$(FLAGS_TO_PASS)"
+ args="$(EXTRA_HOST_FLAGS)"
+ stage1_args="$(STAGE1_FLAGS_TO_PASS)"
poststage1_args="$(POSTSTAGE1_FLAGS_TO_PASS)" +]
.PHONY: check-[+module+] maybe-check-[+module+]
# This module is only tested in a native toolchain.
check-[+module+]:
@: $(MAKE); $(unstage)
- @if [ '$(host)' = '$(target)' ] ; then \
+ @if [ '$(host)' = '$(target)' ]; then \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
+ $(HOST_EXPORTS) [+ IF bootstrap +]$(EXTRA_HOST_EXPORTS)[+
+ ENDIF bootstrap +] \
(cd $(HOST_SUBDIR)/[+module+] && \
- $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check); \
+ $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+][+
+ IF bootstrap +] $(EXTRA_BOOTSTRAP_FLAGS)[+ ENDIF bootstrap +] check)
fi
[+ ELSE check +]
check-[+module+]:
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
+ $(HOST_EXPORTS) [+ IF bootstrap +]$(EXTRA_HOST_EXPORTS)[+
+ ENDIF bootstrap +] \
(cd $(HOST_SUBDIR)/[+module+] && \
- $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check)
+ $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+][+
+ IF bootstrap +] $(EXTRA_BOOTSTRAP_FLAGS)[+ ENDIF bootstrap +] check)
[+ ENDIF no_check +]
@endif [+module+]
[+ ENDIF no_install +]
@endif [+module+]
-# Other targets (info, dvi, etc.)
+.PHONY: install-strip-[+module+] maybe-install-strip-[+module+]
+maybe-install-strip-[+module+]:
+@if [+module+]
+maybe-install-strip-[+module+]: install-strip-[+module+]
+[+ IF no_install +]
+install-strip-[+module+]:
+[+ ELSE install +]
+install-strip-[+module+]: installdirs
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ (cd $(HOST_SUBDIR)/[+module+] && \
+ $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] install-strip)
+[+ ENDIF no_install +]
+@endif [+module+]
+
+# Other targets (info, dvi, pdf, etc.)
[+ FOR recursive_targets +]
.PHONY: maybe-[+make_target+]-[+module+] [+make_target+]-[+module+]
maybe-[+make_target+]-[+module+]:
for flag in $(EXTRA_HOST_FLAGS) [+extra_make_flags+]; do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- echo "Doing [+make_target+] in [+module+]" ; \
+ echo "Doing [+make_target+] in [+module+]"; \
(cd $(HOST_SUBDIR)/[+module+] && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
[+make_target+]) \
|| exit 1
[+ ENDIF +]
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
check_multilibs=true
exports="$(RAW_CXX_TARGET_EXPORTS)"
+ host_alias=(get "host" "${target_alias}")
+ target_alias=(get "target" "${target_alias}")
args="$(TARGET_CONFIGARGS)" no-config-site=true +]
[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
exports="$(RAW_CXX_TARGET_EXPORTS)"
- args="$(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'" +]
+ args="$(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'" +]
[+ ELSE +]
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
check_multilibs=true
exports="$(NORMAL_TARGET_EXPORTS)"
+ host_alias=(get "host" "${target_alias}")
+ target_alias=(get "target" "${target_alias}")
args="$(TARGET_CONFIGARGS)" no-config-site=true +]
[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
exports="$(NORMAL_TARGET_EXPORTS)"
- args="$(TARGET_FLAGS_TO_PASS)" +]
+ args="$(EXTRA_TARGET_FLAGS)" +]
[+ ENDIF +]
.PHONY: check-target-[+module+] maybe-check-target-[+module+]
[+ ENDIF no_install +]
@endif target-[+module+]
-# Other targets (info, dvi, etc.)
+.PHONY: install-strip-target-[+module+] maybe-install-strip-target-[+module+]
+maybe-install-strip-target-[+module+]:
+@if target-[+module+]
+maybe-install-strip-target-[+module+]: install-strip-target-[+module+]
+[+ IF no_install +]
+# Dummy target for uninstallable.
+install-strip-target-[+module+]:
+[+ ELSE install +]
+install-strip-target-[+module+]: installdirs
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
+IF raw_cxx +]
+ $(RAW_CXX_TARGET_EXPORTS) \[+
+ELSE normal_cxx +]
+ $(NORMAL_TARGET_EXPORTS) \[+
+ENDIF raw_cxx +]
+ (cd $(TARGET_SUBDIR)/[+module+] && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) [+extra_make_flags+] install-strip)
+[+ ENDIF no_install +]
+@endif target-[+module+]
+
+# Other targets (info, dvi, pdf, etc.)
[+ FOR recursive_targets +]
.PHONY: maybe-[+make_target+]-target-[+module+] [+make_target+]-target-[+module+]
maybe-[+make_target+]-target-[+module+]:
[+depend+]-target-[+module+] [+
ENDFOR depend +]
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/[+module+]/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/[+module+]/Makefile ] || exit 0; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
IF raw_cxx +]
ELSE normal_cxx +]
$(NORMAL_TARGET_EXPORTS) \[+
ENDIF raw_cxx +]
- echo "Doing [+make_target+] in $(TARGET_SUBDIR)/[+module+]" ; \
+ echo "Doing [+make_target+] in $(TARGET_SUBDIR)/[+module+]"; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
[+extra_make_flags+] [+make_target+]) \
|| exit 1
[+ ENDIF +]
[+ ENDFOR recursive_targets +]
[+ ENDFOR target_modules +]
+@if target-libgomp
+.PHONY: check-target-libgomp-c++
+check-target-libgomp-c++:
+ $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) c++.exp" check-target-libgomp
+
+.PHONY: check-target-libgomp-fortran
+check-target-libgomp-fortran:
+ $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) fortran.exp" check-target-libgomp
+
+@endif target-libgomp
+
+@if target-libitm
+.PHONY: check-target-libitm-c++
+check-target-libitm-c++:
+ $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) c++.exp" check-target-libitm
+
+@endif target-libitm
+
# ----------
# GCC module
# ----------
@if gcc-no-bootstrap
-# GCC has some more recursive targets, which trigger the old
-# (but still current, until the toplevel bootstrap project
-# is finished) compiler bootstrapping rules.
-
-GCC_STRAP_TARGETS = bootstrap bootstrap-lean bootstrap2 bootstrap2-lean bootstrap3 bootstrap3-lean bootstrap4 bootstrap4-lean bubblestrap quickstrap cleanstrap restrap
-.PHONY: $(GCC_STRAP_TARGETS)
-$(GCC_STRAP_TARGETS): all-prebootstrap configure-gcc
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
- echo "Bootstrapping the compiler"; \
- $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,:[ :]*,:,g;s,^[ :]*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $@
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- case "$@" in \
- *bootstrap4-lean ) \
- msg="Comparing stage3 and stage4 of the compiler"; \
- compare=compare3-lean ;; \
- *bootstrap4 ) \
- msg="Comparing stage3 and stage4 of the compiler"; \
- compare=compare3 ;; \
- *-lean ) \
- msg="Comparing stage2 and stage3 of the compiler"; \
- compare=compare-lean ;; \
- * ) \
- msg="Comparing stage2 and stage3 of the compiler"; \
- compare=compare ;; \
- esac; \
- $(HOST_EXPORTS) \
- echo "$$msg"; \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $$compare
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
- echo "Building runtime libraries"; \
- $(MAKE) $(RECURSE_FLAGS_TO_PASS) all
-
-profiledbootstrap: all-prebootstrap configure-gcc
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
- $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,:[ :]*,:,g;s,^[ :]*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
- echo "Bootstrapping training compiler"; \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stageprofile_build
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
- echo "Building feedback based compiler"; \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stagefeedback_build
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
- echo "Building runtime libraries"; \
- $(MAKE) $(RECURSE_FLAGS_TO_PASS) all
-
.PHONY: cross
cross: all-build all-gas all-ld
@r=`${PWD_COMMAND}`; export r; \
echo "Building the C and C++ compiler"; \
cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) LANGUAGES="c c++"
@r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
echo "Building runtime libraries"; \
$(MAKE) $(RECURSE_FLAGS_TO_PASS) LANGUAGES="c c++" all
@endif gcc-no-bootstrap
@if gcc
-.PHONY: check-gcc-c++
-check-gcc-c++:
- @if [ -f ./gcc/Makefile ] ; then \
- r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
- (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \
- else \
- true; \
- fi
-
-.PHONY: check-c++
-check-c++: check-target-libstdc++-v3 check-gcc-c++
-
-# Install the gcc headers files, but not the fixed include files,
-# which Cygnus is not allowed to distribute. This rule is very
-# dependent on the workings of the gcc Makefile.in.
-.PHONY: gcc-no-fixedincludes
-gcc-no-fixedincludes:
+[+ FOR languages +]
+.PHONY: check-gcc-[+language+] check-[+language+]
+check-gcc-[+language+]:
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) [+gcc-check-target+]);
+check-[+language+]: check-gcc-[+language+][+ FOR lib-check-target +] [+ lib-check-target +][+ ENDFOR lib-check-target +]
+[+ ENDFOR languages +]
+
+# The gcc part of install-no-fixedincludes, which relies on an intimate
+# knowledge of how a number of gcc internal targets (inter)operate. Delegate.
+.PHONY: gcc-install-no-fixedincludes
+gcc-install-no-fixedincludes:
@if [ -f ./gcc/Makefile ]; then \
- rm -rf gcc/tmp-include; \
- mv gcc/include gcc/tmp-include 2>/dev/null; \
- mkdir gcc/include; \
- cp $(srcdir)/gcc/gsyslimits.h gcc/include/syslimits.h; \
- touch gcc/stmp-fixinc gcc/include/fixed; \
- rm -f gcc/stmp-headers gcc/stmp-int-hdrs; \
r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
- (cd ./gcc && \
- $(MAKE) $(GCC_FLAGS_TO_PASS) install); \
- rm -rf gcc/include; \
- mv gcc/tmp-include gcc/include 2>/dev/null; \
+ (cd ./gcc \
+ && $(MAKE) $(GCC_FLAGS_TO_PASS) install-no-fixedincludes); \
else true; fi
@endif gcc
current_stage = ""
@if gcc-bootstrap
-unstage = [ -f stage_current ] || $(MAKE) `cat stage_last`-start
+unstage = if [ -f stage_last ]; then [ -f stage_current ] || $(MAKE) `cat stage_last`-start || exit 1; else :; fi
stage = if [ -f stage_current ]; then $(MAKE) `cat stage_current`-end || exit 1; else :; fi
current_stage = "`cat stage_current 2> /dev/null`"
@endif gcc-bootstrap
# 'touch' doesn't work right on some platforms.
STAMP = echo timestamp >
-# Only build the C compiler for stage1, because that is the only one that
-# we can guarantee will build with the native compiler, and also it is the
-# only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
-# MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
-# overrideable (for a bootstrap build stage1 also builds gcc.info).
-
-STAGE1_CFLAGS=@stage1_cflags@
-STAGE1_LANGUAGES=@stage1_languages@
-
# We only want to compare .o files, so set this!
objext = .o
-# Flags to pass to stage2 and later makes.
-POSTSTAGE1_FLAGS_TO_PASS = \
- CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
- STAGE_PREFIX=$$r/prev-gcc/ \
- CFLAGS="$(BOOT_CFLAGS)" \
- LIBCFLAGS="$(BOOT_CFLAGS)" \
- LDFLAGS="$(BOOT_LDFLAGS)" \
- "`echo 'ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
-
-# For stage 1:
-# * We force-disable intermodule optimizations, even if
-# --enable-intermodule was passed, since the installed compiler probably
-# can't handle them. Luckily, autoconf always respects
-# the last argument when conflicting --enable arguments are passed.
-# * Likewise, we force-disable coverage flags, since the installed compiler
-# probably has never heard of them.
-# * We build only C (and possibly Ada).
-
[+ FOR bootstrap-stage +]
.PHONY: stage[+id+]-start stage[+id+]-end
stage[+id+]-start::
@: $(MAKE); $(stage); \
- echo stage[+id+] > stage_current ; \
+ echo stage[+id+] > stage_current; \
echo stage[+id+] > stage_last; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)[+
FOR host_modules +][+ IF bootstrap +]
@if [+ module +]
@cd $(HOST_SUBDIR); [ -d stage[+id+]-[+module+] ] || \
mkdir stage[+id+]-[+module+]; \
- mv stage[+id+]-[+module+] [+module+] [+ IF prev +] ; \
+ mv stage[+id+]-[+module+] [+module+][+ IF prev +]; \
mv stage[+prev+]-[+module+] prev-[+module+] || test -f stage[+prev+]-lean [+ ENDIF prev +]
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
@[ -d stage[+id+]-$(TARGET_SUBDIR) ] || \
mkdir stage[+id+]-$(TARGET_SUBDIR); \
- mv stage[+id+]-$(TARGET_SUBDIR) $(TARGET_SUBDIR) [+ IF prev +] ; \
+ mv stage[+id+]-$(TARGET_SUBDIR) $(TARGET_SUBDIR)[+ IF prev +]; \
mv stage[+prev+]-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stage[+prev+]-lean [+ ENDIF prev +]
stage[+id+]-end:: [+ FOR host_modules +][+ IF bootstrap +]
@if [+ module +]
- @if test -d $(HOST_SUBDIR)/[+module+] ; then \
- cd $(HOST_SUBDIR); mv [+module+] stage[+id+]-[+module+] [+ IF prev +]; \
- mv prev-[+module+] stage[+prev+]-[+module+] ; : [+ ENDIF prev +] ; \
+ @if test -d $(HOST_SUBDIR)/[+module+]; then \
+ cd $(HOST_SUBDIR); mv [+module+] stage[+id+]-[+module+][+ IF prev +]; \
+ mv prev-[+module+] stage[+prev+]-[+module+]; : [+ ENDIF prev +]; \
fi
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
- @if test -d $(TARGET_SUBDIR) ; then \
- mv $(TARGET_SUBDIR) stage[+id+]-$(TARGET_SUBDIR) [+ IF prev +] ; \
- mv prev-$(TARGET_SUBDIR) stage[+prev+]-$(TARGET_SUBDIR) ; : [+ ENDIF prev +] ; \
+ @if test -d $(TARGET_SUBDIR); then \
+ mv $(TARGET_SUBDIR) stage[+id+]-$(TARGET_SUBDIR)[+ IF prev +]; \
+ mv prev-$(TARGET_SUBDIR) stage[+prev+]-$(TARGET_SUBDIR); : [+ ENDIF prev +]; \
fi
rm -f stage_current
-# Bubble a bugfix through all the stages up to stage [+id+]. They are
+# Bubble a bug fix through all the stages up to stage [+id+]. They are
# remade, but not reconfigured. The next stage (if any) will not be
-# reconfigured as well.
+# reconfigured either.
.PHONY: stage[+id+]-bubble
stage[+id+]-bubble:: [+ IF prev +]stage[+prev+]-bubble[+ ENDIF +]
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
if test -f stage[+id+]-lean [+
- IF prev +]|| test -f stage[+prev+]-lean [+ ENDIF prev +] ; then \
- echo Skipping rebuild of stage[+id+] ; \
+ IF prev +]|| test -f stage[+prev+]-lean [+ ENDIF prev +]; then \
+ echo Skipping rebuild of stage[+id+]; \
else \
$(MAKE) stage[+id+]-start; \[+IF lean +]
if $(LEAN); then \
- rm -rf stage[+lean+]-* ; \
- $(STAMP) stage[+lean+]-lean ; \
+ rm -rf stage[+lean+]-*; \
+ $(STAMP) stage[+lean+]-lean; \
fi; \[+ ENDIF lean +]
$(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stage[+id+]; \
fi[+ IF compare-target +]
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
if test -f stage[+prev+]-lean; then \
- echo Cannot compare object files as stage [+prev+] was deleted. ; \
- exit 0 ; \
+ echo Cannot compare object files as stage [+prev+] was deleted.; \
+ exit 0; \
fi; \
: $(MAKE); $(stage); \
- rm -f .bad_compare ; \
- echo Comparing stages [+prev+] and [+id+] ; \
- cd stage[+id+]-gcc; \
- files=`find . -name "*$(objext)" -print` ; \
- cd .. ; \
- for file in $${files} ; do \
- f1=$$r/stage[+prev+]-gcc/$$file; f2=$$r/stage[+id+]-gcc/$$file; \
- @do_compare@ > /dev/null 2>&1; \
+ rm -f .bad_compare; \
+ echo Comparing stages [+prev+] and [+id+]; \
+ sed=`echo stage[+id+] | sed 's,^stage,,;s,.,.,g'`; \
+ files=`find stage[+id+]-* -name "*$(objext)" -print | \
+ sed -n s,^stage$$sed-,,p`; \
+ for file in $${files}; do \
+ f1=$$r/stage[+prev+]-$$file; f2=$$r/stage[+id+]-$$file; \
+ if test ! -f $$f1; then continue; fi; \
+ $(do-[+compare-target+]) > /dev/null 2>&1; \
if test $$? -eq 1; then \
case $$file in \
- ./cc*-checksum$(objext) | ./libgcc/* ) \
+ @compare_exclusions@) \
echo warning: $$file differs ;; \
*) \
echo $$file differs >> .bad_compare ;; \
- esac ; \
- fi ; \
- done ; \
+ esac; \
+ fi; \
+ done; \
if [ -f .bad_compare ]; then \
echo "Bootstrap comparison failure!"; \
cat .bad_compare; \
exit 1; \
else \
echo Comparison successful.; \
- fi ; \
+ fi; \
$(STAMP) [+compare-target+][+ IF prev +]
if $(LEAN); then \
rm -rf stage[+prev+]-*; \
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
[+bootstrap-target+]-lean:
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
[+ ENDIF bootstrap-target +]
.PHONY: distclean-stage[+id+]
distclean-stage[+id+]::
@: $(MAKE); $(stage)
+ @test "`cat stage_last`" != stage[+id+] || rm -f stage_last
rm -rf stage[+id+]-* [+
IF compare-target +][+compare-target+] [+ ENDIF compare-target +]
[+ IF cleanstrap-target +]
.PHONY: [+cleanstrap-target+]
-[+cleanstrap-target+]: distclean [+bootstrap-target+]
+[+cleanstrap-target+]: do-distclean local-clean
+ echo stage[+id+] > stage_final
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage[+id+]-bubble
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
[+ ENDIF cleanstrap-target +]
@endif gcc-bootstrap
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
for i in prev-*; do \
- j=`echo $$i | sed s/^prev-//` ; \
+ j=`echo $$i | sed s/^prev-//`; \
cd $$r/$$i && \
- { find . -type d | sort | sed 's,.*,$(SHELL) '"$$s"'/mkinstalldirs "../'$$j'/&",' | $(SHELL) ; } && \
- { find . -name '*.*da' | sed 's,.*,$(LN) -f "&" "../'$$j'/&",' | $(SHELL) ; } ; \
+ { find . -type d | sort | sed 's,.*,$(SHELL) '"$$s"'/mkinstalldirs "../'$$j'/&",' | $(SHELL); } && \
+ { find . -name '*.*da' | sed 's,.*,$(LN) -f "&" "../'$$j'/&",' | $(SHELL); }; \
done
@if gcc-bootstrap
# Provide a GCC build when we're building target libraries. This does
# not work as a dependency, just as the minimum necessary to avoid errors.
stage_last:
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble
# Same as unstage, but not phony and defaulting to stage1-start. We place
@if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
.PHONY: restrap
-restrap:
+restrap::
@: $(MAKE); $(stage)
- rm -rf stage1-$(TARGET_SUBDIR) [+ FOR bootstrap-stage +][+ IF prev
- +]stage[+id+]-* [+ ENDIF prev +][+ ENDFOR bootstrap-stage +]
- $(MAKE) $(RECURSE_FLAGS_TO_PASS) all
+ rm -rf stage1-$(TARGET_SUBDIR)[+ FOR bootstrap-stage +][+ IF prev
+ +] stage[+id+]-*[+ ENDIF prev +][+ ENDFOR bootstrap-stage +]
+restrap:: all
@endif gcc-bootstrap
# --------------------------------------
ENDIF bootstrap +][+ ENDFOR target_modules +]
@endif gcc-bootstrap
-@if gcc-no-bootstrap[+ FOR target_modules +][+ IF bootstrap
- +][+ ELSE +]
+@if gcc-no-bootstrap[+ FOR target_modules +]
configure-target-[+module+]: maybe-all-gcc[+
- ENDIF bootstrap +][+ ENDFOR target_modules +]
+ ENDFOR target_modules +]
@endif gcc-no-bootstrap
-[+ FOR lang_env_dependencies +]
-configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss
-[+ IF cxx +]configure-target-[+module+]: maybe-all-target-libstdc++-v3
-[+ ENDIF cxx +][+ ENDFOR lang_env_dependencies +]
-
# There are two types of dependencies here: 'hard' dependencies, where one
# module simply won't build without the other; and 'soft' dependencies, where
# if the depended-on module is missing, the depending module will do without
[+ ;; These Scheme functions build the bulk of the dependencies.
;; dep-target builds a string like "maybe-all-MODULE_KIND-gcc",
- ;; where "maybe-" is only included if HARD is true, and all-gcc
+ ;; where "maybe-" is only included if HARD is not true, and all-gcc
;; is taken from VAR-NAME.
(define dep-target (lambda (module-kind var-name hard)
(string-append
+][+ FOR bootstrap_stage +]
[+ (make-dep (dep-stage) "") +][+
ENDFOR bootstrap_stage +]
-all-prebootstrap: [+ (dep-target "" "on" (exist? "hard")) +]
[+ == "bootstrap"
+][+ FOR bootstrap_stage +]
[+ (make-dep (dep-stage) (dep-stage)) +][+
[+ ESAC +][+
ENDFOR dependencies +]
-# Non-toplevel bootstrap rules must depend on several packages, to be built
-# before gcc. Another wart that will go away, hopefully soon.
-@if gcc-no-bootstrap
-[+ FOR host_modules +][+
- IF (and (not (= (get "module") "gcc"))
- (hash-ref boot-modules (get "module"))) +]
-all-prebootstrap: maybe-all-[+module+][+
- ENDIF +][+
-ENDFOR host_modules +]
+# Dependencies for target modules on other target modules are
+# described by lang_env_dependencies; the defaults apply to anything
+# not mentioned there.
+[+
+ ;; Predicate for whether LANG was specified in lang_env_dependencies.
+ (define lang-dep (lambda (lang)
+ (hash-ref lang-env-deps (string-append (get "module") "-" lang))))
+
+ ;; Build the hash table we will need.
+ (define lang-env-deps (make-hash-table 7))
++][+ FOR lang_env_dependencies +][+
+ (if (exist? "cxx")
+ (hash-create-handle! lang-env-deps
+ (string-append (get "module") "-" "cxx") #t))
+
+ (if (exist? "no_c")
+ (hash-create-handle! lang-env-deps
+ (string-append (get "module") "-" "no_c") #t))
+
+ (if (exist? "no_gcc")
+ (hash-create-handle! lang-env-deps
+ (string-append (get "module") "-" "no_gcc") #t))
+ "" +][+ ENDFOR lang_env_dependencies +]
+
+@if gcc-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc"))
+ +][+ IF bootstrap +][+ FOR bootstrap_stage +]
+configure-stage[+id+]-target-[+module+]: maybe-all-stage[+id+]-target-libgcc[+
+ ENDFOR +][+ ENDIF bootstrap +][+ ENDIF +][+ ENDFOR target_modules +]
+@endif gcc-bootstrap
+
+@if gcc-no-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc")) +]
+configure-target-[+module+]: maybe-all-target-libgcc[+
+ ENDIF +][+ ENDFOR target_modules +]
@endif gcc-no-bootstrap
+[+ FOR target_modules +][+ IF (not (lang-dep "no_c")) +]
+configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss[+
+ ENDIF +][+ IF (lang-dep "cxx") +]
+configure-target-[+module+]: maybe-all-target-libstdc++-v3[+
+ ENDIF +]
+[+ ENDFOR target_modules +]
+
CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@
GDB_TK = @GDB_TK@
INSTALL_GDB_TK = @INSTALL_GDB_TK@
# Rebuilding configure.
AUTOCONF = autoconf
-$(srcdir)/configure: @MAINT@ $(srcdir)/configure.in $(srcdir)/config/acx.m4
+$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \
+ $(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4 \
+ $(srcdir)/config/elf.m4 $(srcdir)/config/isl.m4 \
+ $(srcdir)/libtool.m4 $(srcdir)/ltoptions.m4 $(srcdir)/ltsugar.m4 \
+ $(srcdir)/ltversion.m4 $(srcdir)/lt~obsolete.m4
cd $(srcdir) && $(AUTOCONF)
# ------------------------------