# Top level -*- makefile -*- fragment for GNU C++.
#   Copyright (C) 1994-2017 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 operators.def

#
# 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/class.o cp/constexpr.o cp/constraint.o \
	cp/cp-array-notation.o cp/cp-cilkplus.o cp/cp-gimplify.o \
	cp/cp-objcp-common.o cp/cp-ubsan.o \
	cp/cvt.o cp/cxx-pretty-print.o \
	cp/decl.o cp/decl2.o cp/dump.o \
	cp/error.o cp/except.o cp/expr.o \
	cp/friend.o cp/init.o \
	cp/lambda.o cp/lex.o cp/logic.o \
	cp/mangle.o cp/method.o \
	cp/name-lookup.o cp/optimize.o \
	cp/parser.o cp/pt.o cp/ptree.o \
	cp/repo.o cp/rtti.o \
	cp/search.o cp/semantics.o \
	cp/tree.o cp/typeck.o cp/typeck2.o \
	cp/vtable-class-hierarchy.o $(CXX_C_OBJS)

ifeq ($(if $(wildcard ../stage_current),$(shell cat \
  ../stage_current)),stageautofeedback)
$(CXX_AND_OBJCXX_OBJS): CFLAGS += -fauto-profile=cc1plus.fda
$(CXX_AND_OBJCXX_OBJS): cc1plus.fda
endif

# 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
# re-use the checksum from the prev-final stage so it passes
# the bootstrap comparison and allows comparing of the cc1 binary
cc1plus-checksum.c : build/genchecksum$(build_exeext) checksum-options \
	$(CXX_OBJS) $(BACKEND) $(LIBDEPS) 
	if [ -f ../stage_final ] \
	   && cmp -s ../stage_current ../stage_final; then \
	   cp ../prev-gcc/cc1plus-checksum.c cc1plus-checksum.c; \
	else \
	  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; \
	fi

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 C++ \
		$(srcdir)/cp/cfns.gperf --output-file $(srcdir)/cp/cfns.h

cc1plus.fda: ../stage1-gcc/cc1plus$(exeext) ../prev-gcc/$(PERF_DATA)
	$(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov cc1plus.fda -profile ../prev-gcc/$(PERF_DATA) -gcov_version 1

#
# 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 *.cc *.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 testsuite in C++17 mode.
check-c++1z: check-c++17
check-c++17:
	$(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS)" GXX_TESTSUITE_STDS=17 check-g++

# Run the testsuite in all standard conformance levels.
check-c++-all:
	$(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) --stds=98,11,14,17,2a,concepts" check-g++

# 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 the check_$lang_parallelize comment 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
# Install import library.
ifeq ($(plugin_implib),yes)
	$(mkinstalldirs) $(DESTDIR)$(plugin_resourcesdir)
	$(INSTALL_DATA) cc1plus$(exeext).a $(DESTDIR)/$(plugin_resourcesdir)/cc1plus$(exeext).a
endif

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)
	-rm -f xg++$(exeext) g++-cross$(exeext) cc1plus$(exeext) cc1plus.fda
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
c++.autostageprofile: stageprofile-start
	-mv cp/*$(objext) autostageprofile/cp
c++.autostagefeedback: stagefeedback-start
	-mv cp/*$(objext) autostagefeedback/cp
