source: trunk/third/gcc/Makefile.in @ 8966

Revision 8966, 96.4 KB checked in by ghudson, 28 years ago (diff)
Eliminate targets in source tree; we don't want to touch the source tree during a build, and we can't rebuild most of these targets anyone (they depend on bison and flex and things, which is why they're shipped with the source tree in the first place).
Line 
1# Makefile for GNU C compiler.
2#   Copyright (C) 1987, 88, 90-94, 1995 Free Software Foundation, Inc.
3
4#This file is part of GNU CC.
5
6#GNU CC is free software; you can redistribute it and/or modify
7#it under the terms of the GNU General Public License as published by
8#the Free Software Foundation; either version 2, or (at your option)
9#any later version.
10
11#GNU CC is distributed in the hope that it will be useful,
12#but WITHOUT ANY WARRANTY; without even the implied warranty of
13#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14#GNU General Public License for more details.
15
16#You should have received a copy of the GNU General Public License
17#along with GNU CC; see the file COPYING.  If not, write to
18#the Free Software Foundation, 59 Temple Place - Suite 330,
19#Boston MA 02111-1307, USA.
20
21# The targets for external use include:
22# all, doc, proto, install, install-cross, install-cross-rest,
23# uninstall, TAGS, mostlyclean, clean, distclean, maintainer-clean,
24# stage1, stage2, stage3, stage4.
25
26# Suppress smart makes who think they know how to automake Yacc files
27.y.c:
28
29# Variables that exist for you to override.
30# See below for how to change them for certain systems.
31
32# List of language subdirectories.
33# This is overridden by configure.
34SUBDIRS =
35
36# Selection of languages to be made.
37# This is overridden by configure.
38LANGUAGES = c objective-c proto
39
40ALLOCA =
41ALLOCA_FLAGS =
42ALLOCA_FINISH = true
43
44# Various ways of specifying flags for compilations: 
45# CFLAGS is for the user to override to, e.g., do a bootstrap with -O2.
46# BOOT_CFLAGS is the value of CFLAGS to pass
47# to the stage2 and stage3 compilations
48# XCFLAGS is used for most compilations but not when using the GCC just built.
49XCFLAGS =
50CFLAGS = -g
51BOOT_CFLAGS = -O $(CFLAGS)
52# These exists to be overridden by the x-* and t-* files, respectively.
53X_CFLAGS =
54T_CFLAGS =
55
56X_CPPFLAGS =
57T_CPPFLAGS =
58
59CC = cc
60BISON = bison
61BISONFLAGS =
62LEX = flex
63LEXFLAGS =
64AR = ar
65OLDAR_FLAGS = qc
66AR_FLAGS = rc
67SHELL = /bin/sh
68# on sysV, define this as cp.
69INSTALL = install -c
70# These permit overriding just for certain files.
71INSTALL_PROGRAM = $(INSTALL)
72INSTALL_DATA = $(INSTALL)
73MAKEINFO = makeinfo
74TEXI2DVI = texi2dvi
75# For GNUmake: let us decide what gets passed to recursive makes.
76MAKEOVERRIDES =
77
78# Define this as & to perform parallel make on a Sequent.
79# Note that this has some bugs, and it seems currently necessary
80# to compile all the gen* files first by hand to avoid erroneous results.
81P =
82
83# How to invoke ranlib.
84RANLIB = ranlib
85# Test to use to see whether ranlib exists on the system.
86RANLIB_TEST = [ -f /usr/bin/ranlib -o -f /bin/ranlib ]
87
88# Compiler to use for compiling libgcc1.a.
89# OLDCC should not be the GNU C compiler,
90# since that would compile typical libgcc1.a functions such as mulsi3
91# into infinite recursions.
92OLDCC = cc
93
94# CFLAGS for use with OLDCC, for compiling libgcc1.a.
95# NOTE: -O does not work on some Unix systems!
96CCLIBFLAGS = -O
97
98# Version of ar to use when compiling libgcc1.a.
99OLDAR = ar
100
101# Target to use when installing include directory.  Either
102# install-headers-tar or install-headers-cpio.
103INSTALL_HEADERS_DIR = install-headers-tar
104
105# Header files that are made available under the same name
106# to programs compiled with GCC.
107USER_H = $(srcdir)/ginclude/stdarg.h $(srcdir)/ginclude/stddef.h \
108    $(srcdir)/ginclude/varargs.h $(srcdir)/ginclude/va-alpha.h \
109    $(srcdir)/ginclude/va-h8300.h $(srcdir)/ginclude/va-i860.h \
110    $(srcdir)/ginclude/va-i960.h $(srcdir)/ginclude/va-mips.h \
111    $(srcdir)/ginclude/va-m88k.h $(srcdir)/ginclude/va-pa.h \
112    $(srcdir)/ginclude/va-pyr.h $(srcdir)/ginclude/va-sparc.h \
113    $(srcdir)/ginclude/va-clipper.h $(srcdir)/ginclude/va-spur.h \
114    $(srcdir)/ginclude/iso646.h $(srcdir)/ginclude/va-ppc.h \
115    $(srcdir)/ginclude/proto.h $(EXTRA_HEADERS)
116
117# Target to use whe installing assert.h.  Some systems may
118# want to set this empty.
119INSTALL_ASSERT_H = install-assert-h
120
121# The GCC to use for compiling libgcc2.a, enquire, and libgcc1-test.
122# Usually the one we just built.
123# Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
124GCC_FOR_TARGET = ./xgcc -B./
125
126# This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
127# It omits XCFLAGS, and specifies -B./.
128# It also specifies -I./include to find, e.g., stddef.h.
129GCC_CFLAGS=$(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) -I./include
130
131# Special flags for compiling enquire.
132# We disable optimization to make floating point more reliable.
133ENQUIRE_CFLAGS = -DNO_MEM -DNO_LONG_DOUBLE_IO -O0
134ENQUIRE_LDFLAGS = $(LDFLAGS)
135
136# Sed command to transform gcc to installed name.  Overwritten by configure.
137program_transform_name = -e s,x,x,
138program_transform_cross_name = -e s,^,$(target)-,
139
140# Tools to use when building a cross-compiler.
141# These are used because `configure' appends `cross-make'
142# to the makefile when making a cross-compiler.
143
144TARGET_TOOLPREFIX = $(tooldir)/bin/
145AR_FOR_TARGET = $(TARGET_TOOLPREFIX)ar
146AR_FOR_TARGET_FLAGS = rc
147RANLIB_FOR_TARGET = $(TARGET_TOOLPREFIX)ranlib
148RANLIB_TEST_FOR_TARGET = [ -f $(TARGET_TOOLPREFIX)ranlib ]
149
150# Dir to search for system headers.  Overridden by cross-make.
151SYSTEM_HEADER_DIR = /usr/include
152
153# Control whether to run fixproto.
154STMP_FIXPROTO = stmp-fixproto
155
156# Test to see whether <limits.h> exists in the system header files.
157LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
158
159# There may be a premade insn-attrtab.c for this machine.
160# (You could rebuild it with genattrtab as usual, but it takes a long time.)
161# PREMADE_ATTRTAB is the file name of the file to use.
162# PREMADE_ATTRTAB_MD is the md file it corresponds to.
163PREMADE_ATTRTAB_MD = Makefile  # Guaranteed not to cmp equal to md.
164PREMADE_ATTRTAB =
165
166target= ... `configure' substitutes actual target name here.
167xmake_file= ... `configure' substitutes actual x- file name here.
168tmake_file= ... `configure' substitutes actual t- file name here.
169out_file= ... `configure' substitutes actual out file name here.
170out_object_file= ... `configure' substitutes actual out object file name here.
171md_file= ... `configure' substitutes actual md file name here.
172tm_file= ... `configure' substitutes actual tm file name here.
173build_xm_file= ... `configure' substitutes actual build xm- file name here.
174host_xm_file= ... `configure' substitutes actual host xm- file name here.
175lang_specs_files= ... `configure' substitutes actual lang spec file names here.
176lang_options_files= ... `configure' puts actual lang options file names here.
177version=`sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/' < $(srcdir)/version.c`
178mainversion=`sed -e 's/.*\"\([0-9]*\.[0-9]*\).*/\1/' < $(srcdir)/version.c`
179
180# Directory where sources are, from where we are.
181srcdir = .
182# Common prefix for installation directories.
183# NOTE: This directory must exist when you start installation.
184prefix = /usr/local
185# Directory in which to put localized header files. On the systems with
186# gcc as the native cc, `local_prefix' may not be `prefix' which is
187# `/usr'.
188# NOTE: local_prefix *should not* default from prefix.
189local_prefix = /usr/local
190# Directory in which to put host dependent programs and libraries
191exec_prefix = $(prefix)
192# Directory in which to put the executable for the command `gcc'
193bindir = $(exec_prefix)/bin
194# Directory in which to put the directories used by the compiler.
195libdir = $(exec_prefix)/lib
196# Directory in which the compiler finds executables, libraries, etc.
197libsubdir = $(libdir)/gcc-lib/$(target)/$(version)
198# Directory in which the compiler finds g++ includes.
199gxx_include_dir= $(libdir)/g++-include
200# Directory to search for site-specific includes.
201includedir = $(local_prefix)/include
202# assertdir is overridden in cross-make.
203# (But this currently agrees with what is in cross-make.)
204assertdir = $(tooldir)/include
205# where the info files go
206infodir = $(prefix)/info
207# Extension (if any) to put in installed man-page filename.
208manext = .1
209objext = .o
210exeext =
211
212# Directory in which to put man pages.
213mandir = $(prefix)/man/man1
214# Directory in which to find other cross-compilation tools and headers.
215# Used in install-cross.
216tooldir = $(exec_prefix)/$(target)
217# Dir for temp files.
218tmpdir = /tmp
219
220# Additional system libraries to link with.
221CLIB=
222
223# Change this to a null string if obstacks are installed in the
224# system library.
225OBSTACK=obstack.o
226
227# Specify the rule for actually making libgcc.a,
228LIBGCC = libgcc.a
229# and the rule for installing it.
230INSTALL_LIBGCC = install-libgcc
231
232# Specify the rule for actually making libgcc1.a.
233# The value may be empty; that means to do absolutely nothing
234# with or for libgcc1.a.
235LIBGCC1 = libgcc1.a
236
237# Specify the rule for making libgcc1.a for a cross-compiler.
238# The default rule assumes that libgcc1.a is supplied by the user.
239CROSS_LIBGCC1 = libgcc1.cross
240
241# Specify the rule for actually making libgcc2.a.
242LIBGCC2 = libgcc2.a
243
244# Options to use when compiling libgcc2.a.
245# -g1 causes output of debug info only for file-scope entities.
246# we use this here because that should be enough, and also
247# so that -g1 will be tested.
248LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) -g1
249
250# Additional options to use when compiling libgcc2.a.
251# Some targets override this to -Iinclude
252LIBGCC2_INCLUDES =
253
254# Additional target-dependent options for compiling libgcc2.a.
255TARGET_LIBGCC2_CFLAGS =
256
257# Things which must be built before building libgcc2.a.
258# Some targets override this to stmp-int-hdrs
259LIBGCC2_DEPS =
260
261# Enquire target (This is a variable so that a target can choose not to
262# build it.)
263ENQUIRE = enquire
264
265# libgcc1-test target (must also be overridable for a target)
266LIBGCC1_TEST = libgcc1-test
267
268# List of extra executables that should be compiled for this target machine
269# that are used for compiling from source code to object code.
270# The rules for compiling them should be in the t-* file for the machine.
271EXTRA_PASSES =
272
273# Like EXTRA_PASSES, but these are used when linking.
274EXTRA_PROGRAMS =
275
276# List of extra object files that should be compiled for this target machine.
277# The rules for compiling them should be in the t-* file for the machine.
278EXTRA_PARTS =
279
280# List of extra object files that should be compiled and linked with
281# compiler proper (cc1, cc1obj, cc1plus).
282EXTRA_OBJS =
283
284# List of extra object files that should be compiled and linked with
285# the gcc driver.
286EXTRA_GCC_OBJS =
287
288# List of additional header files to install.
289# Often this is edited directly by `configure'.
290EXTRA_HEADERS =
291
292# Set this to `ld' to enable use of collect2.
293# USE_COLLECT2 =
294# It is convenient for configure to add the assignment at the beginning,
295# so don't override it here.
296
297# List of extra C and assembler files to add to libgcc1.a.
298# Assembler files should have names ending in `.asm'.
299LIB1FUNCS_EXTRA =
300
301# List of extra C and assembler files to add to libgcc2.a.
302# Assembler files should have names ending in `.asm'.
303LIB2FUNCS_EXTRA =
304
305# Default float.h source to use for cross-compiler.
306CROSS_FLOAT_H=float.h-cross
307
308# Program to convert libraries.
309LIBCONVERT =
310
311# Control whether header files are installed.
312INSTALL_HEADERS=install-headers
313
314# Options for tar when copying trees.  So HPUX can override it.
315TAROUTOPTS = xpBf
316
317# Select which version of fixincludes to use (I.E. regular versus SVR4)
318# This value is overridden directly by configure.
319FIXINCLUDES=fixincludes
320
321# Additional directories of header files to run fixincludes on.
322# These should be directories searched automatically by default
323# just as /usr/include is.
324# *Do not* use this for directories that happen to contain
325# header files, but are not searched automatically by default.
326# On most systems, this is empty.
327OTHER_FIXINCLUDES_DIRS=
328
329# List of things which should already be built whenever we try to use xgcc
330# to compile anything (without linking).
331GCC_PASSES=xgcc cc1 cpp $(EXTRA_PASSES)
332
333# List of things which should already be built whenever we try to use xgcc
334# to link anything.
335GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(EXTRA_PROGRAMS) $(USE_COLLECT2) $(EXTRA_PARTS)
336
337# Directory to link to, when using the target `maketest'.
338DIR = ../gcc
339
340# Guaranteed to not exist when not passing md through cpp.
341# This value is overridden directly by configure.
342MD_FILE = md-cpp-not-used
343
344# Flags to use when cross-building GCC.
345# Prefix to apply to names of object files when using them
346# to run on the machine we are compiling on.
347HOST_PREFIX=
348# Prefix to apply to names of object files when compiling them
349# to run on the machine we are compiling on.
350# The default for this variable is chosen to keep these rules
351# out of the way of the other rules for compiling the same source files.
352HOST_PREFIX_1=loser-
353HOST_CC=$(CC)
354HOST_CFLAGS=$(ALL_CFLAGS)
355HOST_CLIB=$(CLIB)
356HOST_LDFLAGS=$(LDFLAGS)
357HOST_CPPFLAGS=$(ALL_CPPFLAGS)
358HOST_ALLOCA=$(ALLOCA)
359HOST_MALLOC=$(MALLOC)
360HOST_OBSTACK=$(OBSTACK)
361
362# Actual name to use when installing a native compiler.
363GCC_INSTALL_NAME = `t='$(program_transform_name)'; echo gcc | sed $$t`
364
365# Actual name to use when installing a cross-compiler.
366GCC_CROSS_NAME = `t='$(program_transform_cross_name)'; echo gcc | sed $$t`
367
368# Choose the real default target.
369ALL=all.internal
370
371# Choose the real install target.
372INSTALL_TARGET=install-normal
373
374# Source for float.h.  Overridden by cross-make.
375FLOAT_H=float.h-nat
376
377# Extra symbols for fixproto to define when parsing headers.
378FIXPROTO_DEFINES =
379
380# Extra flags to use when compiling crt{begin,end}.o.
381CRTSTUFF_T_CFLAGS =
382
383# End of variables for you to override.
384
385# Definition of `all' is here so that new rules inserted by sed
386# do not specify the default target.
387# The real definition is under `all.internal' (for native compilers)
388# or `all.cross' (for cross compilers).
389all: all.indirect
390
391# This tells GNU Make version 3 not to put all variables in the environment.
392.NOEXPORT:
393
394# sed inserts variable overrides after the following line.
395####target overrides
396####host overrides
397####cross overrides
398####build overrides
399
400# Now figure out from those variables how to compile and link.
401
402all.indirect: $(ALL)
403
404# IN_GCC tells obstack.h that we are using gcc's <stddef.h> file.
405# ??? IN_GCC should be obsolete now.
406INTERNAL_CFLAGS = $(CROSS) -DIN_GCC
407
408# This is the variable actually used when we compile.
409ALL_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) $(XCFLAGS)
410
411# Likewise.
412ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS)
413
414# Even if ALLOCA is set, don't use it if compiling with GCC.
415USE_ALLOCA= ` case "${CC}" in "${OLDCC}") echo "${ALLOCA}" ;; esac `
416USE_HOST_ALLOCA= ` case "${HOST_CC}"@"${HOST_ALLOCA}" in "${OLDCC}"@?*) echo ${HOST_PREFIX}${HOST_ALLOCA} ;; esac `
417USE_HOST_MALLOC= ` case "${HOST_MALLOC}" in ?*) echo ${HOST_PREFIX}${HOST_MALLOC} ;; esac `
418USE_HOST_OBSTACK= ` case "${HOST_OBSTACK}" in ?*) echo ${HOST_PREFIX}${HOST_OBSTACK} ;; esac `
419
420# Dependency on obstack, alloca, malloc or whatever library facilities
421# are not installed in the system libraries.
422# We don't use USE_ALLOCA because backquote expansion doesn't work in deps.
423LIBDEPS= $(OBSTACK) $(ALLOCA) $(MALLOC)
424
425# Likewise, for use in the tools that must run on this machine
426# even if we are cross-building GCC.
427# We don't use USE_ALLOCA because backquote expansion doesn't work in deps.
428HOST_LIBDEPS= $(HOST_PREFIX)$(HOST_OBSTACK) $(HOST_PREFIX)$(HOST_ALLOCA) $(HOST_PREFIX)$(HOST_MALLOC)
429
430# How to link with both our special library facilities
431# and the system's installed libraries.
432LIBS = $(OBSTACK) $(USE_ALLOCA) $(MALLOC) $(CLIB)
433
434# Likewise, for use in the tools that must run on this machine
435# even if we are cross-building GCC.
436HOST_LIBS = $(USE_HOST_OBSTACK) $(USE_HOST_ALLOCA) $(USE_HOST_MALLOC)  \
437            $(HOST_CLIB)
438
439HOST_RTL = $(HOST_PREFIX)rtl.o
440HOST_RTLANAL = $(HOST_PREFIX)rtlanal.o
441HOST_PRINT = $(HOST_PREFIX)print-rtl.o
442
443# Specify the directories to be searched for header files.
444# Both . and srcdir are used, in that order,
445# so that tm.h and config.h will be found in the compilation
446# subdirectory rather than in the source directory.
447INCLUDES = -I. -I$(srcdir) -I$(srcdir)/config
448
449# Always use -I$(srcdir)/config when compiling.
450.c.o:
451        $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
452
453# This tells GNU make version 3 not to export all the variables
454# defined in this file into the environment.
455.NOEXPORT:
456
457# Support for additional languages (other than c and objc).
458# ??? objc can be supported this way too (leave for later).
459
460# These next lines are overridden by configure.
461LANG_MAKEFILES =
462LANG_STAGESTUFF =
463LANG_DIFF_EXCLUDES =
464
465# Flags to pass to recursive makes.
466# CC is set by configure.  Hosts without symlinks need special handling
467# because we need CC="stage1/xgcc -Bstage1/" to work in the language
468# subdirectories.
469# ??? The choices here will need some experimenting with.
470FLAGS_TO_PASS = \
471        "AR_FLAGS=$(AR_FLAGS)" \
472        "AR_FOR_TARGET=$(AR_FOR_TARGET)" \
473        "BISON=$(BISON)" \
474        "BISONFLAGS=$(BISONFLAGS)" \
475        "CC=set-by-configure" \
476        "CFLAGS=$(CFLAGS)" \
477        "GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
478        "LDFLAGS=$(LDFLAGS)" \
479        "LEX=$(LEX)" \
480        "LEXFLAGS=$(LEXFLAGS)" \
481        "MAKEINFO=$(MAKEINFO)" \
482        "MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \
483        "RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \
484        "RANLIB_TEST_FOR_TARGET=$(RANLIB_TEST_FOR_TARGET)" \
485        "SHELL=$(SHELL)" \
486        "exeext=$(exeext)" \
487        "objext=$(objext)" \
488        "exec_prefix=$(exec_prefix)" \
489        "prefix=$(prefix)" \
490        "tooldir=$(tooldir)" \
491        "bindir=$(bindir)" \
492        "libsubdir=$(libsubdir)"
493
494# Lists of files for various purposes.
495
496# A list of all the language-specific executables.
497# This is overridden by configure.
498COMPILERS = cc1$(exeext) cc1obj$(exeext)
499
500# Language-specific object files for C.
501C_OBJS = c-parse.o c-lang.o c-lex.o c-pragma.o \
502   c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o c-iterate.o
503
504# Language-specific object files for Objective C.
505OBJC_OBJS = objc-parse.o objc-act.o c-lex.o c-pragma.o \
506   c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o c-iterate.o
507
508# Files specific to the C interpreter bytecode compiler(s).
509BC_OBJS = bc-emit.o bc-optab.o
510
511# Bytecode header files constructed at build time; vmsconfig.com wants this.
512BC_ALL = bc-arity.h bc-opcode.h bc-opname.h
513
514# Language-independent object files.
515OBJS = toplev.o version.o tree.o print-tree.o stor-layout.o fold-const.o \
516 function.o stmt.o expr.o calls.o expmed.o explow.o optabs.o varasm.o \
517 rtl.o print-rtl.o rtlanal.o emit-rtl.o real.o \
518 dbxout.o sdbout.o dwarfout.o xcoffout.o \
519 integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \
520 regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \
521 insn-peep.o reorg.o sched.o final.o recog.o reg-stack.o \
522 insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \
523 insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS)
524
525# GEN files are listed separately, so they can be built before doing parallel
526#  makes for cc1 or cc1plus.  Otherwise sequent parallel make attempts to load
527#  them before rtl.o is compiled.
528GEN= genemit genoutput genrecog genextract genflags gencodes genconfig genpeep
529
530CCCP=cccp
531# Uncomment this line if you want to use cppmain (w/cpplib) as cpp.
532#CCCP=cppmain
533
534# Files to be copied away after each stage in building.
535STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
536 insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
537 insn-attr.h insn-attrtab.c insn-opinit.c \
538 stamp-flags stamp-config stamp-codes \
539 stamp-output stamp-recog stamp-emit stamp-extract stamp-peep \
540 stamp-attr stamp-attrtab stamp-opinit stamp-proto stamp-crt stamp-crtS \
541 genemit$(exeext) genoutput$(exeext) genrecog$(exeext) genextract$(exeext) \
542 genflags$(exeext) gencodes$(exeext) genconfig$(exeext) genpeep$(exeext) \
543 genattrtab$(exeext) genattr$(exeext) genopinit$(exeext) \
544 $(BC_ALL) \
545 stamp-bcarity stamp-bcopcode stamp-bcopname \
546 bi-arity$(exeext) bi-opcode$(exeext) bi-opname$(exeext) \
547 $(GCC_PASSES) $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross$(exeext) \
548 $(CCCP)$(exeext) cc1obj$(exeext) enquire$(exeext) \
549 protoize$(exeext) unprotoize$(exeext) \
550 specs collect2$(exeext) $(USE_COLLECT2) underscore.c \
551 *.greg *.lreg *.combine *.flow *.cse *.jump *.rtl *.tree *.loop \
552 *.dbr *.jump2 *.sched *.cse2 *.sched2 *.stack \
553 *.[si] \
554 $(LANG_STAGESTUFF)
555
556# Members of libgcc1.a.
557LIB1FUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \
558   _lshrsi3 _ashrsi3 _ashlsi3 \
559   _divdf3 _muldf3 _negdf2 _adddf3 _subdf3 \
560   _fixdfsi _fixsfsi _floatsidf _floatsisf _truncdfsf2 _extendsfdf2 \
561   _addsf3 _negsf2 _subsf3 _mulsf3 _divsf3 \
562   _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 \
563   _eqsf2 _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2
564
565# Library members defined in libgcc2.c.
566LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \
567     _lshrdi3 _ashldi3 _ashrdi3 _ffsdi2 \
568    _udiv_w_sdiv _udivmoddi4 _cmpdi2 _ucmpdi2 _floatdidf _floatdisf \
569    _fixunsdfsi _fixunssfsi _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi \
570    _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \
571    _fixtfdi _fixunstfdi _floatditf \
572    __gcc_bcmp _varargs _eprintf _op_new _op_vnew _new_handler _op_delete \
573    _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \
574    _pure
575
576# The files that "belong" in CONFIG_H are deliberately omitted
577# because having them there would not be useful in actual practice.
578# All they would do is cause complete recompilation every time
579# one of the machine description files is edited.
580# That may or may not be what one wants to do.
581# If it is, rm *.o is an easy way to do it.
582# CONFIG_H = $(host_xm_file) $(tm_file)
583CONFIG_H =
584RTL_H = rtl.h rtl.def machmode.h machmode.def
585TREE_H = tree.h real.h tree.def machmode.h machmode.def
586BYTECODE_H = bytecode.h bc-emit.h bc-optab.h
587
588# Language makefile fragments.
589
590# The following targets define the interface between us and the languages.
591#
592# all.build, all.cross, start.encap, rest.encap,
593# info, dvi,
594# install-normal, install-common, install-info, install-man,
595# uninstall, distdir,
596# mostlyclean, clean, distclean, extraclean, maintainer-clean,
597# stage1, stage2, stage3, stage4
598#
599# Each language is linked in with a series of hooks (since we can't use `::'
600# targets).  The name of each hooked is "lang.${target_name}" (eg: lang.info).
601# Configure computes and adds these here.
602
603####language hooks
604
605# sed inserts language fragments after the following line.
606####language fragments
607
608# End of language makefile fragments.
609
610# Avoid a lot of time thinking about remaking Makefile.in and *.def.
611.SUFFIXES: .in .def
612
613Makefile: $(srcdir)/Makefile.in $(srcdir)/configure $(srcdir)/version.c \
614   $(srcdir)/config/$(xmake_file) $(srcdir)/config/$(tmake_file) \
615   $(LANG_MAKEFILES)
616        cp config.status config.run
617        $(SHELL) config.run
618        rm -f config.run
619
620all.internal: start.encap rest.encap
621# This is what to compile if making a cross-compiler.
622# Note that we can compile enquire using the cross-compiler just built,
623# although we can't run it on this machine.
624all.cross: native gcc-cross specs stmp-headers $(LIBGCC) $(STMP_FIXPROTO) \
625        $(LIBGCC1_TEST) $(EXTRA_PARTS) lang.all.cross
626# This is what to compile if making gcc with a cross-compiler.
627all.build: native xgcc $(EXTRA_PARTS) lang.all.build
628# This is what must be made before installing GCC and converting libraries.
629start.encap: native xgcc specs $(LIBGCC1) xlimits.h lang.start.encap
630# These can't be made until after GCC can run.
631rest.encap: stmp-headers $(LIBGCC) $(STMP_FIXPROTO) $(EXTRA_PARTS) lang.rest.encap
632# This is what is made with the host's compiler
633# whether making a cross compiler or not.
634native: config.status cpp $(LANGUAGES) $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)
635
636# Define the names for selecting languages in LANGUAGES.
637C c: cc1
638OBJC objc: cc1obj objc-runtime
639OBJECTIVE-C objective-c: cc1obj objc-runtime
640PROTO: proto
641
642# Tell GNU make these are phony targets.
643.PHONY: C c OBJC objc OBJECTIVE-C objective-c PROTO proto
644
645# Really, really stupid make features, such as SUN's KEEP_STATE, may force
646# a target to build even if it is up-to-date.  So we must verify that
647# config.status does not exist before failing.
648config.status:
649        @if [ ! -f config.status ] ; then \
650          echo You must configure gcc.  Look at the INSTALL file for details.; \
651          false; \
652        else \
653          true; \
654        fi
655
656# On the target machine, finish building a cross compiler.
657# This does the things that can't be done on the host machine.
658rest.cross: $(LIBGCC) gfloat.h specs
659
660# Verify that it works to compile and link libgcc1-test.
661# If it does, then there are sufficient replacements for libgcc1.a.
662libgcc1-test: libgcc1-test.o native $(GCC_PARTS)
663        @echo "Testing libgcc1.  Ignore linker warning messages."
664        $(GCC_FOR_TARGET) $(GCC_CFLAGS) libgcc1-test.o -o libgcc1-test \
665          -nostartfiles -nostdlib `$(GCC_FOR_TARGET) --print-libgcc-file-name`
666libgcc1-test.o: libgcc1-test.c native xgcc
667        $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -c $(srcdir)/libgcc1-test.c
668
669# Recompile all the language-independent object files.
670# This is used only if the user explicitly asks for it.
671compilations: ${OBJS}
672
673# Create a list of the language-independent object files so the language
674# subdirectories needn't mention their names explicitly.
675stamp-objlist: Makefile $(OBJS) $(BC_OBJS)
676        echo " $(OBJS) $(BC_OBJS)" | sed -e 's, \([a-z]\), ../\1,g' -e 's/\.o/$(objext)/g' >stamp-objlist
677
678# We call this executable `xgcc' rather than `gcc'
679# to avoid confusion if the current directory is in the path
680# and CC is `gcc'.  It is renamed to `gcc' when it is installed.
681xgcc: gcc.o version.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
682        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o version.o $(EXTRA_GCC_OBJS) $(LIBS)
683
684# Dump a specs file to make -B./ read these specs over installed ones.
685specs: xgcc
686        $(GCC_FOR_TARGET) -dumpspecs > tmp-specs
687        mv tmp-specs specs
688
689# We do want to create an executable named `xgcc', so we can use it to
690# compile libgcc2.a.
691# Also create gcc-cross, so that install-common will install properly.
692gcc-cross: xgcc
693        cp xgcc$(exeext) gcc-cross$(exeext)
694
695cc1: $(P) $(C_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
696        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) $(OBJS) $(BC_OBJS) $(LIBS)
697
698cc1obj: $(P) $(OBJC_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
699        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(OBJC_OBJS) $(OBJS) $(BC_OBJS) $(LIBS)
700
701# Copy float.h from its source.
702gfloat.h: $(FLOAT_H)
703        -rm -f gfloat.h
704        cp $(FLOAT_H) gfloat.h
705
706# Create float.h source for the native machine.
707float.h-nat: enquire
708        -./enquire -f > tmp-float.h
709        mv tmp-float.h float.h-nat
710
711# Create a dummy float.h source for a cross-compiler.
712float.h-cross:
713        echo "#error float.h values not known for cross-compiler" > t-float.h-cross
714        mv t-float.h-cross float.h-cross
715
716# Used to compile enquire with standard cc, but have forgotten why.
717# Let's try with GCC.
718enquire: enquire.o $(GCC_PARTS)
719        $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ENQUIRE_LDFLAGS) enquire.o -o $@
720enquire.o: $(srcdir)/enquire.c $(GCC_PASSES) stmp-int-hdrs
721# Breaking this line caused a problem with one version of GNU make.
722        $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(ENQUIRE_CFLAGS) -I. -c $(srcdir)/enquire.c
723
724# Build the version of limits.h that we will install.
725xlimits.h: glimits.h limitx.h limity.h
726        if $(LIMITS_H_TEST) ; then \
727          cat $(srcdir)/limitx.h $(srcdir)/glimits.h $(srcdir)/limity.h > tmp-xlimits.h; \
728        else \
729          cat $(srcdir)/glimits.h > tmp-xlimits.h; \
730        fi
731        mv tmp-xlimits.h xlimits.h
732
733# Build libgcc.a.
734# This is done in two parts because some functions, in libgcc1.c,
735# must be compiled with something other than GCC,
736# while the rest, in libgcc2.c, must be compiled with xgcc.
737# That means we can't do libgcc2.c until after xgcc, cc1, etc.
738
739# Use this as value of LIBGCC1 to cause conversion to GNU library format.
740# LIBCONVERT should put its output in libgcc1.conv.
741libgcc1.conv: libgcc1.a
742        $(LIBCONVERT) libgcc1.a libgcc1.conv
743
744# Use this as value of LIBGCC1 to inhibit use of libgcc1.c entirely.
745# Make an empty file instead.
746libgcc1.null: $(GCC_PASSES)
747        echo "__foo () {}" > dummy.c
748        $(GCC_FOR_TARGET) $(GCC_CFLAGS) -c dummy.c
749        $(OLDAR) $(OLDAR_FLAGS) libgcc1.null dummy$(objext)
750        rm -f dummy$(objext) dummy.c
751
752# This is $(LIBGCC1) for a cross-compiler.
753# We have no automatic way of building libgcc1.a,
754# so it's up to the installer to find a way to do that.
755# This rule deliberately does not depend on libgcc1.a
756# so that it will fail if the installer hasn't provided it.
757libgcc1.cross:
758        mv libgcc1.a libgcc1.cross || (echo You must find a way to make libgcc1.a; false)
759
760# Compile the library of arithmetic subroutines with the native compiler.
761# Don't compile it with GCC!
762# (That would cause most arithmetic functions to call themselves.)
763libgcc1.a: libgcc1.c $(CONFIG_H) $(LIB1FUNCS_EXTRA) config.status
764        -rm -f tmplibgcc1.a
765# Actually build it in tmplibgcc1.a, then rename at end,
766# so that libgcc1.a itself remains nonexistent if compilation is aborted.
767# -e causes any failing command to make this rule fail.
768# -e doesn't work in certain shells, so we test $$? as well.
769# lynx has a broken ar, it always complains when the initial library is
770# empty, thus this command works only if we don't do -e
771# There is a trailing backslash (\) deleted from the following line.
772#       set -e;
773        for name in $(LIB1FUNCS); \
774        do \
775          echo $${name}; \
776          rm -f $${name}$(objext); \
777          $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c -DL$${name} $(srcdir)/libgcc1.c; \
778          if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
779          mv libgcc1$(objext) $${name}$(objext); \
780          $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \
781          rm -f $${name}$(objext); \
782        done
783# Some shells crash when a loop has no items.
784# So make sure there is always at least one--`..'.
785# Then ignore it.
786# We don't use -e here because there are if statements
787# that should not make the command give up when the if condition is false.
788# Instead, we test for failure after each command where it matters.
789        for file in .. $(LIB1FUNCS_EXTRA); \
790        do \
791          if [ x$${file} != x.. ]; then \
792            name=`echo $${file} | sed -e 's/[.][cS]$$//' -e 's/[.]asm$$//'`; \
793            echo $${name}; \
794            if [ $${name}.asm = $${file} ]; then \
795              cp $${file} $${name}.s || exit 1; file=$${name}.s; \
796            else true; fi; \
797            $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c $${file}; \
798            if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
799            $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \
800            if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
801            rm -f $${name}.s $${name}$(objext); \
802          else true; \
803          fi; \
804        done
805        -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc1.a; else true; fi
806        mv tmplibgcc1.a libgcc1.a
807
808# Build libgcc1.a from assembler source.  LIB1ASMFUNCS is the list of
809# functions.  LIB1ASMSRC is the name of the source file in the config
810# subdirectory.
811libgcc1-asm.a: libgcc2.ready config.status $(srcdir)/config/$(LIB1ASMSRC)
812        -rm -f tmplibgcc1.a libgcc1.S
813        cp $(srcdir)/config/$(LIB1ASMSRC) libgcc1.S
814# Actually build it in tmplibgcc1.a, then rename at end,
815# so that libgcc1-asm.a itself remains nonexistent if compilation is aborted.
816# -e causes any failing command to make this rule fail.
817# -e doesn't work in certain shells, so we test $$? as well.
818# lynx has a broken ar, it always complains when the initial library is
819# empty, thus this command works only if we don't do -e
820# There is a trailing backslash (\) deleted from the following line.
821#       set -e;
822        for name in $(LIB1ASMFUNCS); \
823        do \
824          echo $${name}; \
825          $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} libgcc1.S; \
826          if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
827          mv libgcc1$(objext) $${name}$(objext); \
828          $(AR) $(AR_FLAGS) tmplibgcc1.a $${name}$(objext); \
829          rm -f $${name}$(objext); \
830        done
831        -rm -f libgcc1.S
832        mv tmplibgcc1.a libgcc1-asm.a
833
834# Generate assembly versions of the functions required for libgcc1.
835# You'll still need to massage the code by hand (possibly hacking
836# underscores and local labels) but this will get you started.
837libgcc1.S: libgcc1.c $(CONFIG_H) config.status
838        -rm -f libgcc1.S
839        touch libgcc1.S
840        for name in $(LIB1FUNCS); \
841        do \
842          echo $${name}; \
843          $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -S -DL$${name} $(srcdir)/libgcc1.c; \
844          if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
845          echo '#ifdef ' L$${name} >> libgcc1.S; \
846          cat  libgcc1.s >> libgcc1.S; \
847          echo '#endif /*' L$${name} '*/' >> libgcc1.S; \
848          echo "" >> libgcc1.S; \
849        done
850
851# Compiling libgcc2.a requires making sure that cc1, etc. have been compiled.
852# But recompiling cc1 should not force recompilation of libgcc2.a.
853# If you want to force recompilation, delete libgcc2.a.
854libgcc2.ready: $(GCC_PASSES) $(LIBGCC2_DEPS) stmp-int-hdrs
855        -if [ -f libgcc2.ready ] ; then \
856                true; \
857        else \
858                touch libgcc2.ready; \
859        fi
860
861libgcc2.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \
862   machmode.h longlong.h gbl-ctors.h config.status
863# Actually build it in tmplibgcc2.a, then rename at end,
864# so that libgcc2.a itself remains nonexistent if compilation is aborted.
865        -rm -f tmplibgcc2.a
866# -e causes any failing command to make this rule fail.
867# -e doesn't work in certain shells, so we test $$? as well.
868# lynx has a broken ar, it always complains when the initial library is
869# empty, thus this command works only if we don't do -e
870# There is a trailing backslash (\) deleted from the following line.
871#       set -e;
872        for name in $(LIB2FUNCS); \
873        do \
874          echo $${name}; \
875          $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
876              $(srcdir)/libgcc2.c -o $${name}$(objext); \
877          if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
878          $(AR) $(AR_FLAGS) tmplibgcc2.a $${name}$(objext); \
879          rm -f $${name}$(objext); \
880        done
881# Some shells crash when a loop has no items.
882# So make sure there is always at least one--`..'.
883# Then ignore it.
884# We don't use -e here because there are if statements
885# that should not make the command give up when the if condition is false.
886# Instead, we test for failure after each command where it matters.
887        for file in .. $(LIB2FUNCS_EXTRA); \
888        do \
889          if [ x$${file} != x.. ]; then \
890            name=`echo $${file} | sed -e 's/[.][cS]$$//' -e 's/[.]asm$$//'`; \
891            oname=` echo $${name} | sed -e 's,.*/,,'`; \
892            echo $${name}; \
893            if [ $${name}.asm = $${file} ]; then \
894              cp $${file} $${name}.s || exit 1; file=$${name}.s; \
895            else true; fi; \
896            $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
897            if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
898            $(AR) $(AR_FLAGS) tmplibgcc2.a $${oname}$(objext); \
899            rm -f $${name}.s $${oname}$(objext); \
900          else true; \
901          fi; \
902        done
903        mv tmplibgcc2.a libgcc2.a
904# These lines were deleted from above the mv command
905# because ranlibing libgcc.a itself should suffice.
906#       -if [ x${HPUX_GAS} = x ] ; then \
907#         if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc2.a; else true; fi; \
908#       else true; fi
909
910# Combine the various libraries into a single library, libgcc.a.
911libgcc.a: $(LIBGCC1) $(LIBGCC2)
912        -rm -rf tmplibgcc.a libgcc.a tmpcopy
913        mkdir tmpcopy
914        -if [ x$(LIBGCC1) != x ];                       \
915        then (cd tmpcopy; $(AR) x ../$(LIBGCC1));       \
916        else true;                                      \
917        fi
918# Some versions of ar (specifically the one in RISC/os 5.x), create an
919# unwritable table of contents file, and then print an error message when
920# the second ar command tries to overwrite this file.  To avoid the error
921# message from ar, we make sure all files are writable.
922        -(cd tmpcopy; chmod +w * > /dev/null 2>&1)
923        (cd tmpcopy; $(AR) x ../$(LIBGCC2))
924        (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *$(objext))
925        rm -rf tmpcopy
926        -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
927# Actually build it in tmplibgcc.a, then rename at end,
928# so that libgcc.a itself remains nonexistent if compilation is aborted.
929        mv tmplibgcc.a libgcc.a
930
931# Use the genmultilib shell script to generate the information the gcc
932# driver program needs to select the library directory based on the
933# switches.
934multilib.h: $(srcdir)/genmultilib Makefile
935        $(SHELL) $(srcdir)/genmultilib "$(MULTILIB_OPTIONS)" \
936          "$(MULTILIB_DIRNAMES)" "$(MULTILIB_MATCHES)" > multilib.h
937
938# Build multiple copies of libgcc.a, one for each target switch.
939stmp-multilib: $(LIBGCC1) libgcc2.c libgcc2.ready $(CONFIG_H) \
940   $(LIB2FUNCS_EXTRA) machmode.h longlong.h gbl-ctors.h config.status
941        for i in `$(GCC_FOR_TARGET) --print-multi-lib`; do \
942          dir=`echo $$i | sed -e 's/;.*$$//'`; \
943          flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
944          $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
945            AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" \
946            RANLIB="$(RANLIB)" RANLIB_TEST="$(RANLIB_TEST)" \
947            HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
948            LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS) $${flags}" \
949            LIBGCC1="$(LIBGCC1)" LIBGCC2="$(LIBGCC2)" \
950            dir="$${dir}" stmp-multilib-sub; \
951          if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
952        done
953        touch stmp-multilib
954
955# Subroutine of stmp-multilib so make -n works.
956stmp-multilib-sub:
957        rm -f $(dir)/libgcc.a $(LIBGCC2)
958        $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
959          AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" \
960          HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
961          LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" $(LIBGCC2)
962        if [ x$(LIBGCC1) != xlibgcc1-asm.a ]; \
963        then true; \
964        else rm -f $(LIBGCC1); \
965        fi
966        if [ x$(LIBGCC1) != xlibgcc1-asm.a ]; \
967        then true; \
968        else \
969          $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
970            AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" \
971            HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
972            LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" $(LIBGCC1); \
973        fi
974        rm -rf tmplibgcc.a tmpcopy
975        mkdir tmpcopy
976        if [ x$(LIBGCC1) != x ]; \
977        then (cd tmpcopy; $(AR) x ../$(LIBGCC1)); \
978        else true; \
979        fi
980        (cd tmpcopy; $(AR) x ../$(LIBGCC2))
981        (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *$(objext))
982        rm -rf libgcc2.a tmpcopy
983        if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
984        if [ -d $(dir) ]; then true; else mkdir $(dir); fi
985        mv tmplibgcc.a $(dir)/libgcc.a
986
987objc-runtime: libobjc.a
988
989# Build the Objective C runtime library.
990libobjc.a: cc1obj stmp-int-hdrs libgcc2.ready $(USE_COLLECT2) $(EXTRA_PARTS)
991        if [ -d objc ]; then true; else mkdir objc; fi
992        thisdir1=`pwd`; \
993        srcdir1=`cd $(srcdir); pwd`; \
994        cd objc; \
995        $(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
996          srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
997          GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
998          GCC_CFLAGS="$(GCC_CFLAGS)"
999        -rm -f libobjc.a
1000        ln objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
1001        -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
1002
1003# This is used by objc/Makefile if the user runs that directly.
1004sublibobjc.a: cc1obj stmp-int-hdrs libgcc2.ready
1005        thisdir1=`pwd`; \
1006        srcdir1=`cd $(srcdir); pwd`; \
1007        cd objc; \
1008        $(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
1009          srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
1010          GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \
1011          GCC_CFLAGS="$(GCC_CFLAGS)"
1012
1013# Compile two additional files that are linked with every program
1014# linked using GCC on systems using COFF or ELF, for the sake of C++
1015# constructors.
1016crtbegin.o: stamp-crt ; @true
1017crtend.o: stamp-crt; @true
1018
1019stamp-crt:      crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
1020        $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
1021          -DCRT_BEGIN -finhibit-size-directive -fno-inline-functions \
1022          -g0 -c $(srcdir)/crtstuff.c
1023        mv crtstuff$(objext) crtbegin$(objext)
1024        $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
1025          -DCRT_END -finhibit-size-directive -fno-inline-functions \
1026          -g0 -c $(srcdir)/crtstuff.c
1027        mv crtstuff$(objext) crtend$(objext)
1028        touch stamp-crt
1029
1030# On some systems we also want to install versions of these files
1031# compiled using PIC for use in shared libraries.
1032crtbeginS.o crtendS.o: stamp-crtS ; @true
1033
1034stamp-crtS:     crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
1035        $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
1036          -DCRT_BEGIN -finhibit-size-directive -fno-inline-functions \
1037          -g0 -c $(srcdir)/crtstuff.c -fPIC
1038        mv crtstuff$(objext) crtbeginS$(objext)
1039        $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
1040          -DCRT_END -finhibit-size-directive -fno-inline-functions \
1041          -g0 -c $(srcdir)/crtstuff.c -fPIC
1042        mv crtstuff$(objext) crtendS$(objext)
1043        touch stamp-crtS
1044
1045# Compiling object files from source files.
1046
1047# Note that dependencies on obstack.h are not written
1048# because that file is not part of GCC.
1049
1050# C language specific files.
1051
1052c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h \
1053    $(srcdir)/c-parse.h c-tree.h input.h flags.h
1054        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/c-parse.c
1055
1056c-decl.o : c-decl.c $(CONFIG_H) $(TREE_H) c-tree.h c-lex.h flags.h output.h
1057c-typeck.o : c-typeck.c $(CONFIG_H) $(TREE_H) c-tree.h flags.h output.h
1058c-lang.o : c-lang.c $(CONFIG_H) $(TREE_H)
1059c-lex.o : c-lex.c $(CONFIG_H) $(TREE_H) c-lex.h c-tree.h $(srcdir)/c-parse.h \
1060    input.h flags.h $(srcdir)/c-gperf.h c-pragma.h
1061c-aux-info.o : c-aux-info.c  $(CONFIG_H) $(TREE_H) c-tree.h flags.h
1062c-convert.o : c-convert.c $(CONFIG_H) $(TREE_H) flags.h
1063c-pragma.o: c-pragma.c $(CONFIG_H) $(TREE_H) c-pragma.h
1064c-iterate.o: c-iterate.c $(CONFIG_H) $(TREE_H) $(RTL_H) c-tree.h flags.h
1065
1066# To make a configuration always use collect2, set USE_COLLECT2 to ld.
1067ld: collect2
1068        rm -f ld$(exeext)
1069        ln collect2$(exeext) ld$(exeext) > /dev/null 2>&1 \
1070           || cp collect2$(exeext) ld$(exeext)
1071
1072collect2 : collect2.o cplus-dem.o underscore.o version.o $(LIBDEPS)
1073# Don't try modifying collect2 (aka ld) in place--it might be linking this.
1074        -rm -f collect2$(exeext)
1075        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ collect2.o \
1076          cplus-dem.o underscore.o version.o $(LIBS)
1077
1078collect2.o : collect2.c $(CONFIG_H) gstab.h obstack.h demangle.h
1079        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES)  \
1080        -DTARGET_MACHINE=\"$(target)\" $(MAYBE_USE_COLLECT2) \
1081        -c `echo $(srcdir)/collect2.c | sed 's,^\./,,'`
1082
1083cplus-dem.o: cplus-dem.c demangle.h
1084
1085underscore.c: stamp-under ; @true
1086
1087stamp-under: $(GCC_PASSES)
1088        echo "int xxy_us_dummy;" >tmp-dum.c
1089        $(GCC_FOR_TARGET) -S tmp-dum.c
1090        echo '/*WARNING: This file is automatically generated!*/' >tmp-under.c
1091        if grep _xxy_us_dummy tmp-dum.s > /dev/null ; then \
1092          echo "int prepends_underscore = 1;" >>tmp-under.c; \
1093        else \
1094          echo "int prepends_underscore = 0;" >>tmp-under.c; \
1095        fi
1096        $(srcdir)/move-if-change tmp-under.c underscore.c
1097        -rm -f tmp-dum.c tmp-dum.s
1098        touch stamp-under
1099
1100# Objective C language specific files.
1101
1102objc-parse.o : $(srcdir)/objc-parse.c $(CONFIG_H) $(TREE_H) c-lex.h \
1103   c-tree.h input.h flags.h objc-act.h
1104        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/objc-parse.c
1105
1106objc-act.o : objc-act.c $(CONFIG_H) $(TREE_H) $(RTL_H) c-tree.h c-lex.h \
1107   flags.h objc-act.h input.h function.h $(srcdir)/c-parse.h
1108
1109# A file used by all variants of C.
1110
1111c-common.o : c-common.c $(CONFIG_H) $(TREE_H) c-tree.h c-lex.h flags.h
1112
1113# Language-independent files.
1114
1115gcc.o: gcc.c $(CONFIG_H) multilib.h config.status $(lang_specs_files)
1116        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
1117  -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
1118  -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
1119  -DDEFAULT_TARGET_VERSION=\"$(version)\" \
1120  -DDEFAULT_TARGET_MACHINE=\"$(target)\" \
1121  -DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\" \
1122  $(MAYBE_TARGET_DEFAULT) \
1123  -c `echo $(srcdir)/gcc.c | sed 's,^\./,,'`
1124
1125dumpvers: dumpvers.c
1126
1127version.o: version.c
1128obstack.o: obstack.c
1129
1130convert.o: convert.c $(CONFIG_H) $(TREE_H) flags.h convert.h
1131
1132tree.o : tree.c $(CONFIG_H) $(TREE_H) flags.h function.h
1133print-tree.o : print-tree.c $(CONFIG_H) $(TREE_H)
1134stor-layout.o : stor-layout.c $(CONFIG_H) $(TREE_H) flags.h function.h
1135fold-const.o : fold-const.c $(CONFIG_H) $(TREE_H) flags.h
1136toplev.o : toplev.c $(CONFIG_H) $(TREE_H) $(RTL_H) bytecode.h bc-emit.h \
1137   flags.h input.h insn-attr.h xcoffout.h defaults.h output.h \
1138   $(lang_options_files)
1139        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
1140          $(MAYBE_TARGET_DEFAULT) $(MAYBE_USE_COLLECT2) \
1141          -c `echo $(srcdir)/toplev.c | sed 's,^\./,,'`
1142
1143rtl.o : rtl.c $(CONFIG_H) $(RTL_H)
1144
1145print-rtl.o : print-rtl.c $(CONFIG_H) $(RTL_H)
1146rtlanal.o : rtlanal.c $(CONFIG_H) $(RTL_H)
1147
1148varasm.o : varasm.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h function.h \
1149   defaults.h insn-codes.h expr.h hard-reg-set.h regs.h xcoffout.h \
1150   output.h bytecode.h c-pragma.h
1151function.o : function.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h  \
1152   insn-flags.h insn-codes.h expr.h regs.h hard-reg-set.h insn-config.h \
1153   recog.h output.h bytecode.h
1154stmt.o : stmt.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h  \
1155   insn-flags.h insn-config.h insn-codes.h hard-reg-set.h expr.h loop.h \
1156   recog.h bytecode.h bc-typecd.h bc-typecd.def bc-opcode.h bc-optab.h \
1157   bc-emit.h
1158expr.o : expr.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h regs.h \
1159   insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
1160   typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
1161   bc-emit.h modemap.def
1162calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
1163   insn-flags.h
1164expmed.o : expmed.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h  \
1165   insn-flags.h insn-config.h insn-codes.h expr.h recog.h real.h
1166explow.o : explow.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h hard-reg-set.h \
1167   insn-config.h expr.h recog.h insn-flags.h insn-codes.h
1168optabs.o : optabs.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h  \
1169   insn-flags.h insn-config.h insn-codes.h expr.h recog.h reload.h
1170dbxout.o : dbxout.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h regs.h \
1171   insn-config.h reload.h gstab.h xcoffout.h defaults.h output.h
1172sdbout.o : sdbout.c $(CONFIG_H) $(TREE_H) $(RTL_H) gsyms.h flags.h \
1173   insn-config.h reload.h
1174dwarfout.o : dwarfout.c $(CONFIG_H) $(TREE_H) $(RTL_H) dwarf.h flags.h \
1175   insn-config.h reload.h output.h defaults.h
1176xcoffout.o : xcoffout.c $(CONFIG_H) $(TREE_H) $(RTL_H) xcoffout.h flags.h
1177emit-rtl.o : emit-rtl.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \
1178   function.h regs.h insn-config.h insn-codes.h real.h expr.h bytecode.h \
1179   bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h bc-emit.h bc-opname.h
1180real.o : real.c $(CONFIG_H) $(TREE_H)
1181getpwd.o : getpwd.c $(CONFIG_H)
1182
1183integrate.o : integrate.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h integrate.h \
1184   insn-flags.h insn-config.h insn-codes.h expr.h real.h function.h \
1185   bytecode.h
1186
1187jump.o : jump.c $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h \
1188   insn-config.h insn-flags.h insn-codes.h expr.h real.h
1189stupid.o : stupid.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h
1190
1191cse.o : cse.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h real.h \
1192   insn-config.h recog.h
1193loop.o : loop.c $(CONFIG_H) $(RTL_H) flags.h loop.h insn-config.h \
1194   insn-flags.h insn-codes.h regs.h hard-reg-set.h recog.h expr.h real.h
1195unroll.o : unroll.c $(CONFIG_H) $(RTL_H) insn-config.h insn-codes.h \
1196   integrate.h regs.h flags.h expr.h loop.h
1197flow.o : flow.c $(CONFIG_H) $(RTL_H) flags.h insn-config.h \
1198   basic-block.h regs.h hard-reg-set.h output.h
1199combine.o : combine.c $(CONFIG_H) $(RTL_H) flags.h  \
1200   insn-config.h insn-flags.h insn-codes.h insn-attr.h regs.h expr.h \
1201   basic-block.h recog.h real.h hard-reg-set.h
1202regclass.o : regclass.c $(CONFIG_H) $(RTL_H) hard-reg-set.h flags.h \
1203   basic-block.h regs.h insn-config.h recog.h reload.h real.h bytecode.h
1204local-alloc.o : local-alloc.c $(CONFIG_H) $(RTL_H) flags.h basic-block.h \
1205   regs.h hard-reg-set.h insn-config.h recog.h output.h
1206global.o : global.c $(CONFIG_H) $(RTL_H) flags.h  \
1207   basic-block.h regs.h hard-reg-set.h insn-config.h output.h
1208
1209reload.o : reload.c $(CONFIG_H) $(RTL_H) flags.h output.h \
1210   reload.h recog.h hard-reg-set.h insn-config.h insn-codes.h regs.h real.h
1211reload1.o : reload1.c $(CONFIG_H) $(RTL_H) real.h flags.h expr.h \
1212   reload.h regs.h hard-reg-set.h insn-config.h insn-flags.h insn-codes.h \
1213   basic-block.h recog.h output.h
1214caller-save.o : caller-save.c $(CONFIG_H) $(RTL_H) flags.h \
1215   regs.h hard-reg-set.h insn-codes.h insn-config.h basic-block.h recog.h \
1216   reload.h expr.h
1217reorg.o : reorg.c $(CONFIG_H) $(RTL_H) conditions.h hard-reg-set.h \
1218   basic-block.h regs.h insn-config.h insn-attr.h insn-flags.h recog.h \
1219   flags.h output.h
1220sched.o : sched.c $(CONFIG_H) $(RTL_H) basic-block.h regs.h hard-reg-set.h \
1221   flags.h insn-config.h insn-attr.h
1222final.o : final.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h regs.h \
1223   recog.h conditions.h insn-config.h insn-attr.h real.h output.h \
1224   hard-reg-set.h insn-flags.h insn-codes.h gstab.h xcoffout.h defaults.h
1225recog.o : recog.c $(CONFIG_H) $(RTL_H)  \
1226   regs.h recog.h hard-reg-set.h flags.h insn-config.h insn-attr.h \
1227   insn-flags.h insn-codes.h real.h
1228reg-stack.o : reg-stack.c $(CONFIG_H) $(RTL_H) $(TREE_H) \
1229   regs.h hard-reg-set.h flags.h insn-config.h
1230
1231$(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) \
1232   $(RTL_H) regs.h hard-reg-set.h real.h insn-config.h conditions.h \
1233   insn-flags.h output.h insn-attr.h insn-codes.h
1234        $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(out_file)
1235
1236# Build auxiliary files that support ecoff format.
1237mips-tfile: mips-tfile.o version.o $(LIBDEPS)
1238        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tfile.o version.o $(LIBS)
1239
1240mips-tfile.o : mips-tfile.c $(CONFIG_H) $(RTL_H)
1241
1242mips-tdump: mips-tdump.o version.o $(LIBDEPS)
1243        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tdump.o version.o $(LIBS)
1244
1245mips-tdump.o : mips-tdump.c $(CONFIG_H) $(RTL_H)
1246
1247# Build file to support OSF/rose half-pic format.
1248halfpic.o: halfpic.c $(CONFIG_H) $(RTL_H) $(TREE_H)
1249
1250# Normally this target is not used; but it is used if you
1251# define ALLOCA=alloca.o.  In that case, you must get a suitable alloca.c
1252# from the GNU Emacs distribution.
1253alloca.o:       alloca.c
1254        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(ALLOCA_FLAGS) \
1255          -c `echo $(srcdir)/alloca.c | sed 's,^\./,,'`
1256        $(ALLOCA_FINISH)
1257
1258# Generate header and source files from the machine description,
1259# and compile them.
1260
1261.PRECIOUS: insn-config.h insn-flags.h insn-codes.h \
1262  insn-emit.c insn-recog.c insn-extract.c insn-output.c insn-peep.c \
1263  insn-attr.h insn-attrtab.c
1264
1265# The following pair of rules has this effect:
1266# genconfig is run only if the md has changed since genconfig was last run;
1267# but the file insn-config.h is touched only when its contents actually change.
1268
1269# Each of the other insn-* files is handled by a similar pair of rules.
1270
1271# This causes an anomaly in the results of make -n
1272# because insn-* is older than stamp-*
1273# and thus make -n thinks that insn-* will be updated
1274# and force recompilation of things that depend on it.
1275# We use move-if-change precisely to avoid such recompilation.
1276# But there is no way to teach make -n that it will be avoided.
1277
1278# Each of the insn-*.[ch] rules has a semicolon at the end,
1279# for otherwise the system Make on SunOS 4.1 never tries
1280# to recompile insn-*.o.  To avoid problems and extra noise from
1281# versions of make which don't like empty commands (nothing after the
1282# trailing `;'), we call true for each.
1283
1284insn-config.h: stamp-config ; @true
1285stamp-config : $(md_file) genconfig $(srcdir)/move-if-change
1286        ./genconfig $(md_file) > tmp-config.h
1287        $(srcdir)/move-if-change tmp-config.h insn-config.h
1288        touch stamp-config
1289
1290insn-flags.h: stamp-flags ; @true
1291stamp-flags : $(md_file) genflags $(srcdir)/move-if-change
1292        ./genflags $(md_file) > tmp-flags.h
1293        $(srcdir)/move-if-change tmp-flags.h insn-flags.h
1294        touch stamp-flags
1295
1296insn-codes.h: stamp-codes ; @true
1297stamp-codes : $(md_file) gencodes $(srcdir)/move-if-change
1298        ./gencodes $(md_file) > tmp-codes.h
1299        $(srcdir)/move-if-change tmp-codes.h insn-codes.h
1300        touch stamp-codes
1301
1302insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) expr.h real.h output.h \
1303  insn-config.h insn-flags.h insn-codes.h
1304        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c
1305
1306insn-emit.c: stamp-emit ; @true
1307stamp-emit : $(md_file) genemit $(srcdir)/move-if-change
1308        ./genemit $(md_file) > tmp-emit.c
1309        $(srcdir)/move-if-change tmp-emit.c insn-emit.c
1310        touch stamp-emit
1311
1312insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h recog.h \
1313  real.h output.h flags.h
1314        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c
1315
1316insn-recog.c: stamp-recog ; @true
1317stamp-recog : $(md_file) genrecog $(srcdir)/move-if-change
1318        ./genrecog $(md_file) > tmp-recog.c
1319        $(srcdir)/move-if-change tmp-recog.c insn-recog.c
1320        touch stamp-recog
1321
1322insn-opinit.o : insn-opinit.c $(CONFIG_H) $(RTL_H) insn-codes.h insn-flags.h \
1323  insn-config.h flags.h rtl.h recog.h expr.h reload.h
1324        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c
1325
1326insn-opinit.c: stamp-opinit ; @true
1327stamp-opinit : $(md_file) genopinit $(srcdir)/move-if-change
1328        ./genopinit $(md_file) > tmp-opinit.c
1329        $(srcdir)/move-if-change tmp-opinit.c insn-opinit.c
1330        touch stamp-opinit
1331
1332insn-extract.o : insn-extract.c $(CONFIG_H) $(RTL_H)
1333        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-extract.c
1334
1335insn-extract.c: stamp-extract ; @true
1336stamp-extract : $(md_file) genextract $(srcdir)/move-if-change
1337        ./genextract $(md_file) > tmp-extract.c
1338        $(srcdir)/move-if-change tmp-extract.c insn-extract.c
1339        touch stamp-extract
1340
1341insn-peep.o : insn-peep.c $(CONFIG_H) $(RTL_H) regs.h output.h real.h
1342        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-peep.c
1343
1344insn-peep.c: stamp-peep ; @true
1345stamp-peep : $(md_file) genpeep $(srcdir)/move-if-change
1346        ./genpeep $(md_file) > tmp-peep.c
1347        $(srcdir)/move-if-change tmp-peep.c insn-peep.c
1348        touch stamp-peep
1349
1350insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(RTL_H) regs.h real.h output.h \
1351     insn-attr.h insn-config.h
1352        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c
1353
1354insn-attr.h: stamp-attr ; @true
1355stamp-attr : $(md_file) genattr $(srcdir)/move-if-change
1356        ./genattr $(md_file) > tmp-attr.h
1357        $(srcdir)/move-if-change tmp-attr.h insn-attr.h
1358        touch stamp-attr
1359
1360insn-attrtab.c: stamp-attrtab ; @true
1361stamp-attrtab : $(md_file) genattrtab $(srcdir)/move-if-change
1362        if cmp -s $(PREMADE_ATTRTAB_MD) $(md_file);     \
1363        then                                    \
1364          echo Using $(PREMADE_ATTRTAB);        \
1365          cp $(PREMADE_ATTRTAB) tmp-attrtab.c;  \
1366        else                                    \
1367          ./genattrtab $(md_file) > tmp-attrtab.c;      \
1368        fi
1369        $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c
1370        touch stamp-attrtab
1371
1372insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) regs.h real.h conditions.h \
1373    hard-reg-set.h insn-config.h insn-flags.h insn-attr.h output.h recog.h \
1374    insn-codes.h
1375        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c
1376
1377insn-output.c: stamp-output ; @true
1378stamp-output : $(md_file) genoutput $(srcdir)/move-if-change
1379        ./genoutput $(md_file) > tmp-output.c
1380        $(srcdir)/move-if-change tmp-output.c insn-output.c
1381        touch stamp-output
1382
1383# Compile the programs that generate insn-* from the machine description.
1384# They are compiled with $(HOST_CC), and associated libraries,
1385# since they need to run on this machine
1386# even if GCC is being compiled to run on some other machine.
1387
1388# $(CONFIG_H) is omitted from the deps of the gen*.o
1389# because these programs don't really depend on anything
1390# about the target machine.  They do depend on config.h itself,
1391# since that describes the host machine.
1392
1393# Pass the md file through cpp if the target requests it.
1394$(MD_FILE): $(MD_DEPS)
1395        rm -f $@
1396        $(MD_CPP) $(MD_CPPFLAGS) $(md_file) | sed 's/^# /; /g' > tmp-$@
1397        mv tmp-$@ $@
1398
1399genconfig : genconfig.o $(HOST_RTL) $(HOST_LIBDEPS)
1400        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1401          genconfig.o $(HOST_RTL) $(HOST_LIBS)
1402
1403genconfig.o : genconfig.c $(RTL_H) $(build_xm_file)
1404        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genconfig.c
1405
1406genflags : genflags.o $(HOST_RTL) $(HOST_LIBDEPS)
1407        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1408         genflags.o $(HOST_RTL) $(HOST_LIBS)
1409
1410genflags.o : genflags.c $(RTL_H) $(build_xm_file)
1411        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genflags.c
1412
1413gencodes : gencodes.o $(HOST_RTL) $(HOST_LIBDEPS)
1414        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1415         gencodes.o $(HOST_RTL) $(HOST_LIBS)
1416
1417gencodes.o : gencodes.c $(RTL_H) $(build_xm_file)
1418        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gencodes.c
1419
1420genemit : genemit.o $(HOST_RTL) $(HOST_LIBDEPS)
1421        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1422         genemit.o $(HOST_RTL) $(HOST_LIBS)
1423
1424genemit.o : genemit.c $(RTL_H) $(build_xm_file)
1425        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genemit.c
1426
1427genopinit : genopinit.o $(HOST_RTL) $(HOST_LIBDEPS)
1428        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1429         genopinit.o $(HOST_RTL) $(HOST_LIBS)
1430
1431genopinit.o : genopinit.c $(RTL_H) $(build_xm_file)
1432        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genopinit.c
1433
1434genrecog : genrecog.o $(HOST_RTL) $(HOST_LIBDEPS)
1435        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1436         genrecog.o $(HOST_RTL) $(HOST_LIBS)
1437
1438genrecog.o : genrecog.c $(RTL_H) $(build_xm_file)
1439        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genrecog.c
1440
1441genextract : genextract.o $(HOST_RTL) $(HOST_LIBDEPS)
1442        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1443         genextract.o $(HOST_RTL) $(HOST_LIBS)
1444
1445genextract.o : genextract.c $(RTL_H) $(build_xm_file) insn-config.h
1446        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genextract.c
1447
1448genpeep : genpeep.o $(HOST_RTL) $(HOST_LIBDEPS)
1449        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1450         genpeep.o $(HOST_RTL) $(HOST_LIBS)
1451
1452genpeep.o : genpeep.c $(RTL_H) $(build_xm_file)
1453        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genpeep.c
1454
1455genattr : genattr.o $(HOST_RTL) $(HOST_LIBDEPS)
1456        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1457         genattr.o $(HOST_RTL) $(HOST_LIBS)
1458
1459genattr.o : genattr.c $(RTL_H) $(build_xm_file)
1460        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattr.c
1461
1462genattrtab : genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_RTLANAL) $(HOST_LIBDEPS)
1463        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1464         genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_RTLANAL) $(HOST_LIBS)
1465
1466genattrtab.o : genattrtab.c $(RTL_H)  $(build_xm_file) insn-config.h
1467        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattrtab.c
1468
1469genoutput : genoutput.o $(HOST_RTL) $(HOST_LIBDEPS)
1470        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1471         genoutput.o $(HOST_RTL) $(HOST_LIBS)
1472
1473genoutput.o : genoutput.c $(RTL_H) $(build_xm_file)
1474        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genoutput.c
1475
1476# Compile the libraries to be used by gen*.
1477# If we are not cross-building, gen* use the same .o's that cc1 will use,
1478# and HOST_PREFIX_1 is `foobar', just to ensure these rules don't conflict
1479# with the rules for rtl.o, alloca.o, etc.
1480$(HOST_PREFIX_1)rtl.o: $(srcdir)/rtl.c $(CONFIG_H) $(RTL_H)
1481        rm -f $(HOST_PREFIX)rtl.c
1482        sed -e 's/config[.]h/hconfig.h/' $(srcdir)/rtl.c > $(HOST_PREFIX)rtl.c
1483        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)rtl.c
1484
1485$(HOST_PREFIX_1)print-rtl.o: $(srcdir)/print-rtl.c $(CONFIG_H) $(RTL_H)
1486        rm -f $(HOST_PREFIX)print-rtl.c
1487        sed -e 's/config[.]h/hconfig.h/' $(srcdir)/print-rtl.c > $(HOST_PREFIX)print-rtl.c
1488        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)print-rtl.c
1489
1490$(HOST_PREFIX_1)rtlanal.o: $(srcdir)/rtlanal.c $(CONFIG_H) $(RTL_H)
1491        rm -f $(HOST_PREFIX)rtlanal.c
1492        sed -e 's/config[.]h/hconfig.h/' $(srcdir)/rtlanal.c > $(HOST_PREFIX)rtlanal.c
1493        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)rtlanal.c
1494
1495$(HOST_PREFIX_1)alloca.o: alloca.c
1496        rm -f $(HOST_PREFIX)alloca.c
1497        cp $(srcdir)/alloca.c $(HOST_PREFIX)alloca.c
1498        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)alloca.c
1499
1500$(HOST_PREFIX_1)obstack.o: obstack.c
1501        rm -f $(HOST_PREFIX)obstack.c
1502        sed -e 's/config[.]h/hconfig.h/' $(srcdir)/obstack.c > $(HOST_PREFIX)obstack.c
1503        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)obstack.c
1504
1505$(HOST_PREFIX_1)malloc.o: malloc.c
1506        rm -f $(HOST_PREFIX)malloc.c
1507        sed -e 's/config[.]h/hconfig.h/' $(srcdir)/malloc.c > $(HOST_PREFIX)malloc.c
1508        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)malloc.c
1509
1510# This satisfies the dependency that we get if you cross-compile a compiler
1511# that does not need to compile alloca, malloc or whatever.
1512$(HOST_PREFIX_1):
1513        touch $(HOST_PREFIX_1)
1514
1515# Remake bytecode files.
1516BI_OBJ=bi-parser.o bi-lexer.o bi-reverse.o
1517
1518bc-emit.o : bc-emit.c $(CONFIG_H) $(RTL_H) real.h $(BYTECODE_H) \
1519   bc-arity.h bc-opcode.h bc-typecd.h bc-typecd.def bi-run.h bytetypes.h
1520bc-optab.o : bc-optab.c $(CONFIG_H) $(REAL_H) $(BYTECODE_H) \
1521   bc-opcode.h bc-typecd.h bc-typecd.def
1522
1523bi-arity: bi-arity.o $(BI_OBJ) $(HOST_LIBDEPS)
1524        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1525         bi-arity.o $(BI_OBJ) $(HOST_LIBS)
1526bi-opcode: bi-opcode.o $(BI_OBJ) $(HOST_LIBDEPS)
1527        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1528         bi-opcode.o $(BI_OBJ) $(HOST_LIBS)
1529bi-opname: bi-opname.o $(BI_OBJ) $(HOST_LIBDEPS)
1530        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1531         bi-opname.o $(BI_OBJ) $(HOST_LIBS)
1532
1533bi-parser.o: $(srcdir)/bi-parser.c bi-defs.h $(build_xm_file)
1534        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
1535           $(srcdir)/bi-parser.c
1536bi-lexer.o: bi-lexer.c $(srcdir)/bi-parser.h $(build_xm_file)
1537        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
1538           $(srcdir)/bi-lexer.c
1539bi-arity.o: bi-arity.c bi-defs.h $(build_xm_file)
1540        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
1541           $(srcdir)/bi-arity.c
1542bi-opcode.o: bi-opcode.c bi-defs.h $(build_xm_file)
1543        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
1544           $(srcdir)/bi-opcode.c
1545bi-opname.o: bi-opname.c bi-defs.h $(build_xm_file)
1546        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
1547           $(srcdir)/bi-opname.c
1548bi-reverse.o: bi-reverse.c bi-defs.h
1549        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
1550           $(srcdir)/bi-reverse.c
1551
1552bc-arity.h: stamp-bcarity ; @true
1553stamp-bcarity : $(srcdir)/bytecode.def bi-arity $(srcdir)/move-if-change
1554        ./bi-arity < $(srcdir)/bytecode.def >tmp-bc-arity.h
1555        $(srcdir)/move-if-change tmp-bc-arity.h bc-arity.h
1556        touch stamp-bcarity
1557
1558bc-opcode.h: stamp-bcopcode ; @true
1559stamp-bcopcode : $(srcdir)/bytecode.def bi-opcode $(srcdir)/move-if-change
1560        ./bi-opcode < $(srcdir)/bytecode.def >tmp-bcopcd.h
1561        $(srcdir)/move-if-change tmp-bcopcd.h bc-opcode.h
1562        touch stamp-bcopcode
1563
1564bc-opname.h: stamp-bcopname ; @true
1565stamp-bcopname : $(srcdir)/bytecode.def bi-opname $(srcdir)/move-if-change
1566        ./bi-opname < $(srcdir)/bytecode.def >tmp-bcopnm.h
1567        $(srcdir)/move-if-change tmp-bcopnm.h bc-opname.h
1568        touch stamp-bcopname
1569
1570bytecode.mostlyclean:
1571        -rm -f bc-arity.h bc-opcode.h bc-opname.h
1572
1573bytecode.distclean bytecode.clean:      bytecode.mostlyclean
1574        -rm -f bi-arity bi-opcode bi-opname bi-lexer
1575
1576bytecode.maintainer-clean: bytecode.clean
1577        -rm -f bi-parser.c bi-parser.h
1578
1579
1580# Remake cpp and protoize.
1581
1582# Making the preprocessor
1583cpp: $(CCCP)
1584        -rm -f cpp$(exeext)
1585        ln $(CCCP)$(exeext) cpp$(exeext) > /dev/null 2>&1 \
1586         || cp $(CCCP)$(exeext) cpp$(exeext)
1587cccp: cccp.o cexp.o version.o $(LIBDEPS)
1588        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ cccp.o cexp.o \
1589          version.o $(LIBS)
1590cexp.o: $(srcdir)/cexp.c $(CONFIG_H)
1591        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/cexp.c
1592
1593cccp.o: cccp.c $(CONFIG_H) pcp.h version.c config.status
1594# The reason we use $(libdir)/g++-include rather than using libsubdir
1595# is for compatibility with the current version of libg++.
1596        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
1597          -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
1598          -DGPLUSPLUS_INCLUDE_DIR=\"$(gxx_include_dir)\" \
1599          -DLOCAL_INCLUDE_DIR=\"$(includedir)\" \
1600          -DCROSS_INCLUDE_DIR=\"$(libsubdir)/sys-include\" \
1601          -DTOOL_INCLUDE_DIR=\"$(tooldir)/include\" \
1602          -c `echo $(srcdir)/cccp.c | sed 's,^\./,,'`
1603
1604cppmain: cppmain.o cpplib.o cpphash.o cppalloc.o cpperror.o cppexp.o \
1605  version.o $(LIBDEPS)
1606        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ cppmain.o cpplib.o cpphash.o \
1607          cppalloc.o cpperror.o cppexp.o version.o $(LIBS)
1608
1609cpplib.o: cpplib.c $(CONFIG_H) cpplib.h cpphash.h config.status
1610        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
1611          -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
1612          -DGPLUSPLUS_INCLUDE_DIR=\"$(gxx_include_dir)\" \
1613          -DLOCAL_INCLUDE_DIR=\"$(includedir)\" \
1614          -DCROSS_INCLUDE_DIR=\"$(libsubdir)/sys-include\" \
1615          -DTOOL_INCLUDE_DIR=\"$(tooldir)/include\" \
1616          -c `echo $(srcdir)/cpplib.c | sed 's,^\./,,'`
1617
1618cpperror.o: cpperror.c $(CONFIG_H) cpplib.h
1619
1620cppexp.o: cppexp.c $(CONFIG_H) cpplib.h
1621
1622cpphash.o: cpphash.c cpplib.h cpphash.h
1623
1624cppalloc.o: cppalloc.c $(CONFIG_H)
1625
1626# Note for the stamp targets, we run the program `true' instead of
1627# having an empty command (nothing following the semicolon).
1628
1629proto: config.status protoize unprotoize SYSCALLS.c.X
1630
1631protoize: protoize.o getopt.o getopt1.o getpwd.o version.o $(LIBDEPS)
1632        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
1633          protoize.o getopt.o getopt1.o getpwd.o version.o $(LIBS)
1634protoize.o: stamp-proto ; @true
1635
1636unprotoize: unprotoize.o getopt.o getopt1.o getpwd.o version.o $(LIBDEPS)
1637        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
1638          unprotoize.o getopt.o getopt1.o getpwd.o version.o $(LIBS)
1639unprotoize.o:   stamp-proto ; @true
1640
1641stamp-proto: protoize.c getopt.h $(CONFIG_H)
1642        $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
1643          -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
1644          -DGPLUSPLUS_INCLUDE_DIR=\"$(gxx_include_dir)\" \
1645          -DCROSS_INCLUDE_DIR=\"$(libsubdir)/sys-include\" \
1646          -DTOOL_INCLUDE_DIR=\"$(tooldir)/include\" \
1647          -DLOCAL_INCLUDE_DIR=\"$(includedir)\" \
1648          -DSTD_PROTO_DIR=\"$(libsubdir)\" \
1649          -DUNPROTOIZE $(srcdir)/protoize.c
1650        mv protoize$(objext) unprotoize$(objext)
1651        $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
1652          -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
1653          -DGPLUSPLUS_INCLUDE_DIR=\"$(gxx_include_dir)\" \
1654          -DCROSS_INCLUDE_DIR=\"$(libsubdir)/sys-include\" \
1655          -DTOOL_INCLUDE_DIR=\"$(tooldir)/include\" \
1656          -DLOCAL_INCLUDE_DIR=\"$(includedir)\" \
1657          -DSTD_PROTO_DIR=\"$(libsubdir)\" \
1658          $(srcdir)/protoize.c
1659        touch stamp-proto
1660
1661getopt.o: getopt.c getopt.h
1662        $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/getopt.c
1663getopt1.o: getopt1.c getopt.h
1664        $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/getopt1.c
1665
1666# This info describes the target machine, so compile with GCC just built.
1667SYSCALLS.c.X: $(srcdir)/sys-types.h $(srcdir)/sys-protos.h $(GCC_PASSES) \
1668   stmp-int-hdrs
1669        -rm -f SYSCALLS.c tmp-SYSCALLS.s
1670        cat $(srcdir)/sys-types.h $(srcdir)/sys-protos.h > SYSCALLS.c
1671        $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
1672          -aux-info $@ -S -o tmp-SYSCALLS.s SYSCALLS.c
1673        -rm -f SYSCALLS.c tmp-SYSCALLS.s
1674
1675
1676test-protoize-simple: ./protoize ./unprotoize $(GCC_PASSES)
1677        -rm -f tmp-proto.[cso]
1678        cp $(srcdir)/protoize.c tmp-proto.c
1679        chmod u+w tmp-proto.c
1680        ./protoize -N -B ./ -x getopt.h -c "-B./ -Wall -Wwrite-strings \
1681          $(CFLAGS) $(INCLUDES) \
1682          -DGCC_INCLUDE_DIR=0 \
1683          -DGPLUSPLUS_INCLUDE_DIR=0 \
1684          -DCROSS_INCLUDE_DIR=0 \
1685          -DTOOL_INCLUDE_DIR=0 \
1686          -DSTD_PROTO_DIR=0" tmp-proto.c
1687        @echo '**********' Expect 400 lines of differences.
1688        -diff $(srcdir)/protoize.c tmp-proto.c > tmp-proto.diff
1689        -wc -l tmp-proto.diff
1690        ./unprotoize -N -x getopt.h -c "-B./ -Wall -Wwrite-strings \
1691          $(CFLAGS) $(INCLUDES) \
1692          -DGCC_INCLUDE_DIR=0 \
1693          -DGPLUSPLUS_INCLUDE_DIR=0 \
1694          -DCROSS_INCLUDE_DIR=0 \
1695          -DTOOL_INCLUDE_DIR=0 \
1696          -DSTD_PROTO_DIR=0" tmp-proto.c
1697        @echo Expect zero differences.
1698        diff $(srcdir)/protoize.c tmp-proto.c | cat
1699        -rm -f tmp-proto.[cs] tmp-proto$(objext)
1700
1701# Build the include directory.  The stamp files are stmp-* rather than
1702# stamp-* so that mostlyclean does not force the include directory to
1703# be rebuilt.
1704
1705# Build the include directory except for float.h (which depends upon
1706# enquire).
1707stmp-int-hdrs: stmp-fixinc $(USER_H) xlimits.h objc-headers
1708# Copy in the headers provided with gcc.
1709# The sed command gets just the last file name component;
1710# this is necessary because VPATH could add a dirname.
1711# Using basename would be simpler, but some systems don't have it.
1712        objdir=`pwd`; \
1713        cd $(srcdir); \
1714        for file in .. $(USER_H); do \
1715          if [ X$$file != X.. ]; then \
1716            realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
1717            rm -f $$objdir/include/$$realfile; \
1718            cp ginclude/$$realfile $$objdir/include; \
1719            chmod a+r $$objdir/include/$$realfile; \
1720          fi; \
1721        done
1722        rm -f include/limits.h
1723        cp xlimits.h include/limits.h
1724        chmod a+r include/limits.h
1725# Install the README
1726        rm -f include/README
1727        cp $(srcdir)/README-fixinc include/README
1728        chmod a+r include/README
1729        touch stmp-int-hdrs
1730
1731# Build the complete include directory.
1732stmp-headers: stmp-int-hdrs gfloat.h
1733        rm -f include/float.h
1734        cp gfloat.h include/float.h
1735        chmod a+r include/float.h
1736        touch stmp-headers
1737
1738# Build fixed copies of system files.
1739stmp-fixinc: $(FIXINCLUDES) gsyslimits.h
1740        rm -rf include
1741        mkdir include
1742        if [ x$(FIXINCLUDES) != xMakefile.in ]; \
1743        then \
1744          for dir in $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); do \
1745            if [ -d $$dir ]; \
1746            then \
1747              $(SHELL) $(srcdir)/$(FIXINCLUDES) include $$dir; \
1748            else true; fi; \
1749          done; \
1750        else true; \
1751        fi
1752        rm -f include/syslimits.h
1753        if [ -f include/limits.h ]; then \
1754          mv include/limits.h include/syslimits.h; \
1755        else \
1756          cp $(srcdir)/gsyslimits.h include/syslimits.h; \
1757        fi
1758        chmod a+r include/syslimits.h
1759        touch stmp-fixinc
1760
1761# copy objc header files into build directory
1762objc-headers: stmp-fixinc
1763        if [ -d include ]; then true; else mkdir include; fi
1764        if [ -d objc ]; then true; else mkdir objc; fi
1765        thisdir1=`pwd`; \
1766        srcdir1=`cd $(srcdir); pwd`; \
1767        cd objc; \
1768        $(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
1769        srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
1770        GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
1771        GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include
1772        touch objc-headers
1773
1774# Files related to the fixproto script.
1775
1776deduced.h: $(GCC_PASSES) $(srcdir)/scan-types.sh stmp-int-hdrs
1777        CC="$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -I. -I$(srcdir) -Iinclude -I${SYSTEM_HEADER_DIR}"; \
1778          export CC; \
1779          $(SHELL) $(srcdir)/scan-types.sh "$(srcdir)" >tmp-deduced.h
1780        mv tmp-deduced.h deduced.h
1781
1782gen-protos: gen-protos.o scan.o cppalloc.o $(HOST_LIBDEPS)
1783        ${HOST_CC} $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
1784          gen-protos.o scan.o cppalloc.o $(HOST_LIBS)
1785
1786gen-protos.o: gen-protos.c scan.h $(build_xm_file)
1787        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gen-protos.c
1788
1789scan.o: scan.c scan.h $(build_xm_file)
1790        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan.c
1791
1792xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h gen-protos Makefile
1793        cat deduced.h $(srcdir)/sys-protos.h > tmp-fixtmp.c
1794        mv tmp-fixtmp.c fixtmp.c
1795        $(GCC_FOR_TARGET) fixtmp.c -w -U__SIZE_TYPE__ -U__PTRDIFF_TYPE__ -U__WCHAR_TYPE__ -E \
1796          | sed -e 's/  / /g' -e 's/ *(/ (/g' -e 's/ [ ]*/ /g' -e 's/( )/()/' \
1797          | ./gen-protos >xsys-protos.hT
1798        mv xsys-protos.hT xsys-protos.h
1799        rm -rf fixtmp.c
1800
1801fix-header: fix-header.o scan-decls.o scan.o xsys-protos.h $(HOST_LIBDEPS) \
1802   cpplib.o cpphash.o cppalloc.o cppexp.o cpperror.o version.o
1803        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ fix-header.o \
1804           scan-decls.o scan.o cpplib.o cpphash.o cppalloc.o version.o \
1805           cppexp.o $(HOST_LIBS)
1806
1807fix-header.o: fix-header.c obstack.h scan.h xsys-protos.h $(build_xm_file)
1808        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/fix-header.c
1809
1810scan-decls.o: scan-decls.c scan.h cpplib.h $(build_xm_file)
1811        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan-decls.c
1812
1813# stmp-fixproto depends on this, not on fix-header directly.
1814# The idea is to make sure fix-header gets built,
1815# but not rerun fixproto after each stage
1816# just because fix-header's mtime has changed.
1817fixhdr.ready: fix-header
1818        -if [ -f fixhdr.ready ] ; then \
1819                true; \
1820        else \
1821                touch fixhdr.ready; \
1822        fi
1823
1824# stmp-headers is to make sure fixincludes has already finished.
1825# The if statement is so that we don't run fixproto a second time
1826# if it has already been run on the files in `include'.
1827stmp-fixproto: fixhdr.ready fixproto stmp-headers
1828        @echo "Various warnings and error messages from fixproto are normal"
1829        -if [ -d include ] ; then true; else mkdir include; fi
1830        -if [ -f include/fixed ] ; then true; \
1831        else \
1832          : This line works around a 'make' bug in BSDI 1.1.; \
1833          FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"; export FIXPROTO_DEFINES; \
1834          $(SHELL) ${srcdir}/fixproto include include $(SYSTEM_HEADER_DIR); \
1835          touch include/fixed; \
1836        fi
1837        touch stmp-fixproto
1838
1839# Remake the info files.
1840
1841doc: info
1842info: $(srcdir)/cpp.info $(srcdir)/gcc.info lang.info
1843
1844dvi: $(srcdir)/gcc.dvi $(srcdir)/cpp.dvi lang.dvi
1845
1846
1847# Deletion of files made during compilation.
1848# There are four levels of this:
1849#   `mostlyclean', `clean', `distclean' and `maintainer-clean'.
1850# `mostlyclean' is useful while working on a particular type of machine.
1851# It deletes most, but not all, of the files made by compilation.
1852# It does not delete libgcc.a or its parts, so it won't have to be recompiled.
1853# `clean' deletes everything made by running `make all'.
1854# `distclean' also deletes the files made by config.
1855# `maintainer-clean' also deletes everything that could be regenerated
1856# automatically.  We remove as much from the language subdirectories as we can
1857# (less duplicated code).
1858
1859
1860mostlyclean: bytecode.mostlyclean lang.mostlyclean
1861        -rm -f $(STAGESTUFF)
1862# Clean the objc subdir if we created one.
1863        if [ -d objc ]; then \
1864          srcdir1=`cd $(srcdir); pwd`; \
1865          cd objc; $(MAKE) -f $$srcdir1/objc/Makefile mostlyclean; \
1866        else true; fi
1867        -rm -f libobjc.a
1868# Delete the temporary source copies for cross compilation.
1869        -rm -f $(HOST_PREFIX_1)rtl.c $(HOST_PREFIX_1)rtlanal.c
1870        -rm -f $(HOST_PREFIX_1)alloca.c $(HOST_PREFIX_1)malloc.c
1871        -rm -f $(HOST_PREFIX_1)obstack.c
1872# Delete the temp files made in the course of building libgcc.a.
1873        -rm -f tmplibgcc* tmpcopy xlimits.h
1874        for name in $(LIB1FUNCS); do rm -f $${name}.c; done
1875# Delete other temporary files.
1876        -rm -f tmp-float.h tmp-gcc.xtar.gz
1877        -rm -f tmp-foo1 tmp-foo2 tmp-proto.* tmp-unproto.1 tmp-SYSCALLS.s
1878        -rm -f tmp-c-parse.y tmp-objc-prs.y tmp-gperf.h
1879        -rm -f tmp-specs t-float.h-cross tmp-xlimits.h
1880        -rm -f tmp-fixtmp.c xsys-protos.hT
1881# Delete the stamp files.
1882        -rm -f stamp-* tmp-*
1883        -rm -f */stamp-* */tmp-*
1884# Delete debugging dump files.
1885        -rm -f *.greg *.lreg *.combine *.flow *.cse *.jump *.rtl *.tree *.loop
1886        -rm -f *.dbr *.jump2 *.sched *.cse2 *.sched2 *.stack
1887        -rm -f */*.greg */*.lreg */*.combine */*.flow */*.cse */*.jump */*.rtl
1888        -rm -f */*.tree */*.loop */*.dbr */*.jump2 */*.sched */*.cse2
1889        -rm -f */*.sched2 */*.stack
1890# Delete some files made during installation.
1891        -rm -f specs gfloat.h float.h-* enquire SYSCALLS.c.X SYSCALLS.c
1892        -rm -f collect collect2 mips-tfile mips-tdump alloca.s
1893# Delete files generated for fixproto
1894        -rm -rf fix-header xsys-protos.h deduced.h tmp-deduced.h \
1895          gen-protos fixproto.list fixtmp.* fixhdr.ready
1896# Delete unwanted output files from TeX.
1897        -rm -f *.toc *.log *.vr *.fn *.cp *.tp *.ky *.pg
1898        -rm -f */*.toc */*.log */*.vr */*.fn */*.cp */*.tp */*.ky */*.pg
1899# Delete sorted indices we don't actually use.
1900        -rm -f gcc.vrs gcc.kys gcc.tps gcc.pgs gcc.fns
1901# Delete core dumps.
1902        -rm -f core */core
1903
1904# Delete all files made by compilation
1905# that don't exist in the distribution.
1906clean: mostlyclean bytecode.clean lang.clean
1907# It may not be quite desirable to delete unprotoize.c here,
1908# but the spec for `make clean' requires it.
1909# Using unprotoize.c is not quite right in the first place,
1910# but what better way is there?
1911        -rm -f libgcc.a libgcc1.a libgcc1-asm.a libgcc2.a libgcc2.ready
1912        -rm -f libgcc1.null
1913        -rm -f *.dvi
1914        -rm -f */*.dvi
1915        -if [ -f md.pre-cpp ]; then \
1916          rm -f md ; \
1917        fi
1918# Delete the include directory.
1919        -rm -rf stmp-* include objc-headers
1920        -rm -f */stmp-*
1921# Delete files used by the "multilib" facility (including libgcc subdirs).
1922        -rm -f multilib.h tmpmultilib*
1923        -if [ "x$(MULTILIB_DIRNAMES)" != x ] ; then \
1924          rm -rf $(MULTILIB_DIRNAMES); \
1925        else if [ "x$(MULTILIB_OPTIONS)" != x ] ; then \
1926          rm -rf `echo $(MULTILIB_OPTIONS) | sed -e 's/\// /g'`; \
1927        fi ; fi
1928
1929# Delete all files that users would normally create
1930# while building and installing GCC.
1931distclean: clean bytecode.distclean lang.distclean
1932        -rm -f tm.h config.h tconfig.h hconfig.h md
1933        -rm -f config.status config.run
1934        -rm -f Makefile specs.h options.h *.oaux
1935        -rm -fr stage1 stage2 stage3 stage4
1936        -rm -f */stage1 */stage2 */stage3 */stage4 */include
1937        -rm -f objc-parse.output
1938        -rm -f c-parse.output
1939        -rm -f *.asm
1940
1941# Delete anything likely to be found in the source directory
1942# that shouldn't be in the distribution.
1943extraclean: distclean lang.extraclean
1944        -rm -rf =* ./"#"* *~* config/=* config/"#"* config/*~*
1945        -rm -f patch* *.orig *.rej config/patch* config/*.orig config/*.rej
1946        -rm -f config/*/=* config/*/"#"* config/*/*~*
1947        -rm -f config/*/*.orig config/*/*.rej
1948        -rm -f *.dvi *.ps *.oaux *.d *.[zZ] *.gz
1949        -rm -f *.tar *.xtar *diff *.diff.* *.tar.* *.xtar.* *diffs
1950        -rm -f *lose config/*lose config/*/*lose
1951        -rm -f *.s *.s[0-9] *.i install1.texi config/ChangeLog
1952        -rm -f */=* */"#"* */*~*
1953        -rm -f */patch* */*.orig */*.rej
1954        -rm -f */*.dvi */*.oaux */*.d */*.[zZ] */*.gz
1955        -rm -f */*.tar */*.xtar */*diff */*.diff.* */*.tar.* */*.xtar.* */*diffs
1956        -rm -f */*lose */*.s */*.s[0-9] */*.i
1957
1958# Get rid of every file that's generated from some other file.
1959# Most of these files ARE PRESENT in the GCC distribution.
1960maintainer-clean: distclean bytecode.maintainer-clean lang.maintainer-clean
1961        -rm -f c-parse.y c-gperf.h objc-parse.y
1962        -rm -f objc-parse.c objc-parse.output
1963        -rm -f c-parse.c c-parse.h c-parse.output
1964        -rm -f cexp.c cexp.output TAGS
1965        -rm -f cpp.info* cpp.??s cpp.*aux
1966        -rm -f gcc.info* gcc.??s gcc.*aux
1967
1968# Entry points `install' and `uninstall'.
1969# Also use `install-collect2' to install collect2 when the config files don't.
1970
1971# The semicolon is to prevent the install.sh -> install default rule
1972# from doing anything.  Having it run true helps avoid problems and
1973# noise from versions of make which don't like to have null commands.
1974install: $(INSTALL_TARGET) ; @true
1975
1976# Copy the compiler files into directories where they will be run.
1977# Install the driver last so that the window when things are
1978# broken is small.
1979install-normal: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
1980    install-libobjc install-man install-info lang.install-normal install-driver
1981
1982# Do nothing while making gcc with a cross-compiler. The person who
1983# makes gcc for the target machine has to know how to put a complete
1984# gcc together by hand.
1985install-build: force
1986        @echo You have to install gcc on your target machine by hand.
1987
1988# Run this on the target machine
1989# to finish installation of cross compiler.
1990install-cross-rest: install-float-h-cross
1991
1992# Install float.h for cross compiler.
1993# Run this on the target machine!
1994install-float-h-cross: install-dir
1995#       if [ -f enquire ] ; then true; else false; fi
1996# Note: don't use -.  We should fail right away if enquire was not made.
1997        ./enquire -f > $(tmpdir)/float.h
1998        -rm -f $(libsubdir)/include/float.h
1999        $(INSTALL_DATA) $(tmpdir)/float.h $(libsubdir)/include/float.h
2000        -rm -f $(tmpdir)/float.h
2001        chmod a-x $(libsubdir)/include/float.h
2002
2003# Create the installation directory.
2004install-dir:
2005        -if [ -d $(libdir) ] ; then true ; else mkdir $(libdir) ; chmod a+rx $(libdir) ; fi
2006        -if [ -d $(libdir)/gcc-lib ] ; then true ; else mkdir $(libdir)/gcc-lib ; chmod a+rx $(libdir)/gcc-lib ; fi
2007# This dir isn't currently searched by cpp.
2008#       -if [ -d $(libdir)/gcc-lib/include ] ; then true ; else mkdir $(libdir)/gcc-lib/include ; chmod a+rx $(libdir)/gcc-lib/include ; fi
2009        -if [ -d $(libdir)/gcc-lib/$(target) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target) ; chmod a+rx $(libdir)/gcc-lib/$(target) ; fi
2010        -if [ -d $(libdir)/gcc-lib/$(target)/$(version) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target)/$(version) ; chmod a+rx $(libdir)/gcc-lib/$(target)/$(version) ; fi
2011        -if [ -d $(libdir)/gcc-lib/$(target)/$(version)/include ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target)/$(version)/include ; chmod a+rx $(libdir)/gcc-lib/$(target)/$(version)/include ; fi
2012        -if [ -d $(bindir) ] ; then true ; else mkdir $(bindir) ; chmod a+rx $(bindir) ; fi
2013        -if [ -d $(includedir) ] ; then true ; else mkdir $(includedir) ; chmod a+rx $(includedir) ; fi
2014        -if [ -d $(tooldir) ] ; then true ; else mkdir $(tooldir) ; chmod a+rx $(tooldir) ; fi
2015        -if [ -d $(assertdir) ] ; then true ; else mkdir $(assertdir) ; chmod a+rx $(assertdir) ; fi
2016        -if [ -d $(infodir) ] ; then true ; else mkdir $(infodir) ; chmod a+rx $(infodir) ; fi
2017# We don't use mkdir -p to create the parents of mandir,
2018# because some systems don't support it.
2019# Instead, we use this technique to create the immediate parent of mandir.
2020        -parent=`echo $(mandir)|sed -e 's@/[^/]*$$@@'`; \
2021        if [ -d $$parent ] ; then true ; else mkdir $$parent ; chmod a+rx $$parent ; fi
2022        -if [ -d $(mandir) ] ; then true ; else mkdir $(mandir) ; chmod a+rx $(mandir) ; fi
2023
2024# Install the compiler executables built during cross compilation.
2025install-common: native install-dir $(EXTRA_PARTS) lang.install-common
2026        for file in $(COMPILERS); do \
2027          if [ -f $$file ] ; then \
2028            rm -f $(libsubdir)/$$file; \
2029            $(INSTALL_PROGRAM) $$file $(libsubdir)/$$file; \
2030          else true; \
2031          fi; \
2032        done
2033        for file in $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2) ..; do \
2034          if [ x"$$file" != x.. ]; then \
2035            rm -f $(libsubdir)/$$file; \
2036            $(INSTALL_PROGRAM) $$file $(libsubdir)/$$file; \
2037          else true; fi; \
2038        done
2039        for file in $(EXTRA_PARTS) ..; do \
2040          if [ x"$$file" != x.. ]; then \
2041            rm -f $(libsubdir)/$$file; \
2042            $(INSTALL_DATA) $$file $(libsubdir)/$$file; \
2043          else true; fi; \
2044        done
2045# Don't mess with specs if it doesn't exist yet.
2046        -if [ -f specs ] ; then \
2047          rm -f $(libsubdir)/specs; \
2048          $(INSTALL_DATA) specs $(libsubdir)/specs; \
2049        fi
2050# Install protoize if it was compiled.
2051        -if [ -f protoize$(exeext) ]; \
2052        then \
2053            rm -f $(bindir)/protoize$(exeext); \
2054            $(INSTALL_PROGRAM) protoize$(exeext) $(bindir)/protoize$(exeext); \
2055            rm -f $(bindir)/unprotoize$(exeext); \
2056            $(INSTALL_PROGRAM) unprotoize$(exeext) $(bindir)/unprotoize$(exeext); \
2057            rm -f $(libsubdir)/SYSCALLS.c.X; \
2058            $(INSTALL_DATA) SYSCALLS.c.X $(libsubdir)/SYSCALLS.c.X; \
2059            chmod a-x $(libsubdir)/SYSCALLS.c.X; \
2060        fi
2061        -rm -f $(libsubdir)/cpp$(exeext)
2062        $(INSTALL_PROGRAM) cpp$(exeext) $(libsubdir)/cpp$(exeext)
2063
2064# Install the driver program as $(target)-gcc
2065# and also as either gcc (if native) or $(tooldir)/bin/gcc.
2066install-driver: xgcc
2067        -if [ -f gcc-cross$(exeext) ] ; then \
2068          rm -f $(bindir)/$(GCC_CROSS_NAME)$(exeext); \
2069          $(INSTALL_PROGRAM) gcc-cross$(exeext) $(bindir)/$(GCC_CROSS_NAME)$(exeext); \
2070          if [ -d $(tooldir)/bin/. ] ; then \
2071            rm -f $(tooldir)/bin/gcc$(exeext); \
2072            $(INSTALL_PROGRAM) gcc-cross$(exeext) $(tooldir)/bin/gcc$(exeext); \
2073          else true; fi; \
2074        else \
2075          rm -f $(bindir)/$(GCC_INSTALL_NAME)$(exeext); \
2076          $(INSTALL_PROGRAM) xgcc$(exeext) $(bindir)/$(GCC_INSTALL_NAME)$(exeext); \
2077          rm -f $(bindir)/$(target)-gcc-1$(exeext); \
2078          ln $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target)-gcc-1$(exeext) \
2079            > /dev/null 2>&1 \
2080            || cp $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target)-gcc-1$(exeext); \
2081          mv $(bindir)/$(target)-gcc-1$(exeext) $(bindir)/$(target)-gcc$(exeext); \
2082        fi
2083
2084# Install the info files.
2085install-info: doc install-dir lang.install-info
2086        -rm -f $(infodir)/cpp.info* $(infodir)/gcc.info*
2087        cd $(srcdir); for f in cpp.info* gcc.info*; \
2088        do $(INSTALL_DATA) $$f $(infodir)/$$f; done
2089        -chmod a-x $(infodir)/cpp.info* $(infodir)/gcc.info*
2090
2091# Install the man pages.
2092install-man: install-dir $(srcdir)/gcc.1 $(srcdir)/cccp.1 lang.install-man
2093        -if [ -f gcc-cross ] ; then \
2094          rm -f $(mandir)/$(GCC_CROSS_NAME)$(manext); \
2095          $(INSTALL_DATA) $(srcdir)/gcc.1 $(mandir)/$(GCC_CROSS_NAME)$(manext); \
2096          chmod a-x $(mandir)/$(GCC_CROSS_NAME)$(manext); \
2097        else \
2098          rm -f $(mandir)/$(GCC_INSTALL_NAME)$(manext); \
2099          $(INSTALL_DATA) $(srcdir)/gcc.1 $(mandir)/$(GCC_INSTALL_NAME)$(manext); \
2100          chmod a-x $(mandir)/$(GCC_INSTALL_NAME)$(manext); \
2101        fi
2102        -rm -f $(mandir)/cccp$(manext)
2103        -$(INSTALL_DATA) $(srcdir)/cccp.1 $(mandir)/cccp$(manext)
2104        -chmod a-x $(mandir)/cccp$(manext)
2105
2106# Install the library.
2107install-libgcc: libgcc.a install-dir
2108        -if [ -f libgcc.a ] ; then \
2109          rm -f $(libsubdir)/libgcc.a; \
2110          $(INSTALL_DATA) libgcc.a $(libsubdir)/libgcc.a; \
2111          if $(RANLIB_TEST) ; then \
2112            (cd $(libsubdir); $(RANLIB) libgcc.a); else true; fi; \
2113          chmod a-x $(libsubdir)/libgcc.a; \
2114        else true; fi
2115
2116# Install multiple versions of libgcc.a.
2117install-multilib: stmp-multilib install-dir
2118        for i in `$(GCC_FOR_TARGET) --print-multi-lib`; do \
2119          dir=`echo $$i | sed -e 's/;.*$$//'`; \
2120          if [ -d $(libsubdir)/$${dir} ]; then true; else mkdir $(libsubdir)/$${dir}; fi; \
2121          rm -f $(libsubdir)/$${dir}/libgcc.a; \
2122          $(INSTALL_DATA) $${dir}/libgcc.a $(libsubdir)/$${dir}/libgcc.a; \
2123          if $(RANLIB_TEST); then \
2124            (cd $(libsubdir)/$${dir}; $(RANLIB) libgcc.a); else true; fi; \
2125          chmod a-x $(libsubdir)/$${dir}/libgcc.a; \
2126        done
2127
2128# Install the objc run time library.
2129install-libobjc: install-dir
2130        -if [ -f libobjc.a ] ; then \
2131          rm -f $(libsubdir)/libobjc.a; \
2132          $(INSTALL_DATA) libobjc.a $(libsubdir)/libobjc.a; \
2133          if $(RANLIB_TEST) ; then \
2134            (cd $(libsubdir); $(RANLIB) libobjc.a); else true; fi; \
2135          chmod a-x $(libsubdir)/libobjc.a; \
2136        else true; fi
2137
2138# Install all the header files built in the include subdirectory.
2139install-headers: install-include-dir $(INSTALL_HEADERS_DIR) $(INSTALL_ASSERT_H)
2140# Fix symlinks to absolute paths in the installed include directory to
2141# point to the installed directory, not the build directory.
2142        -files=`cd $(libsubdir)/include; find . -type l -print 2>/dev/null`; \
2143        if [ $$? -eq 0 ]; then \
2144          dir=`cd include; pwd`; \
2145          for i in $$files; do \
2146            dest=`ls -ld $(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \
2147            if expr "$$dest" : "$$dir.*" > /dev/null; then \
2148              rm -f $(libsubdir)/include/$$i; \
2149              ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
2150            fi; \
2151          done; \
2152        fi
2153
2154# Create or recreate the gcc private include file directory.
2155install-include-dir: install-dir
2156        -rm -rf $(libsubdir)/include
2157        mkdir $(libsubdir)/include
2158        -chmod a+rx $(libsubdir)/include
2159
2160# Install the include directory using tar.
2161install-headers-tar: stmp-headers $(STMP_FIXPROTO) install-include-dir
2162        (cd include; \
2163         tar -cf - .; exit 0) | (cd $(libsubdir)/include; tar $(TAROUTOPTS) - )
2164# /bin/sh on some systems returns the status of the first tar,
2165# and that can lose with GNU tar which always writes a full block.
2166# So use `exit 0' to ignore its exit status.
2167
2168# Install the include directory using cpio.
2169install-headers-cpio: stmp-headers $(STMP_FIXPROTO) install-include-dir
2170        (cd include; find . -print) | (cd include; cpio -pdum $(libsubdir)/include)
2171
2172# Put assert.h where it won't override GNU libc's assert.h.
2173# It goes in a dir that is searched after GNU libc's headers;
2174# thus, the following conditionals are no longer needed.
2175# But it's not worth deleting them now.
2176## Don't replace the assert.h already there if it is not from GCC.
2177## This code would be simpler if it tested for -f ... && ! grep ...
2178## but supposedly the ! operator is missing in sh on some systems.
2179install-assert-h: assert.h install-dir
2180        if [ -f $(assertdir)/assert.h ]; \
2181        then \
2182          if grep "__eprintf" $(assertdir)/assert.h >/dev/null; \
2183            then \
2184            rm -f $(assertdir)/assert.h; \
2185            $(INSTALL_DATA) $(srcdir)/assert.h $(assertdir)/assert.h; \
2186            chmod a-x $(assertdir)/assert.h; \
2187          else true; \
2188          fi; \
2189        else \
2190          rm -f $(assertdir)/assert.h; \
2191          $(INSTALL_DATA) $(srcdir)/assert.h $(assertdir)/assert.h; \
2192          chmod a-x $(assertdir)/assert.h; \
2193        fi
2194
2195# Use this target to install the program `collect2' under the name `ld'.
2196install-collect2: collect2 install-dir
2197        $(INSTALL_PROGRAM) collect2$(exeext) $(libsubdir)/ld$(exeext)
2198# Install the driver program as $(libsubdir)/gcc for collect2.
2199        $(INSTALL_PROGRAM) xgcc$(exeext) $(libsubdir)/gcc$(exeext)
2200
2201# Cancel installation by deleting the installed files.
2202uninstall: lang.uninstall
2203        -rm -rf $(libsubdir)
2204        -rm -rf $(bindir)/$(GCC_INSTALL_NAME)$(exeext)
2205        -rm -rf $(bindir)/$(GCC_CROSS_NAME)$(exeext)
2206        -rm -rf $(bindir)/protoize$(exeext)
2207        -rm -rf $(bindir)/unprotoize$(exeext)
2208        -rm -rf $(mandir)/$(GCC_INSTALL_NAME)$(manext)
2209        -rm -rf $(mandir)/$(GCC_CROSS_NAME)$(manext)
2210        -rm -rf $(mandir)/cccp$(manext)
2211        -rm -rf $(mandir)/protoize$(manext)
2212        -rm -rf $(mandir)/unprotoize$(manext)
2213
2214# These exist for maintenance purposes.
2215
2216# Update the tags table.
2217TAGS: force
2218        cd $(srcdir);                                                   \
2219        mkdir temp;                                                     \
2220        mv -f c-parse.[ch] objc-parse.c cexp.c =*.[chy] temp;           \
2221        etags *.y *.h *.c;                                              \
2222        mv temp/* .;                                                    \
2223        rmdir temp
2224
2225# Create the distribution tar file.
2226#dist: gcc-$(version).tar.gz
2227dist: gcc.xtar.gz
2228
2229gcc.xtar.gz: gcc.xtar
2230        gzip --best < gcc.xtar > tmp-gcc.xtar.gz
2231        mv tmp-gcc.xtar.gz gcc.xtar.gz
2232
2233#gcc-$(version).tar.gz: gcc-$(version).tar
2234#       gzip < gcc-$(version).tar > gcc-$(version).tar.gz
2235
2236#gcc-$(version).tar:
2237gcc.xtar: distdir
2238# Make the distribution.
2239        tar -chf gcc.xtar gcc-$(version)
2240
2241# This target exists to do the initial work before the language specific
2242# stuff gets done.
2243distdir-start: doc $(srcdir)/INSTALL $(srcdir)/c-parse.y $(srcdir)/c-gperf.h \
2244  $(srcdir)/objc-parse.y $(srcdir)/c-parse.c $(srcdir)/objc-parse.c \
2245  $(srcdir)/cexp.c
2246        @if grep -s "for version ${mainversion}" gcc.texi > /dev/null; \
2247        then true; \
2248        else echo "You must update the version number in \`gcc.texi'"; sleep 10;\
2249        fi
2250# Update the version number in README
2251        awk '$$1 " " $$2 " " $$3 == "This directory contains" \
2252                { $$6 = version; print $$0 } \
2253             $$1 " " $$2 " " $$3 != "This directory contains"' \
2254          version=$(version) README > tmp.README
2255        mv tmp.README README
2256        -rm -rf gcc-$(version) tmp     
2257# Put all the files in a temporary subdirectory
2258# which has the name that we want to have in the tar file.
2259        mkdir tmp
2260        mkdir tmp/config
2261        mkdir tmp/ginclude
2262        mkdir tmp/objc
2263        for file in *[0-9a-zA-Z+]; do \
2264          ln $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
2265        done
2266        cd config; \
2267        for file in *[0-9a-zA-Z+]; do \
2268          if test -d $$file && test "$$file" != RCS; then \
2269            mkdir ../tmp/config/$$file; \
2270            cd $$file; \
2271            for subfile in *[0-9a-zA-Z+]; do \
2272              ln $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \
2273              || cp $$subfile ../../tmp/config/$$file; \
2274            done; \
2275            cd ..; \
2276          else \
2277            ln $$file ../tmp/config >/dev/null 2>&1 \
2278            || cp $$file ../tmp/config; \
2279          fi; \
2280        done
2281        cd ginclude; \
2282        for file in *[0-9a-zA-Z+]; do \
2283          ln $$file ../tmp/ginclude >/dev/null 2>&1 \
2284           || cp $$file ../tmp/ginclude; \
2285        done
2286        cd objc; \
2287        for file in *[0-9a-zA-Z+]; do \
2288          ln $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
2289        done
2290        ln .gdbinit tmp
2291
2292# Finish making `distdir', after the languages have done their thing.
2293distdir-finish:
2294        mv tmp gcc-$(version)
2295# Get rid of everything we don't want in the distribution.  We'd want
2296# this to use Makefile.in, but it doesn't have the `lang.foo' targets
2297# expanded.
2298        cd gcc-$(version); make extraclean
2299
2300distdir: distdir-start lang.distdir distdir-finish
2301
2302# make diff oldversion=M.N
2303# creates a diff file between an older distribution and this one.
2304# The -P option assumes this is GNU diff.
2305diff:
2306        diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h \
2307          -x cexp.c -x bi-parser.c -x objc-parse.y -x objc-parse.c \
2308          -x TAGS \
2309          -x "gcc.??" -x "gcc.??s" -x gcc.aux -x "gcc.info*" \
2310          -x "cpp.??" -x "cpp.??s" -x cpp.aux -x "cpp.info*" \
2311          $(LANG_DIFF_EXCLUDES) \
2312          gcc-$(oldversion) gcc-$(version) > diffs
2313
2314bootstrap: force
2315# Only build the C compiler for stage1, because that is the only one that
2316# we can guarantee will build with the native compiler, and also it is the
2317# only thing useful for building stage2.
2318        $(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES=c
2319        $(MAKE) stage1
2320# This used to define ALLOCA as empty, but that would lead to bad results
2321# for a subsequent `make install' since that would not have ALLOCA empty.
2322# To prevent `make install' from compiling alloca.o and then relinking cc1
2323# because alloca.o is newer, we permit these recursive makes to compile
2324# alloca.o.  Then cc1 is newer, so it won't have to be relinked.
2325        $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
2326        $(MAKE) stage2
2327        $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
2328
2329bootstrap2: force
2330        $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
2331        $(MAKE) stage2
2332        $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
2333
2334bootstrap3: force
2335        $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
2336
2337# Compare the object files in the current directory with those in the
2338# stage2 directory.
2339
2340# ./ avoids bug in some versions of tail.
2341compare: force
2342        for file in *$(objext); do \
2343          tail +16c ./$$file > tmp-foo1; \
2344          tail +16c stage2/$$file > tmp-foo2 2>/dev/null \
2345            && (cmp tmp-foo1 tmp-foo2 || echo $$file differs) || true; \
2346        done
2347        for dir in tmp-foo $(SUBDIRS); do \
2348          if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
2349            for file in $$dir/*$(objext); do \
2350              tail +16c ./$$file > tmp-foo1; \
2351              tail +16c stage2/$$file > tmp-foo2 2>/dev/null \
2352                && (cmp tmp-foo1 tmp-foo2 || echo $$file differs) || true; \
2353            done; \
2354          fi; \
2355        done
2356        -rm -f tmp-foo*
2357
2358# Similar, but compare with stage3 directory
2359compare3: force
2360        for file in *$(objext); do \
2361          tail +16c ./$$file > tmp-foo1; \
2362          tail +16c stage3/$$file > tmp-foo2 2>/dev/null \
2363            && (cmp tmp-foo1 tmp-foo2 || echo $$file differs) || true; \
2364        done
2365        for dir in tmp-foo $(SUBDIRS); do \
2366          if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
2367            for file in $$dir/*$(objext); do \
2368              tail +16c ./$$file > tmp-foo1; \
2369              tail +16c stage3/$$file > tmp-foo2 2>/dev/null \
2370                && (cmp tmp-foo1 tmp-foo2 || echo $$file differs) || true; \
2371            done; \
2372          fi; \
2373        done
2374        -rm -f tmp-foo*
2375
2376# Compare the object files in the current directory with those in the
2377# stage2 directory.  Use gnu cmp (diffutils v2.4 or later) to avoid
2378# running tail and the overhead of twice copying each object file.
2379
2380gnucompare: force
2381        for file in *$(objext); do \
2382          cmp --ignore-initial=16 $$file stage2/$$file || true ; \
2383        done
2384        for dir in tmp-foo $(SUBDIRS); do \
2385          if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
2386            for file in $$dir/*$(objext); do \
2387              cmp --ignore-initial=16 $$file stage2/$$file || true ; \
2388            done; \
2389          fi; \
2390        done
2391
2392# Similar, but compare with stage3 directory
2393gnucompare3: force
2394        for file in *$(objext); do \
2395          cmp --ignore-initial=16 $$file stage3/$$file || true ; \
2396        done
2397        for dir in tmp-foo $(SUBDIRS); do \
2398          if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
2399            for file in $$dir/*$(objext); do \
2400              cmp --ignore-initial=16 $$file stage3/$$file || true ; \
2401            done; \
2402          fi; \
2403        done
2404
2405# Copy the object files from a particular stage into a subdirectory.
2406stage1-start:
2407        -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
2408        -for dir in . $(SUBDIRS) ; \
2409         do \
2410           if [ -d stage1/$$dir ] ; then true ; else mkdir stage1/$$dir ; fi ; \
2411         done
2412        -mv $(STAGESTUFF) stage1
2413# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
2414# dir will work properly.
2415        -if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage1 || cp as$(exeext) stage1 ; else true ; fi
2416        -if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage1 || cp ld$(exeext) stage1 ; else true ; fi
2417        -if [ -f collect-ld$(exeext) ] ; then ln -s ../collect-ld$(exeext) stage1 || cp collect-ld$(exeext) stage1 ; else true ; fi
2418        -rm -f stage1/libgcc.a
2419        -cp libgcc.a stage1
2420        -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi
2421stage1: force stage1-start lang.stage1
2422
2423stage2-start:
2424        -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
2425        -for dir in . $(SUBDIRS) ; \
2426         do \
2427           if [ -d stage2/$$dir ] ; then true ; else mkdir stage2/$$dir ; fi ; \
2428         done
2429        -mv $(STAGESTUFF) stage2
2430# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
2431# dir will work properly.
2432        -if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage2 || cp as$(exeext) stage2 ; else true ; fi
2433        -if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage2 || cp ld$(exeext) stage2 ; else true ; fi
2434        -if [ -f collect-ld ] ; then ln -s ../collect-ld$(exeext) stage2 || cp collect-ld$(exeext) stage2 ; else true ; fi
2435        -rm -f stage2/libgcc.a
2436        -cp libgcc.a stage2
2437        -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi
2438stage2: force stage2-start lang.stage2
2439
2440stage3-start:
2441        -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
2442        -for dir in . $(SUBDIRS) ; \
2443         do \
2444           if [ -d stage3/$$dir ] ; then true ; else mkdir stage3/$$dir ; fi ; \
2445         done
2446        -mv $(STAGESTUFF) stage3
2447# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
2448# dir will work properly.
2449        -if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage3 || cp as$(exeext) stage3 ; else true ; fi
2450        -if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage3 || cp ld$(exeext) stage3 ; else true ; fi
2451        -if [ -f collect-ld$(exeext) ] ; then ln -s ../collect-ld$(exeext) stage3 || cp collect-ld$(exeext) stage3 ; else true ; fi
2452        -rm -f stage3/libgcc.a
2453        -cp libgcc.a stage3
2454        -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi
2455stage3: force stage3-start lang.stage3
2456
2457stage4-start:
2458        -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
2459        -for dir in . $(SUBDIRS) ; \
2460         do \
2461           if [ -d stage4/$$dir ] ; then true ; else mkdir stage4/$$dir ; fi ; \
2462         done
2463        -mv $(STAGESTUFF) stage4
2464# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
2465# dir will work properly.
2466        -if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage4 || cp as$(exeext) stage4 ; else true ; fi
2467        -if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage4 || cp ld$(exeext) stage4 ; else true ; fi
2468        -if [ -f collect-ld$(exeext) ] ; then ln -s ../collect-ld$(exeext) stage4 || cp collect-ld$(exeext) stage4 ; else true ; fi
2469        -rm -f stage4/libgcc.a
2470        -cp libgcc.a stage4
2471        -if $(RANLIB_TEST) ; then $(RANLIB) stage4/libgcc.a; else true; fi
2472stage4: force stage4-start lang.stage4
2473
2474# Copy just the executable files from a particular stage into a subdirectory,
2475# and delete the object files.  Use this if you're just verifying a version
2476# that is pretty sure to work, and you are short of disk space.
2477risky-stage1: stage1
2478        - make clean
2479
2480risky-stage2: stage2
2481        -make clean
2482
2483risky-stage3: stage3
2484        -make clean
2485
2486risky-stage4: stage4
2487        -make clean
2488
2489#In GNU Make, ignore whether `stage*' exists.
2490.PHONY: stage1 stage2 stage3 stage4 clean maintainer-clean TAGS bootstrap
2491.PHONY: risky-stage1 risky-stage2 risky-stage3 risky-stage4
2492
2493force:
Note: See TracBrowser for help on using the repository browser.