]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/Make-lang.in
lang-options.h, decl2.c: Add -fno-enforce-eh-specs.
[gcc.git] / gcc / cp / Make-lang.in
CommitLineData
a5943075 1# Top level makefile fragment for GNU C++.
ca888935
RK
2# Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000
3# Free Software Foundation, Inc.
a5943075
DE
4
5#This file is part of GNU CC.
6
7#GNU CC is free software; you can redistribute it and/or modify
8#it under the terms of the GNU General Public License as published by
9#the Free Software Foundation; either version 2, or (at your option)
10#any later version.
11
12#GNU CC is distributed in the hope that it will be useful,
13#but WITHOUT ANY WARRANTY; without even the implied warranty of
14#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15#GNU General Public License for more details.
16
17#You should have received a copy of the GNU General Public License
18#along with GNU CC; see the file COPYING. If not, write to
de18aff3
RK
19#the Free Software Foundation, 59 Temple Place - Suite 330,
20#Boston, MA 02111-1307, USA.
a5943075
DE
21
22# This file provides the language dependent support in the main Makefile.
23# Each language makefile fragment must provide the following targets:
24#
25# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap,
26# foo.info, foo.dvi,
27# foo.install-normal, foo.install-common, foo.install-info, foo.install-man,
28# foo.uninstall, foo.distdir,
f1908d70
RK
29# foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean,
30# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
a5943075
DE
31#
32# where `foo' is the name of the language.
33#
34# It should also provide rules for:
35#
36# - making any compiler driver (eg: g++)
37# - the compiler proper (eg: cc1plus)
38# - define the names for selecting the language in LANGUAGES.
6633d636 39#\f
a5943075
DE
40# Extra flags to pass to recursive makes.
41CXX_FLAGS_TO_PASS = \
42 "CXX_FOR_BUILD=$(CXX_FOR_BUILD)" \
43 "CXXFLAGS=$(CXXFLAGS)" \
44 "CXX_FOR_TARGET=$(CXX_FOR_TARGET)"
45
a0a33927 46# Actual names to use when installing a native compiler.
8aa3abc8
DE
47CXX_INSTALL_NAME = `t='$(program_transform_name)'; echo c++ | sed $$t`
48GXX_INSTALL_NAME = `t='$(program_transform_name)'; echo g++ | sed $$t`
5b477224 49DEMANGLER_INSTALL_NAME = `t='$(program_transform_name)'; echo c++filt | sed $$t`
a0a33927
MS
50
51# Actual names to use when installing a cross-compiler.
8aa3abc8
DE
52CXX_CROSS_NAME = `t='$(program_transform_cross_name)'; echo c++ | sed $$t`
53GXX_CROSS_NAME = `t='$(program_transform_cross_name)'; echo g++ | sed $$t`
5b477224 54DEMANGLER_CROSS_NAME = `t='$(program_transform_cross_name)'; echo c++filt | sed $$t`
a0a33927 55
863adfc0 56# The name to use for the demangler program.
d8b55a76 57DEMANGLER_PROG = c++filt$(exeext)
5156628f
MS
58
59# Extra headers to install.
60CXX_EXTRA_HEADERS = $(srcdir)/cp/inc/typeinfo $(srcdir)/cp/inc/exception \
61 $(srcdir)/cp/inc/new $(srcdir)/cp/inc/new.h
62
63# Extra code to include in libgcc2.
ced78d8b
JM
64CXX_LIB2FUNCS = tinfo.o tinfo2.o new.o opnew.o opnewnt.o opvnew.o opvnewnt.o \
65 opdel.o opdelnt.o opvdel.o opvdelnt.o exception.o
824b9a4c
MS
66CXX_LIB2SRCS = $(srcdir)/cp/new.cc $(srcdir)/cp/new1.cc $(srcdir)/cp/new2.cc \
67 $(srcdir)/cp/exception.cc $(srcdir)/cp/tinfo.cc \
68 $(srcdir)/cp/tinfo2.cc $(srcdir)/cp/tinfo.h
6633d636 69#\f
a5943075
DE
70# Define the names for selecting c++ in LANGUAGES.
71# Note that it would be nice to move the dependency on g++
72# into the C++ rule, but that needs a little bit of work
73# to do the right thing within all.cross.
a73cab0f 74C++ c++: cc1plus$(exeext)
a5943075 75
5edb8b93
MS
76# Tell GNU make to ignore these if they exist.
77.PHONY: C++ c++
78
4746ee26 79g++spec.o: $(srcdir)/cp/g++spec.c system.h $(GCC_H)
f7da6097 80 $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/cp/g++spec.c
d2e5ee5c 81
b077493b
AO
82$(INTL_TARGETS): $(srcdir)/cp/parse.c
83$(srcdir)/cp/parse.c: $(srcdir)/cp/parse.y
84 @cp_srcdir=`sed -n 's/^srcdir[ ]*=[ ]*//p' cp/Makefile` && \
85 echo "cd cp && $(MAKE) $$cp_srcdir/parse.c" && \
86 cd cp && \
87 $(MAKE) $(SUBDIR_FLAGS_TO_PASS) $(CXX_FLAGS_TO_PASS) \
88 $$cp_srcdir/parse.c
89
a5943075 90# Create the compiler driver for g++.
08dc830e 91GXX_OBJS = gcc.o g++spec.o intl.o prefix.o version.o
ab87f8c8
JL
92g++$(exeext): $(GXX_OBJS) $(EXTRA_GCC_OBJS) $(LIBDEPS)
93 $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
94 $(GXX_OBJS) $(EXTRA_GCC_OBJS) $(LIBS)
a5943075
DE
95
96# Create a version of the g++ driver which calls the cross-compiler.
d2e5ee5c
MS
97g++-cross$(exeext): g++$(exeext)
98 -rm -f g++-cross$(exeext)
99 cp g++$(exeext) g++-cross$(exeext)
a5943075 100
f454109f 101cxxmain.o: $(srcdir)/../libiberty/cplus-dem.c $(DEMANGLE_H)
863adfc0 102 rm -f cxxmain.c
69789cfc 103 $(LN_S) $(srcdir)/../libiberty/cplus-dem.c cxxmain.c
863adfc0 104 $(CC) -c -DMAIN $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
78696538 105 -DVERSION=\"$(version)\" cxxmain.c
863adfc0 106
83f660b7 107# Apparently OpenVM needs the -o to be at the beginning of the link line.
6b17c089 108$(DEMANGLER_PROG): cxxmain.o underscore.o $(LIBDEPS)
83f660b7 109 $(CC) -o $@ $(ALL_CFLAGS) $(LDFLAGS) \
6b17c089 110 cxxmain.o underscore.o $(LIBS)
863adfc0 111
ca888935
RK
112CXX_SRCS = $(srcdir)/cp/call.c $(srcdir)/cp/class.c $(srcdir)/cp/cp-tree.def \
113 $(srcdir)/cp/cp-tree.h $(srcdir)/cp/cvt.c $(srcdir)/cp/decl.c \
114 $(srcdir)/cp/decl.h $(srcdir)/cp/decl2.c $(srcdir)/cp/dump.c \
115 $(srcdir)/cp/errfn.c $(srcdir)/cp/error.c $(srcdir)/cp/except.c \
116 $(srcdir)/cp/expr.c $(srcdir)/cp/friend.c $(srcdir)/cp/init.c \
117 $(srcdir)/cp/input.c $(srcdir)/cp/lex.c $(srcdir)/cp/lex.h \
118 $(srcdir)/cp/method.c $(srcdir)/cp/optimize.c $(srcdir)/cp/parse.y \
119 $(srcdir)/cp/pt.c $(srcdir)/cp/ptree.c $(srcdir)/cp/repo.c \
120 $(srcdir)/cp/rtti.c $(srcdir)/cp/search.c $(srcdir)/cp/semantics.c \
121 $(srcdir)/cp/spew.c $(srcdir)/cp/tree.c $(srcdir)/cp/typeck.c \
122 $(srcdir)/cp/typeck2.c $(srcdir)/cp/xref.c
a5943075 123
4519c0a8
MM
124cc1plus$(exeext): $(P) $(CXX_SRCS) $(LIBDEPS) stamp-objlist c-common.o \
125 c-pragma.o $(srcdir)/cp/cp-tree.h $(srcdir)/cp/cp-tree.def \
1660cb3a 126 $(srcdir)/cp/gxx.gperf $(srcdir)/cp/cfns.gperf hash.o
a73cab0f 127 cd cp; $(MAKE) $(FLAGS_TO_PASS) $(CXX_FLAGS_TO_PASS) ../cc1plus$(exeext)
6633d636 128#\f
a5943075
DE
129# Build hooks:
130
da372c07 131c++.all.build: g++$(exeext)
824b9a4c
MS
132c++.all.cross: g++-cross$(exeext) $(DEMANGLER_PROG)
133c++.start.encap: g++$(exeext)
863adfc0 134c++.rest.encap: $(DEMANGLER_PROG)
a5943075
DE
135
136c++.info:
137c++.dvi:
5156628f
MS
138
139# C++ language-support library pieces for libgcc.
a73cab0f 140tinfo.o: cc1plus$(exeext) $(srcdir)/cp/tinfo.cc
eeb109f2 141 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
5156628f 142 -c $(srcdir)/cp/tinfo.cc
a73cab0f 143tinfo2.o: cc1plus$(exeext) $(srcdir)/cp/tinfo2.cc
eeb109f2 144 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
5156628f 145 -c $(srcdir)/cp/tinfo2.cc
a73cab0f 146exception.o: cc1plus$(exeext) $(srcdir)/cp/exception.cc
eeb109f2 147 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
eb66be0e 148 -c -fexceptions $(srcdir)/cp/exception.cc
a73cab0f 149new.o: cc1plus$(exeext) $(srcdir)/cp/new.cc
eeb109f2 150 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
5156628f 151 -c $(srcdir)/cp/new.cc
a73cab0f 152opnew.o: cc1plus$(exeext) $(srcdir)/cp/new1.cc
eeb109f2 153 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
ced78d8b 154 -c $(srcdir)/cp/new1.cc -DL_op_new -o opnew.o
a73cab0f 155opnewnt.o: cc1plus$(exeext) $(srcdir)/cp/new1.cc
eeb109f2 156 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
ced78d8b 157 -c $(srcdir)/cp/new1.cc -DL_op_newnt -o opnewnt.o
a73cab0f 158opvnew.o: cc1plus$(exeext) $(srcdir)/cp/new2.cc
eeb109f2 159 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
ced78d8b 160 -c $(srcdir)/cp/new2.cc -DL_op_vnew -o opvnew.o
a73cab0f 161opvnewnt.o: cc1plus$(exeext) $(srcdir)/cp/new2.cc
eeb109f2 162 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
ced78d8b 163 -c $(srcdir)/cp/new2.cc -DL_op_vnewnt -o opvnewnt.o
a73cab0f 164opdel.o: cc1plus$(exeext) $(srcdir)/cp/new2.cc
eeb109f2 165 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
ced78d8b 166 -c $(srcdir)/cp/new2.cc -DL_op_delete -o opdel.o
a73cab0f 167opdelnt.o: cc1plus$(exeext) $(srcdir)/cp/new2.cc
eeb109f2 168 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
ced78d8b 169 -c $(srcdir)/cp/new2.cc -DL_op_delnt -o opdelnt.o
a73cab0f 170opvdel.o: cc1plus$(exeext) $(srcdir)/cp/new2.cc
eeb109f2 171 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
ced78d8b 172 -c $(srcdir)/cp/new2.cc -DL_op_vdel -o opvdel.o
a73cab0f 173opvdelnt.o: cc1plus$(exeext) $(srcdir)/cp/new2.cc
eeb109f2 174 $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(GXX_ABI_FLAG) $(CXXFLAGS) $(INCLUDES) \
ced78d8b 175 -c $(srcdir)/cp/new2.cc -DL_op_vdelnt -o opvdelnt.o
5156628f
MS
176
177# We want to update cplib2.txt if any of the source files change...
178cplib2.txt: $(CXX_LIB2SRCS) $(CXX_EXTRA_HEADERS) cplib2.ready
8dff1027
MS
179 case " $(LANGUAGES) " in \
180 *" "[cC]"++ "*) \
181 echo $(CXX_LIB2FUNCS) > cplib2.new;; \
182 *) \
183 echo "" > cplib2.new;; \
184 esac
5156628f
MS
185 mv -f cplib2.new cplib2.txt
186
187# Or if it would be different.
43297964
CB
188# Don't try to do write if `.' is not writable;
189# in that case, we're installing from someone else's directory.
190# But go ahead and fail if that directory hasn't been properly built.
f95e46b9 191cplib2.ready: $(GCC_PASSES) stmp-int-hdrs $(STMP_FIXPROTO)
43297964 192 @if [ -r cplib2.txt -a -w . ]; then \
8dff1027
MS
193 case " $(LANGUAGES) " in \
194 *" "[cC]"++ "*) \
195 echo $(CXX_LIB2FUNCS) > cplib2.new;; \
196 *) \
197 echo "" > cplib2.new;; \
198 esac; \
f49422da 199 if cmp -s cplib2.new cplib2.txt; then true; else \
5156628f
MS
200 touch cplib2.ready; \
201 fi; \
202 rm -f cplib2.new; \
faf5394a 203 else true ; \
5156628f
MS
204 fi
205 @if [ -f cplib2.ready ]; then true; else \
206 touch cplib2.ready; \
207 fi
6633d636 208#\f
a5943075
DE
209# Install hooks:
210# cc1plus is installed elsewhere as part of $(COMPILERS).
211
212# Nothing to do here.
213c++.install-normal:
214
215# Install the driver program as $(target)-g++
216# and also as either g++ (if native) or $(tooldir)/bin/g++.
217c++.install-common:
be81d4d7
DR
218 -if [ -f cc1plus$(exeext) ] ; then \
219 if [ -f g++-cross$(exeext) ] ; then \
220 rm -f $(bindir)/$(GXX_CROSS_NAME)$(exeext); \
221 $(INSTALL_PROGRAM) g++-cross$(exeext) $(bindir)/$(GXX_CROSS_NAME)$(exeext); \
222 chmod a+x $(bindir)/$(GXX_CROSS_NAME)$(exeext); \
223 rm -f $(bindir)/$(CXX_CROSS_NAME)$(exeext); \
ac64120e 224 $(LN) $(bindir)/$(GXX_CROSS_NAME)$(exeext) $(bindir)/$(CXX_CROSS_NAME)$(exeext); \
a5943075 225 else \
be81d4d7
DR
226 rm -f $(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
227 $(INSTALL_PROGRAM) g++$(exeext) $(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
228 chmod a+x $(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
229 rm -f $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
ac64120e 230 $(LN) $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
a5943075 231 fi ; \
5b477224
MH
232 if [ x$(DEMANGLER_PROG) != x ] && [ -x "$(DEMANGLER_PROG)" ]; then \
233 if [ -f g++-cross$(exeext) ] ; then \
234 rm -f $(bindir)/$(DEMANGLER_CROSS_NAME)$(exeext); \
235 $(INSTALL_PROGRAM) $(DEMANGLER_PROG) $(bindir)/$(DEMANGLER_CROSS_NAME)$(exeext); \
236 chmod a+x $(bindir)/$(DEMANGLER_CROSS_NAME)$(exeext); \
237 else \
238 rm -f $(bindir)/$(DEMANGLER_INSTALL_NAME)$(exeext); \
239 $(INSTALL_PROGRAM) $(DEMANGLER_PROG) $(bindir)/$(DEMANGLER_INSTALL_NAME)$(exeext); \
240 chmod a+x $(bindir)/$(DEMANGLER_INSTALL_NAME)$(exeext); \
241 fi ; \
242 fi ; \
a5943075
DE
243 fi
244
245c++.install-info:
246
247c++.install-man: $(srcdir)/cp/g++.1
be81d4d7 248 -if [ -f cc1plus$(exeext) ] ; then \
251580ee 249 if [ -f g++-cross$(exeext) ] ; then \
a76b6b40
MH
250 rm -f $(man1dir)/$(GXX_CROSS_NAME)$(manext); \
251 $(INSTALL_DATA) $(srcdir)/cp/g++.1 $(man1dir)/$(GXX_CROSS_NAME)$(manext); \
252 chmod a-x $(man1dir)/$(GXX_CROSS_NAME)$(manext); \
04dbaf1f 253 else \
a76b6b40
MH
254 rm -f $(man1dir)/$(GXX_INSTALL_NAME)$(manext); \
255 $(INSTALL_DATA) $(srcdir)/cp/g++.1 $(man1dir)/$(GXX_INSTALL_NAME)$(manext); \
256 chmod a-x $(man1dir)/$(GXX_INSTALL_NAME)$(manext); \
04dbaf1f 257 fi; \
a5943075
DE
258 else true; fi
259
260c++.uninstall:
be81d4d7
DR
261 -rm -rf $(bindir)/$(CXX_INSTALL_NAME)$(exeext)
262 -rm -rf $(bindir)/$(CXX_CROSS_NAME)$(exeext)
263 -rm -rf $(bindir)/$(GXX_INSTALL_NAME)$(exeext)
264 -rm -rf $(bindir)/$(GXX_CROSS_NAME)$(exeext)
5b477224
MH
265 -rm -rf $(bindir)/$(DEMANGLER_INSTALL_NAME)$(exeext)
266 -rm -rf $(bindir)/$(DEMANGLER_CROSS_NAME)$(exeext)
a76b6b40
MH
267 -rm -rf $(man1dir)/$(GXX_INSTALL_NAME)$(manext)
268 -rm -rf $(man1dir)/$(GXX_CROSS_NAME)$(manext)
6633d636 269#\f
a5943075
DE
270# Clean hooks:
271# A lot of the ancillary files are deleted by the main makefile.
272# We just have to delete files specific to us.
273
274c++.mostlyclean:
227c77e2 275 -rm -f cp/*$(objext) $(DEMANGLER_PROG)
a5943075 276c++.clean:
5156628f 277 -rm -f cplib2.txt cplib2.ready
a5943075
DE
278c++.distclean:
279 -rm -f cp/config.status cp/Makefile
280 -rm -f cp/parse.output
281c++.extraclean:
f1908d70 282c++.maintainer-clean:
a5943075 283 -rm -f cp/parse.c cp/parse.h
6633d636 284#\f
a5943075
DE
285# Stage hooks:
286# The main makefile has already created stage?/cp.
287
faf5394a 288c++.stage1: stage1-start
251580ee 289 -mv cp/*$(objext) stage1/cp
faf5394a 290c++.stage2: stage2-start
251580ee 291 -mv cp/*$(objext) stage2/cp
faf5394a 292c++.stage3: stage3-start
251580ee 293 -mv cp/*$(objext) stage3/cp
faf5394a 294c++.stage4: stage4-start
251580ee 295 -mv cp/*$(objext) stage4/cp
6633d636 296#\f
a5943075
DE
297# Maintenance hooks:
298
299# This target creates the files that can be rebuilt, but go in the
300# distribution anyway. It then copies the files to the distdir directory.
301c++.distdir:
187ce432 302 mkdir tmp/cp
c7ae64f2 303 mkdir tmp/cp/inc
a5943075
DE
304 cd cp ; $(MAKE) $(FLAGS_TO_PASS) $(CXX_FLAGS_TO_PASS) parse.c hash.h
305 cd cp; \
306 for file in *[0-9a-zA-Z+]; do \
ac64120e 307 $(LN) $$file ../tmp/cp; \
a5943075 308 done
c7ae64f2
JM
309 cd cp/inc; \
310 for file in *[0-9a-zA-Z+]; do \
311 ln $$file ../../tmp/cp/inc >/dev/null 2>&1 \
312 || cp $$file ../../tmp/cp/inc; \
313 done
This page took 0.604916 seconds and 5 git commands to generate.