|
| 1 | +CC=clang |
| 2 | +CFLAGS_D=-std=gnu89 -Wall -Wextra -Wno-unused-parameter -Wno-overlength-strings -Wno-long-long -Wno-format -pedantic -O0 -g2 |
| 3 | +CFLAGS_R=-std=gnu89 -Wall -Wextra -Wno-unused-parameter -Wno-overlength-strings -Wno-long-long -Wno-format -pedantic -O2 -DNDEBUG |
| 4 | +LDFLAGS_D= |
| 5 | +LDFLAGS_R= |
| 6 | + |
| 7 | +SRCDIR=../../src |
| 8 | +TESTDIR=../../tests |
| 9 | +TMPDIR_D=debug/tmp |
| 10 | +TMPDIR_R=release/tmp |
| 11 | +BINDIR_D=debug/bin |
| 12 | +BINDIR_R=release/bin |
| 13 | + |
| 14 | +EXAMPLES:=$(patsubst $(SRCDIR)/examples/%.peg,examples/%,$(wildcard $(SRCDIR)/examples/*.peg)) |
| 15 | + |
| 16 | +BINS= \ |
| 17 | + $(BINDIR_D)/packcc \ |
| 18 | + $(BINDIR_R)/packcc \ |
| 19 | + $(patsubst %,$(BINDIR_D)/%,$(EXAMPLES)) \ |
| 20 | + $(patsubst %,$(BINDIR_R)/%,$(EXAMPLES)) |
| 21 | +SRCS= \ |
| 22 | + $(patsubst %,$(TMPDIR_D)/%.c,$(EXAMPLES)) \ |
| 23 | + $(patsubst %,$(TMPDIR_D)/%.h,$(EXAMPLES)) \ |
| 24 | + $(patsubst %,$(TMPDIR_R)/%.c,$(EXAMPLES)) \ |
| 25 | + $(patsubst %,$(TMPDIR_R)/%.h,$(EXAMPLES)) |
| 26 | + |
| 27 | +.PHONY: all clean |
| 28 | + |
| 29 | +.SECONDARY: $(SRCS) |
| 30 | + |
| 31 | +all: $(BINS) |
| 32 | + |
| 33 | +$(BINDIR_D)/packcc: $(SRCDIR)/packcc.c |
| 34 | + mkdir -p $(dir $@) && $(CC) $(CFLAGS_D) -o $@ $< $(LDFLAGS_D) |
| 35 | + |
| 36 | +$(BINDIR_R)/packcc: $(SRCDIR)/packcc.c |
| 37 | + mkdir -p $(dir $@) && $(CC) $(CFLAGS_R) -o $@ $< $(LDFLAGS_R) |
| 38 | + |
| 39 | +$(BINDIR_D)/examples/%: $(TMPDIR_D)/examples/%.c $(TMPDIR_D)/examples/%.h |
| 40 | + mkdir -p $(dir $@) && $(CC) $(CFLAGS_D) -I. -o $@ $< $(LDFLAGS_D) |
| 41 | + |
| 42 | +$(BINDIR_R)/examples/%: $(TMPDIR_R)/examples/%.c $(TMPDIR_R)/examples/%.h |
| 43 | + mkdir -p $(dir $@) && $(CC) $(CFLAGS_R) -I. -o $@ $< $(LDFLAGS_R) |
| 44 | + |
| 45 | +$(TMPDIR_D)/examples/%.c $(TMPDIR_D)/examples/%.h: $(SRCDIR)/examples/%.peg $(BINDIR_D)/packcc |
| 46 | + mkdir -p $(dir $@) && $(BINDIR_D)/packcc -o $(basename $@) $< |
| 47 | + |
| 48 | +$(TMPDIR_R)/examples/%.c $(TMPDIR_R)/examples/%.h: $(SRCDIR)/examples/%.peg $(BINDIR_R)/packcc |
| 49 | + mkdir -p $(dir $@) && $(BINDIR_R)/packcc -o $(basename $@) $< |
| 50 | + |
| 51 | +check: $(BINDIR_R)/packcc |
| 52 | + PACKCC=$$PWD/$^ $(TESTDIR)/test.sh |
| 53 | + |
| 54 | +clean: |
| 55 | + rm -f $(BINS) $(SRCS) |
0 commit comments