# Top level -*- makefile -*- fragment for GNU Objective-C
#   Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2007
#   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.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.
objc: cc1obj$(exeext)

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

# Use maximal warnings for this front end.
objc-warn = $(STRICT_WARN)

# Language-specific object files for Objective C.
OBJC_OBJS = objc/objc-lang.o objc/objc-act.o

cc1obj-dummy$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) dummy-checksum.o $(BACKEND) $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
	      $(OBJC_OBJS) $(C_AND_OBJC_OBJS) dummy-checksum.o \
	      $(BACKEND) $(LIBS) $(GMPLIBS)

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

cc1obj-checksum.o : cc1obj-checksum.c

cc1obj$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o $(BACKEND) $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
	      $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o \
	      $(BACKEND) $(LIBS) $(GMPLIBS)

# Objective C language specific files.

objc/objc-lang.o : objc/objc-lang.c \
   $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
   $(C_TREE_H) $(DIAGNOSTIC_H) \
   $(GGC_H) langhooks.h $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-objc.h \
   c-objc-common.h objc/objc-act.h $(TREE_GIMPLE_H)

objc/objc-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) $(C_TREE_H) $(DIAGNOSTIC_H) toplev.h $(FLAGS_H) \
   objc/objc-act.h input.h $(FUNCTION_H) output.h debug.h langhooks.h \
   $(LANGHOOKS_DEF_H) $(HASHTAB_H) $(C_PRAGMA_H) gt-objc-objc-act.h \
   $(TREE_GIMPLE_H)

objc.srcextra:

#
# Build hooks:

objc.all.cross:
objc.start.encap:
objc.rest.encap:
objc.info:
objc.install-info:
objc.dvi:
objc.pdf:
objc.install-pdf:
objc.html:
objc.man:
objc.srcinfo:
objc.srcman:

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

lang_checks += check-objc

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

objc.install-common:

objc.install-man:

objc.uninstall:
#
# Clean hooks:
# A lot of the ancillary files are deleted by the main makefile.
# We just have to delete files specific to us.
objc.mostlyclean:
	-rm -f objc/*$(objext) objc/xforward objc/fflags
	-rm -f objc/*$(coverageexts)
objc.clean: objc.mostlyclean
	-rm -rf objc-headers
objc.distclean:
	-rm -f objc/Makefile objc/Make-host objc/Make-target
	-rm -f objc/config.status objc/config.cache
objc.maintainer-clean:

#
# Stage hooks:

objc.stage1: stage1-start
	-mv objc/*$(objext) stage1/objc
objc.stage2: stage2-start
	-mv objc/*$(objext) stage2/objc
objc.stage3: stage3-start
	-mv objc/*$(objext) stage3/objc
objc.stage4: stage4-start
	-mv objc/*$(objext) stage4/objc
objc.stageprofile: stageprofile-start
	-mv objc/*$(objext) stageprofile/objc
objc.stagefeedback: stagefeedback-start
	-mv objc/*$(objext) stagefeedback/objc
