aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
blob: edcbfa30d91d5b0314b3ce404d742c0c31e706e3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
OUT      = runes
DOUT     = runesd
COUT     = runesc
BUILD    = build/
SRC      = src/
OBJ      = $(BUILD)runes.o \
	   $(BUILD)display.o \
	   $(BUILD)term.o \
	   $(BUILD)config.o \
	   $(BUILD)window-xlib.o \
	   $(BUILD)pty-unix.o \
	   $(BUILD)loop.o \
	   $(BUILD)util.o
DOBJ     = $(BUILD)runesd.o \
	   $(BUILD)display.o \
	   $(BUILD)term.o \
	   $(BUILD)config.o \
	   $(BUILD)window-xlib.o \
	   $(BUILD)pty-unix.o \
	   $(BUILD)loop.o \
	   $(BUILD)util.o \
	   $(BUILD)socket.o
COBJ     = $(BUILD)runesc.o \
	   $(BUILD)util.o
LIBS     = cairo cairo-xlib libuv pangocairo
OPT     ?= -g
CFLAGS  ?= $(OPT) -Wall -Wextra -Werror
LDFLAGS ?= $(OPT) -Wall -Wextra -Werror

ALLCFLAGS  = $(shell pkg-config --cflags $(LIBS)) -Ilibvt100/src $(CFLAGS)
ALLLDFLAGS = $(shell pkg-config --libs $(LIBS)) $(LDFLAGS)

MAKEDEPEND = $(CC) $(ALLCFLAGS) -M -MP -MT '$@ $(@:$(BUILD)%.o=$(BUILD).%.d)'

all: $(OUT) $(DOUT) $(COUT) ## Build all of the targets

run: $(OUT) ## Build and run the standalone runes terminal
	@./$(OUT)

run-daemon: $(DOUT) $(COUT) ## Build and run the runes daemon
	@./$(DOUT)

$(OUT): $(OBJ) libvt100/libvt100.a
	$(CC) -o $@ $^ $(ALLLDFLAGS)

$(DOUT): $(DOBJ) libvt100/libvt100.a
	$(CC) -o $@ $^ $(ALLLDFLAGS)

$(COUT): $(COBJ)
	$(CC) -o $@ $^ $(ALLLDFLAGS)

libvt100/libvt100.a: make-libvt100

make-libvt100:
	@if ! $(MAKE) -q -C libvt100 static; then $(MAKE) -C libvt100 static; MAKELEVEL=$(echo "${MAKELEVEL}-1" | bc) exec $(MAKE); fi

$(BUILD)%.o: $(SRC)%.c
	@mkdir -p $(BUILD)
	@$(MAKEDEPEND) -o $(<:$(SRC)%.c=$(BUILD).%.d) $<
	$(CC) $(ALLCFLAGS) -c -o $@ $<

$(SRC)screen.c: $(SRC)parser.h

$(SRC)%.c: $(SRC)%.l
	$(LEX) -o $@ $<

$(SRC)%.h: $(SRC)%.l
	$(LEX) --header-file=$(<:.l=.h) -o /dev/null $<

clean: ## Remove build files
	cd libvt100 && make clean
	rm -f $(OUT) $(OBJ) $(OBJ:$(BUILD)%.o=$(BUILD).%.d) $(DOUT) $(DOBJ) $(DOBJ:$(BUILD)%.o=$(BUILD).%.d) $(COUT) $(COBJ) $(COBJ:$(BUILD)%.o=$(BUILD).%.d)
	@rmdir -p $(BUILD) > /dev/null 2>&1

help:
	@grep -HE '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":|##"}; {printf "\033[36m%-20s\033[0m %s\n", $$2, $$4}'

-include $(OBJ:$(BUILD)%.o=$(BUILD).%.d)

.PHONY: all run run-daemon clean help make-libvt100