xref: /OK3568_Linux_fs/buildroot/package/supertux/supertux.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1################################################################################
2#
3# supertux
4#
5################################################################################
6
7SUPERTUX_VERSION = 0.6.2
8SUPERTUX_SITE = https://github.com/SuperTux/supertux/releases/download/v$(SUPERTUX_VERSION)
9SUPERTUX_SOURCE = SuperTux-v$(SUPERTUX_VERSION)-Source.tar.gz
10
11# Supertux itself is GPL-3.0+, but it bundles a few libraries with different
12# licenses (sexp-cpp, squirrel, tinygettext) which are linked statically.
13SUPERTUX_LICENSE = GPL-3.0+ (code), CC-BY-SA-2.0, CC-BY-SA-3.0, CC-BY-SA-4.0, GPL-2.0+ (images music sounds)
14SUPERTUX_LICENSE_FILES = LICENSE.txt data/AUTHORS
15
16# Use bundled squirrel, tinygettext sexp-cpp packages which are hardcoded in
17# the CMake build system.
18SUPERTUX_DEPENDENCIES = host-pkgconf boost freetype libcurl libgl libglew \
19	libogg libpng libvorbis openal physfs sdl2 sdl2_image
20
21# CMAKE_BUILD_TYPE=Release: disable profiling code (-pg)
22# ENABLE_BOOST_STATIC_LIBS=OFF: use boost shared libraries since supertux
23# depends on !BR2_STATIC_LIBS and boost provide only shared libraries with
24# BR2_SHARED_LIBS.
25# ENABLE_OPENGL=ON: Can be disabled but will make SuperTux unplayable slow.
26# GLBINDING_ENABLED=OFF: use GLEW (default) instead of glbinding.
27# Install the game directly in /usr/bin and game data in /usr/share/supertux2.
28# Force using physfs.so from staging since the check on PHYSFS_getPrefDir symbol
29# in physfs.h (CHECK_SYMBOL_EXISTS) doesn't work.
30# ENABLE_OPENGLES2=OFF: Disable opengles2 for now.
31SUPERTUX_CONF_OPTS += \
32	-DCMAKE_BUILD_TYPE=Release \
33	-DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) -DGLEW_NO_GLU" \
34	-DENABLE_BOOST_STATIC_LIBS=OFF \
35	-DBUILD_DOCUMENTATION=OFF \
36	-DENABLE_OPENGL=ON \
37	-DGLBINDING_ENABLED=OFF \
38	-DINSTALL_SUBDIR_BIN="bin" \
39	-DINSTALL_SUBDIR_SHARE="share/supertux2" \
40	-DUSE_SYSTEM_PHYSFS=ON \
41	-DENABLE_OPENGLES2=OFF
42
43# Avoid incompatible posix_memalign declaration on x86 and x86_64 with
44# musl.
45# https://gcc.gnu.org/ml/gcc-patches/2015-05/msg01425.html
46ifeq ($(BR2_TOOLCHAIN_USES_MUSL):$(BR2_i386)$(BR2_x86_64),y:y)
47define SUPERTUX_REMOVE_PEDANTIC
48	$(SED) 's% -pedantic%%' $(@D)/CMakeLists.txt
49	$(SED) 's%CHECK_CXX_FLAG(pedantic)%%' $(@D)/external/tinygettext/CMakeLists.txt
50endef
51SUPERTUX_POST_PATCH_HOOKS += SUPERTUX_REMOVE_PEDANTIC
52endif
53
54# From https://bugs.debian.org/cgi-bin/bugreport.cgi/?bug=770670
55# "The problem lies within SDL_cpuinfo.h.  It includes altivec.h, which by
56# definition provides an unconditional vector, pixel and bool define in
57# standard-c++ mode.  In GNU-c++ mode this names are only defined
58# context-sensitive by cpp.  SDL_cpuinfo.h is included by SDL.h.
59# Including altivec.h makes arbitrary code break."
60#
61# Acording to a bug report in GCC [1]:
62# "You need to use -std=g++11 or undefine bool after the include of altivec.h
63# as context sensitive keywords is not part of the C++11 standard".
64# So use gnu++11 instead of c++11 only for altivec system.
65# [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58241#c3
66ifeq ($(BR2_POWERPC_CPU_HAS_ALTIVEC),y)
67define SUPERTUX_FIX_ALTIVEC_ISSUE
68	$(SED) 's%std=c++0x%std=gnu++0x%' $(@D)/external/tinygettext/CMakeLists.txt
69endef
70SUPERTUX_POST_PATCH_HOOKS += SUPERTUX_FIX_ALTIVEC_ISSUE
71endif
72
73$(eval $(cmake-package))
74