Make tilt limit angle independent (remove extra diagonal acceleration)
[neverball.git] / Makefile
blob815e50c914d9aa8acfa37e17f2bb7492668d069b
2 #------------------------------------------------------------------------------
4 BUILD := $(shell head -n1 .build 2> /dev/null || echo release)
6 VERSION := 1.6.0
7 VERSION := $(shell sh scripts/version.sh "$(BUILD)" "$(VERSION)" \
8 "share/version.in.h" "share/version.h" ".version")
10 $(info Will make a "$(BUILD)" build of Neverball $(VERSION).)
12 #------------------------------------------------------------------------------
13 # Provide a target system hint for the Makefile.
14 # Recognized PLATFORM values: darwin, mingw.
16 ifeq ($(shell uname), Darwin)
17 PLATFORM := darwin
18 endif
20 #------------------------------------------------------------------------------
21 # Paths (packagers might want to set DATADIR and LOCALEDIR)
23 USERDIR := .neverball
24 DATADIR := ./data
25 LOCALEDIR := ./locale
27 ifeq ($(PLATFORM),mingw)
28 USERDIR := Neverball
29 endif
31 ifneq ($(BUILD),release)
32 USERDIR := $(USERDIR)-dev
33 endif
35 #------------------------------------------------------------------------------
36 # Optional flags (CFLAGS, CPPFLAGS, ...)
38 ifeq ($(DEBUG),1)
39 CFLAGS := -g
40 CXXFLAGS := -g
41 CPPFLAGS :=
42 else
43 CFLAGS := -O2
44 CXXFLAGS := -O2
45 CPPFLAGS := -DNDEBUG
46 endif
48 #------------------------------------------------------------------------------
49 # Mandatory flags
51 # Compiler...
53 ifeq ($(ENABLE_TILT),wii)
54 # -std=c99 because we need isnormal and -fms-extensions because
55 # libwiimote headers make heavy use of the "unnamed fields" GCC
56 # extension.
58 ALL_CFLAGS := -Wall -Wshadow -std=c99 -pedantic -fms-extensions $(CFLAGS)
59 else
60 ALL_CFLAGS := -Wall -Wshadow -std=c99 -pedantic $(CFLAGS)
61 endif
63 ALL_CXXFLAGS := -fno-rtti -fno-exceptions $(CXXFLAGS)
65 # Preprocessor...
67 SDL_CPPFLAGS := $(shell sdl2-config --cflags)
68 PNG_CPPFLAGS := $(shell libpng-config --cflags)
70 ALL_CPPFLAGS := $(SDL_CPPFLAGS) $(PNG_CPPFLAGS) -Ishare
72 ALL_CPPFLAGS += \
73 -DCONFIG_USER=\"$(USERDIR)\" \
74 -DCONFIG_DATA=\"$(DATADIR)\" \
75 -DCONFIG_LOCALE=\"$(LOCALEDIR)\"
77 ifeq ($(ENABLE_NLS),0)
78 ALL_CPPFLAGS += -DENABLE_NLS=0
79 else
80 ALL_CPPFLAGS += -DENABLE_NLS=1
81 endif
83 ifeq ($(ENABLE_HMD),openhmd)
84 ALL_CPPFLAGS += -DENABLE_HMD=1
85 endif
86 ifeq ($(ENABLE_HMD),libovr)
87 ALL_CPPFLAGS += -DENABLE_HMD=1
88 endif
90 ifeq ($(ENABLE_RADIANT_CONSOLE),1)
91 ALL_CPPFLAGS += -DENABLE_RADIANT_CONSOLE=1
92 endif
94 ifeq ($(PLATFORM),darwin)
95 ALL_CPPFLAGS += $(patsubst %, -I%, $(wildcard /opt/local/include \
96 /usr/local/include))
97 endif
99 ALL_CPPFLAGS += $(CPPFLAGS)
101 #------------------------------------------------------------------------------
102 # HMD handling is a complicated with 6 platform-backend combinations.
104 ifeq ($(ENABLE_HMD),openhmd)
105 HMD_LIBS := -lopenhmd
106 endif
108 ifeq ($(ENABLE_HMD),libovr)
109 HMD_LIBS := -L/usr/local/OculusSDK/LibOVR/Lib/Linux/Release/x86_64 -lovr -ludev -lX11 -lXinerama
110 HMD_CPPFLAGS := -I/usr/local/OculusSDK/LibOVR/Include
112 ifeq ($(PLATFORM),mingw)
113 HMD_LIBS := -L/usr/local/OculusSDK/LibOVR/Lib/MinGW/Release/w32 -lovr -lsetupapi -lwinmm
114 HMD_CPPFLAGS := -I/usr/local/OculusSDK/LibOVR/Include
115 endif
116 ifeq ($(PLATFORM),darwin)
117 HMD_LIBS := -L/usr/local/OculusSDK/LibOVR/Lib/MacOS/Release -lovr -framework IOKit -framework CoreFoundation -framework ApplicationServices
118 HMD_CPPFLAGS := -I/usr/local/OculusSDK/LibOVR/Include
119 endif
120 endif
122 ALL_CPPFLAGS += $(HMD_CPPFLAGS)
124 #------------------------------------------------------------------------------
125 # Libraries
127 SDL_LIBS := $(shell sdl2-config --libs)
128 PNG_LIBS := $(shell libpng-config --libs)
130 ifeq ($(ENABLE_FS),stdio)
131 FS_LIBS :=
132 else
133 FS_LIBS := -lphysfs
134 endif
136 # The non-conditionalised values below are specific to the native
137 # system. The native system of this Makefile is Linux (or GNU+Linux if
138 # you prefer). Please be sure to override ALL of them for each target
139 # system in the conditional parts below.
141 INTL_LIBS :=
143 ifeq ($(ENABLE_TILT),wii)
144 TILT_LIBS := -lcwiimote -lbluetooth
145 else
146 ifeq ($(ENABLE_TILT),loop)
147 TILT_LIBS := -lusb-1.0 -lfreespace
148 endif
149 endif
151 OGL_LIBS := -lGL
153 ifeq ($(PLATFORM),mingw)
154 ifneq ($(ENABLE_NLS),0)
155 INTL_LIBS := -lintl
156 endif
158 TILT_LIBS :=
159 OGL_LIBS := -lopengl32
160 endif
162 ifeq ($(PLATFORM),darwin)
163 ifneq ($(ENABLE_NLS),0)
164 INTL_LIBS := -lintl
165 endif
167 TILT_LIBS :=
168 OGL_LIBS := -framework OpenGL
169 endif
171 BASE_LIBS := -ljpeg $(PNG_LIBS) $(FS_LIBS) -lm
173 ifeq ($(PLATFORM),darwin)
174 BASE_LIBS += $(patsubst %, -L%, $(wildcard /opt/local/lib \
175 /usr/local/lib))
176 endif
178 OGG_LIBS := -lvorbisfile
179 TTF_LIBS := -lSDL2_ttf
181 ALL_LIBS := $(HMD_LIBS) $(TILT_LIBS) $(INTL_LIBS) $(TTF_LIBS) \
182 $(OGG_LIBS) $(SDL_LIBS) $(OGL_LIBS) $(BASE_LIBS)
184 MAPC_LIBS := $(BASE_LIBS)
186 ifeq ($(ENABLE_RADIANT_CONSOLE),1)
187 MAPC_LIBS += -lSDL2_net
188 endif
190 #------------------------------------------------------------------------------
192 ifeq ($(PLATFORM),mingw)
193 EXT := .exe
194 endif
196 MAPC_TARG := mapc$(EXT)
197 BALL_TARG := neverball$(EXT)
198 PUTT_TARG := neverputt$(EXT)
200 ifeq ($(PLATFORM),mingw)
201 MAPC := $(WINE) ./$(MAPC_TARG)
202 else
203 MAPC := ./$(MAPC_TARG)
204 endif
206 #------------------------------------------------------------------------------
208 MAPC_OBJS := \
209 share/vec3.o \
210 share/base_image.o \
211 share/solid_base.o \
212 share/binary.o \
213 share/base_config.o \
214 share/common.o \
215 share/fs_common.o \
216 share/fs_png.o \
217 share/fs_jpg.o \
218 share/dir.o \
219 share/array.o \
220 share/list.o \
221 share/mapc.o
222 BALL_OBJS := \
223 share/lang.o \
224 share/st_common.o \
225 share/vec3.o \
226 share/base_image.o \
227 share/image.o \
228 share/solid_base.o \
229 share/solid_vary.o \
230 share/solid_draw.o \
231 share/solid_all.o \
232 share/mtrl.o \
233 share/part.o \
234 share/geom.o \
235 share/ball.o \
236 share/gui.o \
237 share/font.o \
238 share/theme.o \
239 share/base_config.o \
240 share/config.o \
241 share/video.o \
242 share/glext.o \
243 share/binary.o \
244 share/state.o \
245 share/audio.o \
246 share/text.o \
247 share/common.o \
248 share/list.o \
249 share/queue.o \
250 share/cmd.o \
251 share/array.o \
252 share/dir.o \
253 share/fbo.o \
254 share/glsl.o \
255 share/fs_common.o \
256 share/fs_png.o \
257 share/fs_jpg.o \
258 share/fs_rwops.o \
259 share/fs_ov.o \
260 share/log.o \
261 ball/hud.o \
262 ball/game_common.o \
263 ball/game_client.o \
264 ball/game_server.o \
265 ball/game_proxy.o \
266 ball/game_draw.o \
267 ball/score.o \
268 ball/level.o \
269 ball/progress.o \
270 ball/set.o \
271 ball/demo.o \
272 ball/demo_dir.o \
273 ball/util.o \
274 ball/st_conf.o \
275 ball/st_demo.o \
276 ball/st_save.o \
277 ball/st_goal.o \
278 ball/st_fail.o \
279 ball/st_done.o \
280 ball/st_level.o \
281 ball/st_over.o \
282 ball/st_play.o \
283 ball/st_set.o \
284 ball/st_start.o \
285 ball/st_title.o \
286 ball/st_help.o \
287 ball/st_name.o \
288 ball/st_shared.o \
289 ball/st_pause.o \
290 ball/st_ball.o \
291 ball/main.o
292 PUTT_OBJS := \
293 share/lang.o \
294 share/st_common.o \
295 share/vec3.o \
296 share/base_image.o \
297 share/image.o \
298 share/solid_base.o \
299 share/solid_vary.o \
300 share/solid_draw.o \
301 share/solid_all.o \
302 share/mtrl.o \
303 share/part.o \
304 share/geom.o \
305 share/ball.o \
306 share/base_config.o \
307 share/config.o \
308 share/video.o \
309 share/glext.o \
310 share/binary.o \
311 share/audio.o \
312 share/state.o \
313 share/gui.o \
314 share/font.o \
315 share/theme.o \
316 share/text.o \
317 share/common.o \
318 share/list.o \
319 share/fs_common.o \
320 share/fs_png.o \
321 share/fs_jpg.o \
322 share/fs_rwops.o \
323 share/fs_ov.o \
324 share/dir.o \
325 share/fbo.o \
326 share/glsl.o \
327 share/array.o \
328 share/log.o \
329 putt/hud.o \
330 putt/game.o \
331 putt/hole.o \
332 putt/course.o \
333 putt/st_all.o \
334 putt/st_conf.o \
335 putt/main.o
337 BALL_OBJS += share/solid_sim_sol.o
338 PUTT_OBJS += share/solid_sim_sol.o
340 ifeq ($(ENABLE_FS),stdio)
341 BALL_OBJS += share/fs_stdio.o
342 PUTT_OBJS += share/fs_stdio.o
343 MAPC_OBJS += share/fs_stdio.o
344 else
345 BALL_OBJS += share/fs_physfs.o
346 PUTT_OBJS += share/fs_physfs.o
347 MAPC_OBJS += share/fs_physfs.o
348 endif
350 ifeq ($(ENABLE_TILT),wii)
351 BALL_OBJS += share/tilt_wii.o
352 else
353 ifeq ($(ENABLE_TILT),loop)
354 BALL_OBJS += share/tilt_loop.o
355 else
356 BALL_OBJS += share/tilt_null.o
357 endif
358 endif
360 ifeq ($(ENABLE_HMD),openhmd)
361 BALL_OBJS += share/hmd_openhmd.o share/hmd_common.o
362 PUTT_OBJS += share/hmd_openhmd.o share/hmd_common.o
363 else
364 ifeq ($(ENABLE_HMD),libovr)
365 BALL_OBJS += share/hmd_libovr.o share/hmd_common.o
366 PUTT_OBJS += share/hmd_libovr.o share/hmd_common.o
367 else
368 BALL_OBJS += share/hmd_null.o
369 PUTT_OBJS += share/hmd_null.o
370 endif
371 endif
373 ifeq ($(PLATFORM),mingw)
374 BALL_OBJS += neverball.ico.o
375 PUTT_OBJS += neverputt.ico.o
376 endif
378 BALL_DEPS := $(BALL_OBJS:.o=.d)
379 PUTT_DEPS := $(PUTT_OBJS:.o=.d)
380 MAPC_DEPS := $(MAPC_OBJS:.o=.d)
382 MAPS := $(shell find data -name "*.map" \! -name "*.autosave.map")
383 SOLS := $(MAPS:%.map=%.sol)
385 DESKTOPS := $(basename $(wildcard dist/*.desktop.in))
387 # The build environment defines this (or should).
388 # This is a fallback that likely only works on a Windows host.
389 WINDRES ?= windres
391 #------------------------------------------------------------------------------
393 %.o : %.c
394 $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) -MM -MP -MF $*.d -MT "$@" $<
395 $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) -o $@ -c $<
397 %.o : %.cpp
398 $(CXX) $(ALL_CXXFLAGS) $(ALL_CPPFLAGS) -MM -MP -MF $*.d -MT "$@" $<
399 $(CXX) $(ALL_CXXFLAGS) $(ALL_CPPFLAGS) -o $@ -c $<
401 %.sol : %.map $(MAPC_TARG)
402 $(MAPC) $< data
404 %.desktop : %.desktop.in
405 sh scripts/translate-desktop.sh < $< > $@
407 %.ico.o: dist/ico/%.ico
408 echo "1 ICON \"$<\"" | $(WINDRES) -o $@
410 #------------------------------------------------------------------------------
412 all : $(BALL_TARG) $(PUTT_TARG) $(MAPC_TARG) sols locales desktops
414 ifeq ($(ENABLE_HMD),libovr)
415 LINK := $(CXX) $(ALL_CXXFLAGS)
416 else
417 LINK := $(CC) $(ALL_CFLAGS)
418 endif
420 $(BALL_TARG) : $(BALL_OBJS)
421 $(LINK) -o $(BALL_TARG) $(BALL_OBJS) $(LDFLAGS) $(ALL_LIBS)
423 $(PUTT_TARG) : $(PUTT_OBJS)
424 $(LINK) -o $(PUTT_TARG) $(PUTT_OBJS) $(LDFLAGS) $(ALL_LIBS)
426 $(MAPC_TARG) : $(MAPC_OBJS)
427 $(CC) $(ALL_CFLAGS) -o $(MAPC_TARG) $(MAPC_OBJS) $(LDFLAGS) $(MAPC_LIBS)
429 # Work around some extremely helpful sdl-config scripts.
431 ifeq ($(PLATFORM),mingw)
432 $(MAPC_TARG) : ALL_CPPFLAGS := $(ALL_CPPFLAGS) -Umain
433 endif
435 sols : $(SOLS)
437 locales :
438 ifneq ($(ENABLE_NLS),0)
439 $(MAKE) -C po
440 endif
442 desktops : $(DESKTOPS)
444 clean-src :
445 $(RM) $(BALL_TARG) $(PUTT_TARG) $(MAPC_TARG)
446 find . \( -name '*.o' -o -name '*.d' \) -delete
448 clean : clean-src
449 $(RM) $(SOLS)
450 $(RM) $(DESKTOPS)
451 $(MAKE) -C po clean
453 test : all
454 ./neverball
456 TAGS :
457 $(RM) $@
458 find . -name '*.[ch]' | xargs etags -a
460 #------------------------------------------------------------------------------
462 .PHONY : all sols locales clean-src clean test TAGS
464 -include $(BALL_DEPS) $(PUTT_DEPS) $(MAPC_DEPS)
466 #------------------------------------------------------------------------------
468 ifeq ($(PLATFORM),mingw)
470 #------------------------------------------------------------------------------
472 INSTALLER := ../neverball-$(VERSION)-setup.exe
474 MAKENSIS := makensis
475 MAKENSIS_FLAGS := -DVERSION=$(VERSION) -DOUTFILE=$(INSTALLER)
477 TODOS := todos
478 FROMDOS := fromdos
480 CP := cp
482 TEXT_DOCS := \
483 doc/AUTHORS \
484 doc/MANUAL \
485 CHANGES \
486 COPYING \
487 README
489 TXT_DOCS := $(TEXT_DOCS:%=%.txt)
491 #------------------------------------------------------------------------------
493 .PHONY: setup
494 setup: $(INSTALLER)
496 $(INSTALLER): install-dlls convert-text-files all contrib
497 $(MAKENSIS) $(MAKENSIS_FLAGS) -nocd scripts/neverball.nsi
499 $(INSTALLER): LDFLAGS := -s $(LDFLAGS)
501 .PHONY: clean-setup
502 clean-setup: clean
503 $(RM) install-dlls.sh *.dll $(TXT_DOCS)
504 find data -name "*.txt" -exec $(FROMDOS) {} \;
505 $(MAKE) -C contrib EXT=$(EXT) clean
507 #------------------------------------------------------------------------------
509 .PHONY: install-dlls
510 install-dlls: install-dlls.sh
511 sh $<
513 install-dlls.sh: $(MAPC_TARG) $(BALL_TARG) $(PUTT_TARG)
514 mingw-list-dlls --format=shell $^ > $@
516 #------------------------------------------------------------------------------
518 .PHONY: convert-text-files
519 convert-text-files: $(TXT_DOCS)
520 find data -name "*.txt" -exec $(TODOS) {} \;
522 %.txt: %
523 $(CP) $< $@
524 $(TODOS) $@
526 #------------------------------------------------------------------------------
528 .PHONY: contrib
529 contrib:
530 $(MAKE) -C contrib EXT=$(EXT)
532 #------------------------------------------------------------------------------
534 endif
536 #------------------------------------------------------------------------------