wm/Makefile

48 lines
975 B
Makefile

CC=gcc
EXT=.c
FLAGS=-O0 -g
DEBUG_FLAGS=-DDEBUG -fsanitize=undefined -fsanitize=address
DEPFLAGS=-MD -MP
LIBS=$(shell pkg-config --libs xcb x11 xinerama xft json-c cmocka)
FLAGS+=$(shell pkg-config --cflags xcb x11 xinerama xft json-c cmocka)
EXEC_NAME=wm
OBJDIR=obj
SRCDIR=src
SRC=$(wildcard $(SRCDIR)/*$(EXT))
OBJS=$(patsubst %,$(OBJDIR)/%.o, $(basename $(notdir $(SRC))))
$(shell mkdir -p $(dir $(OBJS)) > /dev/null)
$(EXEC_NAME): filter $(OBJS)
$(CC) $(FLAGS) $(LIBS) $(OBJS) -o $(EXEC_NAME)
debug: debug_flag $(EXEC_NAME)
test: compile_test run_test
compile_test: filter_test $(OBJS)
$(CC) $(DEBUG_FLAGS) $(LIBS) -lcmocka $(OBJS) -o test
run_test:
./test
$(OBJDIR)/%.o: $(SRCDIR)/%$(EXT)
$(CC) $(FLAGS) $(DEPFLAGS) -c -o $@ $<
debug_flag:
$(eval FLAGS+=$(DEBUG_FLAGS))
filter:
$(eval OBJS=$(filter-out obj/tests.o, $(OBJS)))
filter_test:
$(eval OBJS=$(filter-out obj/main.o, $(OBJS)))
.PHONY: clean
clean:
rm -rf $(OBJDIR)
-include $(SRC:$(EXT)=.d)