package/sdl2: disable altivec built-in function for PowerPC
PATCH v2 1/2 package/sdl2: disable altivec built-in function for PowerPC
As reported in this bug report [1], altivec support in SDL break arbitrary C++ code.
Issue reported by test-pkg script while testing supertux package:
error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
[1] https://bugs.debian.org/cgi-bin/bugreport.cgi/?bug=770670
--- package/sdl2/sdl2.mk | 10 ++++++++++ 1 file changed, 10 insertions(+)
package/sdl2/sdl2.mk +10 -0
@@ -23,6 +23,16 @@ SDL2_CONF_OPTS += \ # We must enable static build to get compilation successful. SDL2_CONF_OPTS += --enable-static +# From https://bugs.debian.org/cgi-bin/bugreport.cgi/?bug=770670 +# "The problem lies within SDL_cpuinfo.h. It includes altivec.h, which by +# definition provides an unconditional vector, pixel and bool define in +# standard-c++ mode. In GNU-c++ mode this names are only defined +# context-sensitive by cpp. SDL_cpuinfo.h is included by SDL.h. +# Including altivec.h makes arbitrary code break." +ifeq ($(BR2_POWERPC_CPU_HAS_ALTIVEC),y) +SDL2_CONF_OPTS += --disable-altivec +endif + ifeq ($(BR2_PACKAGE_HAS_UDEV),y) SDL2_DEPENDENCIES += udev SDL2_CONF_OPTS += --enable-libudev
Signature · 1 line
2.9.3
PATCH v2 2/2 package/supertux: new package
---
v2: update GCC minimal version to 4.8
Coding style checked with check-package script (v1) and build tested with test-pkg script.
--- DEVELOPERS | 1 + package/Config.in | 1 + package/supertux/Config.in | 37 +++++++++++++++++++++++++++++++ package/supertux/supertux.hash | 2 ++ package/supertux/supertux.mk | 49 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 90 insertions(+) create mode 100644 package/supertux/Config.in create mode 100644 package/supertux/supertux.hash create mode 100644 package/supertux/supertux.mk
DEVELOPERS +1 -0
@@ -1286,6 +1286,7 @@ F: package/lugaru/ F: package/mcelog/ F: package/openpowerlink/ F: package/stress-ng/ +F: package/supertux/ F: package/terminology/ F: package/upower/ F: package/xenomai/
package/Config.in +1 -0
@@ -229,6 +229,7 @@ menu "Games" source "package/rubix/Config.in" source "package/sl/Config.in" source "package/stella/Config.in" + source "package/supertux/Config.in" source "package/supertuxkart/Config.in" endmenu
package/supertux/Config.in new file +37 -0
@@ -0,0 +1,37 @@ +config BR2_PACKAGE_SUPERTUX + bool "supertux" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_HAS_LIBGL # libglew + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on BR2_PACKAGE_XORG7 # libglew, SDL2 OpenGL (GLX) + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 gcc attributes noreturn + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # openal + depends on BR2_USE_MMU # SDL2 OpenGL (GLX) + depends on !BR2_STATIC_LIBS # SDL2 + depends on BR2_USE_WCHAR # Boost + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_DATE_TIME + select BR2_PACKAGE_BOOST_FILESYSTEM + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_LIBGLEW + select BR2_PACKAGE_LIBGLU # GL/glu.h + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_LIBVORBIS + select BR2_PACKAGE_OPENAL + select BR2_PACKAGE_SDL2 + select BR2_PACKAGE_SDL2_IMAGE + select BR2_PACKAGE_SDL2_OPENGL + help + SuperTux is a free classic 2D jump'n run sidescroller game in + a style similar to the original Super Mario games covered + under the GNU GPL. + + http://supertux.github.io/ + +comment "supertux needs X11 and a toolchain w/ C++, OpenGL backend, gcc >= 4.8, NPTL, dynamic library, wchar" + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_PACKAGE_HAS_LIBGL || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + BR2_STATIC_LIBS || !BR2_USE_WCHAR
package/supertux/supertux.hash new file +2 -0
@@ -0,0 +1,2 @@ +# Locally calculated +sha256 c9dc3b42991ce5c5d0d0cb94e44c4ec2373ad09029940f0e92331e7e9ada0ac5 SuperTux-v0.5.1-Source.tar.gz
package/supertux/supertux.mk new file +49 -0
49 lines not on this page · raw message
Signature · 1 line
2.9.3
PATCH v2 2/2 package/supertux: new package
Hi All,
Le 01/03/2017 ? 00:24, Romain Naour a ?crit :
Quoted 2 lines
Signed-off-by Romain Naour <[email protected]>---
snip
package/supertux/supertux.mk line 16
Quoted 6 lines
package/supertux/supertux.mk new file +6
-0+# Most of the data subdirectory is licensed under CC-by-SA, see +# data/AUTHORS for a full list. +# Supertux itself is GPLv3+, but it bundles a few libraries with different +# licenses. PhysFS, sexp-cpp, squirrel, tinygettext. +SUPERTUX_LICENSE = GPLv3+, CC-BY-SA (images music sounds) +SUPERTUX_LICENSE_FILES = LICENSE.txt data/AUTHORS
data/AUTHORS provide a license for almost each data file, each license may be CC-BY-SA and GPL version 2 or later or CC-BY-SA 4.0 or CC-BY 3.0/CC-BY-SA 3.0/GPL 3.0 etc...
So It's not an exhaustive list of licenses. Should I list all licenses present in this file ?
package/supertux/supertux.mk line 22
Quoted 6 lines
package/supertux/supertux.mk new file +6
-0+ +# Use bundled squirrel, tinygettext sexp-cpp packages which are hardcoded in +# the CMake build system. Also use bundled PhysFS since there is no Buildroot +# package for it. +SUPERTUX_DEPENDENCIES = host-pkgconf boost libcurl libgl libglew libglu \ + libogg libvorbis openal sdl2 sdl2_image
I'm working on PhysFS package and see if it can be used by supertux. This is the only library that can be used as "system" library (i.e from staging).
Best regards,
Romain
PATCH v2 1/2 package/sdl2: disable altivec built-in function for PowerPC
In reply to Romain NaourQuoted 10 lines · Romain Naour
As reported in this bug report [1], altivec support in SDL break arbitrary C++ code.
Issue reported by test-pkg script while testing supertux package:
error: could not convert 'true' from 'bool' to '__vector(4)__boolint'[1] https://bugs.debian.org/cgi-bin/bugreport.cgi/?bug=770670
Signed-off-by Romain Naour <[email protected]>Cc Sam Bobroff <[email protected]>
Hi Romain,
If you want to keep alitvec support on you can probably work around this problem by using -std=gnu99 (which I used for mpv, see package/mpv/0002-fix-powerpc64-altivec.patch).
Cheers,
Sam.
Quoted 27 lines
--- package/sdl2/sdl2.mk | 10 ++++++++++ 1 file changed, 10 insertions(+)package/sdl2/sdl2.mk +10
-0@@ -23,6 +23,16 @@ SDL2_CONF_OPTS += \ # We must enable static build to get compilation successful. SDL2_CONF_OPTS += --enable-static +# From https://bugs.debian.org/cgi-bin/bugreport.cgi/?bug=770670 +# "The problem lies within SDL_cpuinfo.h. It includes altivec.h, which by +# definition provides an unconditional vector, pixel and bool define in +# standard-c++ mode. In GNU-c++ mode this names are only defined +# context-sensitive by cpp. SDL_cpuinfo.h is included by SDL.h. +# Including altivec.h makes arbitrary code break." +ifeq ($(BR2_POWERPC_CPU_HAS_ALTIVEC),y) +SDL2_CONF_OPTS += --disable-altivec +endif + ifeq ($(BR2_PACKAGE_HAS_UDEV),y) SDL2_DEPENDENCIES += udev SDL2_CONF_OPTS += --enable-libudevSignature · 1 line
2.9.3
PATCH v2 1/2 package/sdl2: disable altivec built-in function for PowerPC
Hi Sam,
Le 01/03/2017 ? 03:13, Sam Bobroff a ?crit :
Quoted 9 lines · Romain Naour
Quoted 8 lines
As reported in this bug report [1], altivec support in SDL break arbitrary C++ code.
Issue reported by test-pkg script while testing supertux package:
error: could not convert 'true' from 'bool' to '__vector(4)__boolint'[1] https://bugs.debian.org/cgi-bin/bugreport.cgi/?bug=770670
Quoted 8 lines
Quoted 2 lines
Signed-off-by Romain Naour <[email protected]>Cc Sam Bobroff <[email protected]>Hi Romain,
If you want to keep alitvec support on you can probably work around this problem by using -std=gnu99 (which I used for mpv, see
package/mpv/0002-fix-powerpc64-altivec.patch).
Thanks for the help!
But the error come from a C++ build :
In file included from output/build/supertux-0.5.1/external/tinygettext/src/dictionary_manager.cpp:30:0:
output/build/supertux-0.5.1/external/tinygettext/include/tinygettext/po_parser.hpp:50:96:
error: could not convert ?true? from ?bool? to ?__vector(4) __bool int?
POParser(const std::string& filename, std::istream& in_, Dictionary& dict_,
bool use_fuzzy = true);
What do you think about removing altivec.h from SDL_cpuinfo.h as suggested in the bug report ?
Otherwise, I'm not using a powerpc so we can keep altivec support disabled for now...
Best regards,
Romain
Quoted 32 lines
Cheers,
Sam.Quoted 27 lines
--- package/sdl2/sdl2.mk | 10 ++++++++++ 1 file changed, 10 insertions(+)package/sdl2/sdl2.mk +10
-0@@ -23,6 +23,16 @@ SDL2_CONF_OPTS += \ # We must enable static build to get compilation successful. SDL2_CONF_OPTS += --enable-static +# From https://bugs.debian.org/cgi-bin/bugreport.cgi/?bug=770670 +# "The problem lies within SDL_cpuinfo.h. It includes altivec.h, which by +# definition provides an unconditional vector, pixel and bool define in +# standard-c++ mode. In GNU-c++ mode this names are only defined +# context-sensitive by cpp. SDL_cpuinfo.h is included by SDL.h. +# Including altivec.h makes arbitrary code break." +ifeq ($(BR2_POWERPC_CPU_HAS_ALTIVEC),y) +SDL2_CONF_OPTS += --disable-altivec +endif + ifeq ($(BR2_PACKAGE_HAS_UDEV),y) SDL2_DEPENDENCIES += udev SDL2_CONF_OPTS += --enable-libudevSignature · 1 line
2.9.3
PATCH v2 1/2 package/sdl2: disable altivec built-in function for PowerPC
Quoted 31 lines · Romain Naour
Hi Sam,
Le 01/03/2017 ? 03:13, Sam Bobroff a ?crit :
Quoted 9 lines · Romain Naour
Quoted 8 lines
As reported in this bug report [1], altivec support in SDL break arbitrary C++ code.
Issue reported by test-pkg script while testing supertux package:
error: could not convert 'true' from 'bool' to '__vector(4)__boolint'[1] https://bugs.debian.org/cgi-bin/bugreport.cgi/?bug=770670
Quoted 8 lines
Quoted 2 lines
Signed-off-by Romain Naour <[email protected]>Cc Sam Bobroff <[email protected]>Hi Romain,
If you want to keep alitvec support on you can probably work around this problem by using -std=gnu99 (which I used for mpv, see
package/mpv/0002-fix-powerpc64-altivec.patch).Thanks for the help!
But the error come from a C++ build :
In file included from output/build/supertux-0.5.1/external/tinygettext/src/dictionary_manager.cpp:30:0:
output/build/supertux-0.5.1/external/tinygettext/include/tinygettext/po_parser.hpp:50:96:
error: could not convert ?true? from ?bool? to ?__vector(4)__boolint?
POParser(const std::string& filename, std::istream&in_, Dictionary&dict_,
booluse_fuzzy= true);
Quoted 8 lines
What do you think about removing
altivec.hfromSDL_cpuinfo.has suggested in the bug report ?Otherwise, I'm not using a powerpc so we can keep altivec support disabled for now...
Best regards,
Romain
Oh, I hadn't seen this with c++ before but I reproduced it easily when using -std=c++0x (as discussed in the bug report you linked).
Were you using that flag during your compile?
If you don't need c++0x, removing it might work around the problem but if you can't do that (or it doesn't work), and your problem is showing up in a non-altivec context (e.g. the code is expecting bool to be a normal bool) then I think you can #undef the re-defined keywords (the altivec header suggests that this is OK for C++). e.g.:
#include <altivec.h>
#undef bool
#undef vector
#undef pixel
Might work!
Cheers,
Sam.
PATCH v2 1/2 package/sdl2: disable altivec built-in function for PowerPC
Hi Sam,
Le 03/03/2017 ? 03:16, Sam Bobroff a ?crit :
Quoted 52 lines · Romain Naour
Quoted 31 lines
Hi Sam,
Le 01/03/2017 ? 03:13, Sam Bobroff a ?crit :
Quoted 9 lines · Romain Naour
Quoted 8 lines
As reported in this bug report [1], altivec support in SDL break arbitrary C++ code.
Issue reported by test-pkg script while testing supertux package:
error: could not convert 'true' from 'bool' to '__vector(4)__boolint'[1] https://bugs.debian.org/cgi-bin/bugreport.cgi/?bug=770670
Quoted 8 lines
Quoted 2 lines
Signed-off-by Romain Naour <[email protected]>Cc Sam Bobroff <[email protected]>Hi Romain,
If you want to keep alitvec support on you can probably work around this problem by using -std=gnu99 (which I used for mpv, see
package/mpv/0002-fix-powerpc64-altivec.patch).Thanks for the help!
But the error come from a C++ build :
In file included from output/build/supertux-0.5.1/external/tinygettext/src/dictionary_manager.cpp:30:0:
output/build/supertux-0.5.1/external/tinygettext/include/tinygettext/po_parser.hpp:50:96:
error: could not convert ?true? from ?bool? to ?__vector(4)__boolint?
POParser(const std::string& filename, std::istream&in_, Dictionary&dict_,
booluse_fuzzy= true);Quoted 8 lines
What do you think about removing
altivec.hfromSDL_cpuinfo.has suggested in the bug report ?Otherwise, I'm not using a powerpc so we can keep altivec support disabled for now...
Best regards,
RomainOh, I hadn't seen this with c++ before but I reproduced it easily when using -std=c++0x (as discussed in the bug report you linked).
Were you using that flag during your compile?
If you don't need c++0x, removing it might work around the problem but if you can't do that (or it doesn't work), and your problem is showing up in a non-altivec context (e.g. the code is expecting bool to be a normal bool) then I think you can #undef the re-defined keywords (the altivec header suggests that this is OK for C++). e.g.:
Quoted 6 lines
#include <
altivec.h>
#undef bool
#undef vector
#undef pixelMight work!
I believe it's a C++11 issue (-std=gnu++11 vs -std=c++11).
See the same issue has been fixed in stella package:
https://git.busybox.net/buildroot/commit/?id=0024465d8a7b51f7fc7c9e8581072695d869adca
I'll check if it work...
Best regards,
Romain
Quoted 4 lines
Cheers,
Sam.
Thomas Petazzoni
AppliedPATCH v2 1/2 package/sdl2: disable altivec built-in function for PowerPC
In reply to Romain NaourHello,
Quoted 6 lines · Romain Naour
As reported in this bug report [1], altivec support in SDL break arbitrary C++ code.
Issue reported by test-pkg script while testing supertux package:
error: could not convert 'true' from 'bool' to '__vector(4)__boolint'
Quoted 7 lines
[1] https://bugs.debian.org/cgi-bin/bugreport.cgi/?bug=770670
Signed-off-by Romain Naour <[email protected]>Cc Sam Bobroff <[email protected]>--- package/sdl2/sdl2.mk | 10 ++++++++++ 1 file changed, 10 insertions(+)
Applied to master, thanks.
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com