-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
62 lines (42 loc) · 1.68 KB
/
Makefile
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
.PHONY: clean all check test_programs
ERTS_INCLUDE_DIR ?= $(shell erl -noshell -s init stop -eval "io:format(\"~s/erts-~s/include/\", [code:root_dir(), erlang:system_info(version)]), halt(0).")
PREFIX ?= /usr/local
INSTALL ?= install
CC ?= gcc
CFLAGS ?= -MMD -std=gnu99 -Wall -Wextra -ggdb -fms-extensions -rdynamic -Wno-missing-field-initializers
CFLAGS := $(CFLAGS) -I$(ERTS_INCLUDE_DIR) $(DEFINES)
PARSE_CFLAGS := $(CFLAGS) -Wno-unused-variable -Wno-unused-parameter -Wno-sign-compare
LDFLAGS ?= -ldl
RAGEL ?= ragel
RAGELFLAGS ?= -G2
PROVEFLAGS ?=
NIFFY_OBJS = niffy.o nif_stubs.o lex.o parse.o atom.o str.o variable.o map.o
OBJS = $(NIFFY_OBJS)
GENERATED = lex.c parse.c parse.h parse.out
BINARIES = niffy fuzz_skeleton lex_test parse_test t/leaky_nif.so t/clean_nif.so vendor/lemon/lemon
all: niffy fuzz_skeleton test_programs
test_programs: lex_test parse_test t/leaky_nif.so t/clean_nif.so
main.c fuzz_skeleton.c $(NIFFY_OBJS): parse.h
niffy: main.o $(NIFFY_OBJS) | parse.h
$(CC) $(CFLAGS) -o niffy $^ $(LDFLAGS)
fuzz_skeleton: fuzz_skeleton.o $(NIFFY_OBJS) | parse.h
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
lex_test: lex.o atom.o str.o | parse.h
parse_test: parse_test.o atom.o str.o map.o variable.o nif_stubs.o lex.o parse.o | parse.h
vendor/lemon/lemon: vendor/lemon/lemon.c
$(CC) -o $@ $<
t/%.so: t/%.c
$(CC) $(CFLAGS) -fPIC -shared $^ -o $@
lex.c: lex.rl
$(RAGEL) $(RAGELFLAGS) -o $@ $^
parse.o: parse.c
$(CC) $(PARSE_CFLAGS) -c $< -o $@
%.c %.h: %.y | vendor/lemon/lemon
vendor/lemon/lemon $<
clean:
$(RM) $(OBJS) $(OBJS:.o=.d) $(GENERATED) $(BINARIES)
check: niffy test_programs
prove $(PROVEFLAGS)
install: niffy
$(INSTALL) ./niffy $(PREFIX)/bin/niffy
-include $(OBJS:.o=.d)