master Makefile
 1CC       ?= cc -static
 2CFLAGS   ?= -std=c99 -Wall -Wextra -pedantic
 3
 4BACKEND  ?= auto
 5
 6CPPFLAGS ?= -Ishared -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200809L \
 7            -DFEATURE_NOFORK=0 -DFEATURE_NOEXEC=0
 8# NOEXEC cannot be on the bootstrap compile, but it can
 9# be on when one compiles aruu-box with ninqu included
10
11NINQU_LIB_SRC =\
12        shared/libutil/ealloc.c\
13        shared/libutil/eprintf.c\
14        shared/libutil/strlcpy.c\
15        shared/libutil/strlcat.c\
16        shared/libutil/strtonum.c\
17        shared/libutil/fshut.c\
18        shared/libutil/mkdirp.c\
19        shared/libutil/recurse_dir.c\
20        shared/libutil/wexec.c
21
22NINQU_SRC =\
23        cmd/dev/ninqu/main.c\
24        cmd/dev/ninqu/strlist.c\
25        cmd/dev/ninqu/kv.c\
26        cmd/dev/ninqu/sexpr.c\
27        cmd/dev/ninqu/gate.c\
28        cmd/dev/ninqu/registry.c\
29        cmd/dev/ninqu/fs.c\
30        cmd/dev/ninqu/exec.c\
31        cmd/dev/ninqu/backend.c\
32        cmd/dev/ninqu/parse.c\
33        cmd/dev/ninqu/expand.c\
34        cmd/dev/ninqu/schedule.c\
35        cmd/dev/ninqu/query.c\
36        cmd/dev/ninqu/resolve.c\
37        cmd/dev/ninqu/ninja.c
38
39# map make's -j to ninqu's -j flag
40NINQU ?= cmd/dev/ninqu/ninqu
41JOBS  ?= $(filter -j%,$(MAKEFLAGS))
42
43# rebuilds config.set first so a build.cfg edit is picked up before
44# ninqu compiles, ninqu also does this lazily on its own via
45# (set-file), this just avoids the extra shell startup on every run
46$(NINQU): $(NINQU_SRC) cmd/dev/ninqu/ninqu.h scripts/mk/config.set $(NINQU_LIB_SRC)
47	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $(NINQU_SRC) $(NINQU_LIB_SRC)
48
49# FORCE has no rule, thus making any pattern
50# that depends on it be always outdated
51.PHONY: FORCE
52FORCE:
53
54# ninqu generates build.ninja if ninja/samu is available and execs that
55# instead of running its own backend, but you can use make BACKEND=internal
56# to force the internal one to be used anyways
57%: $(NINQU) FORCE
58	$(NINQU) $(JOBS) $@
59
60clean: $(NINQU)
61	$(NINQU) clean
62	rm -f $(NINQU) build.ninja
63
64scripts/mk/config.set: build.cfg scripts/genconfig.sh
65	sh scripts/genconfig.sh config
66
67# stops the % pattern rule above from trying to rebuild these as if
68# they were stale build targets
69Makefile: ;
70ninqu.rules: ;
71cmd/dev/ninqu/ninqu.h: ;
72cmd/dev/ninqu/main.c: ;
73cmd/dev/ninqu/strlist.c: ;
74cmd/dev/ninqu/kv.c: ;
75cmd/dev/ninqu/sexpr.c: ;
76cmd/dev/ninqu/gate.c: ;
77cmd/dev/ninqu/registry.c: ;
78cmd/dev/ninqu/fs.c: ;
79cmd/dev/ninqu/exec.c: ;
80cmd/dev/ninqu/backend.c: ;
81cmd/dev/ninqu/parse.c: ;
82cmd/dev/ninqu/expand.c: ;
83cmd/dev/ninqu/schedule.c: ;
84cmd/dev/ninqu/query.c: ;
85cmd/dev/ninqu/resolve.c: ;
86cmd/dev/ninqu/ninja.c: ;
87build.cfg: ;
88scripts/genconfig.sh: ;