26291b1e73e2d01df4618f3ffd420d98ebf51315
[xonotic/gmqcc.git] / BSDmakefile
1 #
2 # This is the Makefile for the BSD flavor
3 #
4
5 DESTDIR  :=
6 OPTIONAL :=
7 PREFIX   := /usr/local
8 BINDIR   := $(PREFRIX)/bin
9 DATADIR  := $(PREFIX)/share
10 MANDIR   := $(DATADIR)/man
11
12 GITTEST  != git describe --always 2>/dev/null
13 GITINFO  :=
14
15 .if $(GITTEST)
16     GITINFO != git describe --always
17 .endif
18
19 CC       ?= clang
20
21 # linker flags and optional additional libraries if required
22 LDFLAGS  +=
23 LIBS     += -lm
24
25 CFLAGS   +=  -Wall -Wextra -Werror -fno-strict-aliasing -DGMQCC_GITINFO=\"$(GITINFO)\"$(OPTIONAL)
26
27 .if $(CC) == clang
28     CFLAGS +=   -Weverything\
29                 -Wno-padded\
30                 -Wno-format-nonliteral\
31                 -Wno-disabled-macro-expansion\
32                 -Wno-conversion\
33                 -Wno-missing-prototypes\
34                 -Wno-float-equal\
35                 -Wno-unknown-warning-option\
36                 -Wstrict-prototypes
37 .else
38 .    if $(CC) == tcc
39        CFLAGS += -Wstrict-prototypes -pedantic-errors
40 .    else
41        CFLAGS += -Wno-pointer-sign -fno-common
42 .    endif
43 .endif
44
45 OBJ_C = main.o lexer.o parser.o fs.o stat.o util.o code.o ast.o ir.o conout.o ftepp.o opts.o utf8.o correct.o
46 OBJ_P = util.o fs.o conout.o opts.o pak.o stat.o
47 OBJ_T = test.o util.o conout.o fs.o stat.o
48 OBJ_X = exec-standalone.o util.o conout.o fs.o stat.o
49
50 QCVM      = qcvm
51 GMQCC     = gmqcc
52 TESTSUITE = testsuite
53 PAK       = gmqpak
54
55 #gource flags
56 GOURCEFLAGS =                 \
57     --date-format "%d %B, %Y" \
58     --seconds-per-day 0.01    \
59     --auto-skip-seconds 1     \
60     --title "GMQCC"           \
61     --key                     \
62     --camera-mode overview    \
63     --highlight-all-users     \
64     --file-idle-time 0        \
65     --hide progress,mouse     \
66     --stop-at-end             \
67     --max-files 99999999999   \
68     --max-file-lag 0.000001   \
69     --bloom-multiplier 1.3    \
70     --logo doc/html/gmqcc.png \
71     -1280x720
72
73 #ffmpeg flags for gource
74 FFMPEGFLAGS=                  \
75     -y                        \
76     -r 60                     \
77     -f image2pipe             \
78     -vcodec ppm               \
79     -i -                      \
80     -vcodec libx264           \
81     -preset ultrafast         \
82     -crf 1                    \
83     -threads 0                \
84     -bf 0
85
86 #splint flags
87 SPLINTFLAGS =                 \
88     -redef                    \
89     -noeffect                 \
90     -nullderef                \
91     -usedef                   \
92     -type                     \
93     -mustfreeonly             \
94     -nullstate                \
95     -varuse                   \
96     -mustfreefresh            \
97     -compdestroy              \
98     -compmempass              \
99     -nullpass                 \
100     -onlytrans                \
101     -predboolint              \
102     -boolops                  \
103     -incondefs                \
104     -macroredef               \
105     -retvalint                \
106     -nullret                  \
107     -predboolothers           \
108     -globstate                \
109     -dependenttrans           \
110     -branchstate              \
111     -compdef                  \
112     -temptrans                \
113     -usereleased              \
114     -warnposix                \
115     +charindex                \
116     -kepttrans                \
117     -unqualifiedtrans         \
118     +matchanyintegral         \
119     +voidabstract             \
120     -nullassign               \
121     -unrecog                  \
122     -casebreak                \
123     -retvalbool               \
124     -retvalother              \
125     -mayaliasunique           \
126     -realcompare              \
127     -observertrans            \
128     -abstract                 \
129     -statictrans              \
130     -castfcnptr
131
132 #standard rules
133 default: all
134
135 c.o:
136         $(CC) -c ${.IMPSRC} -o ${.TARGET} $(CPPFLAGS) $(CFLAGS)
137
138 exec-standalone.o: exec.c
139         $(CC) -c ${.ALLSRC} -o ${.TARGET} $(CPPFLAGS) $(CFLAGS) -DQCVM_EXECUTOR=1
140
141 $(QCVM): $(OBJ_X)
142         $(CC) -o ${.TARGET} ${.IMPSRC} $(LDFLAGS) $(LIBS) $(OBJ_X)
143
144 $(GMQCC): $(OBJ_C)
145         $(CC) -o ${.TARGET} ${.IMPSRC} $(LDFLAGS) $(LIBS) $(OBJ_C)
146
147 $(TESTSUITE): $(OBJ_T)
148         $(CC) -o ${.TARGET} ${.IMPSRC} $(LDFLAGS) $(LIBS) $(OBJ_T)
149
150 $(PAK): $(OBJ_P)
151         $(CC) -o ${.TARGET} ${.IMPSRC} $(LDFLAGS) $(OBJ_P)
152
153 all: $(GMQCC) $(QCVM) $(TESTSUITE) $(PAK)
154
155 check: all
156         @ ./$(TESTSUITE)
157 test: all
158         @ ./$(TESTSUITE)
159
160 clean:
161         rm -f *.o $(GMQCC) $(QCVM) $(TESTSUITE) $(PAK) *.dat gource.mp4 *.exe
162
163 splint:
164         @ splint $(SPLINTFLAGS) *.c *.h
165
166 gource:
167         @ gource $(GOURCEFLAGS)
168
169 gource-record:
170         @ gource $(GOURCEFLAGS) -o - | ffmpeg $(FFMPEGFLAGS) gource.mp4
171
172 #install rules
173 install: install-gmqcc install-qcvm install-gmqpak install-doc
174 install-gmqcc: $(GMQCC)
175         install -d -m755              $(DESTDIR)$(BINDIR)
176         install    -m755 $(GMQCC)     $(DESTDIR)$(BINDIR)/$(GMQCC)
177 install-qcvm: $(QCVM)
178         install -d -m755              $(DESTDIR)$(BINDIR)
179         install    -m755 $(QCVM)      $(DESTDIR)$(BINDIR)/$(QCVM)
180 install-gmqpak: $(PAK)
181         install -d -m755              $(DESTDIR)$(BINDIR)
182         install    -m755 $(PAK)       $(DESTDIR)$(BINDIR)/$(PAK)
183 install-doc:
184         install -d -m755              $(DESTDIR)$(MANDIR)/man1
185         install    -m644 doc/gmqcc.1  $(DESTDIR)$(MANDIR)/man1/
186         install    -m644 doc/qcvm.1   $(DESTDIR)$(MANDIR)/man1/
187         install    -m644 doc/gmqpak.1 $(DESTDIR)$(MANDIR)/man1/
188
189 uninstall:
190         rm -f $(DESTDIR)$(BINDIR)/gmqcc
191         rm -f $(DESTDIR)$(BINDIR)/qcvm
192         rm -f $(DESTDIR)$(BINDIR)/gmqpak
193         rm -f $(DESTDIR)$(MANDIR)/man1/doc/gmqcc.1
194         rm -f $(DESTDIR)$(MANDIR)/man1/doc/qcvm.1
195         rm -f $(DESTDIR)$(MANDIR)/man1/doc/gmqpak.1
196
197 # DO NOT DELETE
198
199 util.o: gmqcc.h opts.def
200 fs.o: gmqcc.h opts.def
201 conout.o: gmqcc.h opts.def
202 opts.o: gmqcc.h opts.def
203 pak.o: gmqcc.h opts.def
204 stat.o: gmqcc.h opts.def
205 test.o: gmqcc.h opts.def
206 main.o: gmqcc.h opts.def lexer.h
207 lexer.o: gmqcc.h opts.def lexer.h
208 parser.o: gmqcc.h opts.def lexer.h ast.h ir.h intrin.h
209 code.o: gmqcc.h opts.def
210 ast.o: gmqcc.h opts.def ast.h ir.h
211 ir.o: gmqcc.h opts.def ir.h
212 ftepp.o: gmqcc.h opts.def lexer.h
213 utf8.o: gmqcc.h opts.def
214 correct.o: gmqcc.h opts.def