# Top level -*- makefile -*- fragment for GNU C++.
#   Copyright (C) 1994-2022 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)
c++.serial = cc1plus$(exeext)

# Tell GNU make to ignore these if they exist.
.PHONY: c++

CFLAGS-cp/g++spec.o += $(DRIVER_DEFINES)

CFLAGS-cp/module.o += -DHOST_MACHINE=\"$(host)\" \
	-DTARGET_MACHINE=\"$(target)\"

# In non-release builds, use a date-related module version.
ifneq ($(DEVPHASE_c),)
# Some date's don't grok 'r', if so, simply use today's
# date (don't bootstrap at midnight).
MODULE_VERSION := $(shell date -r $(srcdir)/cp/module.cc '+%y%m%d-%H%M' \
  2>/dev/null || date '+%y%m%d-0000' 2>/dev/null || echo 0)

CFLAGS-cp/module.o += -DMODULE_VERSION='($(subst -,,$(MODULE_VERSION))U)'
endif

# 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/coroutines.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/mapper-client.o cp/mapper-resolver.o \
	cp/method.o cp/module.o \
	cp/name-lookup.o cp/optimize.o \
	cp/parser.o cp/pt.o cp/ptree.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.cc : build/genchecksum$(build_exeext) checksum-options \
	$(CXX_OBJS) $(BACKEND) $(CODYLIB) $(LIBDEPS) 
	if [ -f ../stage_final ] \
	   && cmp -s ../stage_current ../stage_final; then \
	   cp ../prev-gcc/cc1plus-checksum.cc cc1plus-checksum.cc; \
	else \
	  build/genchecksum$(build_exeext) $(CXX_OBJS) $(BACKEND) $(CODYLIB) $(LIBDEPS) \
                     checksum-options > cc1plus-checksum.cc.tmp &&	   \
	  $(srcdir)/../move-if-change cc1plus-checksum.cc.tmp cc1plus-checksum.cc; \
	fi

cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(CODYLIB) $(LIBDEPS) $(c++.prev)
	@$(call LINK_PROGRESS,$(INDEX.c++),start)
	+$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
	      $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(CODYLIB) $(NETLIBS) \
		$(LIBS) $(BACKENDLIBS)
	@$(call LINK_PROGRESS,$(INDEX.c++),end)

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++.install-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

# C++ selftests

# If C++ is enabled, require the selftests to be run for it
# at each stage of the build:
selftest-c++: s-selftest-c++

CPP_SELFTEST_DEPS = cc1plus$(exeext) $(SELFTEST_DEPS)
CPP_SELFTEST_FLAGS = -xc++ $(SELFTEST_FLAGS)

# Run the C++ selftests
s-selftest-c++: $(CPP_SELFTEST_DEPS)
	$(GCC_FOR_TARGET) $(CPP_SELFTEST_FLAGS)
	$(STAMP) $@

# Convenience method for running C++ selftests under gdb:
.PHONY: selftest-c++-gdb
selftest-c++-gdb: $(CPP_SELFTEST_DEPS)
	$(GCC_FOR_TARGET) $(CPP_SELFTEST_FLAGS) \
	  -wrapper gdb,--args

# Convenience method for running C++ selftests under valgrind:
.PHONY: selftest-c++-valgrind
selftest-c++-valgrind: $(CPP_SELFTEST_DEPS)
	$(GCC_FOR_TARGET) $(CPP_SELFTEST_FLAGS) \
	  -wrapper valgrind,--leak-check=full

# '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,20,23,impcx" 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,--param,hash-table-verification-limit=10000" \
	  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
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
