Makefile.tpl 58.9 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 Free Software Foundation
10 11 12 13 14 15 16 17 18 19 20 21 22
#
# 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
# (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
# along with this program; if not, write to the Free Software
23
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24 25
#

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

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

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

52
program_transform_name = @program_transform_name@
53 54 55 56

prefix = @prefix@
exec_prefix = @exec_prefix@

57 58
srcdir = @srcdir@

59 60 61 62 63 64 65 66 67 68 69
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
includedir = @includedir@
oldincludedir = @oldincludedir@
infodir = @infodir@
70 71
datarootdir = @datarootdir@
docdir = @docdir@
72
pdfdir = @pdfdir@
73
htmldir = @htmldir@
74
mandir = @mandir@
75 76 77 78 79 80 81 82 83 84
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

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

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

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

102 103
tooldir = @tooldir@
build_tooldir = @build_tooldir@
104

105
GDB_NLM_DEPS = 
106

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

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

116 117 118 119
# 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.
120
BUILD_CONFIGARGS = @build_configargs@ --with-build-subdir="$(BUILD_SUBDIR)"
121 122 123 124 125 126 127 128 129 130 131 132 133

# 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; \
	MAKEINFO="$(MAKEINFO)"; export MAKEINFO;

134
# This is the list of variables to export in the environment when
135
# configuring subdirectories for the build system.
136
BUILD_EXPORTS = \
137
	$(BASE_EXPORTS) \
138 139 140 141 142 143 144 145 146 147 148 149 150 151
	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; \
	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; \
152
	WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
153
	WINDMC="$(WINDMC_FOR_BUILD)"; export WINDMC;
154

155
# These variables must be set on the make command line for directories
156
# built for the build system to override those in BASE_FLAGS_TO_PASSS.
157 158 159 160
EXTRA_BUILD_FLAGS = \
	CFLAGS="$(CFLAGS_FOR_BUILD)" \
	LDFLAGS="$(LDFLAGS_FOR_BUILD)"

161 162 163 164 165
# This is the list of directories to built for the host system.
SUBDIRS = @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@
166 167 168
# Host programs are put under this directory, which is . except if building
# with srcdir=..
HOST_SUBDIR = @host_subdir@
169
# This is the list of variables to export in the environment when
170 171
# configuring subdirectories for the host system.  We need to pass
# some to the GCC configure because of its hybrid host/target nature.
172
HOST_EXPORTS = \
173
	$(BASE_EXPORTS) \
174
	CC="$(CC)"; export CC; \
175
	ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \
176 177 178 179 180 181 182 183 184 185 186 187 188
	CFLAGS="$(CFLAGS)"; export CFLAGS; \
	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
	CXX="$(CXX)"; export CXX; \
	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
	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; \
	NM="$(NM)"; export NM; \
	RANLIB="$(RANLIB)"; export RANLIB; \
	WINDRES="$(WINDRES)"; export WINDRES; \
189
	WINDMC="$(WINDMC)"; export WINDMC; \
190
	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
191
	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
192 193 194 195 196 197 198
	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; \
	RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)"; export RANLIB_FOR_TARGET; \
199 200
	TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
	GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \
201
	GMPINC="$(HOST_GMPINC)"; export GMPINC; \
202 203 204 205
	PPLLIBS="$(HOST_PPLLIBS)"; export PPLLIBS; \
	PPLINC="$(HOST_PPLINC)"; export PPLINC; \
	CLOOGLIBS="$(HOST_CLOOGLIBS)"; export CLOOGLIBS; \
	CLOOGINC="$(HOST_CLOOGINC)"; export CLOOGINC; \
206 207 208
@if gcc-bootstrap
	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
@endif gcc-bootstrap
209
	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
210 211

# Similar, for later GCC stages.
212
POSTSTAGE1_HOST_EXPORTS = \
213
	$(HOST_EXPORTS) \
214 215 216 217 218
	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/ \
219 220
	  -B$(build_tooldir)/bin/"; export CC_FOR_BUILD; \
	LDFLAGS="$(BOOT_LDFLAGS)"; export LDFLAGS;
221 222 223 224 225

# 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.
226
TARGET_CONFIGARGS = @target_configargs@ --with-target-subdir="$(TARGET_SUBDIR)"
227
# This is the list of variables to export in the environment when
228
# configuring subdirectories for the host system.
229
BASE_TARGET_EXPORTS = \
230
	$(BASE_EXPORTS) \
231
	AR="$(AR_FOR_TARGET)"; export AR; \
232
	AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
233
	CC="$(CC_FOR_TARGET)"; export CC; \
234
	CFLAGS="$(CFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CFLAGS; \
235
	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
236
	CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
237
	CXXFLAGS="$(CXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CXXFLAGS; \
238 239 240
	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
	GFORTRAN="$(GFORTRAN_FOR_TARGET)"; export GFORTRAN; \
	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
241
	LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \
242
	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
Geoffrey Keating committed
243
	LIPO="$(LIPO_FOR_TARGET)"; export LIPO; \
244
	NM="$(COMPILER_NM_FOR_TARGET)"; export NM; \
245
	OBJDUMP="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP; \
246
	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
Geoffrey Keating committed
247
	STRIP="$(STRIP_FOR_TARGET)"; export STRIP; \
248
	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
249
	WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
250
	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
251 252 253 254 255 256 257 258 259

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;

NORMAL_TARGET_EXPORTS = \
	$(BASE_TARGET_EXPORTS) \
	CXX="$(CXX_FOR_TARGET)"; export CXX;
260

261 262 263 264
# Where to find GMP
HOST_GMPLIBS = @gmplibs@
HOST_GMPINC = @gmpinc@

265 266 267 268 269 270 271 272
# Where to find PPL
HOST_PPLLIBS = @ppllibs@
HOST_PPLINC = @pplinc@

# Where to find CLOOG
HOST_CLOOGLIBS = @clooglibs@
HOST_CLOOGINC = @clooginc@

273 274 275 276 277 278 279 280 281 282
# ----------------------------------------------
# Programs producing files for the BUILD machine
# ----------------------------------------------

SHELL = @config_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
# be called PWDCMD, otherwise the value set here is passed to make
# subprocesses and overrides the setting from the user's environment.
283 284 285
# Don't use PWD since it is a common shell environment variable and we
# don't want to corrupt it.
PWD_COMMAND = $${PWDCMD-pwd}
286 287 288

# compilers to use to create programs which must be run in the build
# environment.
289 290
AR_FOR_BUILD = @AR_FOR_BUILD@
AS_FOR_BUILD = @AS_FOR_BUILD@
291
CC_FOR_BUILD = @CC_FOR_BUILD@
292
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
293 294 295 296 297 298 299 300 301 302 303
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@
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@
304 305 306 307 308

# 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@
309

310 311 312
# 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
313
BOOT_LDFLAGS=
314
BOOT_ADAFLAGS=-gnatpg -gnata
315

316 317 318 319 320 321 322 323
BISON = @BISON@
YACC = @YACC@
FLEX = @FLEX@
LEX = @LEX@
M4 = @M4@
MAKEINFO = @MAKEINFO@
EXPECT = @EXPECT@
RUNTEST = @RUNTEST@
324 325 326 327

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

331 332 333
# ---------------------------------------------
# Programs producing files for the HOST machine
# ---------------------------------------------
334

335 336 337 338 339 340 341
AS = @AS@
AR = @AR@
AR_FLAGS = rc
CC = @CC@
CXX = @CXX@
DLLTOOL = @DLLTOOL@
LD = @LD@
342 343
LIPO = @LIPO@
NM = @NM@
344
OBJDUMP = @OBJDUMP@
345
RANLIB = @RANLIB@
346
STRIP = @STRIP@
347
WINDRES = @WINDRES@
348
WINDMC = @WINDMC@
349

350 351 352
GNATBIND = @GNATBIND@
GNATMAKE = @GNATMAKE@

353
CFLAGS = @CFLAGS@
354
LDFLAGS = @LDFLAGS@
355 356 357
LIBCFLAGS = $(CFLAGS)
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
358

359 360 361 362 363 364 365 366 367
# 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_CHECKING=@stage1_checking@
STAGE1_LANGUAGES=@stage1_languages@

368
STAGE1_CFLAGS=@stage1_cflags@
369 370 371 372
STAGE2_CFLAGS=$(BOOT_CFLAGS)
STAGE3_CFLAGS=$(BOOT_CFLAGS)
STAGE4_CFLAGS=$(BOOT_CFLAGS)

373 374 375 376 377
STAGE1_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
STAGE2_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
STAGE3_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
STAGE4_LIBCFLAGS=$(CFLAGS_FOR_TARGET)

378 379 380 381
do-compare = @do_compare@
do-compare3 = $(do-compare)
do-compare-debug = $(SHELL) $(srcdir)/contrib/compare-debug $$f1 $$f2

382 383 384
# -----------------------------------------------
# Programs producing files for the TARGET machine
# -----------------------------------------------
385

386
FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
387

388
AR_FOR_TARGET=@AR_FOR_TARGET@
389
AS_FOR_TARGET=@AS_FOR_TARGET@
390 391
CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@ $(FLAGS_FOR_TARGET)

392 393 394 395
# 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.
396
GCC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCC_FOR_TARGET@ $(FLAGS_FOR_TARGET)
397 398 399 400
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)
401
DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
402 403
LD_FOR_TARGET=@LD_FOR_TARGET@

Geoffrey Keating committed
404
LIPO_FOR_TARGET=@LIPO_FOR_TARGET@
405
NM_FOR_TARGET=@NM_FOR_TARGET@
406
OBJDUMP_FOR_TARGET=@OBJDUMP_FOR_TARGET@
407
RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
Geoffrey Keating committed
408
STRIP_FOR_TARGET=@STRIP_FOR_TARGET@
409
WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@
410
WINDMC_FOR_TARGET=@WINDMC_FOR_TARGET@
411

412 413 414 415
COMPILER_AS_FOR_TARGET=@COMPILER_AS_FOR_TARGET@
COMPILER_LD_FOR_TARGET=@COMPILER_LD_FOR_TARGET@
COMPILER_NM_FOR_TARGET=@COMPILER_NM_FOR_TARGET@

416 417
CFLAGS_FOR_TARGET = @CFLAGS_FOR_TARGET@
CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@
418
SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
419
DEBUG_PREFIX_CFLAGS_FOR_TARGET = @DEBUG_PREFIX_CFLAGS_FOR_TARGET@
420

421 422
LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
423
LDFLAGS_FOR_TARGET = 
424 425 426 427 428

# ------------------------------------
# Miscellaneous targets and flag lists
# ------------------------------------

429 430
# 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.
431
all:
432 433

#### host and target specific makefile fragments come in here.
434 435 436 437
@target_makefile_frag@
@alphaieee_frag@
@ospace_frag@
@host_makefile_frag@
438 439
###

440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459
# This is the list of directories that may be needed in RPATH_ENVVAR
# so that prorgams 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)
[+ 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
460
HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc$(GCC_SHLIB_SUBDIR):$$r/$(HOST_SUBDIR)/prev-gcc$(GCC_SHLIB_SUBDIR):
461 462 463 464 465 466 467 468 469 470
@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 +]

471
# Flags to pass down to all sub-makes.
472 473 474
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 +] \
475
	"CONFIG_SHELL=$(SHELL)" \
476
	"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" 
477

478 479
# We leave this in just in case, but it is not needed anymore.
RECURSE_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS)
480

481 482 483 484 485 486 487 488 489
# 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)' \
	'LD=$(LD)' \
490
	'LIPO=$(LIPO)' \
491
	'NM=$(NM)' \
492
	'OBJDUMP=$(OBJDUMP)' \
493
	'RANLIB=$(RANLIB)' \
494
	'STRIP=$(STRIP)' \
495 496
	'WINDRES=$(WINDRES)' \
	'WINDMC=$(WINDMC)'
497 498 499 500 501 502 503 504 505 506 507 508 509 510 511

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)'

512 513 514 515
# Flags to pass to stage2 and later makes.

POSTSTAGE1_FLAGS_TO_PASS = \
	CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
516
	GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind" \
517 518 519
	LDFLAGS="$(BOOT_LDFLAGS)" \
	"`echo 'ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"

520
# Flags to pass down to makes which are built with the target environment.
521 522
# 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
523 524
# *_CFLAGS_FOR_TARGET variables are not passed down and most often empty,
# so we expand them here.
525 526
EXTRA_TARGET_FLAGS = \
	'AR=$$(AR_FOR_TARGET)' \
527
	'AS=$(COMPILER_AS_FOR_TARGET)' \
528
	'CC=$$(CC_FOR_TARGET)' \
529
	'CFLAGS=$$(CFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
530
	'CXX=$$(CXX_FOR_TARGET)' \
531
	'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
532
	'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \
533
	'LD=$(COMPILER_LD_FOR_TARGET)' \
534
	'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
535 536
	'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
	'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
537
	'NM=$(COMPILER_NM_FOR_TARGET)' \
538
	'OBJDUMP=$$(OBJDUMP_FOR_TARGET)' \
539
	'RANLIB=$$(RANLIB_FOR_TARGET)' \
540 541
	'WINDRES=$$(WINDRES_FOR_TARGET)' \
	'WINDMC=$$(WINDMC_FOR_TARGET)'
542 543 544 545 546 547 548

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.
549
# The BUILD_* variables are a special case, which are used for the gcc
550 551 552
# cross-building scheme.
EXTRA_GCC_FLAGS = \
	"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
553 554 555 556
	"`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=/'`" \
557
	"`echo 'LIBGCC2_INCLUDES=$(LIBGCC2_INCLUDES)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
558

559
GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS)
560

Nathanael Nerode committed
561
.PHONY: configure-host
562
configure-host: [+
Nathanael Nerode committed
563 564 565 566 567 568 569 570
  FOR host_modules +] \
    maybe-configure-[+module+][+
  ENDFOR host_modules +]
.PHONY: configure-target
configure-target: [+
  FOR target_modules +] \
    maybe-configure-target-[+module+][+
  ENDFOR target_modules +]
571

572 573
# The target built for a native non-bootstrap build.
.PHONY: all
574 575
all:
@if gcc-bootstrap
576
	[ -f stage_final ] || echo stage3 > stage_final
577 578
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
579
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble
580
@endif gcc-bootstrap
581
	@: $(MAKE); $(unstage)
582 583 584
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	if [ -f stage_last ]; then \
585
	  $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
586
	else \
587
	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target; \
588
	fi
Nathanael Nerode committed
589

590
.PHONY: all-build
591 592 593
[+ FOR build_modules +]
all-build: maybe-all-build-[+module+][+ ENDFOR build_modules +]

Nathanael Nerode committed
594
.PHONY: all-host
595 596 597 598 599
[+ 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
600
.PHONY: all-target
601
[+ FOR target_modules +][+ IF bootstrap +]
602
@if target-[+module+]-no-bootstrap[+ ENDIF bootstrap +]
603
all-target: maybe-all-target-[+module+][+ IF bootstrap +]
604 605
@endif target-[+module+]-no-bootstrap[+
  ENDIF bootstrap +][+ ENDFOR target_modules +]
606 607 608 609 610

# 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).
611
[+ FOR recursive_targets +]
612
.PHONY: do-[+make_target+]
613
do-[+make_target+]:
614
	@: $(MAKE); $(unstage)
615 616 617
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) [+make_target+]-host \
618 619
	  [+make_target+]-target

620 621

.PHONY: [+make_target+]-host
622 623
[+ FOR host_modules +]
[+make_target+]-host: maybe-[+make_target+]-[+module+][+ ENDFOR host_modules +]
624 625

.PHONY: [+make_target+]-target
626 627
[+ FOR target_modules +]
[+make_target+]-target: maybe-[+make_target+]-target-[+module+][+ ENDFOR target_modules +]
628 629
[+ ENDFOR recursive_targets +]

630 631
# Here are the targets which correspond to the do-X targets.

632 633
.PHONY: info installcheck dvi pdf html
.PHONY: install-info install-pdf install-html
634 635 636 637 638
.PHONY: clean distclean mostlyclean maintainer-clean realclean
.PHONY: local-clean local-distclean local-maintainer-clean
info: do-info
installcheck: do-installcheck
dvi: do-dvi
639
pdf: do-pdf
640
html: do-html
641

642 643 644
# Make sure makeinfo is built before we do a `make info', if we're
# in fact building texinfo.
do-info: maybe-all-texinfo
645 646

install-info: do-install-info dir.info
647
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
648
	if [ -f dir.info ] ; then \
649
	  $(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info ; \
650 651
	else true ; fi

652 653
install-pdf: do-install-pdf

654 655
install-html: do-install-html

656 657 658 659 660
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
661
	-rm -f maybedep.tmp serdep.tmp
662 663 664
	-if [ "$(TARGET_SUBDIR)" != "." ]; then \
	  rm -rf $(TARGET_SUBDIR); \
	else true; fi
665
	-rm -rf $(BUILD_SUBDIR)
666 667 668
	-if [ "$(HOST_SUBDIR)" != "." ]; then \
	  rm -rf $(HOST_SUBDIR); \
	else true; fi
669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688
	-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

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
689
check: do-check
690

691
# Only include modules actually being configured and built.
692 693
.PHONY: check-host
check-host: [+
694 695
  FOR host_modules +] \
    maybe-check-[+module+][+
696 697 698 699
  ENDFOR host_modules +]

.PHONY: check-target
check-target: [+
700 701
  FOR target_modules +] \
    maybe-check-target-[+module+][+
702 703 704
  ENDFOR target_modules +]

do-check:
705
	@: $(MAKE); $(unstage)
706 707 708
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) check-host check-target
709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732

# 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

# Installation targets.

733
.PHONY: install uninstall
734
install:
735
	@: $(MAKE); $(unstage)
736 737 738
	@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
739

740 741
.PHONY: install-host-nogcc
install-host-nogcc: [+
742 743
  FOR host_modules +][+ IF (not (= (get "module") "gcc")) +] \
    maybe-install-[+module+][+ ENDIF +][+
744 745
  ENDFOR host_modules +]

Nathanael Nerode committed
746
.PHONY: install-host
747
install-host: [+
Nathanael Nerode committed
748 749 750
  FOR host_modules +] \
    maybe-install-[+module+][+
  ENDFOR host_modules +]
751

Nathanael Nerode committed
752 753 754 755 756
.PHONY: install-target
install-target: [+
  FOR target_modules +] \
    maybe-install-target-[+module+][+
  ENDFOR target_modules +]
757 758 759 760 761 762 763

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

.PHONY: install.all
install.all: install-no-fixedincludes
	@if [ -f ./gcc/Makefile ] ; then \
764
		r=`${PWD_COMMAND}` ; export r ; \
765
		s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
766
		$(HOST_EXPORTS) \
767
		(cd ./gcc && \
768 769 770 771 772 773 774 775
		$(MAKE) $(FLAGS_TO_PASS) install-headers) ; \
	else \
		true ; \
	fi

# install-no-fixedincludes is used because Cygnus can not distribute
# the fixed header files.
.PHONY: install-no-fixedincludes
776
install-no-fixedincludes: installdirs install-host-nogcc \
Nathanael Nerode committed
777
	install-target gcc-no-fixedincludes
778

779
### other supporting targets
780

781 782 783 784 785 786 787 788 789
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 \
790
	  $(srcdir)/texinfo/gen-info-dir $(DESTDIR)$(infodir) $(srcdir)/texinfo/dir.info-template > dir.info.new ; \
791 792
	  mv -f dir.info.new dir.info ; \
	else true ; \
793 794
	fi

795 796 797 798 799 800 801 802 803 804 805 806 807 808
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

809 810 811 812 813 814 815
# ------------------------------------
# Macros for configure and all targets
# ------------------------------------

[+ DEFINE configure +]
.PHONY: configure-[+prefix+][+module+] maybe-configure-[+prefix+][+module+]
maybe-configure-[+prefix+][+module+]:
816 817 818
@if gcc-bootstrap
configure-[+prefix+][+module+]: stage_current
@endif gcc-bootstrap
819 820
@if [+prefix+][+module+]
maybe-configure-[+prefix+][+module+]: configure-[+prefix+][+module+]
821
configure-[+prefix+][+module+]: [+ IF bootstrap +][+ ELSE +]
822 823
	@: $(MAKE); $(unstage)[+ ENDIF bootstrap +]
	@r=`${PWD_COMMAND}`; export r; \
824
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
825 826
	[+ IF check_multilibs
	+]echo "Checking multilib configuration for [+module+]..."; \
827 828 829 830 831 832 833 834 835 836 837
	$(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; \
838 839
	fi; \
	[+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
840 841 842 843
	$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
	[+exports+] \
	echo Configuring in [+subdir+]/[+module+]; \
	cd "[+subdir+]/[+module+]" || exit 1; \
844
	case $(srcdir) in \
845
	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
846
	  *) topdir=`echo [+subdir+]/[+module+]/ | \
847
		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
848
	esac; \
849 850
	srcdiroption="--srcdir=$${topdir}/[+module+]"; \
	libsrcdir="$$s/[+module+]"; \
851 852
	[+ IF no-config-site +]rm -f no-such-file || : ; \
	CONFIG_SITE=no-such-file [+ ENDIF +]$(SHELL) $${libsrcdir}/configure \
Paolo Bonzini committed
853 854
	  [+args+] --build=${build_alias} --host=[+host_alias+] \
	  --target=[+target_alias+] $${srcdiroption} [+extra_configure_flags+] \
855
	  || exit 1
856
@endif [+prefix+][+module+]
857 858 859 860 861

[+ IF bootstrap +]
[+ FOR bootstrap_stage +]
.PHONY: configure-stage[+id+]-[+prefix+][+module+] maybe-configure-stage[+id+]-[+prefix+][+module+]
maybe-configure-stage[+id+]-[+prefix+][+module+]:
862
@if [+prefix+][+module+]-bootstrap
863
maybe-configure-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+]
864
configure-stage[+id+]-[+prefix+][+module+]:
865
	@[ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start
866
	@$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+]
867
	@r=`${PWD_COMMAND}`; export r; \
868
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
869 870
	[+ IF check_multilibs
	+]echo "Checking multilib configuration for [+module+]..."; \
871 872 873 874 875 876 877 878 879 880
	$(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; \
881 882
	fi; \
	[+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
883
	[+exports+][+ IF prev +] \
884 885 886
	[+poststage1_exports+][+ ENDIF prev +] [+ IF prefix +] \
	CFLAGS="[+stage_libcflags+] $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CFLAGS; \
	CXXFLAGS="[+stage_libcflags+] $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CXXFLAGS; [+ ELSE +] \
887
	CFLAGS="[+stage_cflags+]"; export CFLAGS; \
888
	CXXFLAGS="[+stage_cflags+]"; export CXXFLAGS; [+ ENDIF +] \
889
	echo Configuring stage [+id+] in [+subdir+]/[+module+] ; \
890
	$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
891 892 893 894 895 896 897 898 899
	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 \
Paolo Bonzini committed
900 901
	  [+args+] --build=${build_alias} --host=[+host_alias+] \
	  --target=[+target_alias+] $${srcdiroption} \
902
	  [+ IF prev +]--with-build-libsubdir=$(HOST_SUBDIR)[+ ENDIF prev +] \
903
	  [+stage_configure_flags+] [+extra_configure_flags+]
904
@endif [+prefix+][+module+]-bootstrap
905 906
[+ ENDFOR bootstrap_stage +]
[+ ENDIF bootstrap +]
907 908 909 910 911
[+ ENDDEF +]

[+ DEFINE all +]
.PHONY: all-[+prefix+][+module+] maybe-all-[+prefix+][+module+]
maybe-all-[+prefix+][+module+]:
912 913 914
@if gcc-bootstrap
all-[+prefix+][+module+]: stage_current
@endif gcc-bootstrap
915 916
@if [+prefix+][+module+]
TARGET-[+prefix+][+module+]=[+
Paolo Bonzini committed
917
  IF all_target +][+all_target+][+ ELSE +]all[+ ENDIF all_target +]
918
maybe-all-[+prefix+][+module+]: all-[+prefix+][+module+]
919
all-[+prefix+][+module+]: configure-[+prefix+][+module+][+ IF bootstrap +][+ ELSE +]
920 921
	@: $(MAKE); $(unstage)[+ ENDIF bootstrap +]
	@r=`${PWD_COMMAND}`; export r; \
922
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
923 924
	[+exports+] \
	(cd [+subdir+]/[+module+] && \
925 926
	  $(MAKE) $(BASE_FLAGS_TO_PASS) [+args+] [+extra_make_flags+] \
		$(TARGET-[+prefix+][+module+]))
927
@endif [+prefix+][+module+]
928 929 930 931 932 933 934

[+ 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+]:
935
@if [+prefix+][+module+]-bootstrap
936 937
maybe-all-stage[+id+]-[+prefix+][+module+]: all-stage[+id+]-[+prefix+][+module+]
all-stage[+id+]: all-stage[+id+]-[+prefix+][+module+]
938
TARGET-stage[+id+]-[+prefix+][+module+] = $(TARGET-[+prefix+][+module+])
939
all-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+]
940
	@[ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start
941 942 943 944 945
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	[+exports+][+ IF prev +] \
	[+poststage1_exports+][+ ENDIF prev +] \
	cd [+subdir+]/[+module+] && \
946 947 948 949 950
	$(MAKE) $(BASE_FLAGS_TO_PASS) \
		CFLAGS="[+stage_cflags+]" CXXFLAGS="[+stage_cflags+]" \
		LIBCFLAGS="[+stage_libcflags+]" \
		CFLAGS_FOR_TARGET="[+stage_libcflags+]" \
		CXXFLAGS_FOR_TARGET="[+stage_libcflags+]" [+args+] [+
951 952
		IF prev +][+poststage1_args+][+ ENDIF prev
		+] [+extra_make_flags+] \
953
		$(TARGET-stage[+id+]-[+prefix+][+module+])
954 955 956 957

maybe-clean-stage[+id+]-[+prefix+][+module+]: clean-stage[+id+]-[+prefix+][+module+]
clean-stage[+id+]: clean-stage[+id+]-[+prefix+][+module+]
clean-stage[+id+]-[+prefix+][+module+]:
958 959 960 961 962 963
	@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; \
964 965 966
	cd [+subdir+]/[+module+] && \
	$(MAKE) [+args+] [+ IF prev +] \
		[+poststage1_args+] [+ ENDIF prev +] \
967
		[+extra_make_flags+] clean
968
@endif [+prefix+][+module+]-bootstrap
969 970 971

[+ ENDFOR bootstrap_stage +]
[+ ENDIF bootstrap +]
972 973 974 975 976 977 978
[+ ENDDEF +]

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

983 984
[+ all prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)"
	     args="$(EXTRA_BUILD_FLAGS)" +]
985
[+ ENDFOR build_module +]
986 987 988 989 990

# --------------------------------------
# Modules which run on the host machine
# --------------------------------------
[+ FOR host_modules +]
991 992 993
[+ configure prefix="" subdir="$(HOST_SUBDIR)"
	     exports="$(HOST_EXPORTS)"
	     poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
Paolo Bonzini committed
994 995
	     host_alias=(get "host" "${host_alias}")
	     target_alias=(get "target" "${target_alias}")
996
	     args="$(HOST_CONFIGARGS)" +]
997

998 999 1000
[+ all prefix="" subdir="$(HOST_SUBDIR)"
       exports="$(HOST_EXPORTS)"
       poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
1001
       args="$(EXTRA_HOST_FLAGS)"
1002
       poststage1_args="$(POSTSTAGE1_FLAGS_TO_PASS)" +]
1003

1004 1005
.PHONY: check-[+module+] maybe-check-[+module+]
maybe-check-[+module+]:
1006 1007
@if [+module+]
maybe-check-[+module+]: check-[+module+]
1008 1009 1010 1011 1012
[+ IF no_check +]
check-[+module+]:
[+ ELIF no_check_cross +]
# This module is only tested in a native toolchain.
check-[+module+]:
1013
	@: $(MAKE); $(unstage)
1014
	@if [ '$(host)' = '$(target)' ] ; then \
1015 1016
	  r=`${PWD_COMMAND}`; export r; \
	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1017
	  $(HOST_EXPORTS) \
1018
	  (cd $(HOST_SUBDIR)/[+module+] && \
1019
	    $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check); \
1020 1021 1022
	fi
[+ ELSE check +]
check-[+module+]:
1023
	@: $(MAKE); $(unstage)
1024 1025
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1026
	$(HOST_EXPORTS) \
1027 1028
	(cd $(HOST_SUBDIR)/[+module+] && \
	  $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check)
1029
[+ ENDIF no_check +]
1030
@endif [+module+]
1031 1032 1033

.PHONY: install-[+module+] maybe-install-[+module+]
maybe-install-[+module+]:
1034 1035
@if [+module+]
maybe-install-[+module+]: install-[+module+]
1036
[+ IF no_install +]
1037 1038 1039
install-[+module+]:
[+ ELSE install +]
install-[+module+]: installdirs
1040
	@: $(MAKE); $(unstage)
1041 1042
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1043
	$(HOST_EXPORTS) \
1044
	(cd $(HOST_SUBDIR)/[+module+] && \
1045
	  $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] install)
1046
[+ ENDIF no_install +]
1047
@endif [+module+]
1048

1049
# Other targets (info, dvi, pdf, etc.)
1050 1051 1052
[+ FOR recursive_targets +]
.PHONY: maybe-[+make_target+]-[+module+] [+make_target+]-[+module+]
maybe-[+make_target+]-[+module+]:
1053 1054
@if [+module+]
maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
1055 1056 1057 1058 1059 1060 1061 1062
[+ 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 +]
1063
	@[+ IF bootstrap +][+ ELSE +]: $(MAKE); $(unstage)
1064
	@[+ ENDIF bootstrap +][ -f ./[+module+]/Makefile ] || exit 0; \
1065 1066
	r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1067
	$(HOST_EXPORTS) \
1068
	for flag in $(EXTRA_HOST_FLAGS) [+extra_make_flags+]; do \
1069 1070 1071
	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
	done; \
	echo "Doing [+make_target+] in [+module+]" ; \
1072
	(cd $(HOST_SUBDIR)/[+module+] && \
1073 1074 1075
	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
	          "RANLIB=$${RANLIB}" \
1076
	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
1077
	          [+make_target+]) \
1078 1079
	  || exit 1
[+ ENDIF +]
1080
@endif [+module+]
1081
[+ ENDFOR recursive_targets +]
1082 1083 1084 1085 1086 1087 1088
[+ ENDFOR host_modules +]

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

1089 1090
[+ IF raw_cxx +]
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
1091
	     check_multilibs=true
1092
	     exports="$(RAW_CXX_TARGET_EXPORTS)"
Paolo Bonzini committed
1093 1094
	     host_alias=(get "host" "${target_alias}")
	     target_alias=(get "target" "${target_alias}")
1095 1096 1097 1098
	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]

[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
       exports="$(RAW_CXX_TARGET_EXPORTS)"
1099
       args="$(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'" +]
1100 1101
[+ ELSE +]
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
1102
	     check_multilibs=true
1103
	     exports="$(NORMAL_TARGET_EXPORTS)"
Paolo Bonzini committed
1104 1105
	     host_alias=(get "host" "${target_alias}")
	     target_alias=(get "target" "${target_alias}")
1106 1107 1108 1109
	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]

[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
       exports="$(NORMAL_TARGET_EXPORTS)"
1110
       args="$(EXTRA_TARGET_FLAGS)" +]
1111
[+ ENDIF +]
1112 1113 1114

.PHONY: check-target-[+module+] maybe-check-target-[+module+]
maybe-check-target-[+module+]:
1115 1116
@if target-[+module+]
maybe-check-target-[+module+]: check-target-[+module+]
1117 1118 1119 1120 1121
[+ IF no_check +]
# Dummy target for uncheckable module.
check-target-[+module+]:
[+ ELSE check +]
check-target-[+module+]:
1122
	@: $(MAKE); $(unstage)
1123
	@r=`${PWD_COMMAND}`; export r; \
1124
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
1125 1126 1127 1128 1129
IF raw_cxx +]
	$(RAW_CXX_TARGET_EXPORTS) \[+
ELSE normal_cxx +]
	$(NORMAL_TARGET_EXPORTS) \[+
ENDIF raw_cxx +]
1130 1131 1132 1133 1134
	(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 
1135
	  +] [+extra_make_flags+] check)
1136
[+ ENDIF no_check +]
1137
@endif target-[+module+]
1138

1139 1140
.PHONY: install-target-[+module+] maybe-install-target-[+module+]
maybe-install-target-[+module+]:
1141 1142
@if target-[+module+]
maybe-install-target-[+module+]: install-target-[+module+]
1143
[+ IF no_install +]
1144 1145 1146 1147
# Dummy target for uninstallable.
install-target-[+module+]:
[+ ELSE install +]
install-target-[+module+]: installdirs
1148
	@: $(MAKE); $(unstage)
1149
	@r=`${PWD_COMMAND}`; export r; \
1150
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
1151 1152 1153 1154 1155
IF raw_cxx +]
	$(RAW_CXX_TARGET_EXPORTS) \[+
ELSE normal_cxx +]
	$(NORMAL_TARGET_EXPORTS) \[+
ENDIF raw_cxx +]
1156
	(cd $(TARGET_SUBDIR)/[+module+] && \
1157
	  $(MAKE) $(TARGET_FLAGS_TO_PASS) [+extra_make_flags+] install)
1158
[+ ENDIF no_install +]
1159
@endif target-[+module+]
1160

1161
# Other targets (info, dvi, pdf, etc.)
1162 1163 1164
[+ FOR recursive_targets +]
.PHONY: maybe-[+make_target+]-target-[+module+] [+make_target+]-target-[+module+]
maybe-[+make_target+]-target-[+module+]:
1165 1166
@if target-[+module+]
maybe-[+make_target+]-target-[+module+]: [+make_target+]-target-[+module+]
1167 1168 1169 1170 1171 1172 1173 1174
[+ 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 +]
1175
	@: $(MAKE); $(unstage)
1176 1177
	@[ -f $(TARGET_SUBDIR)/[+module+]/Makefile ] || exit 0 ; \
	r=`${PWD_COMMAND}`; export r; \
1178
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
1179 1180 1181 1182 1183
IF raw_cxx +]
	$(RAW_CXX_TARGET_EXPORTS) \[+
ELSE normal_cxx +]
	$(NORMAL_TARGET_EXPORTS) \[+
ENDIF raw_cxx +]
1184 1185 1186 1187 1188 1189 1190 1191
	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}" \
1192
	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
1193
	          [+extra_make_flags+] [+make_target+]) \
1194 1195
	  || exit 1
[+ ENDIF +]
1196
@endif target-[+module+]
1197
[+ ENDFOR recursive_targets +]
1198
[+ ENDFOR target_modules +]
1199

1200 1201 1202
# ----------
# GCC module
# ----------
1203

1204
@if gcc-no-bootstrap
1205
.PHONY: cross
Paolo Bonzini committed
1206
cross: all-build all-gas all-ld
1207 1208
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1209
	$(HOST_EXPORTS) \
1210 1211
	echo "Building the C and C++ compiler"; \
	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) LANGUAGES="c c++"
1212 1213
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
1214
	echo "Building runtime libraries"; \
1215
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) LANGUAGES="c c++" all
1216
@endif gcc-no-bootstrap
1217

1218
@if gcc
1219 1220
.PHONY: check-gcc-c++
check-gcc-c++:
1221
	@if [ -f ./gcc/Makefile ] ; then \
1222 1223
	  r=`${PWD_COMMAND}`; export r; \
	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1224
	  $(HOST_EXPORTS) \
1225
	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \
1226 1227
	else \
	  true; \
1228 1229 1230
	fi

.PHONY: check-c++
1231
check-c++: check-target-libstdc++-v3 check-gcc-c++
1232

1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244
# 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:
	@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; \
1245 1246
	  r=`${PWD_COMMAND}`; export r; \
	  s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
1247
	  $(HOST_EXPORTS) \
1248
	  (cd ./gcc && \
1249 1250 1251 1252
	   $(MAKE) $(GCC_FLAGS_TO_PASS) install); \
	  rm -rf gcc/include; \
	  mv gcc/tmp-include gcc/include 2>/dev/null; \
	else true; fi
1253
@endif gcc
1254

1255 1256 1257 1258
# ---------------------
# GCC bootstrap support
# ---------------------

1259 1260 1261 1262
# 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.

1263
# While making host and target tools, symlinks to the final stage must be
1264 1265 1266 1267
# 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.
1268 1269 1270

unstage = :
stage = :
1271
current_stage = ""
1272

1273
@if gcc-bootstrap
1274
unstage = if [ -f stage_last ]; then [ -f stage_current ] || $(MAKE) `cat stage_last`-start || exit 1; else :; fi
1275
stage = if [ -f stage_current ]; then $(MAKE) `cat stage_current`-end || exit 1; else :; fi
1276
current_stage = "`cat stage_current 2> /dev/null`"
1277 1278
@endif gcc-bootstrap

1279 1280
.PHONY: unstage stage
unstage:
1281
	@: $(MAKE); $(unstage)
1282
stage:
1283
	@: $(MAKE); $(stage)
1284

1285 1286 1287
# Disable commands for lean bootstrap.
LEAN = false

1288 1289 1290 1291 1292
# 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
1293
# the previous stage to a constant name ('prev-gcc'), and to make the name of
1294 1295 1296 1297 1298
# 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.

1299 1300 1301
# 'touch' doesn't work right on some platforms.
STAMP = echo timestamp > 

1302 1303
# We only want to compare .o files, so set this!
objext = .o
1304

1305
[+ FOR bootstrap-stage +]
1306
.PHONY: stage[+id+]-start stage[+id+]-end
1307

1308
stage[+id+]-start::
1309
	@: $(MAKE); $(stage); \
1310
	echo stage[+id+] > stage_current ; \
1311
	echo stage[+id+] > stage_last; \
1312
	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)[+
1313
   FOR host_modules +][+ IF bootstrap +]
Paolo Bonzini committed
1314
@if [+ module +]
1315 1316
	@cd $(HOST_SUBDIR); [ -d stage[+id+]-[+module+] ] || \
	  mkdir stage[+id+]-[+module+]; \
1317 1318
	mv stage[+id+]-[+module+] [+module+] [+ IF prev +] ; \
	mv stage[+prev+]-[+module+] prev-[+module+] || test -f stage[+prev+]-lean [+ ENDIF prev +]
1319 1320 1321
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
	@[ -d stage[+id+]-$(TARGET_SUBDIR) ] || \
	  mkdir stage[+id+]-$(TARGET_SUBDIR); \
1322 1323
	mv stage[+id+]-$(TARGET_SUBDIR) $(TARGET_SUBDIR) [+ IF prev +] ; \
	mv stage[+prev+]-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stage[+prev+]-lean [+ ENDIF prev +]
1324

1325
stage[+id+]-end:: [+ FOR host_modules +][+ IF bootstrap +]
Paolo Bonzini committed
1326
@if [+ module +]
1327 1328 1329
	@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 +] ; \
1330 1331 1332
	fi
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
	@if test -d $(TARGET_SUBDIR) ; then \
1333 1334
	  mv $(TARGET_SUBDIR) stage[+id+]-$(TARGET_SUBDIR) [+ IF prev +] ; \
	  mv prev-$(TARGET_SUBDIR) stage[+prev+]-$(TARGET_SUBDIR) ; : [+ ENDIF prev +] ; \
1335
	fi
1336
	rm -f stage_current
1337

1338
# Bubble a bug fix through all the stages up to stage [+id+].  They are
1339
# remade, but not reconfigured.  The next stage (if any) will not be
1340
# reconfigured either.
1341
.PHONY: stage[+id+]-bubble
1342
stage[+id+]-bubble:: [+ IF prev +]stage[+prev+]-bubble[+ ENDIF +]
1343 1344 1345
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	if test -f stage[+id+]-lean [+
1346 1347 1348
	  IF prev +]|| test -f stage[+prev+]-lean [+ ENDIF prev +] ; then \
	  echo Skipping rebuild of stage[+id+] ; \
	else \
1349 1350 1351 1352 1353
	  $(MAKE) stage[+id+]-start; \[+IF lean +]
	  if $(LEAN); then \
	    rm -rf stage[+lean+]-* ; \
	    $(STAMP) stage[+lean+]-lean ; \
	  fi; \[+ ENDIF lean +]
1354
	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stage[+id+]; \
1355
	fi[+ IF compare-target +]
1356
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) [+compare-target+][+ ENDIF compare-target +]
Paolo Bonzini committed
1357

1358 1359
.PHONY: all-stage[+id+] clean-stage[+id+]
do-clean: clean-stage[+id+]
1360

Paolo Bonzini committed
1361 1362 1363
# 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
1364
[+ IF compare-target +]
1365
[+compare-target+]:
1366 1367 1368
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	if test -f stage[+prev+]-lean; then \
1369 1370 1371
	  echo Cannot compare object files as stage [+prev+] was deleted. ; \
	  exit 0 ; \
	fi; \
1372
	: $(MAKE); $(stage); \
1373
	rm -f .bad_compare ; \
1374
	echo Comparing stages [+prev+] and [+id+] ; \
1375
	cd stage[+id+]-gcc; \
1376 1377 1378
	files=`find . -name "*$(objext)" -print` ; \
	cd .. ; \
	for file in $${files} ; do \
1379
	  f1=$$r/stage[+prev+]-gcc/$$file; f2=$$r/stage[+id+]-gcc/$$file; \
1380
	  $(do-[+compare-target+]) > /dev/null 2>&1; \
1381 1382 1383 1384 1385 1386 1387 1388
	  if test $$? -eq 1; then \
	    case $$file in \
	      ./cc*-checksum$(objext) | ./libgcc/* ) \
	        echo warning: $$file differs ;; \
	      *) \
	        echo $$file differs >> .bad_compare ;; \
	    esac ; \
	  fi ; \
1389 1390 1391 1392 1393 1394
	done ; \
	if [ -f .bad_compare ]; then \
	  echo "Bootstrap comparison failure!"; \
	  cat .bad_compare; \
	  exit 1; \
	else \
1395
	  echo Comparison successful.; \
1396
	fi ; \
1397
	$(STAMP) [+compare-target+][+ IF prev +]
1398 1399 1400 1401
	if $(LEAN); then \
	  rm -rf stage[+prev+]-*; \
	  $(STAMP) stage[+prev+]-lean; \
	fi[+ ENDIF prev +]
1402 1403 1404
[+ ENDIF compare-target +]

[+ IF bootstrap-target +]
1405
.PHONY: [+bootstrap-target+] [+bootstrap-target+]-lean
1406 1407 1408 1409 1410
[+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
1411
	@: $(MAKE); $(unstage)
1412 1413 1414
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
1415 1416 1417 1418 1419 1420 1421 1422 1423 1424

[+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; \
	$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
1425 1426
[+ ENDIF bootstrap-target +]

1427
# Rules to wipe a stage and all the following ones, also used for cleanstrap
1428
[+ IF prev +]distclean-stage[+prev+]:: distclean-stage[+id+] [+ ENDIF prev +]
1429
.PHONY: distclean-stage[+id+]
1430
distclean-stage[+id+]::
1431
	@: $(MAKE); $(stage)
1432
	@test "`cat stage_last`" != stage[+id+] || rm -f stage_last
1433
	rm -rf stage[+id+]-* [+
1434 1435 1436 1437
	  IF compare-target +][+compare-target+] [+ ENDIF compare-target +]

[+ IF cleanstrap-target +]
.PHONY: [+cleanstrap-target+]
1438 1439 1440 1441 1442 1443 1444 1445 1446
[+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; \
	$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
1447
[+ ENDIF cleanstrap-target +]
Paolo Bonzini committed
1448
@endif gcc-bootstrap
1449 1450

[+ ENDFOR bootstrap-stage +]
1451

1452 1453
stageprofile-end::
	$(MAKE) distclean-stagefeedback
1454

1455
stagefeedback-start::
1456 1457
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1458 1459 1460 1461 1462 1463
	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
1464

1465 1466
@if gcc-bootstrap
do-distclean: distclean-stage1
1467 1468 1469 1470

# 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:
1471 1472
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1473
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble
1474

1475 1476 1477 1478 1479
# 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

1480
.PHONY: restrap
1481
restrap::
1482 1483
	@: $(MAKE); $(stage)
	rm -rf stage1-$(TARGET_SUBDIR) [+ FOR bootstrap-stage +][+ IF prev
1484
	  +]stage[+id+]-* [+ ENDIF prev +][+ ENDFOR bootstrap-stage +]
1485
restrap:: all
1486
@endif gcc-bootstrap
1487

1488 1489 1490 1491
# --------------------------------------
# Dependencies between different modules
# --------------------------------------

1492
# Generic dependencies for target modules on host stuff, especially gcc
1493 1494 1495 1496 1497 1498 1499 1500
@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

1501
@if gcc-no-bootstrap[+ FOR target_modules +]
1502
configure-target-[+module+]: maybe-all-gcc[+
1503
  ENDFOR target_modules +]
1504 1505
@endif gcc-no-bootstrap

1506

1507 1508 1509 1510
# 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
1511
# are made here to depend on a 'maybe-' target.  If you're not sure,
1512 1513
# it's safer to use a soft dependency.

1514 1515
[+ ;; These Scheme functions build the bulk of the dependencies.
   ;; dep-target builds a string like "maybe-all-MODULE_KIND-gcc",
1516
   ;; where "maybe-" is only included if HARD is not true, and all-gcc
1517 1518 1519 1520 1521 1522 1523 1524 1525 1526
   ;; 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
1527
   (define make-dep (lambda (module-kind on-kind)
1528 1529
      (string-append
         (dep-target module-kind "module" #t) ": "
Paolo Bonzini committed
1530
         (dep-target on-kind "on" (exist? "hard")))))
1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553

   ;; 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-")))

1554 1555
   ;; dep-kind returns "normal" if the dependency is on an "install" target,
   ;; or if either module is not bootstrapped.  It returns "bootstrap" for
1556 1557
   ;; configure or build dependencies between bootstrapped modules; it returns
   ;; "prebootstrap" for configure or build dependencies of bootstrapped
Paolo Bonzini committed
1558
   ;; modules on a build module (e.g. all-gcc on all-build-bison).  All this
1559 1560
   ;; is only necessary for host modules.
   (define dep-kind (lambda ()
Paolo Bonzini committed
1561 1562 1563
      (if (and (hash-ref boot-modules (dep-module "module"))
	       (=* (dep-module "on") "build-"))
	  "prebootstrap"
1564

Paolo Bonzini committed
1565
	  (if (or (= (dep-subtarget "on") "install-")
1566 1567
		  (not (hash-ref boot-modules (dep-module "module")))
		  (not (hash-ref boot-modules (dep-module "on"))))
Paolo Bonzini committed
1568 1569
              "normal"
	      "bootstrap"))))
1570 1571 1572 1573 1574 1575 1576 1577 1578

   ;; 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 +]
1579 1580 1581 1582
[+ FOR target_modules +][+
   (if (exist? "bootstrap")
       (hash-create-handle! boot-modules (string-append "target-" (get "module")) #t))
   "" +][+ ENDFOR target_modules +]
1583 1584 1585 1586 1587 1588

# 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
1589 1590 1591
[+ FOR dependencies +][+ (make-dep "" "") +]
[+ CASE (dep-kind) +]
[+ == "prebootstrap"
1592
     +][+ FOR bootstrap_stage +]
Paolo Bonzini committed
1593 1594 1595 1596 1597
[+ (make-dep (dep-stage) "") +][+
       ENDFOR bootstrap_stage +]
[+ == "bootstrap"
     +][+ FOR bootstrap_stage +]
[+ (make-dep (dep-stage) (dep-stage)) +][+
1598 1599 1600 1601
       ENDFOR bootstrap_stage +]
[+ ESAC +][+
ENDFOR dependencies +]

1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643
# 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 +]

1644
CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@
1645
GDB_TK = @GDB_TK@
1646 1647
INSTALL_GDB_TK = @INSTALL_GDB_TK@
configure-gdb: $(CONFIGURE_GDB_TK)
1648
all-gdb: $(gdbnlmrequirements) $(GDB_TK)
1649
install-gdb: $(INSTALL_GDB_TK)
1650

1651 1652 1653 1654
# 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@
1655

1656 1657 1658
# --------------------------------
# Regenerating top level configury
# --------------------------------
1659 1660

# Rebuilding Makefile.in, using autogen.
1661
AUTOGEN = autogen
1662
$(srcdir)/Makefile.in: @MAINT@ $(srcdir)/Makefile.tpl $(srcdir)/Makefile.def
1663
	cd $(srcdir) && $(AUTOGEN) Makefile.def
1664

1665
# Rebuilding Makefile.
1666 1667 1668
Makefile: $(srcdir)/Makefile.in config.status
	CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status

1669
config.status: configure
1670
	CONFIG_SHELL="$(SHELL)" $(SHELL) ./config.status --recheck
1671

1672
# Rebuilding configure.
1673
AUTOCONF = autoconf
1674 1675
$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \
	$(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4
1676
	cd $(srcdir) && $(AUTOCONF)
1677

1678 1679 1680 1681 1682 1683 1684 1685
# ------------------------------
# Special directives to GNU Make
# ------------------------------

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

1686
# end of Makefile.in