#
# Makefile - Build tcsim
#
# Written 2001,2002 by Werner Almesberger
# Copyright 2001 EPFL-ICA, Network Robots
# Copyright 2002 Bivio Networks, Werner Almesberger
#

all:			tcsim modules

include ../Common.make

OBJS=tcsim.o jiffies.o timer.o command.o var.o host.o attr.o \
     lex.yy.o y.tab.o \
     ksvc.o klink.o usvc.o module.o \
     trace.o klib/klib.o ulib/ulib.o

CLEAN=lex.yy.c y.tab.c y.tab.h y.output $(OBJS)
SPOTLESS=.depend tcsim

# general CFLAGS
CFLAGS_COMMON=$(CFLAGS_WARN) -I../shared -Iklib -Iklib/include \
  -Iulib/iproute2/include -I. \
  -DVERSION=\"`cat ../VERSION`\" \
  $(shell sed '/TOPDIR=\(.*\)/s//-DTOPDIR=\\\"\1\\\"/p;d' <../config) \
  $(shell sed '/TCC=\(.*\)/s//-DTCC_CMD=\\\"\1\\\"/p;d' <../config) \
  $(shell sed '/KFULLVERSION=\(.*\)/s//-DKFULLVERSION=\\\"\1\\\"/p;d' \
    <../config) \
  $(shell sed '/IVERSION=\(.*\)/s//-DIVERSION=\\\"\1\\\"/p;d' <../config)
CFLAGS=$(CC_OPTS) $(CFLAGS_COMMON)

# CFLAGS for code generated by flex and yacc
CFLAGS_GEN=$(CFLAGS_WARN) -g -w `sed '/BYTEORDER=/s//-D/p;d' <../config` \
  -I../shared

LDFLAGS=-Wl,-E
LIBS=-lfl -lm -ldl -L../shared -ltcngmisc $(LD_OPTS)

.PHONY:			all modules test tests depend dep clean spotless
.PHONY:			ephemeral immaculate

tcsim:			$(OBJS) Makefile ../Common.make
			$(CC) $(CC_OPTS) $(LDFLAGS) -o tcsim $(OBJS) $(LIBS)

modules:		../config klib/.ready ulib/.ready
			$(MAKE) -C modules

$(OBJS):		.depend

klib/klib.o:		klib/.ready
			$(MAKE) -C klib

ulib/ulib.o:		ulib/.ready klib/.ready
			$(MAKE) -C ulib

klib/.ready:		../config Makefile.klib setup.klib
			./setup.klib

ulib/.ready:		../config Makefile.ulib setup.ulib
			./setup.ulib

ksvc.o:			klib/.ready

../config:
			@echo "Please run configure" 1>&2
			@exit 1

lex.yy.c:		cfg.l y.tab.h
			$(LEX) cfg.l

lex.yy.o:		lex.yy.c y.tab.h
			$(CC) -c $(CFLAGS_GEN) lex.yy.c

y.tab.c y.tab.h:	cfg.y
			$(YACC) $(YYFLAGS) -d cfg.y

y.tab.o:		y.tab.c
			$(CC) -c $(CFLAGS_GEN) y.tab.c

tcsim.o:		../VERSION

depend dep .depend:	klib/.ready ulib/.ready
			$(CPP) $(CFLAGS) -I. -M *.c >.depend || \
			  { rm -f .depend; exit 1; }

ephemeral:		ephemeral-mod
			echo $(CLEAN) $(SPOTLESS)
			$(MAKE) -C modules -s ephemeral | tr ' ' '\012' | \
			  sed 's|^|modules/|'

			[ ! -d klib ] || find klib -print
			[ ! -d ulib ] || find ulib -print

clean:			clean-mod
			$(MAKE) -C modules clean
			rm -f $(CLEAN)
			[ ! -d klib ] || $(MAKE) -C klib clean
			[ ! -d ulib ] || $(MAKE) -C ulib clean

spotless:		clean
			$(MAKE) -C modules spotless
			rm -f $(SPOTLESS)
			rm -rf klib ulib

immaculate:		spotless
			$(MAKE) -C modules immaculate

ifeq (.depend,$(wildcard .depend))
include .depend
endif
