

.SUFFIXES = .cc .hh .o
.PHONEY = clean
.DEFAULT = default

SRCS = $(subst .o,.cc,$(OBJS))
OBJS = mathmatrix.o mathvector.o
LINKOBJS = $(OBJS)
TARGET = rtmatvec.o
DEPEND = .depend
TEST = matvectest

# directory
LINDIR = /usr/src/linux
LININCDIR = $(LINDIR)/include
MYRTLDIR = /usr/src/rtl
MYRTLINCDIR = $(MYRTLDIR)/include
MYRTLLIBDIR = $(MYRTLDIR)/modules

CB= /usr/lib/gcc-lib/i586-linux-libc6/2.8.1/crtbegin.o
CE= /usr/lib/gcc-lib/i586-linux-libc6/2.8.1/crtend.o

# compiler
CC = gcc
CXX = g++
CFLAGS = -I$(LININCDIR) -I$(MYRTLINCDIR) -I/usr/include -I/usr/include/g++ \
	-Wall -Wstrict-prototypes \
	-fno-exceptions -fno-rtti -fno-builtin \
	-mhard-float -fomit-frame-pointer -fno-strength-reduce

# linker
LD = ld
LDFLAGS = -L/usr/lib -r -Bstatic
LDLIBS = 

default : all rttest.o
	sync

all : $(TARGET) test
	sync

test : $(TEST)

%.o : %.cc
	$(CXX) $(CFLAGS) -c -o $@ $<

depend :
	makedepend -f- -- $(CFLAGS) -- $(SRCS) > $(DEPEND)

clean :
	-rm -f $(OBJS) $(TARGET) $(TEST) map *.o > /dev/null 2>&1

$(TARGET) : $(LINKOBJS)
	$(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)

$(TEST) : $(TEST).cc $(TARGET)
	$(CXX) $(CFLAGS) -o $@ $^

#rtmod.o : rtmod.cc
#	$(CXX) $(CFLAGS) -D__KERNEL__ -D__RT__ -c -o $@ $<

rtmod.o : rtmod.c
	$(CC) $(CFLAGS) -D__KERNEL__ -D__RT__ -c -o $@ $<

rttest.o : rtmod.o rtmatvecmod.o $(LINKOBJS)
	$(LD) -r -Bstatic -Map map --cref -o $@ $^

#rttest.o : rtmod.o rtmatvecmod.o $(LINKOBJS)
#	$(LD) -y __register_frame_info -r -Bstatic -s -Map map --cref -o
# $@ $(CB) $^ $(CE) 

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