Clean up directory structure and Makefile
[revag-bap.git] / Makefile
index 6ce1ee088cc3cd2a24185de2d74b3bc31b11b50d..b50a6cc5ded9e8acb566c7228d059a8abb935c24 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,21 +1,60 @@
-CFLAGS += -Wall -g
+LIBNAME := vag-bap
 
-BAPLIB = vag-bap.c vag-bap-frame.c vag-bap-rx.c vag-bap-tx.c
+BUILDDIR  := build
+STATICLIB := $(BUILDDIR)/lib$(LIBNAME).a
 
-EXES = vag-bap-dump vag-bap-sniffer vag-bap-send
+INCLUDEDIR := include
+HEADERS    := $(shell find $(INCLUDEDIR)/)
 
+SRCDIR  := src
+SOURCES := $(shell find $(SRCDIR)/ -iname "*.c")
+OBJS    := $(patsubst %.c, $(BUILDDIR)/%.o, $(SOURCES))
 
-all: $(EXES)
+INCLUDES := $(patsubst %, -I%, $(INCLUDEDIR))
+CFLAGS   := -Wall -g
 
+TOOLDIR     := tools
+TOOLSOURCES := $(shell find $(TOOLDIR)/ -iname "*.c")
+TOOLEXES    := $(patsubst %.c, $(BUILDDIR)/%, $(TOOLSOURCES))
+TOOLLIBS    := -lncurses
 
-vag-bap-dump: vag-bap-dump.c $(BAPLIB)
 
-vag-bap-sniffer: vag-bap-sniffer.c $(BAPLIB)
-       gcc -o $@ $^ -lncurses
 
-vag-bap-send: vag-bap-send.c $(BAPLIB)
+
+
+.PHONY: tools
+tools: $(TOOLEXES)
+
+
+$(BUILDDIR)/$(TOOLDIR)/%: $(TOOLDIR)/%.c $(HEADERS) $(STATICLIB)
+       @if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi
+       $(CC) $(INCLUDES) $(CFLAGS) -o $@ $< $(STATICLIB) $(TOOLLIBS)
+
+
+
+.PHONY: lib
+lib: $(STATICLIB)
+
+$(STATICLIB): $(OBJS)
+       @if [ ! -d $(BUILDDIR) ] ; then echo "Error: Build dir '$(BUILDDIR)' does not exist." ; false ; fi
+       ar rcs $@ $^
+
+
+$(BUILDDIR)/$(SRCDIR)/%.o: $(SRCDIR)/%.c $(HEADERS)
+       @if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi
+       $(CC) $(INCLUDES) $(CFLAGS) -c -o $@ $<
+
 
 
 .PHONY: clean
 clean:
-       rm -f $(EXES)
+       rm -f $(STATICLIB)
+       rm -f $(OBJS)
+       rm -f $(TOOLEXES)
+       rm -rf $(BUILDDIR)/
+
+
+.PHONY: distclean
+distclean: clean
+       find . -xdev -name "*~" -exec rm {} \;
+       find . -xdev -name "core" -exec rm {} \;