-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
125 lines (97 loc) · 3.35 KB
/
Makefile
File metadata and controls
125 lines (97 loc) · 3.35 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
CC = clang
# Optional compile-time overrides, e.g.:
# make TUNE_FLAGS="-DMAP_INITIAL_CAPACITY=32 -DHCMAP_INITIAL_CAPACITY=2048"
# Substitution implementation toggle:
# default (top-down): make
# old uplink implementation: make TUNE_SUBST_TOPDOWN=0
# explicit top-down: make TUNE_SUBST_TOPDOWN=1
TUNE_SUBST_TOPDOWN ?= 1
# Hash-consing implementation toggle:
# default (disabled): make
# enabled: make TUNE_HASH_CONSING=1
TUNE_HASH_CONSING ?= 0
# Order data structure implementation toggle:
# tag-range relabeling: make
# linked-list: make TUNE_USE_RELABELING=0
TUNE_USE_RELABELING ?= 1
TUNE_FLAGS ?=
# If hash-consing is disabled, we need to define DISABLE_HASH_CONSING
ifeq ($(TUNE_HASH_CONSING), 0)
TUNE_FLAGS += -DDISABLE_HASH_CONSING
endif
ifeq ($(ORDER_IMPL), ds)
TUNE_FLAGS += -DORDER_IMPL_DS
endif
ifeq ($(TUNE_USE_RELABELING), 1)
TUNE_FLAGS += -DORDER_USE_RELABELING
endif
CFLAGS = -Wall -Wextra -O0 -g -march=native -I. -DTUNE_SUBST_TOPDOWN=$(TUNE_SUBST_TOPDOWN) $(TUNE_FLAGS)
LDFLAGS =
ENGINE_SRC := $(shell find src -name '*.c' ! -name 'main.c')
ENGINE_OBJ := $(ENGINE_SRC:.c=.o)
ENGINE_LIB := libmengine.a
MENGINE_BIN := mengine
MENGINE_SRC := src/main.c
MENGINE_OBJ := $(MENGINE_SRC:.c=.o)
TEST_SRC := $(shell find tests -name '*.c' ! -path 'tests/helpers/*' ! -name 'test_driver.c')
TEST_OBJ := $(TEST_SRC:.c=.o)
TEST_DRIVER_SRC := tests/test_driver.c
TEST_DRIVER := tests/test_driver
HELPERS_SRC := $(shell find tests/helpers -name '*.c')
HELPERS_OBJ := $(HELPERS_SRC:.c=.o)
UNAME := $(shell uname)
# On macOS, detect and link argp-standalone if available
ifeq ($(UNAME), Darwin)
ARGP_PREFIX := $(shell brew --prefix argp-standalone 2>/dev/null || echo "")
ifneq ($(ARGP_PREFIX),)
CFLAGS += -I$(ARGP_PREFIX)/include
LDFLAGS += -L$(ARGP_PREFIX)/lib -largp
else
$(error argp-standalone not found via brew, please install it with `brew install argp-standalone`)
endif
endif
all: $(ENGINE_LIB) $(MENGINE_BIN)
.clangd: .clangd.template
@echo "Generating .clangd..."
ifeq ($(UNAME), Darwin)
@echo "CompileFlags:" > .clangd
@echo " Add:" >> .clangd
@echo " - -I$(ARGP_PREFIX)/include" >> .clangd
@echo "" >> .clangd
@cat .clangd.template >> .clangd
else
@cp .clangd.template .clangd
endif
@echo ".clangd generated successfully"
$(ENGINE_LIB): $(ENGINE_OBJ)
ar rcs $@ $^
$(MENGINE_BIN): $(MENGINE_OBJ) $(ENGINE_LIB)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
tests: $(TEST_DRIVER)
check: tests
@./$(TEST_DRIVER)
examples: $(MENGINE_BIN)
@echo "Running all examples with mengine..."
@set -e; \
for example in examples/*.me; do \
echo "-- Running $$example"; \
./$(MENGINE_BIN) "$$example" || exit 1; \
done
@echo "=== All examples ran successfully ==="
install: $(MENGINE_BIN)
@echo "Installing mengine..."
sudo install -m 755 $(MENGINE_BIN) /usr/bin/$(MENGINE_BIN)
uninstall:
@echo "Uninstalling mengine..."
sudo rm -f /usr/bin/$(MENGINE_BIN)
$(TEST_DRIVER): $(TEST_DRIVER_SRC) $(TEST_OBJ) $(HELPERS_OBJ) $(ENGINE_LIB)
$(CC) $(CFLAGS) -o $@ $(TEST_DRIVER_SRC) $(TEST_OBJ) $(HELPERS_OBJ) $(ENGINE_LIB) $(LDFLAGS)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(ENGINE_OBJ) $(MENGINE_OBJ) $(HELPERS_OBJ) $(TEST_OBJ) $(ENGINE_LIB) $(MENGINE_BIN) $(TEST_DRIVER)
if [ "$(UNAME)" = "Darwin" ]; then \
find . -name "*.dSYM" -type d -exec rm -rf {} +; \
fi
clangd: .clangd
.PHONY: all clean tests check install uninstall clangd