More fixes
[xonotic/gmqcc.git] / Makefile
1 DESTDIR :=
2 PREFIX  := /usr/local
3 BINDIR  := $(PREFIX)/bin
4 DATADIR := $(PREFIX)/share
5 MANDIR  := $(DATADIR)/man
6
7 UNAME  = $(shell uname)
8 CYGWIN = $(findstring CYGWIN,  $(UNAME))
9 MINGW  = $(findstring MINGW32, $(UNAME))
10
11 CC     ?= clang
12 CFLAGS += -Wall -Wextra -I. -pedantic-errors -std=gnu99
13 #turn on tons of warnings if clang is present
14 # but also turn off the STUPID ONES
15 ifeq ($(CC), clang)
16         CFLAGS +=                         \
17                 -Weverything                  \
18                 -Wno-padded                   \
19                 -Wno-format-nonliteral        \
20                 -Wno-disabled-macro-expansion \
21                 -Wno-conversion               \
22                 -Wno-missing-prototypes
23 endif
24 ifeq ($(track), no)
25     CFLAGS += -DNOTRACK
26 endif
27
28 OBJ_D = util.o code.o ast.o ir.o con.o ftepp.o opts.o
29 OBJ_T = test.o util.o con.o
30 OBJ_C = main.o lexer.o parser.o
31 OBJ_X = exec-standalone.o util.o con.o
32
33 ifneq ("$(CYGWIN)", "")
34         #nullify the common variables that
35         #most *nix systems have (for windows)
36         PREFIX   :=
37         BINDIR   :=
38         DATADIR  :=
39         MANDIR   :=
40         QCVM      = qcvm.exe
41         GMQCC     = gmqcc.exe
42         TESTSUITE = testsuite.exe
43 else
44 ifneq ("$(MINGW32)", "")
45         #nullify the common variables that
46         #most *nix systems have (for windows)
47         PREFIX   :=
48         BINDIR   :=
49         DATADIR  :=
50         MANDIR   :=
51         QCVM      = qcvm.exe
52         GMQCC     = gmqcc.exe
53         TESTSUITE = testsuite.exe
54 else
55         QCVM      = qcvm
56         GMQCC     = gmqcc
57         TESTSUITE = testsuite
58 endif
59 endif
60
61 #standard rules
62 default: all
63 %.o: %.c
64         $(CC) -c $< -o $@ $(CFLAGS)
65
66 exec-standalone.o: exec.c
67         $(CC) -c $< -o $@ $(CFLAGS) -DQCVM_EXECUTOR=1
68
69 $(QCVM): $(OBJ_X)
70         $(CC) -o $@ $^ $(CFLAGS) -lm
71
72 $(GMQCC): $(OBJ_C) $(OBJ_D)
73         $(CC) -o $@ $^ $(CFLAGS)
74
75 $(TESTSUITE): $(OBJ_T)
76         $(CC) -o $@ $^ $(CFLAGS)
77
78 all: $(GMQCC) $(QCVM) $(TESTSUITE)
79
80 check: all
81         @ ./$(TESTSUITE)
82
83 clean:
84         rm -f *.o $(GMQCC) $(QCVM) $(TESTSUITE) *.dat
85
86 # deps
87 $(OBJ) $(OBJ_C) $(OBJ_X): gmqcc.h opts.def
88 main.o:   lexer.h
89 parser.o: ast.h lexer.h
90 ast.o:    ast.h ir.h
91 ir.o:     ir.h
92
93 #install rules
94 install: install-gmqcc install-qcvm install-doc
95 install-gmqcc: $(GMQCC)
96         install -d -m755               $(DESTDIR)$(BINDIR)
97         install    -m755  $(GMQCC)     $(DESTDIR)$(BINDIR)/gmqcc
98 install-qcvm: $(QCVM)
99         install -d -m755               $(DESTDIR)$(BINDIR)
100         install    -m755  $(QCVM)      $(DESTDIR)$(BINDIR)/qcvm
101 install-doc:
102         install -d -m755               $(DESTDIR)$(MANDIR)/man1
103         install    -m755  doc/gmqcc.1  $(DESTDIR)$(MANDIR)/man1/
104         install    -m755  doc/qcvm.1   $(DESTDIR)$(MANDIR)/man1/