# $Id: Makefile,v 1.3 1997/01/28 13:51:14 digulla Exp $

KERNEL = i386

USER_INCLUDES = -I. -I./machines/$(KERNEL)

OBJDIR = objs
EXEDIR = $(BINDIR)
LIBS =
DEPLIBS =

CC = gcc
APPCFLAGS = -g -Wall -O $(USER_INCLUDES)
ILDFLAGS = -g -Wall -O
MKDIR = mkdir -p
MKDEPEND = makedepend
RM = rm -rf

BASIC_FILES = main vars declaration parse_expr type_expr ic machine \
	    statements preproc
CC_FILES = opt av rd regs flow cse cp loop alias
CCS_FILES = opts regss

CC_OBJS = $(foreach f,$(BASIC_FILES) $(CC_FILES),$(OBJDIR)/$(f).o)
CCS_OBJS = $(foreach f,$(BASIC_FILES) $(CCS_FILES),$(OBJDIR)/$(f).o)

EXES = $(EXEDIR)/vc $(EXEDIR)/vbcc$(KERNEL) $(EXEDIR)/vbccs$(KERNEL)

all : setup $(EXES)

$(EXEDIR)/vc : vc.c $(DEPLIBS)
	$(CC) $(ILDFLAGS) $< -o $@ $(LIBS)

$(EXEDIR)/vbcc$(KERNEL) : $(CC_OBJS) $(DEPLIBS)
	$(CC) $(ILDFLAGS) $(CC_OBJS) -o $@ $(LIBS) #-lm

$(EXEDIR)/vbccs$(KERNEL) : $(CCS_OBJS) $(DEPLIBS)
	$(CC) $(ILDFLAGS) $(CCS_OBJS) -o $@ $(LIBS) #-lm

setup :
	@if [ ! -d $(OBJDIR) ]; then $(MKDIR) $(OBJDIR); else true ; fi
	@if [ ! -d $(EXEDIR) ]; then $(MKDIR) $(EXEDIR); else true ; fi

clean :
	-$(RM) $(EXES) $(OBJDIR)

$(OBJDIR)/%.o: %.c
	$(CC) $(APPCFLAGS) -c $< -o $@

$(OBJDIR)/machine.o: ./machines/$(KERNEL)/machine.c
	$(CC) $(APPCFLAGS) -c $< -o $@

$(OBJDIR)/regss.o: regs.c
	$(CC) -DNO_OPTIMIZER $(APPCFLAGS) -c $< -o $@

$(OBJDIR)/opts.o: opt.c
	$(CC) -DNO_OPTIMIZER $(APPCFLAGS) -c $< -o $@

$(OBJDIR)/machine.d: ./machines/$(KERNEL)/machine.c
	@if [ ! -d $(@D) ]; then $(MKDIR) $(@D) ; else true ; fi
	$(MKDEPEND) -f- -p$(@D)/ -- $(APPCFLAGS) -- $^ > $@

$(OBJDIR)/%.d: %.c
	@if [ ! -d $(@D) ]; then $(MKDIR) $(@D) ; else true ; fi
	$(MKDEPEND) -f- -p$(@D)/ -- $(APPCFLAGS) -- $^ > $@

ifneq ($(TARGET),clean)
include $(foreach f,$(BASIC_FILES) $(CC_FILES),$(OBJDIR)/$(f).d)
endif
