chiark / gitweb /
Initial commit.
[wordchain] / Makefile
1 ### -*-makefile-*-
2
3 all:
4 TARGETS                  =
5
6 clean::
7 CLEAN                    =
8
9 .PHONY: all clean
10
11 .SECONDEXPANSION:
12
13 SRCEXT                   =
14
15 V                        = 0
16 v-tag                    = $(call v-tag.$V,$1)
17 v-tag.0                  = @printf "  %-8s %s\n" '$1' '$@';
18 V_AT                     = $(V_AT.$V)
19 V_AT.0                   = @
20
21 objify                   = $(addsuffix $1, \
22                                 $(basename \
23                                         $(filter $(addprefix %.,$(SRCEXT)), \
24                                                  $2)))
25 DEPOBJS                  =
26 CLEAN                   += *.o *.d
27
28 SRCEXT                  += c
29 CC                       = gcc
30 CFLAGS                   = $(OPTIMIZE) $(WARNINGS)
31 CCLD                     = $(CC)
32 LDFLAGS                  =
33 OPTIMIZE                 = -O2 -g3 -fno-omit-frame-pointer
34 WARNINGS                 = -pedantic -Wall
35
36 SRCEXT                  += cc
37 CXX                      = g++
38 CXXFLAGS                 = $(CFLAGS)
39 CXXLD                    = $(CXX)
40
41 compile-c                = $(call v-tag,CC)$(CC) -c $(CFLAGS) $3 \
42                                 -MD -MF $(1:.o=.d) -o$1 $2
43 %.o: %.c
44         $(call compile-c,$@,$<)
45
46 compile-c++              = $(call v-tag,CXX)$(CXX) -c $(CFLAGS) $3 \
47                                 -MD -MF $(1:.o=.d) -o$1 $2
48 %.o: %.cc
49         $(call compile-c++,$@,$<)
50
51 SRCEXT                  += rs
52 RUSTC                    = rustc
53 RUSTFLAGS                = --edition=2018 -L. $(OPTIMIZE_RUST)
54 OPTIMIZE_RUST            = -O
55 RUSTLIBS                 =
56 CARGODIR                 = /usr/share/cargo/registry
57 compile-rust             = $(call v-tag,RUSTC)$(RUSTC) $(RUSTFLAGS) $3 \
58                                 -o$1 $2
59
60 RUSTLIBS                += typed_arena
61 typed_arena_DIR          = $(CARGODIR)/typed-arena-2.0.0
62 typed_arena_RUSTFLAGS    = --cfg 'feature="std"'
63
64 RUSTLIB_OBJS             = $(foreach l,$(RUSTLIBS), lib$l.rlib)
65 CLEAN                   += $(RUSTLIB_OBJS)
66 $(RUSTLIB_OBJS): lib%.rlib: $$($*_DEPS)
67         $(call compile-rust,$@,$($*_DIR)/src/lib.rs, \
68                 --crate-type=rlib --crate-name=$* $($*_RUSTFLAGS))
69
70 TREELIBS                 =
71 VPATH                    =
72
73 TREELIBS                += xyla
74 xyla_VARIANTS            = avl rb splay treap
75 XYLADIR                  = $(HOME)/src/libxyla
76 xyla_LIBS                = $(XYLADIR)/build/.libs/libxyla.a
77 xyla_CFLAGS              = -I$(XYLADIR)
78 xyla-avl_CFLAGS          = -DTREE=XYLA_AVL
79 xyla-rb_CFLAGS           = -DTREE=XYLA_RB
80 xyla-splay_CFLAGS        = -DTREE=XYLA_SPLAY
81 xyla-treap_CFLAGS        = -DTREE=XYLA_TREAP
82
83 TREELIBS                += qptrie
84 qptrie_VARIANTS          = qp-fanf qp-mdw fn-fanf fn-mdw
85 QPDIR                    = $(HOME)/src/ext/qp
86 VPATH                   += $(QPDIR)
87 CFLAGS                  += -mpopcnt
88 qptrie_CFLAGS            = -I$(QPDIR)
89 qptrie_SRCS              = Tbl.c
90 qptrie-qp_SRCS           = qp.c
91 qptrie-fn_SRCS           = fn.c
92 qptrie-qp-fanf_CFLAGS    = -DTREE=QPTRIE_QP -DUSE_RECURSIVE_TNEXTL
93 qptrie-qp-fanf_SRCS      = $(qptrie-qp_SRCS)
94 qptrie-fn-fanf_CFLAGS    = -DTREE=QPTRIE_FN -DUSE_RECURSIVE_TNEXTL
95 qptrie-fn-fanf_SRCS      = $(qptrie-fn_SRCS)
96 qptrie-qp-mdw_CFLAGS     = -DTREE=QPTRIE_QP
97 qptrie-qp-mdw_SRCS       = $(qptrie-qp_SRCS)
98 qptrie-fn-mdw_CFLAGS     = -DTREE=QPTRIE_FN
99 qptrie-fn-mdw_SRCS       = $(qptrie-fn_SRCS)
100
101 TREELIBS                += sgt
102 sgt_VARIANTS             = tree234
103 SGTDIR                   = $(HOME)/src/sgt/puzzles
104 VPATH                   += $(SGTDIR)
105 sgt_CFLAGS               = -I$(SGTDIR)
106 sgt-tree234_CFLAGS       = -DTREE=SGT_TREE234
107 sgt-tree234_SRCS         = tree234.c malloc.c nullfe.c
108
109 TREELIBS                += libavl
110 libavl_VARIANTS          =
111 LIBAVLDIR                = $(HOME)/src/ext/avl
112 VPATH                   += $(LIBAVLDIR)
113 libavl_CFLAGS            = -I$(LIBAVLDIR)
114
115 libavl_VARIANTS         += avl pavl rtavl tavl
116 libavl-avl_CFLAGS        = -DTREE=LIBAVL_AVL
117 libavl-avl_SRCS          = avl.c
118 libavl-pavl_CFLAGS       = -DTREE=LIBAVL_PAVL
119 libavl-pavl_SRCS         = pavl.c
120 libavl-rtavl_CFLAGS      = -DTREE=LIBAVL_RTAVL
121 libavl-rtavl_SRCS        = rtavl.c
122 libavl-tavl_CFLAGS       = -DTREE=LIBAVL_TAVL
123 libavl-tavl_SRCS         = tavl.c
124
125 libavl_VARIANTS         += rb prb rtrb trb
126 libavl-rb_CFLAGS         = -DTREE=LIBAVL_RB
127 libavl-rb_SRCS           = rb.c
128 libavl-prb_CFLAGS        = -DTREE=LIBAVL_PRB
129 libavl-prb_SRCS          = prb.c
130 libavl-rtrb_CFLAGS       = -DTREE=LIBAVL_RTRB
131 libavl-rtrb_SRCS         = rtrb.c
132 libavl-trb_CFLAGS        = -DTREE=LIBAVL_TRB
133 libavl-trb_SRCS          = trb.c
134
135 #libavl_VARIANTS        += bst pbst rtbst tbst
136 libavl-bst_CFLAGS        = -DTREE=LIBAVL_BST
137 libavl-bst_SRCS          = bst.c
138 libavl-pbst_CFLAGS       = -DTREE=LIBAVL_PBST
139 libavl-pbst_SRCS         = pbst.c
140 libavl-rtbst_CFLAGS      = -DTREE=LIBAVL_RTBST
141 libavl-rtbst_SRCS        = rtbst.c
142 libavl-tbst_CFLAGS       = -DTREE=LIBAVL_TBST
143 libavl-tbst_SRCS         = tbst.c
144
145 TREELIBS                += mLib
146 mLib_VARIANTS            = sym
147 mLib_LIBS                = -lmLib
148 mLib-sym_CFLAGS          = -DTREE=MLIB_SYM
149
150 define def-c-variant
151 ALL_VARIANTS            += $1-$2
152 TARGETS                 += chain.$1-$2
153 CLEAN                   += chain.$1-$2
154 $1-$2_OBJS               = chain.$1-$2.o \
155                                 $$(call objify,.o,$$($1_SRCS) $$($1-$2_SRCS))
156 run-$1-$2                = ./chain.$1-$2 <$$1
157 DEPOBJS                 += $$($1-$2_OBJS)
158 chain.$1-$2: $$($1-$2_OBJS)
159         $$(call v-tag,CCLD)$$(CCLD) $$(LDFLAGS) -o$$@ $$+ $$($1_LIBS)
160 chain.$1-$2.o: chain.c
161         $$(call compile-c,$$@,$$<,$$($1_CFLAGS) $$($1-$2_CFLAGS))
162 endef
163 $(foreach t,$(TREELIBS), \
164         $(foreach v,$($t_VARIANTS), \
165                 $(eval $(call def-c-variant,$t,$v))))
166
167 c++_VARIANTS            += map
168 c++-map_CXXFLAGS         = -DTREE=CXX_MAP
169 c++_VARIANTS            += uomap
170 c++-uomap_CXXFLAGS       = -DTREE=CXX_UOMAP
171
172 define def-c++-variant
173 ALL_VARIANTS            += c++-$1
174 TARGETS                 += chain.c++-$1
175 CLEAN                   += chain.c++-$1
176 c++-$1_OBJS              = chain.c++-$1.o
177 run-c++-$1               = ./chain.c++-$1 <$$1
178 DEPOBJS                 += $$(c++-$1_OBJS)
179 chain.c++-$1: $$(c++-$1_OBJS)
180         $$(call v-tag,CXXLD)$$(CXXLD) $$(LDFLAGS) -o$$@ $$+
181 chain.c++-$1.o: chain.cc
182         $$(call compile-c++,$$@,$$<,$$(c++-$1_CXXFLAGS))
183 endef
184 $(foreach v,$(c++_VARIANTS), \
185         $(eval $(call def-c++-variant,$v)))
186
187 rust_VARIANTS           += btree
188 rust-btree_RUSTFLAGS     = --cfg 'feature="btree"'
189 rust_VARIANTS           += hash
190 rust-hash_RUSTFLAGS      = --cfg 'feature="hash"'
191
192 define def-rust-variant
193 ALL_VARIANTS            += rust-$1
194 TARGETS                 += chain.rust-$1
195 CLEAN                   += chain.rust-$1
196 run-rust-$1              = ./chain.rust-$1 <$$1
197 chain.rust-$1: chain.rs $$(RUSTLIB_OBJS)
198         $$(call compile-rust,$$@,$$<, \
199                 $$(foreach l,$$(RUSTLIBS), \
200                         $$(rust-$1_RUSTFLAGS) --extern=$$l))
201 endef
202 $(foreach v,$(rust_VARIANTS), \
203         $(eval $(call def-rust-variant,$v)))
204
205 DICT                     = /usr/share/dict/british-english-insane
206
207 MEASURES                 = $(foreach v,$(ALL_VARIANTS), measure/$v)
208 measure: $(MEASURES)
209 $(MEASURES): measure/%: chain.%
210         $TIME -f%U
211 .PHONY: measure $(MEASURES)
212
213 all: $(TARGETS)
214
215 clean::; rm -f $(CLEAN)
216
217 -include $(DEPOBJS:.o=.d)