# Makefile for SqueakCompiler (aka "Jitter 3")
#
# Shamelessly assumes GNU make, g++, and GNU linker options.
# I'll do real configure stuff later.  Promise.  Well, maybe...
#
# Last edited: 2000-12-04 16:03:32 by piumarta on emilia.rd.wdi.disney.com

blddir:=	..
topdir:=	$(blddir)/..
srcdir:=	$(topdir)/src
jsrcdir:=	$(srcdir)/SqueakCompiler
gendir:=	$(srcdir)/generated
unxdir:=	$(srcdir)/unix

ccgdir:=	$(topdir)/ccg

CXX:=		g++
CCG:=		$(ccgdir)/ccg
LT:=		$(blddir)/libtool

CXXDEBUGFLAGS:=	-g
CXXWARNFLAGS:=	-ansi -pedantic -Werror -Wall -Wundef -Wshadow -Wno-unused
CXXOPTFLAGS+=	-fno-exceptions -fno-rtti
CXXOPTFLAGS+=	-felide-constructors -fno-keep-static-consts

#CXXOPTFLAGS+=	-fno-inline-functions
CXXOPTFLAGS+=	-O2 -funroll-loops -fexpensive-optimizations 
CXXOPTFLAGS+=	-DNDEBUG

#CXXOPTFLAGS+=	-fomit-frame-pointer

CPPFLAGS:=	-I. -I$(topdir) -I$(blddir) -I$(gendir) -I$(unxdir) -I$(jsrcdir) -I$(ccgdir)

LD:=		g++
LDFLAGS:=	-g

CPU:=		$(shell uname -m | sed 's/^i.86$$/i386/;s/^sun4.*$$/sparc/')

#default : $(blddir)/SqueakCompiler.la
default : $(blddir)/j3

MDH:=		$(CPU)-Frame.h $(CPU)-defs.h $(CPU)-emit.h

OBJS:=		Cache.o Frame.o NativeMethod.o NativeProcess.o \
		Object.o Profiler.o RelinkCache.o \
		atcache.o compile.o dcg.o debug.o \
		genArray.o genCache.o genFloat.o genObject.o \
		genPrimitive.o genQuick.o genSmallInteger.o genValue.o \
		generate.o interp.o machine.o main.o optimise.o \
		$(CPU)-Frame.o $(CPU)-dis.o $(CPU)-emit.o \
		$(CPU)-generate.o $(CPU)-tramp.o \
		primAccess.o primExtern.o primPerform.o primProcess.o \
		primProfile.o primValue.o \
		primitive.o primitives.o \
		prologue.o spy.o tramp.o xmalloc.o

DEPS:=		$(OBJS:.o=.d)

$(blddir)/j3 : $(OBJS) $(blddir)/*.o
	$(LD) $(LDFLAGS) -export-dynamic $(OBJS) $(blddir)/*.o \
		-lopcodes -lbfd -liberty -ldl -L/usr/X11R6/lib -lX11 -lXext \
		-o $(blddir)/j3

VPATH:=		$(jsrcdir)

.SUFFIXES :

.SUFFIXES : .cc .cg .h .hg .d

%.h : %.hg
	$(CCG) -o $@ $<

%.cc : %.ccg
	$(CCG) -o $@ $<

%.o : %.cc
	@echo
	$(CXX) $(CXXWARNFLAGS) $(CXXDEBUGFLAGS) $(CXXOPTFLAGS) $(CPPFLAGS) \
		-c $<

include $(DEPS)

$(DEPS) : $(MDH)

%.d : %.cc
	$(SHELL) -ec '$(CXX) -MM $(CPPFLAGS) $< \
	  | sed '\''s/\($*\)\.o[ :]*/\1.o $@ : /g'\'' > $@; \
	  [ -s $@ ] || rm -f $@'

clean :
	/bin/rm -f *.o

.PRECIOUS : %.cc %.h

showconf:
	@echo "jsrcdir=    $(jsrcdir)"
	@echo "CPU=        $(CPU)"
	@echo "MDH=        $(MDH)"
	@echo "MDHG=       $(MDHG)"
	@echo "MDCC=       $(MDCC)"
	@echo "MDCCG=      $(MDCCG)"
	@echo "ADH=        $(ADH)"
	@echo "ADCC=       $(ADCC)"
	@echo "SRCS=       $(SRCS)"
	@echo "OBJS=       $(OBJS)"
	@echo "DEPS=       $(DEPS)"
	@echo "ARCHDEPCC=  $(ARCHDEPCC)"
	@echo "ARCHDEPH=   $(ARCHDEPH)"
	@echo "ARCHDEP=    $(ARCHDEP)"
