2 #------------------------------------------------------------------------------
4 BUILD
:= $(shell head
-n1 .build
2> /dev
/null || echo release
)
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
)
20 #------------------------------------------------------------------------------
21 # Paths (packagers might want to set DATADIR and LOCALEDIR)
27 ifeq ($(PLATFORM
),mingw
)
31 ifneq ($(BUILD
),release
)
32 USERDIR
:= $(USERDIR
)-dev
35 #------------------------------------------------------------------------------
36 # Optional flags (CFLAGS, CPPFLAGS, ...)
48 #------------------------------------------------------------------------------
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
58 ALL_CFLAGS
:= -Wall
-Wshadow
-std
=c99
-pedantic
-fms-extensions
$(CFLAGS
)
60 ALL_CFLAGS
:= -Wall
-Wshadow
-std
=c99
-pedantic
$(CFLAGS
)
63 ALL_CXXFLAGS
:= -fno-rtti
-fno-exceptions
$(CXXFLAGS
)
67 SDL_CPPFLAGS
:= $(shell sdl2-config
--cflags)
68 PNG_CPPFLAGS
:= $(shell libpng-config
--cflags)
70 ALL_CPPFLAGS
:= $(SDL_CPPFLAGS
) $(PNG_CPPFLAGS
) -Ishare
73 -DCONFIG_USER
=\"$(USERDIR
)\" \
74 -DCONFIG_DATA
=\"$(DATADIR
)\" \
75 -DCONFIG_LOCALE
=\"$(LOCALEDIR
)\"
77 ifeq ($(ENABLE_NLS
),0)
78 ALL_CPPFLAGS
+= -DENABLE_NLS
=0
80 ALL_CPPFLAGS
+= -DENABLE_NLS
=1
83 ifeq ($(ENABLE_HMD
),openhmd
)
84 ALL_CPPFLAGS
+= -DENABLE_HMD
=1
86 ifeq ($(ENABLE_HMD
),libovr
)
87 ALL_CPPFLAGS
+= -DENABLE_HMD
=1
90 ifeq ($(ENABLE_RADIANT_CONSOLE
),1)
91 ALL_CPPFLAGS
+= -DENABLE_RADIANT_CONSOLE
=1
94 ifeq ($(PLATFORM
),darwin
)
95 ALL_CPPFLAGS
+= $(patsubst %, -I
%, $(wildcard /opt
/local
/include \
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
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
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
122 ALL_CPPFLAGS
+= $(HMD_CPPFLAGS
)
124 #------------------------------------------------------------------------------
127 SDL_LIBS
:= $(shell sdl2-config
--libs
)
128 PNG_LIBS
:= $(shell libpng-config
--libs
)
130 ifeq ($(ENABLE_FS
),stdio
)
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.
143 ifeq ($(ENABLE_TILT
),wii
)
144 TILT_LIBS
:= -lcwiimote
-lbluetooth
146 ifeq ($(ENABLE_TILT
),loop
)
147 TILT_LIBS
:= -lusb-1.0
-lfreespace
153 ifeq ($(PLATFORM
),mingw
)
154 ifneq ($(ENABLE_NLS
),0)
159 OGL_LIBS
:= -lopengl32
162 ifeq ($(PLATFORM
),darwin
)
163 ifneq ($(ENABLE_NLS
),0)
168 OGL_LIBS
:= -framework OpenGL
171 BASE_LIBS
:= -ljpeg
$(PNG_LIBS
) $(FS_LIBS
) -lm
173 ifeq ($(PLATFORM
),darwin
)
174 BASE_LIBS
+= $(patsubst %, -L
%, $(wildcard /opt
/local
/lib \
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
190 #------------------------------------------------------------------------------
192 ifeq ($(PLATFORM
),mingw
)
196 MAPC_TARG
:= mapc
$(EXT
)
197 BALL_TARG
:= neverball
$(EXT
)
198 PUTT_TARG
:= neverputt
$(EXT
)
200 ifeq ($(PLATFORM
),mingw
)
201 MAPC
:= $(WINE
) .
/$(MAPC_TARG
)
203 MAPC
:= .
/$(MAPC_TARG
)
206 #------------------------------------------------------------------------------
213 share
/base_config.o \
239 share
/base_config.o \
306 share
/base_config.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
345 BALL_OBJS
+= share
/fs_physfs.o
346 PUTT_OBJS
+= share
/fs_physfs.o
347 MAPC_OBJS
+= share
/fs_physfs.o
350 ifeq ($(ENABLE_TILT
),wii
)
351 BALL_OBJS
+= share
/tilt_wii.o
353 ifeq ($(ENABLE_TILT
),loop
)
354 BALL_OBJS
+= share
/tilt_loop.o
356 BALL_OBJS
+= share
/tilt_null.o
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
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
368 BALL_OBJS
+= share
/hmd_null.o
369 PUTT_OBJS
+= share
/hmd_null.o
373 ifeq ($(PLATFORM
),mingw
)
374 BALL_OBJS
+= neverball.ico.o
375 PUTT_OBJS
+= neverputt.ico.o
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.
391 #------------------------------------------------------------------------------
394 $(CC
) $(ALL_CFLAGS
) $(ALL_CPPFLAGS
) -MM
-MP
-MF
$*.d
-MT
"$@" $<
395 $(CC
) $(ALL_CFLAGS
) $(ALL_CPPFLAGS
) -o
$@
-c
$<
398 $(CXX
) $(ALL_CXXFLAGS
) $(ALL_CPPFLAGS
) -MM
-MP
-MF
$*.d
-MT
"$@" $<
399 $(CXX
) $(ALL_CXXFLAGS
) $(ALL_CPPFLAGS
) -o
$@
-c
$<
401 %.sol
: %.map
$(MAPC_TARG
)
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
)
417 LINK
:= $(CC
) $(ALL_CFLAGS
)
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
438 ifneq ($(ENABLE_NLS
),0)
442 desktops
: $(DESKTOPS
)
445 $(RM
) $(BALL_TARG
) $(PUTT_TARG
) $(MAPC_TARG
)
446 find . \
( -name
'*.o' -o
-name
'*.d' \
) -delete
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
475 MAKENSIS_FLAGS
:= -DVERSION
=$(VERSION
) -DOUTFILE
=$(INSTALLER
)
489 TXT_DOCS
:= $(TEXT_DOCS
:%=%.txt
)
491 #------------------------------------------------------------------------------
496 $(INSTALLER
): install-dlls convert-text-files
all contrib
497 $(MAKENSIS
) $(MAKENSIS_FLAGS
) -nocd scripts
/neverball.nsi
499 $(INSTALLER
): LDFLAGS
:= -s
$(LDFLAGS
)
503 $(RM
) install-dlls.sh
*.dll
$(TXT_DOCS
)
504 find data
-name
"*.txt" -exec
$(FROMDOS
) {} \
;
505 $(MAKE
) -C contrib EXT
=$(EXT
) clean
507 #------------------------------------------------------------------------------
510 install-dlls
: install-dlls.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
) {} \
;
526 #------------------------------------------------------------------------------
530 $(MAKE
) -C contrib EXT
=$(EXT
)
532 #------------------------------------------------------------------------------
536 #------------------------------------------------------------------------------