Makefile.tpl 67.4 KB
Newer Older
Bruce Korb committed
1
[+ AutoGen5 template -*- Mode: Makefile -*-
2 3 4 5 6 7 8
in
+]

# Makefile.in is generated from Makefile.tpl by 'autogen Makefile.def'.
#
# Makefile for directory with subdirs to build.
#   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
9
#   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
10
#   Free Software Foundation
11 12 13
#
# 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
14
# the Free Software Foundation; either version 3 of the License, or
15 16 17 18 19 20 21 22
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
23 24
# along with this program; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.
25 26
#

27 28 29 30 31 32 33 34
# 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

35 36 37
# -------------------------------
# Standard Autoconf-set variables
# -------------------------------
38 39
VPATH=@srcdir@

40
build_alias=@build_noncanonical@
Paolo Bonzini committed
41 42
build_vendor=@build_vendor@
build_os=@build_os@
43
build=@build@
44
host_alias=@host_noncanonical@
Paolo Bonzini committed
45 46
host_vendor=@host_vendor@
host_os=@host_os@
47
host=@host@
48
target_alias=@target_noncanonical@
Paolo Bonzini committed
49 50
target_vendor=@target_vendor@
target_os=@target_os@
51
target=@target@
52

53
program_transform_name = @program_transform_name@
54 55 56 57

prefix = @prefix@
exec_prefix = @exec_prefix@

58 59
srcdir = @srcdir@

60 61 62 63 64 65 66 67 68 69 70
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
includedir = @includedir@
oldincludedir = @oldincludedir@
infodir = @infodir@
71 72
datarootdir = @datarootdir@
docdir = @docdir@
73
pdfdir = @pdfdir@
74
htmldir = @htmldir@
75
mandir = @mandir@
76 77 78 79 80 81 82 83 84 85
man1dir = $(mandir)/man1
man2dir = $(mandir)/man2
man3dir = $(mandir)/man3
man4dir = $(mandir)/man4
man5dir = $(mandir)/man5
man6dir = $(mandir)/man6
man7dir = $(mandir)/man7
man8dir = $(mandir)/man8
man9dir = $(mandir)/man9

86 87 88 89
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_DATA = @INSTALL_DATA@
90 91
LN = @LN@
LN_S = @LN_S@
92 93 94
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
95

96 97 98
# -------------------------------------------------
# Miscellaneous non-standard autoconf-set variables
# -------------------------------------------------
99

100 101
# The gcc driver likes to know the arguments it was configured with.
TOPLEVEL_CONFIGURE_ARGUMENTS=@TOPLEVEL_CONFIGURE_ARGUMENTS@
102

103 104
tooldir = @tooldir@
build_tooldir = @build_tooldir@
105

106 107 108
# This is the name of the environment variable used for the path to
# the libraries.
RPATH_ENVVAR = @RPATH_ENVVAR@
109

110 111 112 113 114
# 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@

115 116 117 118
# 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.
119
BUILD_CONFIGARGS = @build_configargs@ --with-build-subdir="$(BUILD_SUBDIR)"
120

121 122 123 124 125 126 127 128 129 130 131 132 133
# 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@

134 135 136 137 138 139 140 141 142 143
# 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
# re-runs configure.
BASE_EXPORTS = \
	FLEX="$(FLEX)"; export FLEX; \
	LEX="$(LEX)"; export LEX; \
	BISON="$(BISON)"; export BISON; \
	YACC="$(YACC)"; export YACC; \
	M4="$(M4)"; export M4; \
144
	SED="$(SED)"; export SED; \
145
	AWK="$(AWK)"; export AWK; \
146 147
	MAKEINFO="$(MAKEINFO)"; export MAKEINFO;

148
# This is the list of variables to export in the environment when
149
# configuring subdirectories for the build system.
150
BUILD_EXPORTS = \
151
	$(BASE_EXPORTS) \
152 153 154 155 156 157 158 159 160
	AR="$(AR_FOR_BUILD)"; export AR; \
	AS="$(AS_FOR_BUILD)"; export AS; \
	CC="$(CC_FOR_BUILD)"; export CC; \
	CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
	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; \
161 162
	GOC="$(GOC_FOR_BUILD)"; export GOC; \
	GOCFLAGS="$(GOCFLAGS_FOR_BUILD)"; export GOCFLAGS; \
163 164 165 166 167
	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; \
168
	WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
169
	WINDMC="$(WINDMC_FOR_BUILD)"; export WINDMC;
170

171
# These variables must be set on the make command line for directories
172
# built for the build system to override those in BASE_FLAGS_TO_PASS.
173 174 175 176
EXTRA_BUILD_FLAGS = \
	CFLAGS="$(CFLAGS_FOR_BUILD)" \
	LDFLAGS="$(LDFLAGS_FOR_BUILD)"

177 178
# This is the list of directories to built for the host system.
SUBDIRS = @configdirs@
179
TARGET_CONFIGDIRS = @target_configdirs@
180 181 182
# This is set by the configure script to the arguments to use when configuring
# directories built for the host system.
HOST_CONFIGARGS = @host_configargs@
183 184 185
# Host programs are put under this directory, which is . except if building
# with srcdir=..
HOST_SUBDIR = @host_subdir@
186
# This is the list of variables to export in the environment when
187 188
# configuring subdirectories for the host system.  We need to pass
# some to the GCC configure because of its hybrid host/target nature.
189
HOST_EXPORTS = \
190
	$(BASE_EXPORTS) \
191
	CC="$(CC)"; export CC; \
192
	ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \
193 194 195 196
	CFLAGS="$(CFLAGS)"; export CFLAGS; \
	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
	CXX="$(CXX)"; export CXX; \
	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
197 198
	GCJ="$(GCJ)"; export GCJ; \
	GFORTRAN="$(GFORTRAN)"; export GFORTRAN; \
199
	GOC="$(GOC)"; export GOC; \
200 201 202 203 204
	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; \
205
	LDFLAGS="$(STAGE1_LDFLAGS) $(LDFLAGS)"; export LDFLAGS; \
206 207 208
	NM="$(NM)"; export NM; \
	RANLIB="$(RANLIB)"; export RANLIB; \
	WINDRES="$(WINDRES)"; export WINDRES; \
209
	WINDMC="$(WINDMC)"; export WINDMC; \
210
	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
211
	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
212
	READELF="$(READELF)"; export READELF; \
213 214 215 216 217 218
	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; \
Andrew Pinski committed
219
	OBJCOPY_FOR_TARGET="$(OBJCOPY_FOR_TARGET)"; export OBJCOPY_FOR_TARGET; \
220
	RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)"; export RANLIB_FOR_TARGET; \
221
	READELF_FOR_TARGET="$(READELF_FOR_TARGET)"; export READELF_FOR_TARGET; \
222
	TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
223
	HOST_LIBS="$(STAGE1_LIBS)"; export HOST_LIBS; \
224
	GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \
225
	GMPINC="$(HOST_GMPINC)"; export GMPINC; \
226
	ISLLIBS="$(HOST_ISLLIBS)"; export ISLLIBS; \
227
	ISLINC="$(HOST_ISLINC)"; export ISLINC; \
228 229
	LIBELFLIBS="$(HOST_LIBELFLIBS)" ; export LIBELFLIBS; \
	LIBELFINC="$(HOST_LIBELFINC)" ; export LIBELFINC; \
230 231 232
@if gcc-bootstrap
	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
@endif gcc-bootstrap
233
	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
234

235 236 237 238 239 240
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 = \
241
	CXX="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/xg++$(exeext) \
242
	  -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ -nostdinc++ \
243
	  -B$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \
244
	  -B$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs \
245 246 247
	  `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++ \
248 249 250
	  -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \
	  -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs"; \
	  export CXX; \
251 252 253
	CXX_FOR_BUILD="$$CXX"; export CXX_FOR_BUILD;
@endif target-libstdc++-v3-bootstrap

254
# Similar, for later GCC stages.
255
POSTSTAGE1_HOST_EXPORTS = \
256
	$(HOST_EXPORTS) \
257
	CC="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \
258 259 260
	  -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; \
261
	$(POSTSTAGE1_CXX_EXPORT) \
Andi Kleen committed
262
	$(LTO_EXPORTS) \
263 264 265
	GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \
	LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)"; export LDFLAGS; \
	HOST_LIBS="$(POSTSTAGE1_LIBS)"; export HOST_LIBS;
266 267 268 269 270

# Target libraries are put under this directory:
TARGET_SUBDIR = @target_subdir@
# This is set by the configure script to the arguments to use when configuring
# directories built for the target.
271
TARGET_CONFIGARGS = @target_configargs@ --with-target-subdir="$(TARGET_SUBDIR)"
272
# This is the list of variables to export in the environment when
273
# configuring subdirectories for the target system.
274
BASE_TARGET_EXPORTS = \
275
	$(BASE_EXPORTS) \
276
	AR="$(AR_FOR_TARGET)"; export AR; \
277
	AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
278 279
	CC="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \
	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
280
	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
281
	CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
282 283 284
	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
	GCJ="$(GCJ_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GCJ; \
	GFORTRAN="$(GFORTRAN_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GFORTRAN; \
285
	GOC="$(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GOC; \
286
	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
287
	LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \
288
	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
Geoffrey Keating committed
289
	LIPO="$(LIPO_FOR_TARGET)"; export LIPO; \
290
	NM="$(COMPILER_NM_FOR_TARGET)"; export NM; \
291
	OBJDUMP="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP; \
Andrew Pinski committed
292
	OBJCOPY="$(OBJCOPY_FOR_TARGET)"; export OBJCOPY; \
293
	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
294
	READELF="$(READELF_FOR_TARGET)"; export READELF; \
Geoffrey Keating committed
295
	STRIP="$(STRIP_FOR_TARGET)"; export STRIP; \
296
	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
297
	WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
298 299 300
@if gcc-bootstrap
	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
@endif gcc-bootstrap
301 302
	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
	TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS;
303 304 305 306

RAW_CXX_TARGET_EXPORTS = \
	$(BASE_TARGET_EXPORTS) \
	CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
307
	CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
308 309 310

NORMAL_TARGET_EXPORTS = \
	$(BASE_TARGET_EXPORTS) \
311
	CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
312

313 314 315 316
# Where to find GMP
HOST_GMPLIBS = @gmplibs@
HOST_GMPINC = @gmpinc@

317
# Where to find ISL
318
HOST_ISLLIBS = @isllibs@
319
HOST_ISLINC = @islinc@
320

321 322 323 324
# Where to find libelf
HOST_LIBELFLIBS = @libelflibs@
HOST_LIBELFINC = @libelfinc@

325 326
EXTRA_CONFIGARGS_LIBJAVA = @EXTRA_CONFIGARGS_LIBJAVA@

327 328 329 330
# ----------------------------------------------
# Programs producing files for the BUILD machine
# ----------------------------------------------

331
SHELL = @SHELL@
332 333 334 335 336

# pwd command to use.  Allow user to override default by setting PWDCMD in
# the environment to account for automounters.  The make variable must not
# be called PWDCMD, otherwise the value set here is passed to make
# subprocesses and overrides the setting from the user's environment.
337 338 339
# Don't use PWD since it is a common shell environment variable and we
# don't want to corrupt it.
PWD_COMMAND = $${PWDCMD-pwd}
340 341 342

# compilers to use to create programs which must be run in the build
# environment.
343 344
AR_FOR_BUILD = @AR_FOR_BUILD@
AS_FOR_BUILD = @AS_FOR_BUILD@
345
CC_FOR_BUILD = @CC_FOR_BUILD@
346
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
347 348 349 350 351
CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
CXX_FOR_BUILD = @CXX_FOR_BUILD@
DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
GCJ_FOR_BUILD = @GCJ_FOR_BUILD@
GFORTRAN_FOR_BUILD = @GFORTRAN_FOR_BUILD@
352
GOC_FOR_BUILD = @GOC_FOR_BUILD@
353 354 355 356 357 358
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@
359 360 361 362 363

# Special variables passed down in EXTRA_GCC_FLAGS.  They are defined
# here so that they can be overridden by Makefile fragments.
BUILD_PREFIX = @BUILD_PREFIX@
BUILD_PREFIX_1 = @BUILD_PREFIX_1@
364

365 366 367
# Flags to pass to stage2 and later makes.  They are defined
# here so that they can be overridden by Makefile fragments.
BOOT_CFLAGS= -g -O2
368
BOOT_LDFLAGS=
369
BOOT_ADAFLAGS= -gnatpg
370

371 372
AWK = @AWK@
SED = @SED@
373 374 375 376 377 378 379 380
BISON = @BISON@
YACC = @YACC@
FLEX = @FLEX@
LEX = @LEX@
M4 = @M4@
MAKEINFO = @MAKEINFO@
EXPECT = @EXPECT@
RUNTEST = @RUNTEST@
381 382 383 384

# 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.
385 386
# (Default to avoid splitting info files by setting the threshold high.)
MAKEINFOFLAGS = --split-size=5000000
387

388 389 390
# ---------------------------------------------
# Programs producing files for the HOST machine
# ---------------------------------------------
391

392 393 394 395 396 397 398
AS = @AS@
AR = @AR@
AR_FLAGS = rc
CC = @CC@
CXX = @CXX@
DLLTOOL = @DLLTOOL@
LD = @LD@
399 400
LIPO = @LIPO@
NM = @NM@
401
OBJDUMP = @OBJDUMP@
402
RANLIB = @RANLIB@
403
READELF = @READELF@
404
STRIP = @STRIP@
405
WINDRES = @WINDRES@
406
WINDMC = @WINDMC@
407

408 409 410
GNATBIND = @GNATBIND@
GNATMAKE = @GNATMAKE@

411
CFLAGS = @CFLAGS@
412
LDFLAGS = @LDFLAGS@
413 414 415
LIBCFLAGS = $(CFLAGS)
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
416
GOCFLAGS = $(CFLAGS)
417

418 419 420 421 422 423 424 425 426 427 428
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)
429 430 431 432 433
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
434
STAGE[+id+]_TFLAGS = $(STAGE_TFLAGS)
435
STAGE[+id+]_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS)
436 437
[+ ENDFOR bootstrap-stage +]

438 439 440 441 442 443
# 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).

444
STAGE1_CFLAGS = @stage1_cflags@
445 446
STAGE1_CHECKING = @stage1_checking@
STAGE1_LANGUAGES = @stage1_languages@
447 448 449 450 451 452
# * 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.
453
# * We also disable -Wformat, since older GCCs don't understand newer %s.
454
STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \
455 456
	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \
	  --disable-build-format-warnings
457

458 459
STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate
STAGEprofile_TFLAGS = $(STAGE2_TFLAGS)
460

461 462
STAGEfeedback_CFLAGS = $(STAGE3_CFLAGS) -fprofile-use
STAGEfeedback_TFLAGS = $(STAGE3_TFLAGS)
463

464 465 466
do-compare = @do_compare@
do-compare3 = $(do-compare)

467 468 469
# -----------------------------------------------
# Programs producing files for the TARGET machine
# -----------------------------------------------
470

471
AR_FOR_TARGET=@AR_FOR_TARGET@
472
AS_FOR_TARGET=@AS_FOR_TARGET@
473
CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@
474

475 476 477 478
# 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.
479 480 481 482 483
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@
GCJ_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCJ_FOR_TARGET@
GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) @GFORTRAN_FOR_TARGET@
484
GOC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GOC_FOR_TARGET@
485
DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
486 487
LD_FOR_TARGET=@LD_FOR_TARGET@

Geoffrey Keating committed
488
LIPO_FOR_TARGET=@LIPO_FOR_TARGET@
489
NM_FOR_TARGET=@NM_FOR_TARGET@
490
OBJDUMP_FOR_TARGET=@OBJDUMP_FOR_TARGET@
Andrew Pinski committed
491
OBJCOPY_FOR_TARGET=@OBJCOPY_FOR_TARGET@
492
RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
493
READELF_FOR_TARGET=@READELF_FOR_TARGET@
Geoffrey Keating committed
494
STRIP_FOR_TARGET=@STRIP_FOR_TARGET@
495
WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@
496
WINDMC_FOR_TARGET=@WINDMC_FOR_TARGET@
497

498 499 500 501
COMPILER_AS_FOR_TARGET=@COMPILER_AS_FOR_TARGET@
COMPILER_LD_FOR_TARGET=@COMPILER_LD_FOR_TARGET@
COMPILER_NM_FOR_TARGET=@COMPILER_NM_FOR_TARGET@

502 503 504
CFLAGS_FOR_TARGET = @CFLAGS_FOR_TARGET@
CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@

505 506
LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
507
LDFLAGS_FOR_TARGET = @LDFLAGS_FOR_TARGET@
508
GOCFLAGS_FOR_TARGET = -O2 -g
509

510 511 512 513 514 515
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)

516 517 518 519
# ------------------------------------
# Miscellaneous targets and flag lists
# ------------------------------------

520 521
# The first rule in the file had better be this one.  Don't put any above it.
# This lives here to allow makefile fragments to contain dependencies.
522
all:
523 524

#### host and target specific makefile fragments come in here.
525 526 527 528
@target_makefile_frag@
@alphaieee_frag@
@ospace_frag@
@host_makefile_frag@
529 530
###

531
# This is the list of directories that may be needed in RPATH_ENVVAR
532
# so that programs built for the target machine work.
533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550
TARGET_LIB_PATH = [+ FOR target_modules +][+
  IF lib_path +]$(TARGET_LIB_PATH_[+module+])[+ ENDIF lib_path +][+
  ENDFOR target_modules +]$(HOST_LIB_PATH_gcc)
[+ FOR target_modules +][+ IF lib_path +]
@if target-[+module+]
TARGET_LIB_PATH_[+module+] = $$r/$(TARGET_SUBDIR)/[+module+]/[+lib_path+]:
@endif target-[+module+]
[+ ENDIF lib_path +][+ ENDFOR target_modules +]


# This is the list of directories that may be needed in RPATH_ENVVAR
# so that programs built for the host machine work.
HOST_LIB_PATH = [+ FOR host_modules +][+
  IF lib_path +]$(HOST_LIB_PATH_[+module+])[+ ENDIF lib_path +][+
  ENDFOR host_modules +]

# Define HOST_LIB_PATH_gcc here, for the sake of TARGET_LIB_PATH, ouch
@if gcc
551
HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc$(GCC_SHLIB_SUBDIR):$$r/$(HOST_SUBDIR)/prev-gcc$(GCC_SHLIB_SUBDIR):
552 553 554 555 556 557 558 559 560 561
@endif gcc

[+ FOR host_modules +][+ IF lib_path +]
@if [+module+]
HOST_LIB_PATH_[+module+] = \
  $$r/$(HOST_SUBDIR)/[+module+]/[+lib_path+]:[+ IF bootstrap
  +]$$r/$(HOST_SUBDIR)/prev-[+module+]/[+lib_path+]:[+ ENDIF bootstrap +]
@endif [+module+]
[+ ENDIF lib_path +][+ ENDFOR host_modules +]

562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581
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

582
# Flags to pass down to all sub-makes.
583 584
BASE_FLAGS_TO_PASS =[+ FOR flags_to_pass +][+ IF optional +] \
	"`echo '[+flag+]=$([+flag+])' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"[+ ELSE optional +] \
585 586
	"[+flag+]=$([+flag+])"[+ ENDIF optional+][+ ENDFOR flags_to_pass +][+ FOR bootstrap-stage +] \
	"STAGE[+id+]_CFLAGS=$(STAGE[+id+]_CFLAGS)" \
587
	"STAGE[+id+]_CXXFLAGS=$(STAGE[+id+]_CXXFLAGS)" \
588
	"STAGE[+id+]_TFLAGS=$(STAGE[+id+]_TFLAGS)"[+ ENDFOR bootstrap-stage +] \
589
	$(CXX_FOR_TARGET_FLAG_TO_PASS) \
590
	"TFLAGS=$(TFLAGS)" \
591
	"CONFIG_SHELL=$(SHELL)" \
592
	"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" 
593

594 595
# We leave this in just in case, but it is not needed anymore.
RECURSE_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS)
596

597 598 599 600 601 602 603 604
# Flags to pass down to most sub-makes, in which we're building with
# the host environment.
EXTRA_HOST_FLAGS = \
	'AR=$(AR)' \
	'AS=$(AS)' \
	'CC=$(CC)' \
	'CXX=$(CXX)' \
	'DLLTOOL=$(DLLTOOL)' \
605 606
	'GCJ=$(GCJ)' \
	'GFORTRAN=$(GFORTRAN)' \
607
	'GOC=$(GOC)' \
608
	'LD=$(LD)' \
609
	'LIPO=$(LIPO)' \
610
	'NM=$(NM)' \
611
	'OBJDUMP=$(OBJDUMP)' \
612
	'RANLIB=$(RANLIB)' \
613
	'READELF=$(READELF)' \
614
	'STRIP=$(STRIP)' \
615 616
	'WINDRES=$(WINDRES)' \
	'WINDMC=$(WINDMC)'
617 618 619

FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)

620 621 622 623 624 625
# Flags to pass to stage1 or when not bootstrapping.

STAGE1_FLAGS_TO_PASS = \
	LDFLAGS="$${LDFLAGS}" \
	HOST_LIBS="$${HOST_LIBS}"

626 627 628
# Flags to pass to stage2 and later makes.

POSTSTAGE1_FLAGS_TO_PASS = \
629 630 631
	CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
	CXX="$${CXX}" CXX_FOR_BUILD="$${CXX_FOR_BUILD}" \
	GNATBIND="$${GNATBIND}" \
632 633
	LDFLAGS="$${LDFLAGS}" \
	HOST_LIBS="$${HOST_LIBS}" \
Andi Kleen committed
634
	$(LTO_FLAGS_TO_PASS) \
635 636
	"`echo 'ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"

637
# Flags to pass down to makes which are built with the target environment.
638 639
# 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
640 641
# *_CFLAGS_FOR_TARGET variables are not passed down and most often empty,
# so we expand them here.
642 643
EXTRA_TARGET_FLAGS = \
	'AR=$$(AR_FOR_TARGET)' \
644
	'AS=$(COMPILER_AS_FOR_TARGET)' \
645 646
	'CC=$$(CC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
	'CFLAGS=$$(CFLAGS_FOR_TARGET)' \
647 648 649
	'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)' \
650
	'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \
651
	'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \
652 653
	'GCJ=$$(GCJ_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
	'GFORTRAN=$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
654 655
	'GOC=$$(GOC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
	'GOCFLAGS=$$(GOCFLAGS_FOR_TARGET)' \
656
	'LD=$(COMPILER_LD_FOR_TARGET)' \
657
	'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
658 659
	'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
	'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \
660
	'NM=$(COMPILER_NM_FOR_TARGET)' \
661
	'OBJDUMP=$$(OBJDUMP_FOR_TARGET)' \
Andrew Pinski committed
662
	'OBJCOPY=$$(OBJCOPY_FOR_TARGET)' \
663
	'RANLIB=$$(RANLIB_FOR_TARGET)' \
664
	'READELF=$$(READELF_FOR_TARGET)' \
665
	'WINDRES=$$(WINDRES_FOR_TARGET)' \
666 667
	'WINDMC=$$(WINDMC_FOR_TARGET)' \
	'XGCC_FLAGS_FOR_TARGET=$(XGCC_FLAGS_FOR_TARGET)' \
668 669
	'STAGE1_LDFLAGS=$$(POSTSTAGE1_LDFLAGS)' \
	'STAGE1_LIBS=$$(POSTSTAGE1_LIBS)' \
670
	"TFLAGS=$$TFLAGS"
671 672 673 674 675 676 677

TARGET_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS)

# Flags to pass down to gcc.  gcc builds a library, libgcc.a, so it
# unfortunately needs the native compiler and the target ar and
# ranlib.
# If any variables are added here, they must be added to do-*, below.
678
# The BUILD_* variables are a special case, which are used for the gcc
679 680 681
# cross-building scheme.
EXTRA_GCC_FLAGS = \
	"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
682
	"`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
683
	"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
684

685
GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS)
686

687
@if gcc
688
BUILD_CONFIG = @BUILD_CONFIG@
689 690 691 692 693
ifneq ($(BUILD_CONFIG),)
include $(foreach CONFIG, $(BUILD_CONFIG), $(srcdir)/config/$(CONFIG).mk)
endif
@endif gcc

Nathanael Nerode committed
694
.PHONY: configure-host
695
configure-host: [+
Nathanael Nerode committed
696 697 698 699 700 701 702 703
  FOR host_modules +] \
    maybe-configure-[+module+][+
  ENDFOR host_modules +]
.PHONY: configure-target
configure-target: [+
  FOR target_modules +] \
    maybe-configure-target-[+module+][+
  ENDFOR target_modules +]
704

705 706
# The target built for a native non-bootstrap build.
.PHONY: all
707 708
all:
@if gcc-bootstrap
709
	[ -f stage_final ] || echo stage3 > stage_final
710 711
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
712
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble
713
@endif gcc-bootstrap
714
	@: $(MAKE); $(unstage)
715 716
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
717
@if gcc-bootstrap
718
	if [ -f stage_last ]; then \
719
	  TFLAGS="$(STAGE$(shell test ! -f stage_last || sed s,^stage,, stage_last)_TFLAGS)"; \
720
	  $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
721
	else \
722
@endif gcc-bootstrap
723 724 725
	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target \
@if gcc-bootstrap
	    ; \
726
	fi \
727
@endif gcc-bootstrap
728
	&& :
Nathanael Nerode committed
729

730
.PHONY: all-build
731 732 733
[+ FOR build_modules +]
all-build: maybe-all-build-[+module+][+ ENDFOR build_modules +]

Nathanael Nerode committed
734
.PHONY: all-host
735 736 737 738 739
[+ FOR host_modules +][+ IF bootstrap +]
@if [+module+]-no-bootstrap[+ ENDIF bootstrap +]
all-host: maybe-all-[+module+][+ IF bootstrap +]
@endif [+module+]-no-bootstrap[+ ENDIF bootstrap +][+ ENDFOR host_modules +]

Nathanael Nerode committed
740
.PHONY: all-target
741
[+ FOR target_modules +][+ IF bootstrap +]
742
@if target-[+module+]-no-bootstrap[+ ENDIF bootstrap +]
743
all-target: maybe-all-target-[+module+][+ IF bootstrap +]
744 745
@endif target-[+module+]-no-bootstrap[+
  ENDIF bootstrap +][+ ENDFOR target_modules +]
746 747 748 749 750

# 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
# dependency (below) of X upon do-X, a ``make X'' will also do this,
# but it may do additional work as well).
751
[+ FOR recursive_targets +]
752
.PHONY: do-[+make_target+]
753
do-[+make_target+]:
754
	@: $(MAKE); $(unstage)
755 756 757
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) [+make_target+]-host \
758 759
	  [+make_target+]-target

760 761

.PHONY: [+make_target+]-host
762 763
[+ FOR host_modules +]
[+make_target+]-host: maybe-[+make_target+]-[+module+][+ ENDFOR host_modules +]
764 765

.PHONY: [+make_target+]-target
766 767
[+ FOR target_modules +]
[+make_target+]-target: maybe-[+make_target+]-target-[+module+][+ ENDFOR target_modules +]
768 769
[+ ENDFOR recursive_targets +]

770 771
# Here are the targets which correspond to the do-X targets.

772 773
.PHONY: info installcheck dvi pdf html
.PHONY: install-info install-pdf install-html
774 775 776 777 778
.PHONY: clean distclean mostlyclean maintainer-clean realclean
.PHONY: local-clean local-distclean local-maintainer-clean
info: do-info
installcheck: do-installcheck
dvi: do-dvi
779
pdf: do-pdf
780
html: do-html
781

782 783 784
# Make sure makeinfo is built before we do a `make info', if we're
# in fact building texinfo.
do-info: maybe-all-texinfo
785 786

install-info: do-install-info dir.info
787
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
788
	if [ -f dir.info ] ; then \
789
	  $(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info ; \
790 791
	else true ; fi

792 793
install-pdf: do-install-pdf

794 795
install-html: do-install-html

796 797 798 799 800
local-clean:
	-rm -f *.a TEMP errs core *.o *~ \#* TAGS *.E *.log

local-distclean:
	-rm -f Makefile config.status config.cache mh-frag mt-frag
801
	-rm -f maybedep.tmp serdep.tmp
802 803 804
	-if [ "$(TARGET_SUBDIR)" != "." ]; then \
	  rm -rf $(TARGET_SUBDIR); \
	else true; fi
805
	-rm -rf $(BUILD_SUBDIR)
806 807 808
	-if [ "$(HOST_SUBDIR)" != "." ]; then \
	  rm -rf $(HOST_SUBDIR); \
	else true; fi
809 810 811 812 813
	-rm -f texinfo/po/Makefile texinfo/po/Makefile.in texinfo/info/Makefile
	-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
814
	-find . -name config.cache -exec rm -f {} \; \; 2>/dev/null
815 816 817 818 819 820 821 822 823 824 825 826 827 828 829

local-maintainer-clean:
	@echo "This command is intended for maintainers to use;"
	@echo "it deletes files that may require special tools to rebuild."

clean: do-clean local-clean
mostlyclean: do-mostlyclean local-clean
distclean: do-distclean local-clean local-distclean
maintainer-clean: local-maintainer-clean do-maintainer-clean local-clean 
maintainer-clean: local-distclean
realclean: maintainer-clean

# Check target.

.PHONY: check do-check
830
check: do-check
831

832
# Only include modules actually being configured and built.
833 834
.PHONY: check-host
check-host: [+
835 836
  FOR host_modules +] \
    maybe-check-[+module+][+
837 838 839 840
  ENDFOR host_modules +]

.PHONY: check-target
check-target: [+
841 842
  FOR target_modules +] \
    maybe-check-target-[+module+][+
843 844 845
  ENDFOR target_modules +]

do-check:
846
	@: $(MAKE); $(unstage)
847 848 849
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) check-host check-target
850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871

# Automated reporting of test results.

warning.log: build.log
	$(srcdir)/contrib/warn_summary build.log > $@

mail-report.log:
	if test x'$(BOOT_CFLAGS)' != x''; then \
	    BOOT_CFLAGS='$(BOOT_CFLAGS)'; export BOOT_CFLAGS; \
	fi; \
	$(srcdir)/contrib/test_summary -t >$@
	chmod +x $@
	echo If you really want to send e-mail, run ./$@ now

mail-report-with-warnings.log: warning.log
	if test x'$(BOOT_CFLAGS)' != x''; then \
	    BOOT_CFLAGS='$(BOOT_CFLAGS)'; export BOOT_CFLAGS; \
	fi; \
	$(srcdir)/contrib/test_summary -t -i warning.log >$@
	chmod +x $@
	echo If you really want to send e-mail, run ./$@ now

872 873 874 875 876 877 878 879 880 881 882 883
# Local Vim config

$(srcdir)/.local.vimrc:
	$(LN_S) $(srcdir)/contrib/vimrc $@

$(srcdir)/.lvimrc:
	$(LN_S) $(srcdir)/contrib/vimrc $@

vimrc: $(srcdir)/.local.vimrc $(srcdir)/.lvimrc

.PHONY: vimrc

884 885
# Installation targets.

886
.PHONY: install uninstall
887
install:
888
	@: $(MAKE); $(unstage)
889 890 891
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) installdirs install-host install-target
Nathanael Nerode committed
892

893 894
.PHONY: install-host-nogcc
install-host-nogcc: [+
895 896
  FOR host_modules +][+ IF (not (= (get "module") "gcc")) +] \
    maybe-install-[+module+][+ ENDIF +][+
897 898
  ENDFOR host_modules +]

Nathanael Nerode committed
899
.PHONY: install-host
900
install-host: [+
Nathanael Nerode committed
901 902 903
  FOR host_modules +] \
    maybe-install-[+module+][+
  ENDFOR host_modules +]
904

Nathanael Nerode committed
905 906 907 908 909
.PHONY: install-target
install-target: [+
  FOR target_modules +] \
    maybe-install-target-[+module+][+
  ENDFOR target_modules +]
910 911 912 913 914 915 916

uninstall:
	@echo "the uninstall target is not supported in this tree"

.PHONY: install.all
install.all: install-no-fixedincludes
	@if [ -f ./gcc/Makefile ] ; then \
917
		r=`${PWD_COMMAND}` ; export r ; \
918
		s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
919
		$(HOST_EXPORTS) \
920
		(cd ./gcc && \
921 922 923 924 925
		$(MAKE) $(FLAGS_TO_PASS) install-headers) ; \
	else \
		true ; \
	fi

926 927 928
# install-no-fixedincludes is used to allow the elaboration of binary packages
# suitable for distribution, where we cannot include the fixed system header
# files.
929
.PHONY: install-no-fixedincludes
930
install-no-fixedincludes: installdirs install-host-nogcc \
931
	install-target gcc-install-no-fixedincludes
932

933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952
.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 +]


953
### other supporting targets
954

955 956 957 958 959 960 961 962 963
MAKEDIRS= \
	$(DESTDIR)$(prefix) \
	$(DESTDIR)$(exec_prefix)
.PHONY: installdirs
installdirs: mkinstalldirs
	$(SHELL) $(srcdir)/mkinstalldirs $(MAKEDIRS)

dir.info: do-install-info
	if [ -f $(srcdir)/texinfo/gen-info-dir ] ; then \
964
	  $(srcdir)/texinfo/gen-info-dir $(DESTDIR)$(infodir) $(srcdir)/texinfo/dir.info-template > dir.info.new ; \
965 966
	  mv -f dir.info.new dir.info ; \
	else true ; \
967 968
	fi

969 970 971 972 973 974 975 976 977 978 979 980 981 982
dist:
	@echo "Building a full distribution of this tree isn't done"
	@echo "via 'make dist'.  Check out the etc/ subdirectory" 

etags tags: TAGS

# Right now this just builds TAGS in each subdirectory.  emacs19 has the
# ability to use several tags files at once, so there is probably no need
# to combine them into one big TAGS file (like CVS 1.3 does).  We could
# (if we felt like it) have this Makefile write a piece of elisp which
# the user could load to tell emacs19 where all the TAGS files we just
# built are.
TAGS: do-TAGS

983 984 985 986 987 988 989
# ------------------------------------
# Macros for configure and all targets
# ------------------------------------

[+ DEFINE configure +]
.PHONY: configure-[+prefix+][+module+] maybe-configure-[+prefix+][+module+]
maybe-configure-[+prefix+][+module+]:
990 991 992
@if gcc-bootstrap
configure-[+prefix+][+module+]: stage_current
@endif gcc-bootstrap
993 994
@if [+prefix+][+module+]
maybe-configure-[+prefix+][+module+]: configure-[+prefix+][+module+]
995
configure-[+prefix+][+module+]: [+ IF bootstrap +][+ ELSE +]
996 997
	@: $(MAKE); $(unstage)[+ ENDIF bootstrap +]
	@r=`${PWD_COMMAND}`; export r; \
998
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
999 1000
	[+ IF check_multilibs
	+]echo "Checking multilib configuration for [+module+]..."; \
1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011
	$(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; \
	  else \
	    rm -f [+subdir+]/[+module+]/Makefile; \
	    mv [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; \
	  fi; \
	else \
	  mv [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; \
1012 1013
	fi; \
	[+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
1014
	$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
1015
	[+exports+] [+extra_exports+] \
1016 1017
	echo Configuring in [+subdir+]/[+module+]; \
	cd "[+subdir+]/[+module+]" || exit 1; \
1018
	case $(srcdir) in \
1019
	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
1020
	  *) topdir=`echo [+subdir+]/[+module+]/ | \
1021
		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
1022
	esac; \
1023
	module_srcdir=[+? module_srcdir (get "module_srcdir") (get "module")+]; \
1024
	[+ IF no-config-site +]rm -f no-such-file || : ; \
1025 1026 1027
	CONFIG_SITE=no-such-file [+ ENDIF +]$(SHELL) \
	  $$s/$$module_srcdir/configure \
	  --srcdir=$${topdir}/$$module_srcdir \
Paolo Bonzini committed
1028
	  [+args+] --build=${build_alias} --host=[+host_alias+] \
1029
	  --target=[+target_alias+] [+extra_configure_flags+] \
1030
	  || exit 1
1031
@endif [+prefix+][+module+]
1032 1033 1034 1035 1036

[+ IF bootstrap +]
[+ FOR bootstrap_stage +]
.PHONY: configure-stage[+id+]-[+prefix+][+module+] maybe-configure-stage[+id+]-[+prefix+][+module+]
maybe-configure-stage[+id+]-[+prefix+][+module+]:
1037
@if [+prefix+][+module+]-bootstrap
1038
maybe-configure-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+]
1039
configure-stage[+id+]-[+prefix+][+module+]:
1040
	@[ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start
1041
	@$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+]
1042
	@r=`${PWD_COMMAND}`; export r; \
1043
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1044
	TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
1045 1046
	[+ IF check_multilibs
	+]echo "Checking multilib configuration for [+module+]..."; \
1047 1048 1049 1050 1051 1052 1053 1054 1055 1056
	$(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; \
	  else \
	    rm -f [+subdir+]/[+module+]/Makefile; \
	    mv [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; \
	  fi; \
	else \
	  mv [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; \
1057 1058
	fi; \
	[+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
1059
	[+exports+][+ IF prev +] \
1060 1061 1062 1063 1064
	[+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; \
1065
	CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"; export CXXFLAGS;[+ IF prev +] \
1066
	LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
1067 1068
	LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +]; export LIBCFLAGS;[+
  ENDIF prefix +] [+extra_exports+] \
1069
	echo Configuring stage [+id+] in [+subdir+]/[+module+] ; \
1070
	$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
1071 1072 1073 1074 1075 1076
	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; \
1077 1078 1079
	module_srcdir=[+? module_srcdir (get "module_srcdir") (get "module")+]; \
	$(SHELL) $$s/$$module_srcdir/configure \
	  --srcdir=$${topdir}/$$module_srcdir \
Paolo Bonzini committed
1080
	  [+args+] --build=${build_alias} --host=[+host_alias+] \
1081 1082
	  --target=[+target_alias+] \
	  [+ IF prev +] --with-build-libsubdir=$(HOST_SUBDIR) [+ ENDIF prev +] \
1083 1084
	  $(STAGE[+id+]_CONFIGURE_FLAGS)[+ IF extra_configure_flags +] \
	  [+extra_configure_flags+][+ ENDIF extra_configure_flags +]
1085
@endif [+prefix+][+module+]-bootstrap
1086 1087
[+ ENDFOR bootstrap_stage +]
[+ ENDIF bootstrap +]
1088 1089 1090 1091 1092
[+ ENDDEF +]

[+ DEFINE all +]
.PHONY: all-[+prefix+][+module+] maybe-all-[+prefix+][+module+]
maybe-all-[+prefix+][+module+]:
1093 1094 1095
@if gcc-bootstrap
all-[+prefix+][+module+]: stage_current
@endif gcc-bootstrap
1096 1097
@if [+prefix+][+module+]
TARGET-[+prefix+][+module+]=[+
Paolo Bonzini committed
1098
  IF all_target +][+all_target+][+ ELSE +]all[+ ENDIF all_target +]
1099
maybe-all-[+prefix+][+module+]: all-[+prefix+][+module+]
1100
all-[+prefix+][+module+]: configure-[+prefix+][+module+][+ IF bootstrap +][+ ELSE +]
1101 1102
	@: $(MAKE); $(unstage)[+ ENDIF bootstrap +]
	@r=`${PWD_COMMAND}`; export r; \
1103
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1104
	[+exports+] [+extra_exports+] \
1105
	(cd [+subdir+]/[+module+] && \
1106
	  $(MAKE) $(BASE_FLAGS_TO_PASS) [+args+] [+stage1_args+] [+extra_make_flags+] \
1107
		$(TARGET-[+prefix+][+module+]))
1108
@endif [+prefix+][+module+]
1109 1110 1111 1112 1113 1114 1115

[+ IF bootstrap +]
[+ FOR bootstrap_stage +]
.PHONY: all-stage[+id+]-[+prefix+][+module+] maybe-all-stage[+id+]-[+prefix+][+module+]
.PHONY: clean-stage[+id+]-[+prefix+][+module+] maybe-clean-stage[+id+]-[+prefix+][+module+]
maybe-all-stage[+id+]-[+prefix+][+module+]:
maybe-clean-stage[+id+]-[+prefix+][+module+]:
1116
@if [+prefix+][+module+]-bootstrap
1117 1118
maybe-all-stage[+id+]-[+prefix+][+module+]: all-stage[+id+]-[+prefix+][+module+]
all-stage[+id+]: all-stage[+id+]-[+prefix+][+module+]
1119
TARGET-stage[+id+]-[+prefix+][+module+] = $(TARGET-[+prefix+][+module+])
1120
all-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+]
1121
	@[ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start
1122 1123
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1124
	TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
1125
	[+exports+][+ IF prev +] \
1126
	[+poststage1_exports+][+ ENDIF prev +] [+extra_exports+] \
1127
	cd [+subdir+]/[+module+] && \
1128 1129 1130 1131 1132
	$(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)" \
1133
		CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"[+ IF prev +] \
1134 1135 1136 1137 1138
		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)" \
1139 1140
		[+args+] [+IF prev +][+poststage1_args+][+ ELSE prev +] \
		[+stage1_args+][+ ENDIF prev +] [+extra_make_flags+] \
1141
		TFLAGS="$(STAGE[+id+]_TFLAGS)" \
1142
		$(TARGET-stage[+id+]-[+prefix+][+module+])
1143 1144 1145 1146

maybe-clean-stage[+id+]-[+prefix+][+module+]: clean-stage[+id+]-[+prefix+][+module+]
clean-stage[+id+]: clean-stage[+id+]-[+prefix+][+module+]
clean-stage[+id+]-[+prefix+][+module+]:
1147 1148 1149 1150 1151 1152
	@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; \
1153
	cd [+subdir+]/[+module+] && \
1154 1155
	$(MAKE) [+args+] [+ IF prev +][+poststage1_args+][+ ELSE prev +] \
	[+stage1_args+][+ ENDIF prev +] [+extra_make_flags+] clean
1156
@endif [+prefix+][+module+]-bootstrap
1157 1158 1159

[+ ENDFOR bootstrap_stage +]
[+ ENDIF bootstrap +]
1160 1161 1162 1163 1164 1165 1166
[+ ENDDEF +]

# --------------------------------------
# Modules which run on the build machine
# --------------------------------------
[+ FOR build_modules +]
[+ configure prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)"
Paolo Bonzini committed
1167 1168
	     host_alias=(get "host" "${build_alias}")
	     target_alias=(get "target" "${target_alias}")
1169 1170
	     args="$(BUILD_CONFIGARGS)" no-config-site=true +]

1171 1172
[+ all prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)"
	     args="$(EXTRA_BUILD_FLAGS)" +]
1173
[+ ENDFOR build_module +]
1174 1175 1176 1177 1178

# --------------------------------------
# Modules which run on the host machine
# --------------------------------------
[+ FOR host_modules +]
1179 1180 1181
[+ configure prefix="" subdir="$(HOST_SUBDIR)"
	     exports="$(HOST_EXPORTS)"
	     poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
Paolo Bonzini committed
1182 1183
	     host_alias=(get "host" "${host_alias}")
	     target_alias=(get "target" "${target_alias}")
1184
	     args="$(HOST_CONFIGARGS)" +]
1185

1186 1187 1188
[+ all prefix="" subdir="$(HOST_SUBDIR)"
       exports="$(HOST_EXPORTS)"
       poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
1189
       args="$(EXTRA_HOST_FLAGS)"
1190
       stage1_args="$(STAGE1_FLAGS_TO_PASS)"
1191
       poststage1_args="$(POSTSTAGE1_FLAGS_TO_PASS)" +]
1192

1193 1194
.PHONY: check-[+module+] maybe-check-[+module+]
maybe-check-[+module+]:
1195 1196
@if [+module+]
maybe-check-[+module+]: check-[+module+]
1197 1198 1199 1200 1201
[+ IF no_check +]
check-[+module+]:
[+ ELIF no_check_cross +]
# This module is only tested in a native toolchain.
check-[+module+]:
1202
	@: $(MAKE); $(unstage)
1203
	@if [ '$(host)' = '$(target)' ] ; then \
1204 1205
	  r=`${PWD_COMMAND}`; export r; \
	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1206
	  $(HOST_EXPORTS) \
1207
	  (cd $(HOST_SUBDIR)/[+module+] && \
1208
	    $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check); \
1209 1210 1211
	fi
[+ ELSE check +]
check-[+module+]:
1212
	@: $(MAKE); $(unstage)
1213 1214
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1215
	$(HOST_EXPORTS) \
1216 1217
	(cd $(HOST_SUBDIR)/[+module+] && \
	  $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check)
1218
[+ ENDIF no_check +]
1219
@endif [+module+]
1220 1221 1222

.PHONY: install-[+module+] maybe-install-[+module+]
maybe-install-[+module+]:
1223 1224
@if [+module+]
maybe-install-[+module+]: install-[+module+]
1225
[+ IF no_install +]
1226 1227 1228
install-[+module+]:
[+ ELSE install +]
install-[+module+]: installdirs
1229
	@: $(MAKE); $(unstage)
1230 1231
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1232
	$(HOST_EXPORTS) \
1233
	(cd $(HOST_SUBDIR)/[+module+] && \
1234
	  $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] install)
1235
[+ ENDIF no_install +]
1236
@endif [+module+]
1237

1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254
.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+]

1255
# Other targets (info, dvi, pdf, etc.)
1256 1257 1258
[+ FOR recursive_targets +]
.PHONY: maybe-[+make_target+]-[+module+] [+make_target+]-[+module+]
maybe-[+make_target+]-[+module+]:
1259 1260
@if [+module+]
maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
1261 1262 1263 1264 1265 1266 1267 1268
[+ IF (match-value? = "missing" (get "make_target") ) +]
# [+module+] doesn't support [+make_target+].
[+make_target+]-[+module+]:
[+ ELSE +]
[+make_target+]-[+module+]: [+
  FOR depend +]\
    [+depend+]-[+module+] [+
  ENDFOR depend +]
1269
	@[+ IF bootstrap +][+ ELSE +]: $(MAKE); $(unstage)
1270
	@[+ ENDIF bootstrap +][ -f ./[+module+]/Makefile ] || exit 0; \
1271 1272
	r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1273
	$(HOST_EXPORTS) \
1274
	for flag in $(EXTRA_HOST_FLAGS) [+extra_make_flags+]; do \
1275 1276 1277
	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
	done; \
	echo "Doing [+make_target+] in [+module+]" ; \
1278
	(cd $(HOST_SUBDIR)/[+module+] && \
1279 1280 1281
	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
	          "RANLIB=$${RANLIB}" \
1282
	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
1283
	          [+make_target+]) \
1284 1285
	  || exit 1
[+ ENDIF +]
1286
@endif [+module+]
1287
[+ ENDFOR recursive_targets +]
1288 1289 1290 1291 1292 1293 1294
[+ ENDFOR host_modules +]

# ---------------------------------------
# Modules which run on the target machine
# ---------------------------------------
[+ FOR target_modules +]

1295 1296
[+ IF raw_cxx +]
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
1297
	     check_multilibs=true
1298
	     exports="$(RAW_CXX_TARGET_EXPORTS)"
Paolo Bonzini committed
1299 1300
	     host_alias=(get "host" "${target_alias}")
	     target_alias=(get "target" "${target_alias}")
1301 1302 1303 1304
	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]

[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
       exports="$(RAW_CXX_TARGET_EXPORTS)"
1305
       args="$(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'" +]
1306 1307
[+ ELSE +]
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
1308
	     check_multilibs=true
1309
	     exports="$(NORMAL_TARGET_EXPORTS)"
Paolo Bonzini committed
1310 1311
	     host_alias=(get "host" "${target_alias}")
	     target_alias=(get "target" "${target_alias}")
1312 1313 1314 1315
	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]

[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
       exports="$(NORMAL_TARGET_EXPORTS)"
1316
       args="$(EXTRA_TARGET_FLAGS)" +]
1317
[+ ENDIF +]
1318 1319 1320

.PHONY: check-target-[+module+] maybe-check-target-[+module+]
maybe-check-target-[+module+]:
1321 1322
@if target-[+module+]
maybe-check-target-[+module+]: check-target-[+module+]
1323 1324 1325 1326 1327
[+ IF no_check +]
# Dummy target for uncheckable module.
check-target-[+module+]:
[+ ELSE check +]
check-target-[+module+]:
1328
	@: $(MAKE); $(unstage)
1329
	@r=`${PWD_COMMAND}`; export r; \
1330
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
1331 1332 1333 1334 1335
IF raw_cxx +]
	$(RAW_CXX_TARGET_EXPORTS) \[+
ELSE normal_cxx +]
	$(NORMAL_TARGET_EXPORTS) \[+
ENDIF raw_cxx +]
1336 1337 1338 1339 1340
	(cd $(TARGET_SUBDIR)/[+module+] && \
	  $(MAKE) $(TARGET_FLAGS_TO_PASS) [+
	    IF raw_cxx 
	      +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+ 
	    ENDIF raw_cxx 
1341
	  +] [+extra_make_flags+] check)
1342
[+ ENDIF no_check +]
1343
@endif target-[+module+]
1344

1345 1346
.PHONY: install-target-[+module+] maybe-install-target-[+module+]
maybe-install-target-[+module+]:
1347 1348
@if target-[+module+]
maybe-install-target-[+module+]: install-target-[+module+]
1349
[+ IF no_install +]
1350 1351 1352 1353
# Dummy target for uninstallable.
install-target-[+module+]:
[+ ELSE install +]
install-target-[+module+]: installdirs
1354
	@: $(MAKE); $(unstage)
1355
	@r=`${PWD_COMMAND}`; export r; \
1356
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
1357 1358 1359 1360 1361
IF raw_cxx +]
	$(RAW_CXX_TARGET_EXPORTS) \[+
ELSE normal_cxx +]
	$(NORMAL_TARGET_EXPORTS) \[+
ENDIF raw_cxx +]
1362
	(cd $(TARGET_SUBDIR)/[+module+] && \
1363
	  $(MAKE) $(TARGET_FLAGS_TO_PASS) [+extra_make_flags+] install)
1364
[+ ENDIF no_install +]
1365
@endif target-[+module+]
1366

1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388
.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+]

1389
# Other targets (info, dvi, pdf, etc.)
1390 1391 1392
[+ FOR recursive_targets +]
.PHONY: maybe-[+make_target+]-target-[+module+] [+make_target+]-target-[+module+]
maybe-[+make_target+]-target-[+module+]:
1393 1394
@if target-[+module+]
maybe-[+make_target+]-target-[+module+]: [+make_target+]-target-[+module+]
1395 1396 1397 1398 1399 1400 1401 1402
[+ IF (match-value? = "missing" (get "make_target") ) +]
# [+module+] doesn't support [+make_target+].
[+make_target+]-target-[+module+]:
[+ ELSE +]
[+make_target+]-target-[+module+]: [+
  FOR depend +]\
    [+depend+]-target-[+module+] [+
  ENDFOR depend +]
1403
	@: $(MAKE); $(unstage)
1404 1405
	@[ -f $(TARGET_SUBDIR)/[+module+]/Makefile ] || exit 0 ; \
	r=`${PWD_COMMAND}`; export r; \
1406
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
1407 1408 1409 1410 1411
IF raw_cxx +]
	$(RAW_CXX_TARGET_EXPORTS) \[+
ELSE normal_cxx +]
	$(NORMAL_TARGET_EXPORTS) \[+
ENDIF raw_cxx +]
1412 1413 1414 1415 1416 1417 1418 1419
	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; \
	(cd $(TARGET_SUBDIR)/[+module+] && \
	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
	          "RANLIB=$${RANLIB}" \
1420
	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
1421
	          [+extra_make_flags+] [+make_target+]) \
1422 1423
	  || exit 1
[+ ENDIF +]
1424
@endif target-[+module+]
1425
[+ ENDFOR recursive_targets +]
1426
[+ ENDFOR target_modules +]
1427

1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441
@if target-libgomp
.PHONY: check-target-libgomp-c++
check-target-libgomp-c++:
	$(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) c++.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

1442 1443 1444
# ----------
# GCC module
# ----------
1445

1446
@if gcc-no-bootstrap
1447
.PHONY: cross
Paolo Bonzini committed
1448
cross: all-build all-gas all-ld
1449 1450
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1451
	$(HOST_EXPORTS) \
1452 1453
	echo "Building the C and C++ compiler"; \
	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) LANGUAGES="c c++"
1454 1455
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
1456
	echo "Building runtime libraries"; \
1457
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) LANGUAGES="c c++" all
1458
@endif gcc-no-bootstrap
1459

1460
@if gcc
1461 1462 1463 1464 1465 1466 1467
[+ 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+]);
1468
check-[+language+]: check-gcc-[+language+][+ FOR lib-check-target +] [+ lib-check-target +][+ ENDFOR lib-check-target +]
1469
[+ ENDFOR languages +]
1470

1471 1472 1473 1474
# 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:
1475
	@if [ -f ./gcc/Makefile ]; then \
1476
	  r=`${PWD_COMMAND}`; export r; \
1477
	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1478
	  $(HOST_EXPORTS) \
1479 1480
	  (cd ./gcc \
	   && $(MAKE) $(GCC_FLAGS_TO_PASS) install-no-fixedincludes); \
1481
	else true; fi
1482
@endif gcc
1483

1484 1485 1486 1487
# ---------------------
# GCC bootstrap support
# ---------------------

1488 1489 1490 1491
# We track the current stage (the one in 'gcc') in the stage_current file.
# stage_last instead tracks the stage that was built last.  These targets
# are dummy when toplevel bootstrap is not active.

1492
# While making host and target tools, symlinks to the final stage must be
1493 1494 1495 1496
# there, so $(unstage) should be run at various points.  To avoid excessive
# recursive invocations of make, we "inline" them using a variable.  These
# must be referenced as ": $(MAKE) ; $(unstage)" rather than "$(unstage)"
# to avoid warnings from the GNU Make job server.
1497 1498 1499

unstage = :
stage = :
1500
current_stage = ""
1501

1502
@if gcc-bootstrap
1503
unstage = if [ -f stage_last ]; then [ -f stage_current ] || $(MAKE) `cat stage_last`-start || exit 1; else :; fi
1504
stage = if [ -f stage_current ]; then $(MAKE) `cat stage_current`-end || exit 1; else :; fi
1505
current_stage = "`cat stage_current 2> /dev/null`"
1506 1507
@endif gcc-bootstrap

1508 1509
.PHONY: unstage stage
unstage:
1510
	@: $(MAKE); $(unstage)
1511
stage:
1512
	@: $(MAKE); $(stage)
1513

1514 1515 1516
# Disable commands for lean bootstrap.
LEAN = false

1517 1518 1519 1520 1521
# We name the build directories for the various stages "stage1-gcc",
# "stage2-gcc","stage3-gcc", etc.

# Since the 'compare' process will fail (on debugging information) if any
# directory names are different, we need to link the gcc directory for
1522
# the previous stage to a constant name ('prev-gcc'), and to make the name of
1523 1524 1525 1526 1527
# the build directories constant as well. For the latter, we use naked names
# like 'gcc', because the scripts in that directory assume it.  We use
# mv on platforms where symlinks to directories do not work or are not
# reliable.

1528 1529 1530
# 'touch' doesn't work right on some platforms.
STAMP = echo timestamp > 

1531 1532
# We only want to compare .o files, so set this!
objext = .o
1533

1534
[+ FOR bootstrap-stage +]
1535
.PHONY: stage[+id+]-start stage[+id+]-end
1536

1537
stage[+id+]-start::
1538
	@: $(MAKE); $(stage); \
1539
	echo stage[+id+] > stage_current ; \
1540
	echo stage[+id+] > stage_last; \
1541
	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)[+
1542
   FOR host_modules +][+ IF bootstrap +]
Paolo Bonzini committed
1543
@if [+ module +]
1544 1545
	@cd $(HOST_SUBDIR); [ -d stage[+id+]-[+module+] ] || \
	  mkdir stage[+id+]-[+module+]; \
1546 1547
	mv stage[+id+]-[+module+] [+module+] [+ IF prev +] ; \
	mv stage[+prev+]-[+module+] prev-[+module+] || test -f stage[+prev+]-lean [+ ENDIF prev +]
1548 1549 1550
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
	@[ -d stage[+id+]-$(TARGET_SUBDIR) ] || \
	  mkdir stage[+id+]-$(TARGET_SUBDIR); \
1551 1552
	mv stage[+id+]-$(TARGET_SUBDIR) $(TARGET_SUBDIR) [+ IF prev +] ; \
	mv stage[+prev+]-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stage[+prev+]-lean [+ ENDIF prev +]
1553

1554
stage[+id+]-end:: [+ FOR host_modules +][+ IF bootstrap +]
Paolo Bonzini committed
1555
@if [+ module +]
1556 1557 1558
	@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 +] ; \
1559 1560 1561
	fi
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
	@if test -d $(TARGET_SUBDIR) ; then \
1562 1563
	  mv $(TARGET_SUBDIR) stage[+id+]-$(TARGET_SUBDIR) [+ IF prev +] ; \
	  mv prev-$(TARGET_SUBDIR) stage[+prev+]-$(TARGET_SUBDIR) ; : [+ ENDIF prev +] ; \
1564
	fi
1565
	rm -f stage_current
1566

1567
# Bubble a bug fix through all the stages up to stage [+id+].  They are
1568
# remade, but not reconfigured.  The next stage (if any) will not be
1569
# reconfigured either.
1570
.PHONY: stage[+id+]-bubble
1571
stage[+id+]-bubble:: [+ IF prev +]stage[+prev+]-bubble[+ ENDIF +]
1572 1573 1574
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	if test -f stage[+id+]-lean [+
1575 1576 1577
	  IF prev +]|| test -f stage[+prev+]-lean [+ ENDIF prev +] ; then \
	  echo Skipping rebuild of stage[+id+] ; \
	else \
1578 1579 1580 1581 1582
	  $(MAKE) stage[+id+]-start; \[+IF lean +]
	  if $(LEAN); then \
	    rm -rf stage[+lean+]-* ; \
	    $(STAMP) stage[+lean+]-lean ; \
	  fi; \[+ ENDIF lean +]
1583
	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stage[+id+]; \
1584
	fi[+ IF compare-target +]
1585
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) [+compare-target+][+ ENDIF compare-target +]
Paolo Bonzini committed
1586

1587 1588
.PHONY: all-stage[+id+] clean-stage[+id+]
do-clean: clean-stage[+id+]
1589

Paolo Bonzini committed
1590 1591 1592
# FIXME: Will not need to be conditional when toplevel bootstrap is the
# only possibility, but now it conflicts with no-bootstrap rules
@if gcc-bootstrap
1593
[+ IF compare-target +]
1594
[+compare-target+]:
1595 1596 1597
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	if test -f stage[+prev+]-lean; then \
1598 1599 1600
	  echo Cannot compare object files as stage [+prev+] was deleted. ; \
	  exit 0 ; \
	fi; \
1601
	: $(MAKE); $(stage); \
1602
	rm -f .bad_compare ; \
1603
	echo Comparing stages [+prev+] and [+id+] ; \
1604 1605 1606
        sed=`echo stage[+id+] | sed 's,^stage,,;s,.,.,g'`; \
	files=`find stage[+id+]-* -name "*$(objext)" -print | \
		 sed -n s,^stage$$sed-,,p` ; \
1607
	for file in $${files} ; do \
1608 1609
	  f1=$$r/stage[+prev+]-$$file; f2=$$r/stage[+id+]-$$file; \
	  if test ! -f $$f1; then continue; fi; \
1610
	  $(do-[+compare-target+]) > /dev/null 2>&1; \
1611 1612
	  if test $$? -eq 1; then \
	    case $$file in \
1613
	      @compare_exclusions@) \
1614 1615 1616 1617 1618
	        echo warning: $$file differs ;; \
	      *) \
	        echo $$file differs >> .bad_compare ;; \
	    esac ; \
	  fi ; \
1619 1620 1621 1622 1623 1624
	done ; \
	if [ -f .bad_compare ]; then \
	  echo "Bootstrap comparison failure!"; \
	  cat .bad_compare; \
	  exit 1; \
	else \
1625
	  echo Comparison successful.; \
1626
	fi ; \
1627
	$(STAMP) [+compare-target+][+ IF prev +]
1628 1629 1630 1631
	if $(LEAN); then \
	  rm -rf stage[+prev+]-*; \
	  $(STAMP) stage[+prev+]-lean; \
	fi[+ ENDIF prev +]
1632 1633 1634
[+ ENDIF compare-target +]

[+ IF bootstrap-target +]
1635
.PHONY: [+bootstrap-target+] [+bootstrap-target+]-lean
1636 1637 1638 1639 1640
[+bootstrap-target+]:
	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
1641
	@: $(MAKE); $(unstage)
1642 1643
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1644
	TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
1645
	$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
1646 1647 1648 1649 1650 1651 1652 1653 1654

[+bootstrap-target+]-lean:
	echo stage[+id+] > stage_final
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) LEAN=: stage[+id+]-bubble
	@: $(MAKE); $(unstage)
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1655
	TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
1656
	$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
1657 1658
[+ ENDIF bootstrap-target +]

1659
# Rules to wipe a stage and all the following ones, also used for cleanstrap
1660
[+ IF prev +]distclean-stage[+prev+]:: distclean-stage[+id+] [+ ENDIF prev +]
1661
.PHONY: distclean-stage[+id+]
1662
distclean-stage[+id+]::
1663
	@: $(MAKE); $(stage)
1664
	@test "`cat stage_last`" != stage[+id+] || rm -f stage_last
1665
	rm -rf stage[+id+]-* [+
1666 1667 1668 1669
	  IF compare-target +][+compare-target+] [+ ENDIF compare-target +]

[+ IF cleanstrap-target +]
.PHONY: [+cleanstrap-target+]
1670 1671 1672 1673 1674 1675 1676 1677
[+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; \
1678
	TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
1679
	$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
1680
[+ ENDIF cleanstrap-target +]
Paolo Bonzini committed
1681
@endif gcc-bootstrap
1682 1683

[+ ENDFOR bootstrap-stage +]
1684

1685 1686
stageprofile-end::
	$(MAKE) distclean-stagefeedback
1687

1688
stagefeedback-start::
1689 1690
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1691 1692 1693 1694 1695 1696
	for i in prev-*; do \
	  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) ; } ; \
	done
1697

1698 1699
@if gcc-bootstrap
do-distclean: distclean-stage1
1700 1701 1702 1703

# 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:
1704 1705
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1706
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble
1707

1708 1709 1710 1711 1712
# Same as unstage, but not phony and defaulting to stage1-start.  We place
# it in the dependency so that for example `make -j3 all-gcc' works.
stage_current:
	@if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi

1713
.PHONY: restrap
1714
restrap::
1715
	@: $(MAKE); $(stage)
1716 1717
	rm -rf stage1-$(TARGET_SUBDIR)[+ FOR bootstrap-stage +][+ IF prev
	  +] stage[+id+]-*[+ ENDIF prev +][+ ENDFOR bootstrap-stage +]
1718
restrap:: all
1719
@endif gcc-bootstrap
1720

1721 1722 1723 1724
# --------------------------------------
# Dependencies between different modules
# --------------------------------------

1725
# Generic dependencies for target modules on host stuff, especially gcc
1726 1727 1728 1729 1730 1731 1732 1733
@if gcc-bootstrap[+ FOR target_modules +][+ IF bootstrap
  +][+ FOR bootstrap_stage +]
configure-stage[+id+]-target-[+module+]: maybe-all-stage[+id+]-gcc[+
  ENDFOR +][+ ELSE bootstrap +]
configure-target-[+module+]: stage_last[+
  ENDIF bootstrap +][+ ENDFOR target_modules +]
@endif gcc-bootstrap

1734
@if gcc-no-bootstrap[+ FOR target_modules +]
1735
configure-target-[+module+]: maybe-all-gcc[+
1736
  ENDFOR target_modules +]
1737 1738
@endif gcc-no-bootstrap

1739

1740 1741 1742 1743
# 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
# or find a substitute somewhere (perhaps installed).  Soft dependencies
1744
# are made here to depend on a 'maybe-' target.  If you're not sure,
1745 1746
# it's safer to use a soft dependency.

1747 1748
[+ ;; These Scheme functions build the bulk of the dependencies.
   ;; dep-target builds a string like "maybe-all-MODULE_KIND-gcc",
1749
   ;; where "maybe-" is only included if HARD is not true, and all-gcc
1750 1751 1752 1753 1754 1755 1756 1757 1758 1759
   ;; is taken from VAR-NAME.
   (define dep-target (lambda (module-kind var-name hard)
      (string-append
         (if hard "" "maybe-")
         (dep-subtarget var-name)
         module-kind
         (dep-module var-name)
      )))

   ;; make-dep builds a dependency from the MODULE and ON AutoGen vars.
Paolo Bonzini committed
1760
   (define make-dep (lambda (module-kind on-kind)
1761 1762
      (string-append
         (dep-target module-kind "module" #t) ": "
Paolo Bonzini committed
1763
         (dep-target on-kind "on" (exist? "hard")))))
1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786

   ;; dep-subtarget extracts everything up to the first dash in the given
   ;; AutoGen variable, for example it extracts "all-" out of "all-gcc".
   (define dep-subtarget (lambda (var-name)
      (substring (get var-name) 0 (+ 1 (string-index (get var-name) #\-)))))

   ;; dep-module extracts everything up to the first dash in the given
   ;; AutoGen variable, for example it extracts "gcc" out of "all-gcc".
   (define dep-module (lambda (var-name)
      (substring (get var-name) (+ 1 (string-index (get var-name) #\-)))))

   ;; dep-stage builds a string for the prefix of a bootstrap stage.
   (define dep-stage (lambda ()
      (string-append
	 "stage"
	 (get "id")
	 "-")))

   ;; dep-maybe is the same as the AutoGen expression "- hard 'maybe-'"
   ;; but is written in Scheme.
   (define dep-maybe (lambda ()
      (if (exist? "hard") "" "maybe-")))

1787 1788
   ;; dep-kind returns "normal" if the dependency is on an "install" target,
   ;; or if either module is not bootstrapped.  It returns "bootstrap" for
1789 1790
   ;; configure or build dependencies between bootstrapped modules; it returns
   ;; "prebootstrap" for configure or build dependencies of bootstrapped
Paolo Bonzini committed
1791
   ;; modules on a build module (e.g. all-gcc on all-build-bison).  All this
1792 1793
   ;; is only necessary for host modules.
   (define dep-kind (lambda ()
Paolo Bonzini committed
1794 1795 1796
      (if (and (hash-ref boot-modules (dep-module "module"))
	       (=* (dep-module "on") "build-"))
	  "prebootstrap"
1797

Paolo Bonzini committed
1798
	  (if (or (= (dep-subtarget "on") "install-")
1799 1800
		  (not (hash-ref boot-modules (dep-module "module")))
		  (not (hash-ref boot-modules (dep-module "on"))))
Paolo Bonzini committed
1801 1802
              "normal"
	      "bootstrap"))))
1803 1804 1805 1806 1807 1808 1809 1810 1811

   ;; We now build the hash table that is used by dep-kind.
   (define boot-modules (make-hash-table 113))
+]

[+ FOR host_modules +][+
   (if (exist? "bootstrap")
       (hash-create-handle! boot-modules (get "module") #t))
   "" +][+ ENDFOR host_modules +]
1812 1813 1814 1815
[+ FOR target_modules +][+
   (if (exist? "bootstrap")
       (hash-create-handle! boot-modules (string-append "target-" (get "module")) #t))
   "" +][+ ENDFOR target_modules +]
1816 1817 1818 1819 1820 1821

# With all the machinery above in place, it is pretty easy to generate
# dependencies.  Host dependencies are a bit more complex because we have
# to check for bootstrap/prebootstrap dependencies.  To resolve
# prebootstrap dependencies, prebootstrap modules are gathered in
# a hash table.
Paolo Bonzini committed
1822 1823 1824
[+ FOR dependencies +][+ (make-dep "" "") +]
[+ CASE (dep-kind) +]
[+ == "prebootstrap"
1825
     +][+ FOR bootstrap_stage +]
Paolo Bonzini committed
1826 1827 1828 1829 1830
[+ (make-dep (dep-stage) "") +][+
       ENDFOR bootstrap_stage +]
[+ == "bootstrap"
     +][+ FOR bootstrap_stage +]
[+ (make-dep (dep-stage) (dep-stage)) +][+
1831 1832 1833 1834
       ENDFOR bootstrap_stage +]
[+ ESAC +][+
ENDFOR dependencies +]

1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876
# 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 +]

1877
CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@
1878
GDB_TK = @GDB_TK@
1879 1880
INSTALL_GDB_TK = @INSTALL_GDB_TK@
configure-gdb: $(CONFIGURE_GDB_TK)
1881
all-gdb: $(gdbnlmrequirements) $(GDB_TK)
1882
install-gdb: $(INSTALL_GDB_TK)
1883

1884 1885 1886 1887
# Serialization dependencies.  Host configures don't work well in parallel to
# each other, due to contention over config.cache.  Target configures and 
# build configures are similar.
@serialization_dependencies@
1888

1889 1890 1891
# --------------------------------
# Regenerating top level configury
# --------------------------------
1892 1893

# Rebuilding Makefile.in, using autogen.
1894
AUTOGEN = autogen
1895
$(srcdir)/Makefile.in: @MAINT@ $(srcdir)/Makefile.tpl $(srcdir)/Makefile.def
1896
	cd $(srcdir) && $(AUTOGEN) Makefile.def
1897

1898
# Rebuilding Makefile.
1899 1900 1901
Makefile: $(srcdir)/Makefile.in config.status
	CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status

1902
config.status: configure
1903
	CONFIG_SHELL="$(SHELL)" $(SHELL) ./config.status --recheck
1904

1905
# Rebuilding configure.
1906
AUTOCONF = autoconf
1907 1908
$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \
	$(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4
1909
	cd $(srcdir) && $(AUTOCONF)
1910

1911 1912 1913 1914 1915 1916 1917 1918
# ------------------------------
# Special directives to GNU Make
# ------------------------------

# Don't pass command-line variables to submakes.
.NOEXPORT:
MAKEOVERRIDES=

1919
# end of Makefile.in