123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- # Top level -*- makefile -*- fragment for GNU C++.
- # Copyright (C) 1994-2015 Free Software Foundation, Inc.
- #This file is part of GCC.
- #GCC is free software; you can redistribute it and/or modify
- #it under the terms of the GNU General Public License as published by
- #the Free Software Foundation; either version 3, or (at your option)
- #any later version.
- #GCC is distributed in the hope that it will be useful,
- #but WITHOUT ANY WARRANTY; without even the implied warranty of
- #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- #GNU General Public License for more details.
- # You should have received a copy of the GNU General Public License
- # along with GCC; see the file COPYING3. If not see
- # <http://www.gnu.org/licenses/>.
- # This file provides the language dependent support in the main Makefile.
- # Each language makefile fragment must provide the following targets:
- #
- # foo.all.cross, foo.start.encap, foo.rest.encap,
- # foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
- # foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
- # foo.mostlyclean, foo.clean, foo.distclean,
- # foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
- #
- # where `foo' is the name of the language.
- #
- # It should also provide rules for:
- #
- # - making any compiler driver (eg: g++)
- # - the compiler proper (eg: cc1plus)
- # - define the names for selecting the language in LANGUAGES.
- # Actual names to use when installing a native compiler.
- CXX_INSTALL_NAME := $(shell echo c++|sed '$(program_transform_name)')
- GXX_INSTALL_NAME := $(shell echo g++|sed '$(program_transform_name)')
- CXX_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo c++|sed '$(program_transform_name)')
- GXX_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo g++|sed '$(program_transform_name)')
- CP_PLUGIN_HEADERS := cp-tree.h cxx-pretty-print.h name-lookup.h type-utils.h
- #
- # Define the names for selecting c++ in LANGUAGES.
- # Note that it would be nice to move the dependency on g++
- # into the C++ rule, but that needs a little bit of work
- # to do the right thing within all.cross.
- c++: cc1plus$(exeext)
- # Tell GNU make to ignore these if they exist.
- .PHONY: c++
- CFLAGS-cp/g++spec.o += $(DRIVER_DEFINES)
- # Create the compiler driver for g++.
- GXX_OBJS = $(GCC_OBJS) cp/g++spec.o
- xg++$(exeext): $(GXX_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBDEPS)
- +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
- $(GXX_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
- $(EXTRA_GCC_LIBS) $(LIBS)
- # Create a version of the g++ driver which calls the cross-compiler.
- g++-cross$(exeext): xg++$(exeext)
- -rm -f g++-cross$(exeext)
- cp xg++$(exeext) g++-cross$(exeext)
- # The compiler itself.
- # Shared with C front end:
- CXX_C_OBJS = attribs.o incpath.o \
- $(C_COMMON_OBJS) $(CXX_TARGET_OBJS)
- # Language-specific object files for C++ and Objective C++.
- CXX_AND_OBJCXX_OBJS = cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o \
- cp/class.o cp/decl2.o cp/error.o cp/lex.o cp/parser.o cp/ptree.o cp/rtti.o \
- cp/typeck.o cp/cvt.o cp/except.o cp/friend.o cp/init.o cp/method.o \
- cp/search.o cp/semantics.o cp/tree.o cp/repo.o cp/dump.o cp/optimize.o \
- cp/mangle.o cp/cp-objcp-common.o cp/name-lookup.o cp/cxx-pretty-print.o \
- cp/cp-cilkplus.o \
- cp/cp-gimplify.o cp/cp-array-notation.o cp/lambda.o \
- cp/vtable-class-hierarchy.o cp/constexpr.o cp/cp-ubsan.o $(CXX_C_OBJS)
- # Language-specific object files for C++.
- CXX_OBJS = cp/cp-lang.o c-family/stub-objc.o $(CXX_AND_OBJCXX_OBJS)
- c++_OBJS = $(CXX_OBJS) cc1plus-checksum.o cp/g++spec.o
- # Use strict warnings for this front end.
- cp-warn = $(STRICT_WARN)
- # compute checksum over all object files and the options
- cc1plus-checksum.c : build/genchecksum$(build_exeext) checksum-options \
- $(CXX_OBJS) $(BACKEND) $(LIBDEPS)
- build/genchecksum$(build_exeext) $(CXX_OBJS) $(BACKEND) $(LIBDEPS) \
- checksum-options > cc1plus-checksum.c.tmp && \
- $(srcdir)/../move-if-change cc1plus-checksum.c.tmp cc1plus-checksum.c
- cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS)
- +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
- $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS)
- ifeq ($(ENABLE_MAINTAINER_RULES), true)
- # Special build rule. This is a maintainer rule, that is only
- # available when GCC is configured with --enable-maintainer-mode. In
- # other cases, it is not available to avoid triggering rebuilds if a
- # user has the source checked out with unusual timestamps.
- $(srcdir)/cp/cfns.h: $(srcdir)/cp/cfns.gperf
- else
- # We keep the rule so that you can still force a rebuild, even if you
- # didn't configure GCC with --enable-maintainer-mode, by manually
- # deleting the $(srcdir)/cp/cfns.h file.
- $(srcdir)/cp/cfns.h:
- endif
- gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L ANSI-C \
- $(srcdir)/cp/cfns.gperf --output-file $(srcdir)/cp/cfns.h
- #
- # Build hooks:
- c++.all.cross: g++-cross$(exeext)
- c++.start.encap: xg++$(exeext)
- c++.rest.encap:
- c++.info:
- c++.install-info:
- c++.dvi:
- c++.pdf:
- c++.install-pdf:
- c++.install-html:
- c++.html:
- c++.srcinfo:
- c++.srcextra:
- c++.tags: force
- cd $(srcdir)/cp; etags -o TAGS.sub *.c *.h --language=none \
- --regex='/DEFTREECODE [(]\([A-Z_]+\)/\1/' cp-tree.def; \
- etags --include TAGS.sub --include ../TAGS.sub
- c++.man: doc/g++.1
- c++.srcman: doc/g++.1
- -cp -p $^ $(srcdir)/doc
- # 'make check' in gcc/ looks for check-c++, as do all toplevel C++-related
- # check targets. However, our DejaGNU framework requires 'check-g++' as its
- # entry point. We feed the former to the latter here.
- check-c++ : check-g++
- # Run the testsute in C++0x mode.
- check-c++0x:
- @echo Normal 'make check' now runs the testsuite in C++11 mode as well as C++98.
- # Run the testsuite with garbage collection at every opportunity.
- check-g++-strict-gc:
- $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) --extra_opts,--param,ggc-min-heapsize=0,--param,ggc-min-expand=0" \
- TESTSUITEDIR="$(TESTSUITEDIR).gc" check-g++
- check-c++-subtargets : check-g++-subtargets
- # List of targets that can use the generic check- rule and its // variant.
- lang_checks += check-g++
- lang_checks_parallelized += check-g++
- # For description see comment above check_gcc_parallelize in gcc/Makefile.in.
- check_g++_parallelize = 10000
- #
- # Install hooks:
- # cc1plus is installed elsewhere as part of $(COMPILERS).
- # Install the driver program as $(target)-g++ and $(target)-c++, and
- # also as g++ and c++ if native.
- c++.install-common: installdirs
- -if test "$(enable_as_accelerator)" != "yes" ; then \
- rm -f $(DESTDIR)$(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
- $(INSTALL_PROGRAM) xg++$(exeext) $(DESTDIR)$(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
- chmod a+x $(DESTDIR)$(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
- rm -f $(DESTDIR)$(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
- ( cd $(DESTDIR)$(bindir) && \
- $(LN) $(GXX_INSTALL_NAME)$(exeext) $(CXX_INSTALL_NAME)$(exeext) ); \
- if [ -f cc1plus$(exeext) ] ; then \
- if [ ! -f g++-cross$(exeext) ] ; then \
- rm -f $(DESTDIR)$(bindir)/$(GXX_TARGET_INSTALL_NAME)$(exeext); \
- ( cd $(DESTDIR)$(bindir) && \
- $(LN) $(GXX_INSTALL_NAME)$(exeext) $(GXX_TARGET_INSTALL_NAME)$(exeext) ); \
- rm -f $(DESTDIR)$(bindir)/$(CXX_TARGET_INSTALL_NAME)$(exeext); \
- ( cd $(DESTDIR)$(bindir) && \
- $(LN) $(CXX_INSTALL_NAME)$(exeext) $(CXX_TARGET_INSTALL_NAME)$(exeext) ); \
- fi ; \
- fi; \
- fi
- # We can't use links because not everyone supports them. So just copy the
- # manpage.
- doc/g++.1: doc/gcc.1
- cp $< doc/g++.1
- c++.install-man: $(DESTDIR)$(man1dir)/$(GXX_INSTALL_NAME)$(man1ext)
- $(DESTDIR)$(man1dir)/$(GXX_INSTALL_NAME)$(man1ext): doc/g++.1 installdirs
- -rm -f $@
- -$(INSTALL_DATA) $< $@
- -chmod a-x $@
- c++.install-plugin: installdirs
- # We keep the directory structure for files in config and .def files. All
- # other files are flattened to a single directory.
- headers="$(CP_PLUGIN_HEADERS)"; \
- for file in $$headers; do \
- path=$(srcdir)/cp/$$file; \
- dest=$(plugin_includedir)/cp/$$file; \
- echo $(INSTALL_DATA) $$path $(DESTDIR)$$dest; \
- dir=`dirname $$dest`; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
- $(INSTALL_DATA) $$path $(DESTDIR)$$dest; \
- done
- c++.uninstall:
- -rm -rf $(DESTDIR)$(bindir)/$(CXX_INSTALL_NAME)$(exeext)
- -rm -rf $(DESTDIR)$(bindir)/$(GXX_INSTALL_NAME)$(exeext)
- -rm -rf $(DESTDIR)$(man1dir)/$(GXX_INSTALL_NAME)$(man1ext)
- #
- # Clean hooks:
- # A lot of the ancillary files are deleted by the main makefile.
- # We just have to delete files specific to us.
- c++.mostlyclean:
- -rm -f doc/g++.1
- -rm -f cp/*$(objext)
- -rm -f cp/*$(coverageexts)
- c++.clean:
- c++.distclean:
- -rm -f cp/config.status cp/Makefile
- -rm -f cxxmain.c
- c++.maintainer-clean:
- #
- # Stage hooks:
- # The main makefile has already created stage?/cp.
- c++.stage1: stage1-start
- -mv cp/*$(objext) stage1/cp
- c++.stage2: stage2-start
- -mv cp/*$(objext) stage2/cp
- c++.stage3: stage3-start
- -mv cp/*$(objext) stage3/cp
- c++.stage4: stage4-start
- -mv cp/*$(objext) stage4/cp
- c++.stageprofile: stageprofile-start
- -mv cp/*$(objext) stageprofile/cp
- c++.stagefeedback: stagefeedback-start
- -mv cp/*$(objext) stagefeedback/cp
|