]> git.xonotic.org Git - xonotic/gmqcc.git/blob - Makefile
Wrapper around FILE to take advantage of MSVC "secure" CRT. We don't actually defend...
[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
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                 -Wno-float-equal              \
24                 -Wno-cast-align
25 endif
26 ifeq ($(track), no)
27     CFLAGS += -DNOTRACK
28 endif
29
30 OBJ_D = util.o code.o ast.o ir.o conout.o ftepp.o opts.o file.o
31 OBJ_T = test.o util.o conout.o file.o
32 OBJ_C = main.o lexer.o parser.o file.o
33 OBJ_X = exec-standalone.o util.o conout.o file.o
34
35 ifneq ("$(CYGWIN)", "")
36         #nullify the common variables that
37         #most *nix systems have (for windows)
38         PREFIX   :=
39         BINDIR   :=
40         DATADIR  :=
41         MANDIR   :=
42         QCVM      = qcvm.exe
43         GMQCC     = gmqcc.exe
44         TESTSUITE = testsuite.exe
45 else
46 ifneq ("$(MINGW)", "")
47         #nullify the common variables that
48         #most *nix systems have (for windows)
49         PREFIX   :=
50         BINDIR   :=
51         DATADIR  :=
52         MANDIR   :=
53         QCVM      = qcvm.exe
54         GMQCC     = gmqcc.exe
55         TESTSUITE = testsuite.exe
56 else
57         QCVM      = qcvm
58         GMQCC     = gmqcc
59         TESTSUITE = testsuite
60 endif
61 endif
62
63 #standard rules
64 default: all
65 %.o: %.c
66         $(CC) -c $< -o $@ $(CFLAGS)
67
68 exec-standalone.o: exec.c
69         $(CC) -c $< -o $@ $(CFLAGS) -DQCVM_EXECUTOR=1
70
71 $(QCVM): $(OBJ_X)
72         $(CC) -o $@ $^ $(CFLAGS) -lm
73
74 $(GMQCC): $(OBJ_C) $(OBJ_D)
75         $(CC) -o $@ $^ $(CFLAGS)
76
77 $(TESTSUITE): $(OBJ_T)
78         $(CC) -o $@ $^ $(CFLAGS)
79
80 all: $(GMQCC) $(QCVM) $(TESTSUITE)
81
82 check: all
83         @ ./$(TESTSUITE)
84
85 clean:
86         rm -f *.o $(GMQCC) $(QCVM) $(TESTSUITE) *.dat
87
88 # deps
89 $(OBJ_D) $(OBJ_C) $(OBJ_X): gmqcc.h opts.def
90 main.o:   lexer.h
91 parser.o: ast.h lexer.h
92 ast.o:    ast.h ir.h
93 ir.o:     ir.h
94
95 #install rules
96 install: install-gmqcc install-qcvm install-doc
97 install-gmqcc: $(GMQCC)
98         install -d -m755               $(DESTDIR)$(BINDIR)
99         install    -m755  $(GMQCC)     $(DESTDIR)$(BINDIR)/gmqcc
100 install-qcvm: $(QCVM)
101         install -d -m755               $(DESTDIR)$(BINDIR)
102         install    -m755  $(QCVM)      $(DESTDIR)$(BINDIR)/qcvm
103 install-doc:
104         install -d -m755               $(DESTDIR)$(MANDIR)/man1
105         install    -m755  doc/gmqcc.1  $(DESTDIR)$(MANDIR)/man1/
106         install    -m755  doc/qcvm.1   $(DESTDIR)$(MANDIR)/man1/