# Top level -*- makefile -*- fragment for GNU Objective-C
#   Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2004
#   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, 59 Temple Place - Suite 330,
#Boston, MA 02111-1307, USA.

# This file provides the language dependent support in the main Makefile.
# Each language makefile fragment must provide the following targets:
#
# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap,
# foo.install-normal, foo.install-common, foo.install-man,
# 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 objc: cc1obj$(exeext)
OBJECTIVE-C objective-c: cc1obj$(exeext)

# Tell GNU make to ignore these if they exist.
.PHONY: objective-c objc ObjC

# Use maximal warnings for this front end.
objc-warn = $(STRICT_WARN)
# Bison-1.75 output yields (harmless) -Wtraditional warnings
objc/objc-parse.o-warn = -Wno-error

# 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-parse.o objc/objc-act.o

# APPLE LOCAL begin order files  --ilr
 # APPLE LOCAL begin mainline 4.1 2005-06-17 3988498
cc1obj-dummy$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) dummy-checksum.o $(BACKEND) $(LIBDEPS)
	# APPLE LOCAL LLVM
	$(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$(exeext)
	build/genchecksum$(exeext) cc1obj-dummy$(exeext) > $@

cc1obj-checksum.o : cc1obj-checksum.c

cc1obj$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o $(BACKEND) $(LIBDEPS)
	# APPLE LOCAL LLVM
	$(LINKCC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
	      $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o \
	      $(BACKEND) $(LIBS) $(CC1OBJ_ORDER_FLAGS)
 # APPLE LOCAL end mainline 4.1 2005-06-17 3988498
# APPLE LOCAL end order files  --ilr

# Objective C language specific files.

# APPLE LOCAL begin mainline
objc/objc-lang.o : objc/objc-lang.c \
   $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
   $(C_TREE_H) $(C_PRETTY_PRINT_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
# APPLE LOCAL end mainline

objc/objc-parse.o : objc/objc-parse.c \
   $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \
   toplev.h $(GGC_H) input.h flags.h output.h langhooks.h $(C_COMMON_H) \
   $(C_PRAGMA_H)

# APPLE LOCAL begin mainline
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 opts.h \
   $(LANGHOOKS_DEF_H) $(HASHTAB_H) c-pragma.h gt-objc-objc-act.h tree-gimple.h
# APPLE LOCAL end mainline

objc.srcextra: objc/objc-parse.c objc/objc-parse.y
	-cp -p $^ $(srcdir)/objc

objc/objc-parse.c : objc/objc-parse.y
	-$(BISON) $(BISONFLAGS) -o $@ $<

objc/objc-parse.y: c-parse.in
	echo '/*WARNING: This file is automatically generated!*/' >tmp-objc-prs.y
	sed -e "/^@@ifc.*/,/^@@end_ifc.*/d" \
	    -e "/^@@ifobjc.*/d" -e "/^@@end_ifobjc.*/d" < $< >>tmp-objc-prs.y
	$(SHELL) $(srcdir)/../move-if-change tmp-objc-prs.y $@
	# APPLE LOCAL mainline rewrite
	touch $@

gtype-objc.h : s-gtype ; @true
gt-objc-objc-act.h : s-gtype ; @true

#
# Build hooks:

objc.all.build:
objc.all.cross:
objc.start.encap:
objc.rest.encap:
objc.info:
objc.man:
objc.srcinfo:
objc.srcman:

objc.tags: force
	cd $(srcdir)/objc; etags -o TAGS.sub *.y *.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-normal:

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 tmp-objc-prs.y
	-rm -f objc/*$(objext) objc/xforward objc/fflags
	-rm -f objc/objc-parse.y objc/objc-parse.c objc/objc-parse.output
	-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
	-rm -f objc-parse.output
objc.maintainer-clean:
	-rm -f $(srcdir)/objc/objc-parse.y $(srcdir)/objc/objc-parse.c 

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