-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
175 lines (135 loc) · 7.62 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# automatically generate configuration files from templates
%: %.template
touch autoclean
test -r $@ || cp $< $@
touch $@
sinclude make.config
# the directory inside the AA source we use to make the debug config, make targets and binaries known
ECLIPSEBUILD=EclipseBuild
INTRUDER=$(AAPATH)/$(ECLIPSEBUILD)
make.config: preconfig sysprofile/profile.config
test -r $@ || cp make.config.template $@ && ./findsource
# register this build in the intruding directory ( so the .global make targets work )
register: $(INTRUDER)/tag
$(MAKE) unregister
echo $$(pwd) >> $(INTRUDER)/register
touch $@
unregister: $(INTRUDER)/tag
touch $(INTRUDER)/register
mv $(INTRUDER)/register $(INTRUDER)/register.old
grep -v "^$$(pwd)$$" < $(INTRUDER)/register.old > $(INTRUDER)/register || true
rm -f register
$(INTRUDER)/tag:
# create top level directories inside main project
test -d $(INTRUDER) || mkdir $(INTRUDER)
touch $@
# global make targets
%.global: register
for build in $$(cat $(INTRUDER)/register); do $(MAKE) -C $$build "$*"; done
# combined make targets
client: client_optimize client_debug
server: server_optimize server_debug
optimize: client_optimize server_optimize
debug: client_debug server_debug
all: client server
# just make configuration files and exit
initialize: make.config
echo "Configuration files created."
# automatically clean project if configuration changed
# uncomment autoclean include in make.config to activate ( note: can be annoying )
autoclean: preconfig make.config Makefile configure confmake $(AAPATH)/configure $(AAPATH)/Makefile.am
touch autoclean
make clean
$(AAPATH)/configure: $(AAPATH)/configure.*
cd $(AAPATH); sh ./bootstrap.sh
$(AAPATH)/config.h.in: $(AAPATH)/configure
# standard targets
clean:
# delete contents of build, but keep varfiles
for f in build/*; do if test -d $$f/var; then mv $$f/var varback; rm -rf $$f/* $$f/.cvsfiles; mv varback $$f/var; else rm -rf $$f; fi; done
# done
distclean: unregister
# remove everything
rm -rf build
rm -f autoclean make.config preconfig sysprofile/profile.config
rm -rf
# selects this build as the default build
select: $(INTRUDER)
# install redirection
TARGET="$$(pwd)"; cd $(INTRUDER) && echo "$$TARGET" > redirect
# create lower level directories
for DIR in maketargets maketargets/*; do \
test -d $(INTRUDER)/$$DIR || mkdir $(INTRUDER)/$$DIR; \
done
rm -rf $(INTRUDER)/maketargets/CVS
# link output directories
for TYPE in client server; do\
for BUILD in optimize debug; do\
ln -sf $$(pwd)/build/$${TYPE}_$${BUILD} $(INTRUDER)/;\
done;\
done
# link debug configurations
for TYPE in Client Server; do\
ln -sf $$(pwd)/intruder/Debug_$$TYPE.launch.template $(INTRUDER)/Debug_$$TYPE.launch;\
done
# link make wrapper and make it executable
ln -sf $$(pwd)/intruder/makewrapper $(INTRUDER)/
chmod 755 intruder/makewrapper
# install fake makefile
ln -sf $$(pwd)/intruder/Makefile $(INTRUDER)/
# write protect textures, models and sounds
#for DIR in models textures sound; do\
# chmod 555 $(AAPATH)/$$DIR/CVS;\
# chmod 555 $(AAPATH)/$$DIR;\
#done
echo -e "\nBuild configuration has been selected as the default.\nDon't forget to refresh the AA project!\n"
# all targets should be remade every time
# .PHONY: client_optimize server_optimize client_debug server_debug
# optimizing: just like it is built in releases
client_optimize: register $(AAPATH)/configure
AAPATH=$(AAPATH) CXX="${CXX}" MAKEFLAGS="${MAKEFLAGS}" MAKE=$(MAKE) DEBUGLEVEL=0 CODELEVEL=$(CODELEVEL) CXXFLAGS="$(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_CLIENT) $(CXXFLAGS_CLIENT_OPTIMIZE)" bash ./confmake $@
server_optimize: register $(AAPATH)/configure
AAPATH=$(AAPATH) CXX="${CXX}" MAKEFLAGS="${MAKEFLAGS}" MAKE=$(MAKE) DEBUGLEVEL=0 CODELEVEL=$(CODELEVEL) CXXFLAGS="$(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_SERVER) $(CXXFLAGS_SERVER_OPTIMIZE)" bash ./confmake $@ --disable-glout
# debug: enables extra checks and debug information
client_debug: register $(AAPATH)/configure
AAPATH=$(AAPATH) CXX="${CXX}" MAKEFLAGS="${MAKEFLAGS}" MAKE=$(MAKE) DEBUGLEVEL=$(DEBUGLEVEL) CODELEVEL=$(CODELEVEL) CXXFLAGS="$(CXXFLAGS_DEBUG) $(CXXFLAGS_CLIENT) $(CXXFLAGS_CLIENT_DEBUG)" bash ./confmake $@
server_debug: register $(AAPATH)/configure
AAPATH=$(AAPATH) CXX="${CXX}" MAKEFLAGS="${MAKEFLAGS}" MAKE=$(MAKE) DEBUGLEVEL=$(DEBUGLEVEL) CODELEVEL=$(CODELEVEL) CXXFLAGS="$(CXXFLAGS_DEBUG) $(CXXFLAGS_SERVER) $(CXXFLAGS_SERVER_DEBUG)" bash ./confmake $@ --disable-glout
# for valgrind validation: light debug settings
client_valgrind: register $(AAPATH)/configure
AAPATH=$(AAPATH) MAKE=$(MAKE) DEBUGLEVEL=1 CODELEVEL=$(CODELEVEL) CXX="${CXX}" CXXFLAGS="$(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_CLIENT) $(CXXFLAGS_CLIENT_OPTIMIZE)" bash ./confmake $@
server_valgrind: register $(AAPATH)/configure
AAPATH=$(AAPATH) MAKE=$(MAKE) DEBUGLEVEL=1 CODELEVEL=$(CODELEVEL) CXX="${CXX}" CXXFLAGS="$(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_SERVER) $(CXXFLAGS_SERVER_OPTIMIZE)" bash ./confmake $@ --disable-glout
# for bugs in optimized mode that are not found in debug or valgrind builds: optimized with debug symbols. Hard to debug, only for emergencies.
client_optimizedebug: register $(AAPATH)/configure
AAPATH=$(AAPATH) MAKE=$(MAKE) DEBUGLEVEL=0 CODELEVEL=$(CODELEVEL) CXXFLAGS="$(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_CLIENT) $(CXXFLAGS_CLIENT_OPTIMIZE) -g" bash ./confmake $@
server_optimizedebug: register $(AAPATH)/configure
AAPATH=$(AAPATH) MAKE=$(MAKE) DEBUGLEVEL=0 CODELEVEL=$(CODELEVEL) CXX="${CXX}" CXXFLAGS="$(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_SERVER) $(CXXFLAGS_SERVER_OPTIMIZE) -g" bash ./confmake $@ --disable-glout
# for profiling with gprof.
client_profile: register $(AAPATH)/configure
AAPATH=$(AAPATH) MAKE=$(MAKE) DEBUGLEVEL=0 CODELEVEL=$(CODELEVEL) CXX="${CXX}" CXXFLAGS="$(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_CLIENT) $(CXXFLAGS_CLIENT_OPTIMIZE) -g -pg -fno-inline-functions -fno-default-inline" bash ./confmake $@
server_profile: register $(AAPATH)/configure
AAPATH=$(AAPATH) MAKE=$(MAKE) DEBUGLEVEL=0 CODELEVEL=$(CODELEVEL) CXX="${CXX}" CXXFLAGS="$(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_SERVER) $(CXXFLAGS_SERVER_OPTIMIZE) -g -pg" bash ./confmake $@ --disable-glout
# for profiling with gprof. Optimized, but without inline functions so a full callgraph can be generated
client_deepprofile: register $(AAPATH)/configure
AAPATH=$(AAPATH) MAKE=$(MAKE) DEBUGLEVEL=0 CODELEVEL=$(CODELEVEL) CXX="${CXX}" CXXFLAGS="$(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_CLIENT) $(CXXFLAGS_CLIENT_OPTIMIZE) -g -pg" bash ./confmake $@
server_deepprofile: register $(AAPATH)/configure
AAPATH=$(AAPATH) MAKE=$(MAKE) DEBUGLEVEL=0 CODELEVEL=$(CODELEVEL) CXX="${CXX}" CXXFLAGS="$(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_SERVER) $(CXXFLAGS_SERVER_OPTIMIZE) -g -pg -fno-inline-functions -fno-default-inline" bash ./confmake $@ --disable-glout
beautify: $(AAPATH)/configure
AAPATH=$(AAPATH) CXX="${CXX}" MAKEFLAGS="${MAKEFLAGS}" MAKE=$(MAKE) DEBUGLEVEL=$(DEBUGLEVEL) CODELEVEL=$(CODELEVEL) CXXFLAGS="$(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_SERVER) $(CXXFLAGS_SERVER_OPTIMIZE)" bash ./configure server --disable-glout
$(MAKE) -C build/server rebeautify
# run checks before committing to SCM
devcheck_single.%: %
$(MAKE) -C build/$* devcheck
devcheck: devcheck_single.client_debug devcheck_single.client_optimize devcheck_single.server_debug devcheck_single.server_optimize
# tests distribution
distcheck_fake_single.%: %
ARMAGETRONAD_FAKERELEASE=true $(MAKE) -C build/$* distcheck
distcheck_single.%: %
$(MAKE) -C build/$* distcheck
distcheck_fake: distcheck_fake_single.client_debug distcheck_fake_single.server_debug
distcheck: distcheck_single.client_debug
distcheck_full: distcheck_single.client_debug distcheck_single.server_debug distcheck_single.client_optimize distcheck_single.server_optimize
fullcheck: devcheck distcheck_full
nothing:
@echo nothing to do.