Skip to content
Snippets Groups Projects
library.mk 1.09 KiB
Newer Older
bbartels's avatar
bbartels committed
GCC = gcc
AR = ar

INCDIR = $(TOP)/inc
OBJDIR = obj
LIBDIR = $(TOP)/lib

SOURCES = $(wildcard *.c)
TESTSOURCES = $(wildcard test/*.c)
HEADERS = $(wildcard *.h)
INCLUDES = $(addprefix $(INCDIR)/, $(HEADERS))
OBJECTS = $(patsubst %.c, $(OBJDIR)/%.o, $(SOURCES))
TESTOBJECTS = $(patsubst $.c, %.o, $(TESTSOURCES))

TARGET = $(LIBDIR)/lib$(NAME).a
TESTBIN = run_tests
Peter Thedens's avatar
Peter Thedens committed

# For Unity; allows custom configuration
UNITYDEFINES = -DUNITY_INCLUDE_CONFIG_H
.PHONY: default test clean
bbartels's avatar
bbartels committed

################
## User Targets
################

default: $(TARGET) $(INCLUDES)

test: $(TESTBIN)
	./$(TESTBIN)

clean:
	rm -rf $(TARGET) $(INCLUDES) $(OBJDIR)
bbartels's avatar
bbartels committed

####################
## Internal Targets
####################

$(TARGET): $(OBJECTS) | $(LIBDIR)
	$(AR) rcs $@ $^

$(OBJDIR)/%.o : %.c | $(OBJDIR) $(INCDIR)
	$(GCC) -c -g -o $@ $< -I$(INCDIR) -Wall $(DEFINES)
bbartels's avatar
bbartels committed

$(INCDIR)/%.h : %.h | $(INCDIR)
	cp $^ $(INCDIR)

$(INCDIR):
	mkdir $(INCDIR)

$(OBJDIR):
	mkdir $(OBJDIR)

$(LIBDIR):
	mkdir $(LIBDIR)

$(TESTBIN): $(TESTOBJECTS) $(OBJECTS) | default
	$(GCC) -g -o $(TESTBIN) $^ -I$(INCDIR) -L$(LIBDIR) $(REQLIBS) $(UNITYDEFINES)