moving -Olocal-temps to -O4 until the issues are solved
[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. -fno-strict-aliasing -fsigned-char
13 CFLAGS += -DGMQCC_GITINFO="`git describe`"
14 #turn on tons of warnings if clang is present
15 # but also turn off the STUPID ONES
16 ifeq ($(CC), clang)
17         CFLAGS +=                         \
18                 -Weverything                  \
19                 -Wno-padded                   \
20                 -Wno-format-nonliteral        \
21                 -Wno-disabled-macro-expansion \
22                 -Wno-conversion               \
23                 -Wno-missing-prototypes       \
24                 -Wno-float-equal              \
25                 -Wno-cast-align
26 else
27         #Tiny C Compiler doesn't know what -pedantic-errors is
28         # and instead of ignoring .. just errors.
29         ifneq ($(CC), tcc)
30                 CFLAGS +=-pedantic-errors
31         else
32                 CFLAGS += -Wno-pointer-sign -fno-common
33         endif
34 endif
35
36 ifeq ($(track), no)
37     CFLAGS += -DNOTRACK
38 endif
39
40 OBJ_D = util.o code.o ast.o ir.o conout.o ftepp.o opts.o file.o utf8.o correct.o
41 OBJ_T = test.o util.o conout.o file.o
42 OBJ_C = main.o lexer.o parser.o file.o
43 OBJ_X = exec-standalone.o util.o conout.o file.o
44
45 ifneq ("$(CYGWIN)", "")
46         #nullify the common variables that
47         #most *nix systems have (for windows)
48         PREFIX   :=
49         BINDIR   :=
50         DATADIR  :=
51         MANDIR   :=
52         QCVM      = qcvm.exe
53         GMQCC     = gmqcc.exe
54         TESTSUITE = testsuite.exe
55 else
56 ifneq ("$(MINGW)", "")
57         #nullify the common variables that
58         #most *nix systems have (for windows)
59         PREFIX   :=
60         BINDIR   :=
61         DATADIR  :=
62         MANDIR   :=
63         QCVM      = qcvm.exe
64         GMQCC     = gmqcc.exe
65         TESTSUITE = testsuite.exe
66 else
67         #arm support for linux .. we need to allow unaligned accesses
68         #to memory otherwise we just segfault everywhere
69         ifneq (, $(findstring arm, $(shell uname -m)))
70                 CFLAGS += -munaligned-access
71         endif
72
73         QCVM      = qcvm
74         GMQCC     = gmqcc
75         TESTSUITE = testsuite
76 endif
77 endif
78
79 #standard rules
80 default: all
81 %.o: %.c
82         $(CC) -c $< -o $@ $(CFLAGS)
83
84 exec-standalone.o: exec.c
85         $(CC) -c $< -o $@ $(CFLAGS) -DQCVM_EXECUTOR=1
86
87 $(QCVM): $(OBJ_X)
88         $(CC) -o $@ $^ $(CFLAGS) -lm
89
90 $(GMQCC): $(OBJ_C) $(OBJ_D)
91         $(CC) -o $@ $^ $(CFLAGS)
92
93 $(TESTSUITE): $(OBJ_T)
94         $(CC) -o $@ $^ $(CFLAGS)
95
96 all: $(GMQCC) $(QCVM) $(TESTSUITE)
97
98 check: all
99         @ ./$(TESTSUITE)
100
101 # alias to check because test.o exists and people will get confused
102 # about the undefined references to X.
103 test: check
104
105 clean:
106         rm -f *.o $(GMQCC) $(QCVM) $(TESTSUITE) *.dat
107
108 splint:
109         @ ./splint.sh
110
111 depend:
112         @makedepend    -Y -w 65536 2> /dev/null \
113                 $(subst .o,.c,$(OBJ_D))
114         @makedepend -a -Y -w 65536 2> /dev/null \
115                 $(subst .o,.c,$(OBJ_T))
116         @makedepend -a -Y -w 65536 2> /dev/null \
117                 $(subst .o,.c,$(OBJ_C))
118         @makedepend -a -Y -w 65536 2> /dev/null \
119                 $(subst .o,.c,$(OBJ_X))
120
121 #install rules
122 install: install-gmqcc install-qcvm install-doc
123 install-gmqcc: $(GMQCC)
124         install -d -m755               $(DESTDIR)$(BINDIR)
125         install    -m755  $(GMQCC)     $(DESTDIR)$(BINDIR)/gmqcc
126 install-qcvm: $(QCVM)
127         install -d -m755               $(DESTDIR)$(BINDIR)
128         install    -m755  $(QCVM)      $(DESTDIR)$(BINDIR)/qcvm
129 install-doc:
130         install -d -m755               $(DESTDIR)$(MANDIR)/man1
131         install    -m755  doc/gmqcc.1  $(DESTDIR)$(MANDIR)/man1/
132         install    -m755  doc/qcvm.1   $(DESTDIR)$(MANDIR)/man1/
133
134 # DO NOT DELETE
135
136 util.o: gmqcc.h opts.def
137 code.o: gmqcc.h opts.def
138 ast.o: gmqcc.h opts.def ast.h ir.h
139 ir.o: gmqcc.h opts.def ir.h
140 conout.o: gmqcc.h opts.def
141 ftepp.o: gmqcc.h opts.def lexer.h
142 opts.o: gmqcc.h opts.def
143 file.o: gmqcc.h opts.def
144 utf8.o: gmqcc.h opts.def
145 correct.o: gmqcc.h opts.def
146
147 test.o: gmqcc.h opts.def
148 util.o: gmqcc.h opts.def
149 conout.o: gmqcc.h opts.def
150 file.o: gmqcc.h opts.def
151
152 main.o: gmqcc.h opts.def lexer.h
153 lexer.o: gmqcc.h opts.def lexer.h
154 parser.o: gmqcc.h opts.def lexer.h ast.h ir.h
155 file.o: gmqcc.h opts.def
156
157 util.o: gmqcc.h opts.def
158 conout.o: gmqcc.h opts.def
159 file.o: gmqcc.h opts.def