]> git.xonotic.org Git - xonotic/gmqcc.git/blob - Makefile
Not defining GMQCC_VERSION_ in gmqcc.h but checking if they're defiend and #error...
[xonotic/gmqcc.git] / Makefile
1 DESTDIR :=
2 PREFIX := /usr/local
3 BINDIR := $(PREFIX)/bin
4 DATADIR := $(PREFIX)/share
5 MANDIR := $(DATADIR)/man
6
7 GMQCC_MAJOR=0
8 GMQCC_MINOR=2
9 GMQCC_PATCH=0
10
11 CC     ?= clang
12 CFLAGS += -Wall -Wextra -I. -pedantic-errors
13 #turn on tons of warnings if clang is present
14 ifeq ($(CC), clang)
15         CFLAGS +=                         \
16                 -Weverything                  \
17                 -Wno-padded                   \
18                 -Wno-format-nonliteral        \
19                 -Wno-disabled-macro-expansion \
20                 -Wno-conversion               \
21                 -Wno-missing-prototypes
22
23 endif
24 ifeq ($(track), no)
25     CFLAGS += -DNOTRACK
26 endif
27
28 OBJ     =             \
29           util.o      \
30           code.o      \
31           ast.o       \
32           ir.o        \
33           con.o       \
34           ftepp.o
35
36 OBJ_T = test.o util.o con.o
37 OBJ_C = main.o lexer.o parser.o
38 OBJ_X = exec-standalone.o util.o con.o
39
40 CFLAGS += -DGMQCC_VERSION_MAJOR=$(GMQCC_MAJOR)
41 CFLAGS += -DGMQCC_VERSION_MINOR=$(GMQCC_MINOR)
42 CFLAGS += -DGMQCC_VERSION_PATCH=$(GMQCC_PATCH)
43
44 default: gmqcc
45 %.o: %.c
46         $(CC) -c $< -o $@ $(CFLAGS)
47
48 exec-standalone.o: exec.c
49         $(CC) -c $< -o $@ $(CFLAGS) -DQCVM_EXECUTOR=1
50
51 qcvm: $(OBJ_X)
52         $(CC) -o $@ $^ $(CFLAGS) -lm
53
54 gmqcc: $(OBJ_C) $(OBJ)
55         $(CC) -o $@ $^ $(CFLAGS)
56
57 testsuite: $(OBJ_T)
58         $(CC) -o $@ $^ $(CFLAGS)
59
60 all: gmqcc qcvm testsuite
61
62 check: all
63         @ ./testsuite
64
65 clean:
66         rm -f *.o gmqcc qcvm testsuite *.dat
67
68
69 $(OBJ) $(OBJ_C) $(OBJ_X): gmqcc.h opts.def
70 main.o: lexer.h
71 parser.o: ast.h lexer.h
72 ast.o: ast.h ir.h
73 ir.o: ir.h
74
75 install: install-gmqcc install-qcvm install-doc
76 install-gmqcc: gmqcc
77         install -d -m755               $(DESTDIR)$(BINDIR)
78         install    -m755  gmqcc        $(DESTDIR)$(BINDIR)/gmqcc
79 install-qcvm: qcvm
80         install -d -m755               $(DESTDIR)$(BINDIR)
81         install    -m755  qcvm         $(DESTDIR)$(BINDIR)/qcvm
82 install-doc:
83         install -d -m755               $(DESTDIR)$(MANDIR)/man1
84         install    -m755  doc/gmqcc.1  $(DESTDIR)$(MANDIR)/man1/