#  GNU Objective C Runtime Makefile for compiling with djgpp
#  Copyright (C) 1993, 1994, 1996 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 Makefile is configured for GnuMAKE

GCC_FOR_TARGET=gcc

.SUFFIXES: .o .m

OPTIMIZE = -O2

# Always search these dirs when compiling.
SUBDIR_INCLUDES = -I. -I.. -I../config

.c.o:
	$(GCC_FOR_TARGET) $(OPTIMIZE) \
		-c $(GCC_CFLAGS) $(SUBDIR_INCLUDES) $<

.m.o:
	$(GCC_FOR_TARGET) $(OPTIMIZE) -fgnu-runtime \
		-c $(GCC_CFLAGS) $(SUBDIR_INCLUDES) $<

OBJC_O = hash.o sarray.o class.o sendmsg.o init.o archive.o \
         selector.o objects.o misc.o object.o protocol.o encoding.o thread.o

libobjc.a: $(OBJC_O)
	-rm -f libobjc.a
	ar rc libobjc.a $(OBJC_O)
	ranlib libobjc.a

OBJC_H = hash.h objc-list.h sarray.h objc.h \
         objc-api.h \
	 object.h protocol.h mutex.h \
	 typedstream.h thread.h

mostlyclean:
	-rm -f *.o libobjc.a xforward fflags
clean: mostlyclean
distclean: mostlyclean
extraclean: mostlyclean
