# Top level -*- makefile -*- fragment for GNU Objective-C
#   Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005
#   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 2, 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 COPYING.  If not, write to
#the Free Software Foundation, 51 Franklin Street, Fifth Floor,
#Boston, MA 02110-1301, USA.

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

# APPLE LOCAL begin order files  --ilr
ifeq ($(ORDER_FILES),yes)
CC1OBJ_ORDER_FLAGS = `if [ -f $(srcdir)/../order-files/cc1obj.order ]; then \
		        echo -sectorder __TEXT __text $(srcdir)/../order-files/cc1obj.order -e start ; fi`
else
CC1OBJ_ORDER_FLAGS =
endif
# APPLE LOCAL end order files  --ilr

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

# APPLE LOCAL begin order files  --ilr
cc1obj-dummy$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) dummy-checksum.o $(BACKEND) $(LIBDEPS)
	# LLVM LOCAL
	$(LINKCC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
	      $(OBJC_OBJS) $(C_AND_OBJC_OBJS) dummy-checksum.o \
	      $(BACKEND) $(LIBS) $(CC1OBJ_ORDER_FLAGS)

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)
	# LLVM LOCAL
	$(LINKCC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
	      $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o \
	      $(BACKEND) $(LIBS) $(CC1OBJ_ORDER_FLAGS)
# APPLE LOCAL end order files  --ilr
# APPLE LOCAL optimization pragmas 3124235/3420242
objc/objc-act.o : opts.h

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