# Top level -*- makefile -*- fragment for GNU Objective-C++
#   Copyright (C) 2005-2021 Free Software Foundation, Inc.
#   Contributed by Ziemowit Laski  <zlaski@apple.com>

#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.

#
# Define the names for selecting Objective-C++ in LANGUAGES.
obj-c++: cc1objplus$(exeext)
obj-c++.serial = cc1objplus$(exeext)

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

# Use maximal warnings for this front end.  Also, make ObjC and C++
# headers accessible.
objcp-warn = $(STRICT_WARN) -DOBJCPLUS -I$(srcdir)/objc -I$(srcdir)/cp

# Language-specific object files for Objective C++.
OBJCXX_OBJS = objcp/objcp-act.o objcp/objcp-lang.o objcp/objcp-decl.o \
   objcp/objc-runtime-shared-support.o \
   objcp/objc-gnu-runtime-abi-01.o \
   objcp/objc-next-runtime-abi-01.o \
   objcp/objc-next-runtime-abi-02.o \
   objcp/objc-encoding.o \
   objcp/objc-map.o \
   $(CXX_AND_OBJCXX_OBJS)

obj-c++_OBJS = $(OBJCXX_OBJS) cc1objplus-checksum.o

# 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
cc1objplus-checksum.c : build/genchecksum$(build_exeext) checksum-options \
	$(OBJCXX_OBJS) $(BACKEND) $(CODYLIB) $(LIBDEPS)
	if [ -f ../stage_final ] \
	   && cmp -s ../stage_current ../stage_final \
	   && [ -f ../prev-gcc/$@ ]; then \
	  cp ../prev-gcc/$@ $@; \
	else \
	  build/genchecksum$(build_exeext) $(OBJCXX_OBJS) $(BACKEND) \
		$(CODYLIB) $(LIBDEPS) checksum-options > $@.tmp && \
	  $(srcdir)/../move-if-change $@.tmp $@; \
	fi

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

# Objective C++ language specific files.

objcp/objc-runtime-shared-support.o: objc/objc-runtime-shared-support.c
	$(COMPILE) $<
	$(POSTCOMPILE)

objcp/objc-gnu-runtime-abi-01.o: objc/objc-gnu-runtime-abi-01.c
	$(COMPILE) $<
	$(POSTCOMPILE)

objcp/objc-next-runtime-abi-01.o: objc/objc-next-runtime-abi-01.c
	$(COMPILE) $<
	$(POSTCOMPILE)

objcp/objc-next-runtime-abi-02.o: objc/objc-next-runtime-abi-02.c
	$(COMPILE) $<
	$(POSTCOMPILE)

objcp/objcp-act.o: objc/objc-act.c
	$(COMPILE) $<
	$(POSTCOMPILE)

objcp/objc-encoding.o: objc/objc-encoding.c
	$(COMPILE) $<
	$(POSTCOMPILE)

objcp/objc-map.o: objc/objc-map.c
	$(COMPILE) $<
	$(POSTCOMPILE)

po-generated:

#
# Build hooks:

obj-c++.all.cross:
obj-c++.start.encap:
obj-c++.rest.encap:
obj-c++.info:
obj-c++.install-info:
obj-c++.dvi:
obj-c++.pdf:
obj-c++.install-pdf:
obj-c++.html:
obj-c++.install-html:
obj-c++.srcinfo:
obj-c++.srcextra:
obj-c++.man:
obj-c++.install-plugin:

obj-c++.tags: force
	cd $(srcdir)/objcp; etags -o TAGS.sub *.c *.h; \
	etags --include TAGS.sub --include ../TAGS.sub

lang_checks += check-obj-c++

# No objc-c++-specific selftests
selftest-obj-c++:

#
# Install hooks:
# cc1objplus is installed elsewhere as part of $(COMPILERS).

obj-c++.install-common:

obj-c++.install-man:

obj-c++.uninstall:
#
# Clean hooks:
# A lot of the ancillary files are deleted by the main makefile.
# We just have to delete files specific to us.
obj-c++.mostlyclean:
	-rm -f objcp/*$(objext)
	-rm -f objcp/*$(coverageexts)
	-rm -f cc1objplus$(exeext)
obj-c++.clean: obj-c++.mostlyclean
obj-c++.distclean:
	-rm -f objcp/config.status objcp/Makefile
obj-c++.maintainer-clean:

#
# Stage hooks:

obj-c++.stage1: stage1-start
	-mv objcp/*$(objext) stage1/objcp
obj-c++.stage2: stage2-start
	-mv objcp/*$(objext) stage2/objcp
obj-c++.stage3: stage3-start
	-mv objcp/*$(objext) stage3/objcp
obj-c++.stage4: stage4-start
	-mv objcp/*$(objext) stage4/objcp
obj-c++.stageprofile: stageprofile-start
	-mv objcp/*$(objext) stageprofile/objcp
obj-c++.stagefeedback: stagefeedback-start
	-mv objcp/*$(objext) stagefeedback/objcp
