LIBOBJS = galois.o rs.o
OBJS = rw.o filerw.o noe.o
LIBS           = libnoe_100.a libnoe_101.a libnoe_10001.a
PUBLIC_HEADERS = rs.h galois.h ldpc.h
LIBSRCS = $(LIBOBJS:.o=.c) $(ASM_LIBOBJS:.o=.s)
SRCS = $(OBJS:.o=.c)
INSTALL_BASE   = /usr/local

CFLAGS  = -g -Wall -O4 $(OPTFLAGS) -I. $(EXTRA_INC)

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

%_100.o: %.c
	$(CC) $(CFLAGS) -c -DSIZE=0x100 -o $@ $<

%_101.o: %.c
	$(CC) $(CFLAGS) -c -DSIZE=0x101 -o $@ $<

%_10001.o: %.c
	$(CC) $(CFLAGS) -c -DSIZE=0x10001 -o $@ $<

%_2.o: %.c
	$(CC) $(CFLAGS) -c -DSIZE=2 -o $@ $<

all: test_100 test_101 test_10001 mina test_ldpc_100 test_ldpc_2

libnoe_100.a: $(LIBOBJS:.o=_100.o) ldpc_100.o
libnoe_101.a: $(LIBOBJS:.o=_101.o) gfft_101.o
libnoe_10001.a: $(LIBOBJS:.o=_10001.o) gfft_10001.o
libnoe_2.a: galois_2.o ldpc_2.o
libnoe_100.a libnoe_101.a libnoe_10001.a libnoe_2.a:
	$(AR) rc $@ $^

mina: mina.o libnoe_10001.a
	$(CC) $(LDFLAGS) -o $@ $^

test: all
	./test_100 ; ./test_101 ; ./test_10001

test_%: test_%.o libnoe_%.a
	$(CC) $(LDFLAGS) -o $@ $^

test_ldpc_%: test_ldpc_%.o libnoe_%.a
	$(CC) $(LDFLAGS) -o $@ $^

clean:
	rm -f *.o *.a *~

dep depend:
	$(CC) -MM $(CFLAGS) $(LIBSRCS) $(SRCS) 1>.depend

install: mina $(LIBS) $(PUBLIC_HEADERS)
	install -m 755 mina 			$(INSTALL_BASE)/bin
	install -m 644 $(LIBS)			$(INSTALL_BASE)/lib
	install -m 644 $(PUBLIC_HEADERS)	$(INSTALL_BASE)/include
