"configure.ac" did not exist on "c2e0ce216797712a6ce774670ff6753428d2f16a"
Makefile.tpl 58.5 KB
Newer Older
korbb's avatar
korbb 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,
aoliva's avatar
aoliva committed
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

neroden's avatar
neroden committed
34 35 36
# -------------------------------
# Standard Autoconf-set variables
# -------------------------------
37 38
VPATH=@srcdir@

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

neroden's avatar
neroden committed
52
program_transform_name = @program_transform_name@
53 54 55 56

prefix = @prefix@
exec_prefix = @exec_prefix@

neroden's avatar
neroden committed
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@
carlos's avatar
 
carlos committed
70 71
datarootdir = @datarootdir@
docdir = @docdir@
72
pdfdir = @pdfdir@
carlos's avatar
 
carlos committed
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

neroden's avatar
neroden committed
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

neroden's avatar
neroden committed
95 96 97
# -------------------------------------------------
# Miscellaneous non-standard autoconf-set variables
# -------------------------------------------------
98

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

neroden's avatar
neroden committed
102 103
tooldir = @tooldir@
build_tooldir = @build_tooldir@
104

neroden's avatar
neroden committed
105
GDB_NLM_DEPS = 
106

neroden's avatar
neroden committed
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@

neroden's avatar
neroden committed
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;
neroden's avatar
neroden committed
154

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

neroden's avatar
neroden committed
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
bonzini's avatar
bonzini committed
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; \
bonzini's avatar
bonzini committed
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
@if gcc-bootstrap
	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
@endif gcc-bootstrap
205
	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
206 207

# Similar, for later GCC stages.
208
POSTSTAGE1_HOST_EXPORTS = \
209
	$(HOST_EXPORTS) \
210 211 212 213 214
	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/ \
215 216
	  -B$(build_tooldir)/bin/"; export CC_FOR_BUILD; \
	LDFLAGS="$(BOOT_LDFLAGS)"; export LDFLAGS;
neroden's avatar
neroden committed
217 218 219 220 221

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

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;
neroden's avatar
neroden committed
256

dnovillo's avatar
 
dnovillo committed
257 258 259 260
# Where to find GMP
HOST_GMPLIBS = @gmplibs@
HOST_GMPINC = @gmpinc@

neroden's avatar
neroden committed
261 262 263 264 265 266 267 268 269 270
# ----------------------------------------------
# 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.
271 272 273
# Don't use PWD since it is a common shell environment variable and we
# don't want to corrupt it.
PWD_COMMAND = $${PWDCMD-pwd}
neroden's avatar
neroden committed
274 275 276

# compilers to use to create programs which must be run in the build
# environment.
277 278
AR_FOR_BUILD = @AR_FOR_BUILD@
AS_FOR_BUILD = @AS_FOR_BUILD@
neroden's avatar
neroden committed
279
CC_FOR_BUILD = @CC_FOR_BUILD@
280
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
281 282 283 284 285 286 287 288 289 290 291
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@
neroden's avatar
neroden committed
292 293 294 295 296

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

298 299 300
# 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
301
BOOT_LDFLAGS=
302
BOOT_ADAFLAGS=-gnatpg -gnata
303

bonzini's avatar
bonzini committed
304 305 306 307 308 309 310 311
BISON = @BISON@
YACC = @YACC@
FLEX = @FLEX@
LEX = @LEX@
M4 = @M4@
MAKEINFO = @MAKEINFO@
EXPECT = @EXPECT@
RUNTEST = @RUNTEST@
312 313 314 315

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

neroden's avatar
neroden committed
319 320 321
# ---------------------------------------------
# Programs producing files for the HOST machine
# ---------------------------------------------
322

neroden's avatar
neroden committed
323 324 325 326 327 328 329
AS = @AS@
AR = @AR@
AR_FLAGS = rc
CC = @CC@
CXX = @CXX@
DLLTOOL = @DLLTOOL@
LD = @LD@
bonzini's avatar
bonzini committed
330 331
LIPO = @LIPO@
NM = @NM@
332
OBJDUMP = @OBJDUMP@
neroden's avatar
neroden committed
333
RANLIB = @RANLIB@
bonzini's avatar
bonzini committed
334
STRIP = @STRIP@
neroden's avatar
neroden committed
335
WINDRES = @WINDRES@
336
WINDMC = @WINDMC@
337

338 339 340
GNATBIND = @GNATBIND@
GNATMAKE = @GNATMAKE@

bonzini's avatar
bonzini committed
341
CFLAGS = @CFLAGS@
342
LDFLAGS = @LDFLAGS@
bonzini's avatar
bonzini committed
343 344 345
LIBCFLAGS = $(CFLAGS)
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
neroden's avatar
neroden committed
346

347 348 349 350 351 352 353 354 355
# 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@

356
STAGE1_CFLAGS=@stage1_cflags@
aoliva's avatar
aoliva committed
357 358 359 360
STAGE2_CFLAGS=$(BOOT_CFLAGS)
STAGE3_CFLAGS=$(BOOT_CFLAGS)
STAGE4_CFLAGS=$(BOOT_CFLAGS)

361 362 363 364 365
STAGE1_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
STAGE2_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
STAGE3_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
STAGE4_LIBCFLAGS=$(CFLAGS_FOR_TARGET)

aoliva's avatar
aoliva committed
366 367 368 369
do-compare = @do_compare@
do-compare3 = $(do-compare)
do-compare-debug = $(SHELL) $(srcdir)/contrib/compare-debug $$f1 $$f2

neroden's avatar
neroden committed
370 371 372
# -----------------------------------------------
# Programs producing files for the TARGET machine
# -----------------------------------------------
373

374
FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
375

neroden's avatar
neroden committed
376
AR_FOR_TARGET=@AR_FOR_TARGET@
377
AS_FOR_TARGET=@AS_FOR_TARGET@
378 379
CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@ $(FLAGS_FOR_TARGET)

neroden's avatar
neroden committed
380 381 382 383
# 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.
bonzini's avatar
bonzini committed
384
GCC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCC_FOR_TARGET@ $(FLAGS_FOR_TARGET)
385 386 387 388
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)
389
DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
neroden's avatar
neroden committed
390 391
LD_FOR_TARGET=@LD_FOR_TARGET@

geoffk's avatar
geoffk committed
392
LIPO_FOR_TARGET=@LIPO_FOR_TARGET@
neroden's avatar
neroden committed
393
NM_FOR_TARGET=@NM_FOR_TARGET@
drow's avatar
./  
drow committed
394
OBJDUMP_FOR_TARGET=@OBJDUMP_FOR_TARGET@
395
RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
geoffk's avatar
geoffk committed
396
STRIP_FOR_TARGET=@STRIP_FOR_TARGET@
neroden's avatar
neroden committed
397
WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@
398
WINDMC_FOR_TARGET=@WINDMC_FOR_TARGET@
399

bonzini's avatar
bonzini committed
400 401 402 403
COMPILER_AS_FOR_TARGET=@COMPILER_AS_FOR_TARGET@
COMPILER_LD_FOR_TARGET=@COMPILER_LD_FOR_TARGET@
COMPILER_NM_FOR_TARGET=@COMPILER_NM_FOR_TARGET@

404 405
CFLAGS_FOR_TARGET = @CFLAGS_FOR_TARGET@
CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@
bonzini's avatar
bonzini committed
406
SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
407
DEBUG_PREFIX_CFLAGS_FOR_TARGET = @DEBUG_PREFIX_CFLAGS_FOR_TARGET@
408

bonzini's avatar
bonzini committed
409 410 411
LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
LDFLAGS_FOR_TARGET = 
neroden's avatar
neroden committed
412 413 414 415 416

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

417 418
# 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.
419
all:
420 421

#### host and target specific makefile fragments come in here.
neroden's avatar
neroden committed
422 423 424 425
@target_makefile_frag@
@alphaieee_frag@
@ospace_frag@
@host_makefile_frag@
426 427
###

428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447
# 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
448
HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc$(GCC_SHLIB_SUBDIR):$$r/$(HOST_SUBDIR)/prev-gcc$(GCC_SHLIB_SUBDIR):
449 450 451 452 453 454 455 456 457 458
@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 +]

459
# Flags to pass down to all sub-makes.
460 461 462
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 +] \
kcook's avatar
kcook committed
463
	"CONFIG_SHELL=$(SHELL)" \
464
	"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" 
465

466 467
# We leave this in just in case, but it is not needed anymore.
RECURSE_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS)
468

469 470 471 472 473 474 475 476 477
# 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)' \
bonzini's avatar
bonzini committed
478
	'LIPO=$(LIPO)' \
479
	'NM=$(NM)' \
480
	'OBJDUMP=$(OBJDUMP)' \
neroden's avatar
 
neroden committed
481
	'RANLIB=$(RANLIB)' \
bonzini's avatar
bonzini committed
482
	'STRIP=$(STRIP)' \
483 484
	'WINDRES=$(WINDRES)' \
	'WINDMC=$(WINDMC)'
485 486 487 488 489 490 491 492 493 494 495 496 497 498 499

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

500 501 502 503
# Flags to pass to stage2 and later makes.

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

508
# Flags to pass down to makes which are built with the target environment.
509 510
# 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
511 512
# *_CFLAGS_FOR_TARGET variables are not passed down and most often empty,
# so we expand them here.
513 514
EXTRA_TARGET_FLAGS = \
	'AR=$$(AR_FOR_TARGET)' \
515
	'AS=$(COMPILER_AS_FOR_TARGET)' \
516
	'CC=$$(CC_FOR_TARGET)' \
517
	'CFLAGS=$$(CFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
518
	'CXX=$$(CXX_FOR_TARGET)' \
519
	'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
520
	'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \
521
	'LD=$(COMPILER_LD_FOR_TARGET)' \
522
	'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
523 524
	'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)' \
525
	'NM=$(COMPILER_NM_FOR_TARGET)' \
drow's avatar
./  
drow committed
526
	'OBJDUMP=$$(OBJDUMP_FOR_TARGET)' \
527
	'RANLIB=$$(RANLIB_FOR_TARGET)' \
528 529
	'WINDRES=$$(WINDRES_FOR_TARGET)' \
	'WINDMC=$$(WINDMC_FOR_TARGET)'
530 531 532 533 534 535 536

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.
537
# The BUILD_* variables are a special case, which are used for the gcc
538 539 540
# cross-building scheme.
EXTRA_GCC_FLAGS = \
	"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
neroden's avatar
neroden committed
541 542 543 544
	"`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=/'`" \
545
	"`echo 'LIBGCC2_INCLUDES=$(LIBGCC2_INCLUDES)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
546

547
GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS)
548

neroden's avatar
neroden committed
549
.PHONY: configure-host
550
configure-host: [+
neroden's avatar
neroden committed
551 552 553 554 555 556 557 558
  FOR host_modules +] \
    maybe-configure-[+module+][+
  ENDFOR host_modules +]
.PHONY: configure-target
configure-target: [+
  FOR target_modules +] \
    maybe-configure-target-[+module+][+
  ENDFOR target_modules +]
559

560 561
# The target built for a native non-bootstrap build.
.PHONY: all
562 563
all:
@if gcc-bootstrap
bonzini's avatar
bonzini committed
564
	[ -f stage_final ] || echo stage3 > stage_final
565 566
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
567
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble
568
@endif gcc-bootstrap
569
	@: $(MAKE); $(unstage)
570 571 572
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	if [ -f stage_last ]; then \
bonzini's avatar
bonzini committed
573
	  $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
574
	else \
bonzini's avatar
bonzini committed
575
	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target; \
576
	fi
neroden's avatar
neroden committed
577

578
.PHONY: all-build
579 580 581
[+ FOR build_modules +]
all-build: maybe-all-build-[+module+][+ ENDFOR build_modules +]

neroden's avatar
neroden committed
582
.PHONY: all-host
583 584 585 586 587
[+ 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 +]

neroden's avatar
neroden committed
588
.PHONY: all-target
589
[+ FOR target_modules +][+ IF bootstrap +]
590
@if target-[+module+]-no-bootstrap[+ ENDIF bootstrap +]
591
all-target: maybe-all-target-[+module+][+ IF bootstrap +]
592 593
@endif target-[+module+]-no-bootstrap[+
  ENDIF bootstrap +][+ ENDFOR target_modules +]
594 595 596 597 598

# 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).
599
[+ FOR recursive_targets +]
600
.PHONY: do-[+make_target+]
601
do-[+make_target+]:
602
	@: $(MAKE); $(unstage)
603 604 605
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) [+make_target+]-host \
606 607
	  [+make_target+]-target

608 609

.PHONY: [+make_target+]-host
610 611
[+ FOR host_modules +]
[+make_target+]-host: maybe-[+make_target+]-[+module+][+ ENDFOR host_modules +]
612 613

.PHONY: [+make_target+]-target
614 615
[+ FOR target_modules +]
[+make_target+]-target: maybe-[+make_target+]-target-[+module+][+ ENDFOR target_modules +]
616 617
[+ ENDFOR recursive_targets +]

618 619
# Here are the targets which correspond to the do-X targets.

620 621
.PHONY: info installcheck dvi pdf html
.PHONY: install-info install-pdf install-html
622 623 624 625 626
.PHONY: clean distclean mostlyclean maintainer-clean realclean
.PHONY: local-clean local-distclean local-maintainer-clean
info: do-info
installcheck: do-installcheck
dvi: do-dvi
627
pdf: do-pdf
mrs's avatar
mrs committed
628
html: do-html
629

630 631 632
# Make sure makeinfo is built before we do a `make info', if we're
# in fact building texinfo.
do-info: maybe-all-texinfo
633 634

install-info: do-install-info dir.info
635
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
636
	if [ -f dir.info ] ; then \
637
	  $(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info ; \
638 639
	else true ; fi

640 641
install-pdf: do-install-pdf

carlos's avatar
 
carlos committed
642 643
install-html: do-install-html

644 645 646 647 648
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
649
	-rm -f maybedep.tmp serdep.tmp
650 651 652
	-if [ "$(TARGET_SUBDIR)" != "." ]; then \
	  rm -rf $(TARGET_SUBDIR); \
	else true; fi
653
	-rm -rf $(BUILD_SUBDIR)
654 655 656
	-if [ "$(HOST_SUBDIR)" != "." ]; then \
	  rm -rf $(HOST_SUBDIR); \
	else true; fi
657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676
	-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
677
check: do-check
678

679
# Only include modules actually being configured and built.
680 681
.PHONY: check-host
check-host: [+
682 683
  FOR host_modules +] \
    maybe-check-[+module+][+
684 685 686 687
  ENDFOR host_modules +]

.PHONY: check-target
check-target: [+
688 689
  FOR target_modules +] \
    maybe-check-target-[+module+][+
690 691 692
  ENDFOR target_modules +]

do-check:
693
	@: $(MAKE); $(unstage)
694 695 696
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) check-host check-target
697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720

# 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.

721
.PHONY: install uninstall
722
install:
723
	@: $(MAKE); $(unstage)
724 725 726
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) installdirs install-host install-target
neroden's avatar
neroden committed
727

728 729
.PHONY: install-host-nogcc
install-host-nogcc: [+
730 731
  FOR host_modules +][+ IF (not (= (get "module") "gcc")) +] \
    maybe-install-[+module+][+ ENDIF +][+
732 733
  ENDFOR host_modules +]

neroden's avatar
neroden committed
734
.PHONY: install-host
735
install-host: [+
neroden's avatar
neroden committed
736 737 738
  FOR host_modules +] \
    maybe-install-[+module+][+
  ENDFOR host_modules +]
739

neroden's avatar
neroden committed
740 741 742 743 744
.PHONY: install-target
install-target: [+
  FOR target_modules +] \
    maybe-install-target-[+module+][+
  ENDFOR target_modules +]
745 746 747 748 749 750 751

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

.PHONY: install.all
install.all: install-no-fixedincludes
	@if [ -f ./gcc/Makefile ] ; then \
752
		r=`${PWD_COMMAND}` ; export r ; \
753
		s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
754
		$(HOST_EXPORTS) \
755
		(cd ./gcc && \
756 757 758 759 760 761 762 763
		$(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
764
install-no-fixedincludes: installdirs install-host-nogcc \
neroden's avatar
neroden committed
765
	install-target gcc-no-fixedincludes
766

767
### other supporting targets
768

769 770 771 772 773 774 775 776 777
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 \
778
	  $(srcdir)/texinfo/gen-info-dir $(DESTDIR)$(infodir) $(srcdir)/texinfo/dir.info-template > dir.info.new ; \
779 780
	  mv -f dir.info.new dir.info ; \
	else true ; \
781 782
	fi

783 784 785 786 787 788 789 790 791 792 793 794 795 796
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

797 798 799 800 801 802 803
# ------------------------------------
# Macros for configure and all targets
# ------------------------------------

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

[+ IF bootstrap +]
[+ FOR bootstrap_stage +]
.PHONY: configure-stage[+id+]-[+prefix+][+module+] maybe-configure-stage[+id+]-[+prefix+][+module+]
maybe-configure-stage[+id+]-[+prefix+][+module+]:
850
@if [+prefix+][+module+]-bootstrap
851
maybe-configure-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+]
852
configure-stage[+id+]-[+prefix+][+module+]:
853
	@[ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start
854
	@$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+]
855
	@r=`${PWD_COMMAND}`; export r; \
856
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
857 858
	[+ IF check_multilibs
	+]echo "Checking multilib configuration for [+module+]..."; \
859 860 861 862 863 864 865 866 867 868
	$(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; \
869 870
	fi; \
	[+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
871
	[+exports+][+ IF prev +] \
872 873 874
	[+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 +] \
875
	CFLAGS="[+stage_cflags+]"; export CFLAGS; \
876
	CXXFLAGS="[+stage_cflags+]"; export CXXFLAGS; [+ ENDIF +] \
877
	echo Configuring stage [+id+] in [+subdir+]/[+module+] ; \
878
	$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
879 880 881 882 883 884 885 886 887
	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 \
888 889
	  [+args+] --build=${build_alias} --host=[+host_alias+] \
	  --target=[+target_alias+] $${srcdiroption} \
890
	  [+ IF prev +]--with-build-libsubdir=$(HOST_SUBDIR)[+ ENDIF prev +] \
891
	  [+stage_configure_flags+] [+extra_configure_flags+]
892
@endif [+prefix+][+module+]-bootstrap
893 894
[+ ENDFOR bootstrap_stage +]
[+ ENDIF bootstrap +]
895 896 897 898 899
[+ ENDDEF +]

[+ DEFINE all +]
.PHONY: all-[+prefix+][+module+] maybe-all-[+prefix+][+module+]
maybe-all-[+prefix+][+module+]:
900 901 902
@if gcc-bootstrap
all-[+prefix+][+module+]: stage_current
@endif gcc-bootstrap
903 904
@if [+prefix+][+module+]
TARGET-[+prefix+][+module+]=[+
905
  IF all_target +][+all_target+][+ ELSE +]all[+ ENDIF all_target +]
906
maybe-all-[+prefix+][+module+]: all-[+prefix+][+module+]
907
all-[+prefix+][+module+]: configure-[+prefix+][+module+][+ IF bootstrap +][+ ELSE +]
908 909
	@: $(MAKE); $(unstage)[+ ENDIF bootstrap +]
	@r=`${PWD_COMMAND}`; export r; \
910
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
911 912
	[+exports+] \
	(cd [+subdir+]/[+module+] && \
913 914
	  $(MAKE) $(BASE_FLAGS_TO_PASS) [+args+] [+extra_make_flags+] \
		$(TARGET-[+prefix+][+module+]))
915
@endif [+prefix+][+module+]
916 917 918 919 920 921 922

[+ 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+]:
923
@if [+prefix+][+module+]-bootstrap
924 925
maybe-all-stage[+id+]-[+prefix+][+module+]: all-stage[+id+]-[+prefix+][+module+]
all-stage[+id+]: all-stage[+id+]-[+prefix+][+module+]
926
TARGET-stage[+id+]-[+prefix+][+module+] = $(TARGET-[+prefix+][+module+])
927
all-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+]
928
	@[ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start
929 930 931 932 933
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	[+exports+][+ IF prev +] \
	[+poststage1_exports+][+ ENDIF prev +] \
	cd [+subdir+]/[+module+] && \
934 935 936 937 938
	$(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+] [+
939 940
		IF prev +][+poststage1_args+][+ ENDIF prev
		+] [+extra_make_flags+] \
941
		$(TARGET-stage[+id+]-[+prefix+][+module+])
942 943 944 945

maybe-clean-stage[+id+]-[+prefix+][+module+]: clean-stage[+id+]-[+prefix+][+module+]
clean-stage[+id+]: clean-stage[+id+]-[+prefix+][+module+]
clean-stage[+id+]-[+prefix+][+module+]:
946 947 948 949 950 951
	@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; \
952 953 954
	cd [+subdir+]/[+module+] && \
	$(MAKE) [+args+] [+ IF prev +] \
		[+poststage1_args+] [+ ENDIF prev +] \
955
		[+extra_make_flags+] clean
956
@endif [+prefix+][+module+]-bootstrap
957 958 959

[+ ENDFOR bootstrap_stage +]
[+ ENDIF bootstrap +]
960 961 962 963 964 965 966
[+ ENDDEF +]

# --------------------------------------
# Modules which run on the build machine
# --------------------------------------
[+ FOR build_modules +]
[+ configure prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)"
967 968
	     host_alias=(get "host" "${build_alias}")
	     target_alias=(get "target" "${target_alias}")
969 970
	     args="$(BUILD_CONFIGARGS)" no-config-site=true +]

jsm28's avatar
jsm28 committed
971 972
[+ all prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)"
	     args="$(EXTRA_BUILD_FLAGS)" +]
973
[+ ENDFOR build_module +]
974 975 976 977 978

# --------------------------------------
# Modules which run on the host machine
# --------------------------------------
[+ FOR host_modules +]
979 980 981
[+ configure prefix="" subdir="$(HOST_SUBDIR)"
	     exports="$(HOST_EXPORTS)"
	     poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
982 983
	     host_alias=(get "host" "${host_alias}")
	     target_alias=(get "target" "${target_alias}")
984
	     args="$(HOST_CONFIGARGS)" +]
985

986 987 988
[+ all prefix="" subdir="$(HOST_SUBDIR)"
       exports="$(HOST_EXPORTS)"
       poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
989
       args="$(EXTRA_HOST_FLAGS)"
990
       poststage1_args="$(POSTSTAGE1_FLAGS_TO_PASS)" +]
991

992 993
.PHONY: check-[+module+] maybe-check-[+module+]
maybe-check-[+module+]:
994 995
@if [+module+]
maybe-check-[+module+]: check-[+module+]
996 997 998 999 1000
[+ IF no_check +]
check-[+module+]:
[+ ELIF no_check_cross +]
# This module is only tested in a native toolchain.
check-[+module+]:
1001
	@: $(MAKE); $(unstage)
1002
	@if [ '$(host)' = '$(target)' ] ; then \
1003 1004
	  r=`${PWD_COMMAND}`; export r; \
	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1005
	  $(HOST_EXPORTS) \
1006
	  (cd $(HOST_SUBDIR)/[+module+] && \
manfred's avatar
 
manfred committed
1007
	    $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check); \
neroden's avatar
neroden committed
1008 1009 1010
	fi
[+ ELSE check +]
check-[+module+]:
1011
	@: $(MAKE); $(unstage)
1012 1013
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1014
	$(HOST_EXPORTS) \
1015 1016
	(cd $(HOST_SUBDIR)/[+module+] && \
	  $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check)
1017
[+ ENDIF no_check +]
1018
@endif [+module+]
1019 1020 1021

.PHONY: install-[+module+] maybe-install-[+module+]
maybe-install-[+module+]:
1022 1023
@if [+module+]
maybe-install-[+module+]: install-[+module+]
1024
[+ IF no_install +]
1025 1026 1027
install-[+module+]:
[+ ELSE install +]
install-[+module+]: installdirs
1028
	@: $(MAKE); $(unstage)
1029 1030
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1031
	$(HOST_EXPORTS) \
1032
	(cd $(HOST_SUBDIR)/[+module+] && \
1033
	  $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] install)
1034
[+ ENDIF no_install +]
1035
@endif [+module+]
1036

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

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

1077 1078
[+ IF raw_cxx +]
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
1079
	     check_multilibs=true
1080
	     exports="$(RAW_CXX_TARGET_EXPORTS)"
1081 1082
	     host_alias=(get "host" "${target_alias}")
	     target_alias=(get "target" "${target_alias}")
1083 1084 1085 1086
	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]

[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
       exports="$(RAW_CXX_TARGET_EXPORTS)"
1087
       args="$(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'" +]
1088 1089
[+ ELSE +]
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
1090
	     check_multilibs=true
1091
	     exports="$(NORMAL_TARGET_EXPORTS)"
1092 1093
	     host_alias=(get "host" "${target_alias}")
	     target_alias=(get "target" "${target_alias}")
1094 1095 1096 1097
	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]

[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
       exports="$(NORMAL_TARGET_EXPORTS)"
1098
       args="$(EXTRA_TARGET_FLAGS)" +]
1099
[+ ENDIF +]
1100 1101 1102

.PHONY: check-target-[+module+] maybe-check-target-[+module+]
maybe-check-target-[+module+]:
1103 1104
@if target-[+module+]
maybe-check-target-[+module+]: check-target-[+module+]
1105 1106 1107 1108 1109
[+ IF no_check +]
# Dummy target for uncheckable module.
check-target-[+module+]:
[+ ELSE check +]
check-target-[+module+]:
1110
	@: $(MAKE); $(unstage)
1111
	@r=`${PWD_COMMAND}`; export r; \
1112
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
1113 1114 1115 1116 1117
IF raw_cxx +]
	$(RAW_CXX_TARGET_EXPORTS) \[+
ELSE normal_cxx +]
	$(NORMAL_TARGET_EXPORTS) \[+
ENDIF raw_cxx +]
neroden's avatar
neroden committed
1118 1119 1120 1121 1122
	(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 
1123
	  +] [+extra_make_flags+] check)
1124
[+ ENDIF no_check +]
1125
@endif target-[+module+]
1126

1127 1128
.PHONY: install-target-[+module+] maybe-install-target-[+module+]
maybe-install-target-[+module+]:
1129 1130
@if target-[+module+]
maybe-install-target-[+module+]: install-target-[+module+]
1131
[+ IF no_install +]
1132 1133 1134 1135
# Dummy target for uninstallable.
install-target-[+module+]:
[+ ELSE install +]
install-target-[+module+]: installdirs
1136
	@: $(MAKE); $(unstage)
1137
	@r=`${PWD_COMMAND}`; export r; \
1138
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
1139 1140 1141 1142 1143
IF raw_cxx +]
	$(RAW_CXX_TARGET_EXPORTS) \[+
ELSE normal_cxx +]
	$(NORMAL_TARGET_EXPORTS) \[+
ENDIF raw_cxx +]
neroden's avatar
neroden committed
1144
	(cd $(TARGET_SUBDIR)/[+module+] && \
1145
	  $(MAKE) $(TARGET_FLAGS_TO_PASS) [+extra_make_flags+] install)
1146
[+ ENDIF no_install +]
1147
@endif target-[+module+]
1148

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

1188 1189 1190
# ----------
# GCC module
# ----------
1191

1192
@if gcc-no-bootstrap
1193
.PHONY: cross
1194
cross: all-build all-gas all-ld
1195 1196
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1197
	$(HOST_EXPORTS) \
1198 1199
	echo "Building the C and C++ compiler"; \
	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) LANGUAGES="c c++"
1200 1201
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
1202
	echo "Building runtime libraries"; \
1203
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) LANGUAGES="c c++" all
1204
@endif gcc-no-bootstrap
1205

1206
@if gcc
1207 1208
.PHONY: check-gcc-c++
check-gcc-c++:
1209
	@if [ -f ./gcc/Makefile ] ; then \
1210 1211
	  r=`${PWD_COMMAND}`; export r; \
	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1212
	  $(HOST_EXPORTS) \
1213
	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \
1214 1215
	else \
	  true; \
1216 1217 1218
	fi

.PHONY: check-c++
1219
check-c++: check-target-libstdc++-v3 check-gcc-c++
1220

1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232
# 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; \
1233 1234
	  r=`${PWD_COMMAND}`; export r; \
	  s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
1235
	  $(HOST_EXPORTS) \
1236
	  (cd ./gcc && \
1237 1238 1239 1240
	   $(MAKE) $(GCC_FLAGS_TO_PASS) install); \
	  rm -rf gcc/include; \
	  mv gcc/tmp-include gcc/include 2>/dev/null; \
	else true; fi
1241
@endif gcc
1242

1243 1244 1245 1246
# ---------------------
# GCC bootstrap support
# ---------------------

1247 1248 1249 1250
# 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.

1251
# While making host and target tools, symlinks to the final stage must be
1252 1253 1254 1255
# 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.
1256 1257 1258

unstage = :
stage = :
1259
current_stage = ""
1260

1261
@if gcc-bootstrap
1262
unstage = if [ -f stage_last ]; then [ -f stage_current ] || $(MAKE) `cat stage_last`-start || exit 1; else :; fi
1263
stage = if [ -f stage_current ]; then $(MAKE) `cat stage_current`-end || exit 1; else :; fi
1264
current_stage = "`cat stage_current 2> /dev/null`"
1265 1266
@endif gcc-bootstrap

1267 1268
.PHONY: unstage stage
unstage:
1269
	@: $(MAKE); $(unstage)
1270
stage:
1271
	@: $(MAKE); $(stage)
1272

1273 1274 1275
# Disable commands for lean bootstrap.
LEAN = false

1276 1277 1278 1279 1280
# 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
1281
# the previous stage to a constant name ('prev-gcc'), and to make the name of
1282 1283 1284 1285 1286
# 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.

1287 1288 1289
# 'touch' doesn't work right on some platforms.
STAMP = echo timestamp > 

1290 1291
# We only want to compare .o files, so set this!
objext = .o
1292

1293
[+ FOR bootstrap-stage +]
1294
.PHONY: stage[+id+]-start stage[+id+]-end
1295

1296
stage[+id+]-start::
1297
	@: $(MAKE); $(stage); \
1298
	echo stage[+id+] > stage_current ; \
1299
	echo stage[+id+] > stage_last; \
1300
	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)[+
1301
   FOR host_modules +][+ IF bootstrap +]
1302
@if [+ module +]
1303 1304
	@cd $(HOST_SUBDIR); [ -d stage[+id+]-[+module+] ] || \
	  mkdir stage[+id+]-[+module+]; \
1305 1306
	mv stage[+id+]-[+module+] [+module+] [+ IF prev +] ; \
	mv stage[+prev+]-[+module+] prev-[+module+] || test -f stage[+prev+]-lean [+ ENDIF prev +]
1307 1308 1309
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
	@[ -d stage[+id+]-$(TARGET_SUBDIR) ] || \
	  mkdir stage[+id+]-$(TARGET_SUBDIR); \
1310 1311
	mv stage[+id+]-$(TARGET_SUBDIR) $(TARGET_SUBDIR) [+ IF prev +] ; \
	mv stage[+prev+]-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stage[+prev+]-lean [+ ENDIF prev +]
1312

1313
stage[+id+]-end:: [+ FOR host_modules +][+ IF bootstrap +]
1314
@if [+ module +]
1315 1316 1317
	@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 +] ; \
1318 1319 1320
	fi
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
	@if test -d $(TARGET_SUBDIR) ; then \
1321 1322
	  mv $(TARGET_SUBDIR) stage[+id+]-$(TARGET_SUBDIR) [+ IF prev +] ; \
	  mv prev-$(TARGET_SUBDIR) stage[+prev+]-$(TARGET_SUBDIR) ; : [+ ENDIF prev +] ; \
1323
	fi
1324
	rm -f stage_current
1325

bje's avatar
bje committed
1326
# Bubble a bug fix through all the stages up to stage [+id+].  They are
1327
# remade, but not reconfigured.  The next stage (if any) will not be
rwild's avatar
rwild committed
1328
# reconfigured either.
1329
.PHONY: stage[+id+]-bubble
1330
stage[+id+]-bubble:: [+ IF prev +]stage[+prev+]-bubble[+ ENDIF +]
1331 1332 1333
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	if test -f stage[+id+]-lean [+
1334 1335 1336
	  IF prev +]|| test -f stage[+prev+]-lean [+ ENDIF prev +] ; then \
	  echo Skipping rebuild of stage[+id+] ; \
	else \
1337 1338 1339 1340 1341
	  $(MAKE) stage[+id+]-start; \[+IF lean +]
	  if $(LEAN); then \
	    rm -rf stage[+lean+]-* ; \
	    $(STAMP) stage[+lean+]-lean ; \
	  fi; \[+ ENDIF lean +]
1342
	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stage[+id+]; \
bonzini's avatar
bonzini committed
1343
	fi[+ IF compare-target +]
1344
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) [+compare-target+][+ ENDIF compare-target +]
1345

1346 1347
.PHONY: all-stage[+id+] clean-stage[+id+]
do-clean: clean-stage[+id+]
1348

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

[+ IF bootstrap-target +]
1393
.PHONY: [+bootstrap-target+] [+bootstrap-target+]-lean
bonzini's avatar
bonzini committed
1394 1395 1396 1397 1398
[+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
1399
	@: $(MAKE); $(unstage)
bonzini's avatar
bonzini committed
1400 1401 1402
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
1403 1404 1405 1406 1407 1408 1409 1410 1411 1412

[+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
1413 1414
[+ ENDIF bootstrap-target +]

1415
# Rules to wipe a stage and all the following ones, also used for cleanstrap
1416
[+ IF prev +]distclean-stage[+prev+]:: distclean-stage[+id+] [+ ENDIF prev +]
1417
.PHONY: distclean-stage[+id+]
1418
distclean-stage[+id+]::
1419
	@: $(MAKE); $(stage)
1420
	@test "`cat stage_last`" != stage[+id+] || rm -f stage_last
1421
	rm -rf stage[+id+]-* [+
1422 1423 1424 1425
	  IF compare-target +][+compare-target+] [+ ENDIF compare-target +]

[+ IF cleanstrap-target +]
.PHONY: [+cleanstrap-target+]
1426 1427 1428 1429 1430 1431 1432 1433 1434
[+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
1435
[+ ENDIF cleanstrap-target +]
1436
@endif gcc-bootstrap
1437 1438

[+ ENDFOR bootstrap-stage +]
1439

1440 1441
stageprofile-end::
	$(MAKE) distclean-stagefeedback
1442

1443
stagefeedback-start::
1444 1445
	@r=`${PWD_COMMAND}`; export r; \
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
1446 1447 1448 1449 1450 1451
	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
1452

1453 1454
@if gcc-bootstrap
do-distclean: distclean-stage1
1455 1456 1457 1458 1459

# 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:
	$(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble
1460

1461 1462 1463 1464 1465
# 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

1466
.PHONY: restrap
1467
restrap::
1468 1469
	@: $(MAKE); $(stage)
	rm -rf stage1-$(TARGET_SUBDIR) [+ FOR bootstrap-stage +][+ IF prev
1470
	  +]stage[+id+]-* [+ ENDIF prev +][+ ENDFOR bootstrap-stage +]
1471
restrap:: all
1472
@endif gcc-bootstrap
1473

1474 1475 1476 1477
# --------------------------------------
# Dependencies between different modules
# --------------------------------------

1478
# Generic dependencies for target modules on host stuff, especially gcc
1479 1480 1481 1482 1483 1484 1485 1486
@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

drow's avatar
./  
drow committed
1487
@if gcc-no-bootstrap[+ FOR target_modules +]
1488
configure-target-[+module+]: maybe-all-gcc[+
drow's avatar
./  
drow committed
1489
  ENDFOR target_modules +]
1490 1491
@endif gcc-no-bootstrap

1492

1493 1494 1495 1496
# 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
1497
# are made here to depend on a 'maybe-' target.  If you're not sure,
1498 1499
# it's safer to use a soft dependency.

1500 1501
[+ ;; These Scheme functions build the bulk of the dependencies.
   ;; dep-target builds a string like "maybe-all-MODULE_KIND-gcc",
rwild's avatar
rwild committed
1502
   ;; where "maybe-" is only included if HARD is not true, and all-gcc
1503 1504 1505 1506 1507 1508 1509 1510 1511 1512
   ;; 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.
1513
   (define make-dep (lambda (module-kind on-kind)
1514 1515
      (string-append
         (dep-target module-kind "module" #t) ": "
1516
         (dep-target on-kind "on" (exist? "hard")))))
1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539

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

1540 1541
   ;; dep-kind returns "normal" if the dependency is on an "install" target,
   ;; or if either module is not bootstrapped.  It returns "bootstrap" for
1542 1543
   ;; configure or build dependencies between bootstrapped modules; it returns
   ;; "prebootstrap" for configure or build dependencies of bootstrapped
1544
   ;; modules on a build module (e.g. all-gcc on all-build-bison).  All this
1545 1546
   ;; is only necessary for host modules.
   (define dep-kind (lambda ()
1547 1548 1549
      (if (and (hash-ref boot-modules (dep-module "module"))
	       (=* (dep-module "on") "build-"))
	  "prebootstrap"
1550

1551
	  (if (or (= (dep-subtarget "on") "install-")
1552 1553
		  (not (hash-ref boot-modules (dep-module "module")))
		  (not (hash-ref boot-modules (dep-module "on"))))
1554 1555
              "normal"
	      "bootstrap"))))
1556 1557 1558 1559 1560 1561 1562 1563 1564

   ;; 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 +]
1565 1566 1567 1568
[+ FOR target_modules +][+
   (if (exist? "bootstrap")
       (hash-create-handle! boot-modules (string-append "target-" (get "module")) #t))
   "" +][+ ENDFOR target_modules +]
1569 1570 1571 1572 1573 1574

# 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.
1575 1576 1577
[+ FOR dependencies +][+ (make-dep "" "") +]
[+ CASE (dep-kind) +]
[+ == "prebootstrap"
1578
     +][+ FOR bootstrap_stage +]
1579 1580 1581 1582 1583
[+ (make-dep (dep-stage) "") +][+
       ENDFOR bootstrap_stage +]
[+ == "bootstrap"
     +][+ FOR bootstrap_stage +]
[+ (make-dep (dep-stage) (dep-stage)) +][+
1584 1585 1586 1587
       ENDFOR bootstrap_stage +]
[+ ESAC +][+
ENDFOR dependencies +]

drow's avatar
./  
drow committed
1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 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
# 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 +]

1630
CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@
1631
GDB_TK = @GDB_TK@
1632 1633
INSTALL_GDB_TK = @INSTALL_GDB_TK@
configure-gdb: $(CONFIGURE_GDB_TK)
1634
all-gdb: $(gdbnlmrequirements) $(GDB_TK)
1635
install-gdb: $(INSTALL_GDB_TK)
1636

1637 1638 1639 1640
# 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@
1641

1642 1643 1644
# --------------------------------
# Regenerating top level configury
# --------------------------------
1645 1646

# Rebuilding Makefile.in, using autogen.
1647
AUTOGEN = autogen
1648
$(srcdir)/Makefile.in: @MAINT@ $(srcdir)/Makefile.tpl $(srcdir)/Makefile.def
1649
	cd $(srcdir) && $(AUTOGEN) Makefile.def
1650

neroden's avatar
neroden committed
1651
# Rebuilding Makefile.
1652 1653 1654
Makefile: $(srcdir)/Makefile.in config.status
	CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status

1655
config.status: configure
kcook's avatar
kcook committed
1656
	CONFIG_SHELL="$(SHELL)" $(SHELL) ./config.status --recheck
1657

neroden's avatar
neroden committed
1658
# Rebuilding configure.
1659
AUTOCONF = autoconf
1660 1661
$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \
	$(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4
1662
	cd $(srcdir) && $(AUTOCONF)
1663

1664 1665 1666 1667 1668 1669 1670 1671
# ------------------------------
# Special directives to GNU Make
# ------------------------------

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

1672
# end of Makefile.in