# Top level -*- makefile -*- fragment for GNU Objective-C++
#   Copyright (C) 2005, 2007 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.dvi, foo.pdf
# 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)

# 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 \
   $(CXX_AND_OBJCXX_OBJS)

cc1objplus-dummy$(exeext): $(OBJCXX_OBJS) dummy-checksum.o $(BACKEND) \
		$(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
		$(OBJCXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBS)

cc1objplus-checksum.c : cc1objplus-dummy$(exeext) build/genchecksum$(build_exeext)
	build/genchecksum$(build_exeext) cc1objplus-dummy$(exeext) > $@

cc1objplus-checksum.o : cc1objplus-checksum.c

cc1objplus$(exeext): $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
		$(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBS)

# Objective C++ language specific files.

objcp/objcp-lang.o : objcp/objcp-lang.c \
  $(CXX_TREE_H) $(TM_H) toplev.h debug.h langhooks.h objc/objc-act.h \
  $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-objcp.h \
  $(DIAGNOSTIC_H) cp/cp-objcp-common.h $(TREE_GIMPLE_H)

objcp/objcp-decl.o : objcp/objcp-decl.c \
   $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \
   toplev.h $(GGC_H) $(C_PRAGMA_H) input.h $(FLAGS_H) output.h \
   objc/objc-act.h objcp/objcp-decl.h $(TREE_GIMPLE_H) $(EXPR_H) $(TARGET_H)

# The following must be an explicit rule; please keep in sync with the implicit
# one in Makefile.in.
objcp/objcp-act.o : objc/objc-act.c \
   $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) $(TM_P_H) \
   $(EXPR_H) $(TARGET_H) $(CXX_TREE_H) $(DIAGNOSTIC_H) toplev.h $(FLAGS_H) \
   objc/objc-act.h input.h $(FUNCTION_H) output.h debug.h langhooks.h \
   objcp/objcp-decl.h $(LANGHOOKS_DEF_H) $(HASHTAB_H) gt-objc-objc-act.h \
   $(TREE_GIMPLE_H)
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)

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++.html:
obj-c++.srcinfo:
obj-c++.srcextra:
obj-c++.man:

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

lang_checks += check-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)
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
