Make-lang.in revision 132718
190075Sobrien# Top level -*- makefile -*- fragment for GNU C++. 2132718Skan# Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003 390075Sobrien# Free Software Foundation, Inc. 418334Speter 5132718Skan#This file is part of GCC. 618334Speter 7132718Skan#GCC is free software; you can redistribute it and/or modify 818334Speter#it under the terms of the GNU General Public License as published by 918334Speter#the Free Software Foundation; either version 2, or (at your option) 1018334Speter#any later version. 1118334Speter 12132718Skan#GCC is distributed in the hope that it will be useful, 1318334Speter#but WITHOUT ANY WARRANTY; without even the implied warranty of 1418334Speter#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1518334Speter#GNU General Public License for more details. 1618334Speter 1718334Speter#You should have received a copy of the GNU General Public License 18132718Skan#along with GCC; see the file COPYING. If not, write to 1918334Speter#the Free Software Foundation, 59 Temple Place - Suite 330, 2018334Speter#Boston, MA 02111-1307, USA. 2118334Speter 2218334Speter# This file provides the language dependent support in the main Makefile. 2318334Speter# Each language makefile fragment must provide the following targets: 2418334Speter# 2518334Speter# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap, 26132718Skan# foo.install-normal, foo.install-common, foo.install-man, 2790075Sobrien# foo.uninstall, 28132718Skan# foo.mostlyclean, foo.clean, foo.distclean, 2918334Speter# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4 3018334Speter# 3118334Speter# where `foo' is the name of the language. 3218334Speter# 3318334Speter# It should also provide rules for: 3418334Speter# 3518334Speter# - making any compiler driver (eg: g++) 3618334Speter# - the compiler proper (eg: cc1plus) 3718334Speter# - define the names for selecting the language in LANGUAGES. 3818334Speter 3918334Speter# Actual names to use when installing a native compiler. 40132718SkanCXX_INSTALL_NAME := $(shell echo c++|sed '$(program_transform_name)') 41132718SkanGXX_INSTALL_NAME := $(shell echo g++|sed '$(program_transform_name)') 42132718SkanCXX_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo c++|sed '$(program_transform_name)') 43132718SkanGXX_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo g++|sed '$(program_transform_name)') 4418334Speter 4550397Sobrien# 4618334Speter# Define the names for selecting c++ in LANGUAGES. 4718334Speter# Note that it would be nice to move the dependency on g++ 4818334Speter# into the C++ rule, but that needs a little bit of work 4918334Speter# to do the right thing within all.cross. 5050397SobrienC++ c++: cc1plus$(exeext) 5118334Speter 5218334Speter# Tell GNU make to ignore these if they exist. 5318334Speter.PHONY: C++ c++ 5418334Speter 55132718Skang++spec.o: $(srcdir)/cp/g++spec.c $(SYSTEM_H) coretypes.h $(TM_H) $(GCC_H) $(CONFIG_H) 5690075Sobrien (SHLIB_LINK='$(SHLIB_LINK)' \ 5790075Sobrien SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \ 5890075Sobrien $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(DRIVER_DEFINES) \ 5990075Sobrien $(INCLUDES) $(srcdir)/cp/g++spec.c) 6050397Sobrien 6118334Speter# Create the compiler driver for g++. 6252284SobrienGXX_OBJS = gcc.o g++spec.o intl.o prefix.o version.o 6352284Sobrieng++$(exeext): $(GXX_OBJS) $(EXTRA_GCC_OBJS) $(LIBDEPS) 6452284Sobrien $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ 6552284Sobrien $(GXX_OBJS) $(EXTRA_GCC_OBJS) $(LIBS) 6618334Speter 6718334Speter# Create a version of the g++ driver which calls the cross-compiler. 6850397Sobrieng++-cross$(exeext): g++$(exeext) 6950397Sobrien -rm -f g++-cross$(exeext) 7050397Sobrien cp g++$(exeext) g++-cross$(exeext) 7118334Speter 7290075Sobrien# The compiler itself. 7390075Sobrien# Shared with C front end: 7490075SobrienCXX_C_OBJS = attribs.o c-common.o c-format.o c-pragma.o c-semantics.o c-lex.o \ 75132718Skan c-dump.o $(CXX_TARGET_OBJS) c-pretty-print.o c-opts.o c-pch.o \ 76132718Skan c-incpath.o cppdefault.o c-ppoutput.o c-cppbuiltin.o prefix.o 7718334Speter 7890075Sobrien# Language-specific object files. 7990075SobrienCXX_OBJS = cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o \ 80132718Skan cp/class.o cp/decl2.o cp/error.o cp/lex.o cp/parser.o cp/ptree.o cp/rtti.o \ 81132718Skan cp/typeck.o cp/cvt.o cp/except.o cp/friend.o cp/init.o cp/method.o \ 82132718Skan cp/search.o cp/semantics.o cp/tree.o cp/repo.o cp/dump.o cp/optimize.o \ 83132718Skan cp/mangle.o cp/cp-lang.o cp/name-lookup.o cp/cxx-pretty-print.o 8490075Sobrien 85132718Skan# Use strict warnings for this front end. 86132718Skancp-warn = $(STRICT_WARN) $(WERROR) 8790075Sobrien 8890075Sobriencc1plus$(exeext): $(CXX_OBJS) $(CXX_C_OBJS) $(BACKEND) \ 8990075Sobrien libcpp.a $(LIBDEPS) 9090075Sobrien $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ 9190075Sobrien $(CXX_OBJS) $(CXX_C_OBJS) $(BACKEND) libcpp.a $(LIBS) 9290075Sobrien 9390075Sobrien# Special build rules. 9490075Sobrien$(srcdir)/cp/cfns.h: $(srcdir)/cp/cfns.gperf 95132718Skan gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L ANSI-C \ 9690075Sobrien $(srcdir)/cp/cfns.gperf > $(srcdir)/cp/cfns.h 9790075Sobrien 98117395Skangtype-cp.h gt-cp-call.h gt-cp-decl.h gt-cp-decl2.h : s-gtype; @true 99132718Skangt-cp-pt.h gt-cp-repo.h gt-cp-parser.h gt-cp-method.h : s-gtype; @true 100132718Skangt-cp-tree.h gt-cp-mangle.h gt-cp-name-lookup.h: s-gtype; @true 101117395Skan 10250397Sobrien# 10318334Speter# Build hooks: 10418334Speter 10550397Sobrienc++.all.build: g++$(exeext) 106117395Skanc++.all.cross: g++-cross$(exeext) 10750397Sobrienc++.start.encap: g++$(exeext) 108117395Skanc++.rest.encap: 109132718Skanc++.info: 110132718Skanc++.srcinfo: 111132718Skanc++.srcextra: 11218334Speter 113132718Skanc++.tags: force 114132718Skan cd $(srcdir)/cp; etags -o TAGS.sub *.c *.h --language=none \ 115132718Skan --regex='/DEFTREECODE [(]\([A-Z_]+\)/\1/' cp-tree.def; \ 116132718Skan etags --include TAGS.sub --include ../TAGS.sub 11750397Sobrien 118132718Skanc++.man: doc/g++.1 119132718Skan 120132718Skanc++.srcman: doc/g++.1 121132718Skan -cp -p $^ $(srcdir)/doc 122132718Skan 123132718Skancheck-c++ : check-g++ 124132718Skanlang_checks += check-g++ 125132718Skan 12650397Sobrien# 12718334Speter# Install hooks: 12818334Speter# cc1plus is installed elsewhere as part of $(COMPILERS). 12918334Speter 13018334Speter# Nothing to do here. 13118334Speterc++.install-normal: 13218334Speter 13318334Speter# Install the driver program as $(target)-g++ 13418334Speter# and also as either g++ (if native) or $(tooldir)/bin/g++. 13590075Sobrienc++.install-common: installdirs 136132718Skan -rm -f $(DESTDIR)$(bindir)/$(GXX_INSTALL_NAME)$(exeext) 137132718Skan -$(INSTALL_PROGRAM) g++$(exeext) $(DESTDIR)$(bindir)/$(GXX_INSTALL_NAME)$(exeext) 138132718Skan -chmod a+x $(DESTDIR)$(bindir)/$(GXX_INSTALL_NAME)$(exeext) 139132718Skan -rm -f $(DESTDIR)$(bindir)/$(CXX_INSTALL_NAME)$(exeext) 140132718Skan -( cd $(DESTDIR)$(bindir) && \ 141132718Skan $(LN) $(GXX_INSTALL_NAME)$(exeext) $(CXX_INSTALL_NAME)$(exeext) ) 14218334Speter -if [ -f cc1plus$(exeext) ] ; then \ 14318334Speter if [ -f g++-cross$(exeext) ] ; then \ 144110611Skan if [ -d $(DESTDIR)$(gcc_tooldir)/bin/. ] ; then \ 145110611Skan rm -f $(DESTDIR)$(gcc_tooldir)/bin/g++$(exeext); \ 146110611Skan $(INSTALL_PROGRAM) g++-cross$(exeext) $(DESTDIR)$(gcc_tooldir)/bin/g++$(exeext); \ 147110611Skan rm -f $(DESTDIR)$(gcc_tooldir)/bin/c++$(exeext); \ 148110611Skan ( cd $(DESTDIR)$(gcc_tooldir)/bin && \ 149110611Skan $(LN) g++$(exeext) c++$(exeext) ); \ 15090075Sobrien else true; fi; \ 15118334Speter else \ 152110611Skan rm -f $(DESTDIR)$(bindir)/$(GXX_TARGET_INSTALL_NAME)$(exeext); \ 153110611Skan ( cd $(DESTDIR)$(bindir) && \ 154110611Skan $(LN) $(GXX_INSTALL_NAME)$(exeext) $(GXX_TARGET_INSTALL_NAME)$(exeext) ); \ 155110611Skan rm -f $(DESTDIR)$(bindir)/$(CXX_TARGET_INSTALL_NAME)$(exeext); \ 156110611Skan ( cd $(DESTDIR)$(bindir) && \ 157110611Skan $(LN) $(CXX_INSTALL_NAME)$(exeext) $(CXX_TARGET_INSTALL_NAME)$(exeext) ); \ 15818334Speter fi ; \ 15918334Speter fi 16018334Speter 161132718Skan# We can't use links because not everyone supports them, and we can't use 162132718Skan# .so because Irix 6.5 doesn't support them. So just copy the manpage. 163132718Skandoc/g++.1: doc/gcc.1 164132718Skan cp doc/gcc.1 doc/g++.1 16518334Speter 166132718Skanc++.install-man: installdirs $(DESTDIR)$(man1dir)/$(GXX_INSTALL_NAME)$(man1ext) 16718334Speter 168132718Skan$(DESTDIR)$(man1dir)/$(GXX_INSTALL_NAME)$(man1ext): doc/g++.1 169132718Skan -rm -f $@ 170132718Skan -$(INSTALL_DATA) $< $@ 171132718Skan -chmod a-x $@ 172132718Skan 17318334Speterc++.uninstall: 174110611Skan -rm -rf $(DESTDIR)$(bindir)/$(CXX_INSTALL_NAME)$(exeext) 175110611Skan -rm -rf $(DESTDIR)$(bindir)/$(GXX_INSTALL_NAME)$(exeext) 176110611Skan -rm -rf $(DESTDIR)$(man1dir)/$(GXX_INSTALL_NAME)$(man1ext) 17750397Sobrien# 17818334Speter# Clean hooks: 17918334Speter# A lot of the ancillary files are deleted by the main makefile. 18018334Speter# We just have to delete files specific to us. 18118334Speter 18218334Speterc++.mostlyclean: 183132718Skan -rm -f doc/g++.1 184117395Skan -rm -f cp/*$(objext) 185117395Skan -rm -f cp/*$(coverageexts) 18618334Speterc++.clean: 18718334Speterc++.distclean: 18818334Speter -rm -f cp/config.status cp/Makefile 18918334Speterc++.maintainer-clean: 19050397Sobrien# 19118334Speter# Stage hooks: 19218334Speter# The main makefile has already created stage?/cp. 19318334Speter 19450397Sobrienc++.stage1: stage1-start 19518334Speter -mv cp/*$(objext) stage1/cp 19650397Sobrienc++.stage2: stage2-start 19718334Speter -mv cp/*$(objext) stage2/cp 19850397Sobrienc++.stage3: stage3-start 19918334Speter -mv cp/*$(objext) stage3/cp 20050397Sobrienc++.stage4: stage4-start 20118334Speter -mv cp/*$(objext) stage4/cp 202132718Skanc++.stageprofile: stageprofile-start 203132718Skan -mv cp/*$(objext) stageprofile/cp 204132718Skanc++.stagefeedback: stagefeedback-start 205132718Skan -mv cp/*$(objext) stagefeedback/cp 20690075Sobrien 20750397Sobrien# 20890075Sobrien# .o: .h dependencies. 209132718SkanCXX_TREE_H = $(TREE_H) cp/name-lookup.h cp/cp-tree.h c-common.h \ 210132718Skan cp/cp-tree.def c-common.def \ 211132718Skan function.h varray.h $(SYSTEM_H) coretypes.h $(CONFIG_H) $(TARGET_H) \ 212132718Skan $(GGC_H) \ 21390075Sobrien $(srcdir)/../include/hashtab.h $(srcdir)/../include/splay-tree.h 21418334Speter 215132718SkanCXX_PRETTY_PRINT_H = cp/cxx-pretty-print.h $(C_PRETTY_PRINT_H) 216132718Skan 217132718Skancp/lex.o: cp/lex.c $(CXX_TREE_H) $(TM_H) flags.h cp/lex.h \ 218132718Skan c-pragma.h toplev.h output.h input.h cp/operators.def $(TM_P_H) 219132718Skancp/cp-lang.o: cp/cp-lang.c $(CXX_TREE_H) $(TM_H) toplev.h langhooks.h \ 220132718Skan $(LANGHOOKS_DEF_H) c-common.h $(CXX_PRETTY_PRINT_H) $(DIAGNOSTIC_H) 221132718Skancp/decl.o: cp/decl.c $(CXX_TREE_H) $(TM_H) flags.h cp/lex.h cp/decl.h stack.h \ 222132718Skan output.h $(EXPR_H) except.h toplev.h $(HASHTAB_H) $(RTL_H) \ 223117395Skan cp/operators.def $(TM_P_H) tree-inline.h diagnostic.h c-pragma.h \ 224132718Skan debug.h gt-cp-decl.h gtype-cp.h timevar.h 225132718Skancp/decl2.o: cp/decl2.c $(CXX_TREE_H) $(TM_H) flags.h cp/lex.h cp/decl.h $(EXPR_H) \ 226132718Skan output.h except.h toplev.h $(RTL_H) c-common.h gt-cp-decl2.h cgraph.h 227132718Skancp/typeck2.o: cp/typeck2.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h output.h $(TM_P_H) \ 22890075Sobrien diagnostic.h 229132718Skancp/typeck.o: cp/typeck.c $(CXX_TREE_H) $(TM_H) flags.h $(RTL_H) $(EXPR_H) toplev.h \ 230132718Skan diagnostic.h convert.h 231132718Skancp/class.o: cp/class.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h $(RTL_H) $(TARGET_H) convert.h 232132718Skancp/call.o: cp/call.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h $(RTL_H) $(EXPR_H) \ 233132718Skan diagnostic.h intl.h gt-cp-call.h convert.h target.h 234132718Skancp/friend.o: cp/friend.c $(CXX_TREE_H) $(TM_H) flags.h $(RTL_H) toplev.h $(EXPR_H) 235132718Skancp/init.o: cp/init.c $(CXX_TREE_H) $(TM_H) flags.h $(RTL_H) $(EXPR_H) toplev.h \ 236132718Skan except.h 237132718Skancp/method.o: cp/method.c $(CXX_TREE_H) $(TM_H) toplev.h $(RTL_H) $(EXPR_H) \ 238132718Skan $(TM_P_H) $(TARGET_H) gt-cp-method.h 239132718Skancp/cvt.o: cp/cvt.c $(CXX_TREE_H) $(TM_H) cp/decl.h flags.h toplev.h convert.h 240132718Skancp/search.o: cp/search.c $(CXX_TREE_H) $(TM_H) stack.h flags.h toplev.h $(RTL_H) 241132718Skancp/tree.o: cp/tree.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h $(RTL_H) \ 242117395Skan insn-config.h integrate.h tree-inline.h real.h gt-cp-tree.h $(TARGET_H) 243132718Skancp/ptree.o: cp/ptree.c $(CXX_TREE_H) $(TM_H) 244132718Skancp/rtti.o: cp/rtti.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h convert.h 245132718Skancp/except.o: cp/except.c $(CXX_TREE_H) $(TM_H) flags.h $(RTL_H) except.h toplev.h \ 246117395Skan cp/cfns.h $(EXPR_H) libfuncs.h tree-inline.h 247132718Skancp/expr.o: cp/expr.c $(CXX_TREE_H) $(TM_H) $(RTL_H) flags.h $(EXPR_H) toplev.h \ 24890075Sobrien except.h $(TM_P_H) 249132718Skancp/pt.o: cp/pt.c $(CXX_TREE_H) $(TM_H) cp/decl.h cp/lex.h \ 250132718Skan toplev.h $(RTL_H) except.h tree-inline.h gt-cp-pt.h 251132718Skancp/error.o: cp/error.c $(CXX_TREE_H) $(TM_H) toplev.h $(DIAGNOSTIC_H) \ 252132718Skan flags.h real.h $(LANGHOOKS_DEF_H) $(CXX_PRETTY_PRINT_H) 253132718Skancp/repo.o: cp/repo.c $(CXX_TREE_H) $(TM_H) toplev.h diagnostic.h \ 254117395Skan gt-cp-repo.h 255132718Skancp/semantics.o: cp/semantics.c $(CXX_TREE_H) $(TM_H) cp/lex.h except.h toplev.h \ 256132718Skan flags.h debug.h output.h $(RTL_H) $(TIMEVAR_H) $(EXPR_H) \ 257132718Skan tree-inline.h cgraph.h 258132718Skancp/dump.o: cp/dump.c $(CXX_TREE_H) $(TM_H) tree-dump.h 259132718Skancp/optimize.o: cp/optimize.c $(CXX_TREE_H) $(TM_H) rtl.h integrate.h insn-config.h \ 26090075Sobrien input.h $(PARAMS_H) debug.h tree-inline.h 261132718Skancp/mangle.o: cp/mangle.c $(CXX_TREE_H) $(TM_H) toplev.h real.h gt-cp-mangle.h $(TM_P_H) 26290075Sobrien 263132718Skancp/parser.o: cp/parser.c $(CXX_TREE_H) $(TM_H) diagnostic.h gt-cp-parser.h output.h 26490075Sobrien 265132718Skancp/name-lookup.o: cp/name-lookup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ 266132718Skan $(TM_H) $(CXX_TREE_H) timevar.h gt-cp-name-lookup.h toplev.h \ 267132718Skan $(DIAGNOSTIC_H) flags.h 26890075Sobrien 269132718Skancp/cxx-pretty-print.o: cp/cxx-pretty-print.c $(CXX_PRETTY_PRINT_H) \ 270132718Skan $(CONFIG_H) $(SYSTEM_H) $(TM_H) coretypes.h $(CXX_TREE_H) 271