3e1d8ddfa287d9e23b72bc1ffc54cedb65606ced
[xonotic/gmqcc.git] / Makefile
1 UNAME ?= $(shell uname)
2 CYGWIN = $(findstring CYGWIN, $(UNAME))
3 MINGW = $(findstring MINGW, $(UNAME))
4
5 ifneq ("$(CYGWIN)", "")
6 WINDOWS=1
7 endif
8 ifneq ("$(MINGW)", "")
9 WINDOWS=1
10 endif
11
12 CXX ?= clang++
13 CXXFLAGS = \
14         -std=c++11 \
15         -Wall \
16         -Wextra \
17         -fno-exceptions \
18         -fno-rtti \
19         -MD \
20         -g3
21
22 CSRCS = \
23         ast.cpp \
24         code.cpp \
25         conout.cpp \
26         fold.cpp \
27         ftepp.cpp \
28         intrin.cpp \
29         ir.cpp \
30         lexer.cpp \
31         main.cpp \
32         opts.cpp \
33         parser.cpp \
34         stat.cpp \
35         utf8.cpp \
36         util.cpp
37
38 TSRCS = \
39         conout.cpp \
40         opts.cpp \
41         stat.cpp \
42         test.cpp \
43         util.cpp
44
45 VSRCS = \
46         exec.cpp \
47         stat.cpp \
48         util.cpp
49
50 COBJS = $(CSRCS:.cpp=.o)
51 TOBJS = $(TSRCS:.cpp=.o)
52 VOBJS = $(VSRCS:.cpp=.o)
53
54 CDEPS = $(CSRCS:.cpp=.d)
55 TDEPS = $(TSRCS:.cpp=.d)
56 VDEPS = $(VSRCS:.cpp=.d)
57
58 ifndef WINDOWS
59 CBIN = gmqcc
60 VBIN = qcvm
61 TBIN = testsuite
62 else
63 CBIN = gmqcc.exe
64 CVIN = qcvm.exe
65 endif
66
67 ifndef WINDOWS
68 all: $(CBIN) $(QCVM) $(TBIN)
69 else
70 all: $(CBIN) $(QCVM)
71 endif
72
73 $(CBIN): $(COBJS)
74         $(CXX) $(COBJS) -o $@
75
76 $(VBIN): $(VOBJS)
77         $(CXX) $(VOBJS) -o $@
78
79 ifndef WINDOWS
80 $(TBIN): $(TOBJS)
81         $(CXX) $(TOBJS) -o $@
82
83 test: $(TBIN)
84         @./$(TBIN)
85 endif
86
87 .cpp.o:
88         $(CXX) -c $(CXXFLAGS) $< -o $@
89
90 clean:
91         rm -f *.d
92         rm -f $(COBJS) $(CDEPS) $(CBIN)
93         rm -f $(VOBJS) $(VDEPS) $(VBIN)
94 ifndef WINDOWS
95         rm -f $(TOBJS) $(TDEPS) $(TOBJS)
96 endif
97
98 -include *.d