]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/Makefile
Apply SPAWNFUNC_CHECK_FIELDS in the Makefile for customization reasons
[xonotic/xonotic-data.pk3dir.git] / qcsrc / Makefile
1 CPP := cc -xc -E
2 QCC ?= ../../../../gmqcc/gmqcc
3
4 PROGS_OUT ?= ..
5 WORKDIR ?= ../.tmp
6
7 QCCFLAGS_WATERMARK ?= $(shell git describe --tags --dirty='~')
8 VER = $(subst *,\*,$(QCCFLAGS_WATERMARK))
9 NDEBUG ?= 1
10 XONOTIC ?= 1
11 ENABLE_EFFECTINFO ?= 0
12 ENABLE_DEBUGDRAW ?= 0
13 ENABLE_DEBUGTRACE ?= 0
14 SPAWNFUNC_CHECK_FIELDS ?= 1
15 BUILD_MOD ?=
16
17 ifndef ZIP
18         ifneq ($(shell which zip 2>/dev/null),)
19                 ZIP := zip -9mD
20         endif
21         ifneq ($(shell which 7z 2>/dev/null),)
22                 ZIP := 7z a -tzip -mx=9 -sdel
23         endif
24         ifneq ($(shell which 7za 2>/dev/null),)
25                 ZIP := 7za a -tzip -mx=9 -sdel
26         endif
27     ifndef ZIP
28         $(warning "No zip / 7z / 7za in ($(PATH))")
29         ZIP := : zip_not_found
30     endif
31 endif
32
33 # Set to empty string to temporarily enable warnings when debugging
34 QCCFLAGS_WERROR ?= \
35         -Werror
36
37 # We eventually need to get rid of these
38 QCCFLAGS_WTFS ?= \
39         -Wno-field-redeclared
40
41 QCCDEFS ?= \
42         -DXONOTIC=$(XONOTIC) \
43         -DWATERMARK="$(QCCFLAGS_WATERMARK)" \
44         -DNDEBUG=$(NDEBUG) \
45         -DENABLE_EFFECTINFO=$(ENABLE_EFFECTINFO) \
46         -DENABLE_DEBUGDRAW=$(ENABLE_DEBUGDRAW) \
47         -DENABLE_DEBUGTRACE=$(ENABLE_DEBUGTRACE) \
48         -DSPAWNFUNC_CHECK_FIELDS=$(SPAWNFUNC_CHECK_FIELDS) \
49         $(if $(BUILD_MOD), -DBUILD_MOD="$(BUILD_MOD)" -I$(BUILD_MOD), ) \
50         $(QCCDEFS_EXTRA)
51
52 # -Ooverlap-locals is required
53 QCCFLAGS ?= \
54         -std=gmqcc \
55         -Ooverlap-locals \
56         -O3 \
57         $(QCCFLAGS_WERROR) \
58         -Wall \
59         $(QCCFLAGS_WTFS) \
60         -flno -futf8 -fno-bail-on-werror \
61         -frelaxed-switch -freturn-assignments \
62         $(QCCFLAGS_EXTRA)
63
64
65
66 .PHONY: all
67 all: qc pk3
68
69 $(WORKDIR):
70         @mkdir -p $@
71
72 .PHONY: clean
73 clean: | $(WORKDIR)
74         $(RM) $(PROGS_OUT)/csprogs.dat
75         $(RM) $(PROGS_OUT)/menu.dat
76         $(RM) $(PROGS_OUT)/progs.dat
77         $(RM) $(PROGS_OUT)/csprogs.lno
78         $(RM) $(PROGS_OUT)/menu.lno
79         $(RM) $(PROGS_OUT)/progs.lno
80         $(RM) $(WORKDIR)/*.d
81         $(RM) $(WORKDIR)/*.qc
82         $(RM) $(WORKDIR)/*.txt
83         $(RM) $(WORKDIR)/qccversion.*
84         $(RM) $(WORKDIR)/csprogs-*
85         $(RM) $(WORKDIR)/autoexec/csprogs-*.cfg
86         $(RM) $(WORKDIR)/*.dat
87         $(RM) csprogs-*.pk3
88
89 .PHONY: qc
90 qc: $(PROGS_OUT)/csprogs.dat $(PROGS_OUT)/menu.dat $(PROGS_OUT)/progs.dat
91
92 .PHONY: sv
93 sv: $(PROGS_OUT)/csprogs.dat $(PROGS_OUT)/progs.dat
94
95 .PHONY: pk3
96 pk3: csprogs-$(VER).pk3
97
98
99
100 COMPTESTS = test-server test-client test-menu
101 .PHONY: test $(COMPTESTS)
102 test: $(COMPTESTS)
103 $(COMPTESTS):
104         tools/compilationunits.sh $@
105
106
107
108 %-$(VER).pk3: $(PROGS_OUT)/%.dat
109         $(eval PROG=$*)
110         $(eval PK3=$(PROG)-$(VER).pk3)
111         $(eval CFG=autoexec/$(PROG)-$(VER).cfg)
112         $(eval DAT=$(PROG)-$(VER).dat)
113         $(eval LNO=$(PROG)-$(VER).lno)
114         @ mkdir -p $(WORKDIR)/autoexec
115         @ echo "// http://xonotic.org" > $(WORKDIR)/$(CFG)
116         @ echo "set csqc_progname $(DAT)" >> $(WORKDIR)/$(CFG)
117         @ cp -f $(PROGS_OUT)/$(PROG).dat $(WORKDIR)/$(DAT)
118         @ cp -f $(PROGS_OUT)/$(PROG).lno $(WORKDIR)/$(LNO)
119         @ $(RM) $(PROG)-*.pk3
120         cd $(WORKDIR) && $(ZIP) $(CURDIR)/$(PK3) $(CFG) $(DAT) $(LNO)
121
122 QCCVERSION := $(shell cd lib && $(QCC) --version)
123 QCCVERSIONFILE := $(WORKDIR)/qccversion.$(shell echo ${QCCVERSION} | git hash-object --stdin)
124 $(QCCVERSIONFILE): | $(WORKDIR)
125         @ $(RM) $(WORKDIR)/qccversion.*
126         @ echo $(QCCVERSION) > $@
127
128 export WORKDIR
129 export CPP
130 export QCC
131 export QCCDEFS
132 export QCCFLAGS
133
134 $(PROGS_OUT)/csprogs.dat: client/progs.inc $(QCCVERSIONFILE) | $(WORKDIR)
135         @ echo make[1]: Entering directory \`$(CURDIR)/client\'
136         ./tools/qcc.sh client $@ $<
137 -include $(WORKDIR)/client.d
138
139 $(PROGS_OUT)/progs.dat: server/progs.inc $(QCCVERSIONFILE) | $(WORKDIR)
140         @ echo make[1]: Entering directory \`$(CURDIR)/server\'
141         ./tools/qcc.sh server $@ $<
142 -include $(WORKDIR)/server.d
143
144 $(PROGS_OUT)/menu.dat: menu/progs.inc $(QCCVERSIONFILE) | $(WORKDIR)
145         @ echo make[1]: Entering directory \`$(CURDIR)/menu\'
146         ./tools/qcc.sh menu $@ $<
147 -include $(WORKDIR)/menu.d