#  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, 59 Temple Place - Suite 330,
#  Boston, MA 02111-1307, 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
