blob: 8c4d3416856167491d25059a9322e805a8914aef (
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
|
OUT = libvt100.so
SOUT = libvt100.a
BUILD = build/
SRC = src/
EXDIR = examples/
EXAMPLES = $(EXDIR)test1
OBJ = $(BUILD)parser.o \
$(BUILD)screen.o \
$(BUILD)unicode-extra.o
LIBS = glib-2.0
OPT ?= -g
CFLAGS ?= $(OPT) -Wall -Wextra -Werror -pedantic -std=c1x -D_XOPEN_SOURCE=600
LDFLAGS ?= $(OPT)
ALLCFLAGS = $(shell pkg-config --cflags $(LIBS)) $(CFLAGS)
ALLLDFLAGS = $(shell pkg-config --libs $(LIBS)) $(LDFLAGS)
MAKEDEPEND = $(CC) $(ALLCFLAGS) -M -MP -MT '$@ $(@:$(BUILD)%.o=$(BUILD).%.d)'
ifndef VERBOSE
QUIET_CC = @echo " CC $@";
QUIET_LD = @echo " LD $@";
QUIET_AR = @echo " AR $@";
QUIET_LEX = @echo " LEX $@";
endif
all: $(OUT) $(SOUT) ## Build both static and dynamic libraries
dynamic: $(OUT) ## Build a dynamic library
static: $(SOUT) ## Build a static library
examples: $(EXAMPLES) ## Build the example programs
$(OUT): $(OBJ)
$(QUIET_LD)$(CC) -fPIC -shared -o $@ $^ $(ALLLDFLAGS)
$(SOUT): $(OBJ)
$(QUIET_AR)$(AR) rcs $@ $^
$(BUILD)%.o: $(SRC)%.c | $(BUILD)
@$(MAKEDEPEND) -o $(<:$(SRC)%.c=$(BUILD).%.d) $<
$(QUIET_CC)$(CC) $(ALLCFLAGS) -c -fPIC -o $@ $<
$(EXDIR)%: $(EXDIR)%.c $(SOUT)
$(QUIET_CC)$(CC) $(ALLCFLAGS) $(ALLLDFLAGS) -I src -o $@ $^
$(BUILD):
@mkdir -p $(BUILD)
$(SRC)screen.c: $(SRC)parser.h
$(SRC)%.c: $(SRC)%.l
$(QUIET_LEX)$(LEX) -o $@ $<
$(SRC)%.h: $(SRC)%.l
$(QUIET_LEX)$(LEX) --header-file=$(<:.l=.h) -o /dev/null $<
clean: ## Remove build files
rm -f $(OUT) $(SOUT) $(OBJ) $(OBJ:$(BUILD)%.o=$(BUILD).%.d) $(EXAMPLES)
@rmdir -p $(BUILD) > /dev/null 2>&1 || true
help: ## Display this 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: build clean
|