package/sdl2: Fix Raspberry Pi support for SDL2
PATCH 1/2 package/sdl2: Fix Raspberry Pi support for SDL2
Tweak build system to play well with Buildroot.
--- .../sdl2/0001-sdl2-rpi-video-buildroot-fix.patch | 90 ++++++++++++++++++++++ package/sdl2/sdl2.mk | 8 +- 2 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +90 -0
@@ -0,0 +1,90 @@ +From 76cb63afbe53c984c9734dc4f034c670791ca4d2 Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Sun, 14 Jan 2018 23:01:47 -0800 +Subject: [PATCH] sdl2: Get Raspberry Pi video working on Buildroot + +Signed-off-by: Guillermo A. Amaral <[email protected]> +--- + configure | 8 +++++++- + configure.in | 8 +++++++- + src/video/SDL_egl.c | 12 ++++++------ + 3 files changed, 20 insertions(+), 8 deletions(-) + +diff --git a/configure b/configure +index b622085..36e6623 100755 +--- a/configure ++++ b/configure +@@ -19488,6 +19488,9 @@ fi + if test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" ++ elif test x$VENDOR = xbuildroot; then ++ RPI_CFLAGS="-I${STAGING_DIR}/usr/include/interface/vcos/pthreads -I${STAGING_DIR}/usr/include/interface/vmcs_host/linux" ++ RPI_LDFLAGS="-L${STAGING_DIR}/usr/lib -lbcm_host -lvchostif" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" +@@ -23739,7 +23742,10 @@ case "$host" in + SUMMARY_video="${SUMMARY_video} android" + fi + ;; +- *-*-linux*) ARCH=linux ;; ++ *-*-linux*) ++ ARCH=linux ++ VENDOR=buildroot ++ ;; + *-*-uclinux*) ARCH=linux ;; + *-*-kfreebsd*-gnu) ARCH=kfreebsd-gnu ;; + *-*-knetbsd*-gnu) ARCH=knetbsd-gnu ;; +diff --git a/configure.in b/configure.in +index 5ac2130..daee88b 100644 +--- a/configure.in ++++ b/configure.in +@@ -1566,6 +1566,9 @@ AC_HELP_STRING([--enable-video-rpi], [use Raspberry Pi video driver [[default=ye + if test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" ++ elif test x$VENDOR = xbuildroot; then ++ RPI_CFLAGS="-I${STAGING_DIR}/usr/include/interface/vcos/pthreads -I${STAGING_DIR}/usr/include/interface/vmcs_host/linux" ++ RPI_LDFLAGS="-L${STAGING_DIR}/usr/lib -lbcm_host -lvchostif" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" +@@ -3260,7 +3263,10 @@ case "$host" in + SUMMARY_video="${SUMMARY_video} android" + fi + ;; +- *-*-linux*) ARCH=linux ;; ++ *-*-linux*) ++ ARCH=linux ++ VENDOR=buildroot ++ ;; + *-*-uclinux*) ARCH=linux ;; + *-*-kfreebsd*-gnu) ARCH=kfreebsd-gnu ;; + *-*-knetbsd*-gnu) ARCH=knetbsd-gnu ;; +diff --git a/src/video/SDL_egl.c b/src/video/SDL_egl.c +index 9ccc2c3..23a7f2d 100644 +--- a/src/video/SDL_egl.c ++++ b/src/video/SDL_egl.c +@@ -44,12 +44,12 @@ + + #if SDL_VIDEO_DRIVER_RPI + /* Raspbian places the OpenGL ES/EGL binaries in a non standard path */ +-#define DEFAULT_EGL "/opt/vc/lib/libbrcmEGL.so" +-#define DEFAULT_OGL_ES2 "/opt/vc/lib/libbrcmGLESv2.so" +-#define ALT_EGL "/opt/vc/lib/libEGL.so" +-#define ALT_OGL_ES2 "/opt/vc/lib/libGLESv2.so" +-#define DEFAULT_OGL_ES_PVR "/opt/vc/lib/libGLES_CM.so" +-#define DEFAULT_OGL_ES "/opt/vc/lib/libGLESv1_CM.so" ++#define DEFAULT_EGL "libbrcmEGL.so" ++#define DEFAULT_OGL_ES2 "libbrcmGLESv2.so" ++#define ALT_EGL "libEGL.so" ++#define ALT_OGL_ES2 "libGLESv2.so" ++#define DEFAULT_OGL_ES_PVR "libGLES_CM.so" ++#define DEFAULT_OGL_ES "libGLESv1_CM.so" + + #elif SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_VIVANTE + /* Android */ +-- +2.13.6 +
package/sdl2/sdl2.mk +7 -1
@@ -19,7 +19,6 @@ SDL2_CONF_OPTS += \ --disable-dbus \ --disable-pulseaudio \ --disable-video-wayland \ - --disable-video-rpi # We must enable static build to get compilation successful. SDL2_CONF_OPTS += --enable-static
@@ -39,6 +38,13 @@ else SDL2_CONF_OPTS += --disable-video-directfb endif +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +SDL2_DEPENDENCIES += rpi-userland +SDL2_CONF_OPTS += --enable-video-rpi +else +SDL2_CONF_OPTS += --disable-video-rpi +endif + # x-includes and x-libraries must be set for cross-compiling # By default x_includes and x_libraries contains unsafe paths. # (/usr/X11R6/include and /usr/X11R6/lib)
Signature · 1 line
2.13.6
PATCH 2/2 package/rpi-fbcp: Added package for Raspberry Pi
Raspberry Pi utility used to mirror primary framebuffer to secondary framebuffer.
--- package/Config.in | 1 + .../rpi-fbcp/0001-make-buildroot-friendly.patch | 35 ++++++++++++++++++++++ package/rpi-fbcp/Config.in | 13 ++++++++ package/rpi-fbcp/rpi-fbcp.mk | 11 +++++++ 4 files changed, 60 insertions(+) create mode 100644 package/rpi-fbcp/0001-make-buildroot-friendly.patch create mode 100644 package/rpi-fbcp/Config.in create mode 100644 package/rpi-fbcp/rpi-fbcp.mk
package/Config.in +1 -0
@@ -483,6 +483,7 @@ endmenu source "package/read-edid/Config.in" source "package/rng-tools/Config.in" source "package/rpi-userland/Config.in" + source "package/rpi-fbcp/Config.in" source "package/rs485conf/Config.in" source "package/rtl8188eu/Config.in" source "package/rtl8723bs/Config.in"
package/rpi-fbcp/0001-make-buildroot-friendly.patch new file +35 -0
@@ -0,0 +1,35 @@ +From 8218434aafd18f7a1f742bddeef10b8829d59f89 Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Sun, 14 Jan 2018 15:22:21 -0800 +Subject: [PATCH] Make build script more buildroot friendly + +Signed-off-by: Guillermo A. Amaral <[email protected]> +--- + CMakeLists.txt | 13 +++---------- + 1 file changed, 3 insertions(+), 10 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 6202553..367182c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,14 +1,7 @@ + cmake_minimum_required(VERSION 2.8) + +-SET(COMPILE_DEFINITIONS -Werror) +- +-include_directories(/opt/vc/include) +-include_directories(/opt/vc/include/interface/vcos/pthreads) +-include_directories(/opt/vc/include/interface/vmcs_host) +-include_directories(/opt/vc/include/interface/vmcs_host/linux) +- +-link_directories(/opt/vc/lib) +- + add_executable(fbcp main.c) + +-target_link_libraries(fbcp bcm_host) ++target_link_libraries(fbcp bcm_host vchostif) ++ ++install(TARGETS fbcp RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/sbin") +-- +2.13.6 +
package/rpi-fbcp/Config.in new file +13 -0
@@ -0,0 +1,13 @@ +config BR2_PACKAGE_RPI_FBCP + bool "rpi-fbcp" + depends on BR2_arm + depends on BR2_PACKAGE_RPI_USERLAND + help + Raspberry Pi utility. Used for mirror primary framebuffer to + secondary framebuffer. + + https://github.com/tasanakorn/rpi-fbcp + +comment "rpi-fbc needs rpi-userland" + depends on BR2_arm + depends on !BR2_PACKAGE_RPI_USERLAND
package/rpi-fbcp/rpi-fbcp.mk new file +11 -0
@@ -0,0 +1,11 @@ +################################################################################ +# +# rpi-fbcp +# +################################################################################ + +RPI_FBCP_VERSION = 8087a71d0330a078d91aa78656684ab5313616c6 +RPI_FBCP_SITE = $(call github,tasanakorn,rpi-fbcp,$(RPI_FBCP_VERSION)) +RPI_FBCP_DEPENDENCIES = rpi-userland + +$(eval $(cmake-package))
Signature · 1 line
2.13.6
PATCH 2/2 package/rpi-fbcp: Added package for Raspberry Pi
Hello,
Quoted 9 lines · Guillermo A. Amaral
Raspberry Pi utility used to mirror primary framebuffer to secondary framebuffer.
Signed-off-by Guillermo A. Amaral <[email protected]>--- package/Config.in | 1 + .../rpi-fbcp/0001-make-buildroot-friendly.patch | 35 ++++++++++++++++++++++ package/rpi-fbcp/Config.in | 13 ++++++++ package/rpi-fbcp/rpi-fbcp.mk | 11 +++++++
Could you add an entry in the DEVELOPERS file for this package?
package/rpi-fbcp/0001-make-buildroot-friendly.patch line 6
Quoted 12 lines
package/rpi-fbcp/0001-make-buildroot-friendly.patch new file +6
-0@@ -0,0 +1,35 @@ +From 8218434aafd18f7a1f742bddeef10b8829d59f89 Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Sun, 14 Jan 2018 15:22:21 -0800 +Subject: [PATCH] Make build script more buildroot friendly + +Signed-off-by: Guillermo A. Amaral <[email protected]>
Here as well, this Buildroot-specific patch is not nice.
Quoted 10 lines
package/rpi-fbcp/0001-make-buildroot-friendly.patch new file +10
-0+--- + CMakeLists.txt | 13 +++---------- + 1 file changed, 3 insertions(+), 10 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 6202553..367182c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,14 +1,7 @@ + cmake_minimum_required(VERSION 2.8)
package/rpi-fbcp/0001-make-buildroot-friendly.patch line 26
Quoted 10 lines
package/rpi-fbcp/0001-make-buildroot-friendly.patch new file +10
-0+ +-SET(COMPILE_DEFINITIONS -Werror) +- +-include_directories(/opt/vc/include) +-include_directories(/opt/vc/include/interface/vcos/pthreads) +-include_directories(/opt/vc/include/interface/vmcs_host) +-include_directories(/opt/vc/include/interface/vmcs_host/linux) +- +-link_directories(/opt/vc/lib) +-
What about using pkg-config again ?
Quoted 34 lines
package/rpi-fbcp/0001-make-buildroot-friendly.patch new file +9
-0+ add_executable(fbcp main.c) + +-target_link_libraries(fbcp bcm_host) ++target_link_libraries(fbcp bcm_host vchostif) ++ ++install(TARGETS fbcp RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/sbin") +-- +2.13.6 +package/rpi-fbcp/Config.in new file +13
-0@@ -0,0 +1,13 @@ +config BR2_PACKAGE_RPI_FBCP + bool "rpi-fbcp" + depends on BR2_arm + depends on BR2_PACKAGE_RPI_USERLAND + help + Raspberry Pi utility. Used for mirror primary framebuffer to + secondary framebuffer. + + https://github.com/tasanakorn/rpi-fbcp + +comment "rpi-fbc needs rpi-userland" + depends on BR2_arm + depends on !BR2_PACKAGE_RPI_USERLANDpackage/rpi-fbcp/rpi-fbcp.mk new file +0
-0
package/rpi-fbcp/rpi-fbcp.mk line 9
Quoted 9 lines
package/rpi-fbcp/rpi-fbcp.mk new file +9
-0@@ -0,0 +1,11 @@ +################################################################################ +# +# rpi-fbcp +# +################################################################################ + +RPI_FBCP_VERSION = 8087a71d0330a078d91aa78656684ab5313616c6 +RPI_FBCP_SITE = $(call github,tasanakorn,rpi-fbcp,$(RPI_FBCP_VERSION)) +RPI_FBCP_DEPENDENCIES = rpi-userland
The package upstream has no license information, which basically means you're not allowed to distribute it. A bit annoying, no?
Could you get in touch with the upstream developer to ask him/her to add license information. I do realize that this repository hasn't seen any update since 4 years, so there are some chances that the upstream developer doesn't answer. But really, shipping code that has no license is bad.
Thanks!
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
PATCH 2/2 package/rpi-fbcp: Added package for Raspberry Pi
Howdy,
I'll also update this patch too, thanks for taking a look.
I did try to contact the developer about a year ago (via GitHub) about it. No luck.
I'll try via social media, maybe I can get him to BSD or MIT it and be done with it.
Thanks again!
Quoted 113 lines · Thomas Petazzoni
Hello,
Quoted 9 lines · Guillermo A. Amaral
Raspberry Pi utility used to mirror primary framebuffer to secondary framebuffer.
Signed-off-by Guillermo A. Amaral <[email protected]>--- package/Config.in | 1 + .../rpi-fbcp/0001-make-buildroot-friendly.patch | 35 ++++++++++++++++++++++ package/rpi-fbcp/Config.in | 13 ++++++++ package/rpi-fbcp/rpi-fbcp.mk | 11 +++++++Could you add an entry in the DEVELOPERS file for this package?
package/rpi-fbcp/0001-make-buildroot-friendly.patch line 6
Quoted 12 lines
package/rpi-fbcp/0001-make-buildroot-friendly.patch new file +6
-0@@ -0,0 +1,35 @@ +From 8218434aafd18f7a1f742bddeef10b8829d59f89 Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Sun, 14 Jan 2018 15:22:21 -0800 +Subject: [PATCH] Make build script more buildroot friendly + +Signed-off-by: Guillermo A. Amaral <[email protected]>Here as well, this Buildroot-specific patch is not nice.
Quoted 10 lines
package/rpi-fbcp/0001-make-buildroot-friendly.patch new file +10
-0+--- + CMakeLists.txt | 13 +++---------- + 1 file changed, 3 insertions(+), 10 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 6202553..367182c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,14 +1,7 @@ + cmake_minimum_required(VERSION 2.8)package/rpi-fbcp/0001-make-buildroot-friendly.patch line 26
Quoted 10 lines
package/rpi-fbcp/0001-make-buildroot-friendly.patch new file +10
-0+ +-SET(COMPILE_DEFINITIONS -Werror) +- +-include_directories(/opt/vc/include) +-include_directories(/opt/vc/include/interface/vcos/pthreads) +-include_directories(/opt/vc/include/interface/vmcs_host) +-include_directories(/opt/vc/include/interface/vmcs_host/linux) +- +-link_directories(/opt/vc/lib) +-What about using pkg-config again ?
Quoted 34 lines
package/rpi-fbcp/0001-make-buildroot-friendly.patch new file +9
-0+ add_executable(fbcp main.c) + +-target_link_libraries(fbcp bcm_host) ++target_link_libraries(fbcp bcm_host vchostif) ++ ++install(TARGETS fbcp RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/sbin") +-- +2.13.6 +package/rpi-fbcp/Config.in new file +13
-0@@ -0,0 +1,13 @@ +config BR2_PACKAGE_RPI_FBCP + bool "rpi-fbcp" + depends on BR2_arm + depends on BR2_PACKAGE_RPI_USERLAND + help + Raspberry Pi utility. Used for mirror primary framebuffer to + secondary framebuffer. + + https://github.com/tasanakorn/rpi-fbcp + +comment "rpi-fbc needs rpi-userland" + depends on BR2_arm + depends on !BR2_PACKAGE_RPI_USERLANDpackage/rpi-fbcp/rpi-fbcp.mk new file +0
-0package/rpi-fbcp/rpi-fbcp.mk line 9
Quoted 9 lines
package/rpi-fbcp/rpi-fbcp.mk new file +9
-0@@ -0,0 +1,11 @@ +################################################################################ +# +# rpi-fbcp +# +################################################################################ + +RPI_FBCP_VERSION = 8087a71d0330a078d91aa78656684ab5313616c6 +RPI_FBCP_SITE = $(call github,tasanakorn,rpi-fbcp,$(RPI_FBCP_VERSION)) +RPI_FBCP_DEPENDENCIES = rpi-userlandThe package upstream has no license information, which basically means you're not allowed to distribute it. A bit annoying, no?
Could you get in touch with the upstream developer to ask him/her to add license information. I do realize that this repository hasn't seen any update since 4 years, so there are some chances that the upstream developer doesn't answer. But really, shipping code that has no license is bad.
Thanks!
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
Signature · 1 line
gamaral
PATCH 1/2 package/sdl2: Fix Raspberry Pi support for SDL2
In reply to Guillermo A. AmaralHello,
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch line 4
Quoted 10 lines · Guillermo A. Amaral
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +4
-0@@ -0,0 +1,90 @@ +From 76cb63afbe53c984c9734dc4f034c670791ca4d2 Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Sun, 14 Jan 2018 23:01:47 -0800 +Subject: [PATCH] sdl2: Get Raspberry Pi video working on Buildroot
It's not nice to have this specific to Buildroot. It shouldn't be that way, and having it specific to Buildroot means that the patch cannot be accepted upstream. See below for a suggestion on how to improve.
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch line 8
Quoted 1 line
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +1
-0+ configure | 8 +++++++-
Do you really need to patch the configure script? What about fixing just configure.in, and using AUTORECONF = YES ?
Quoted 8 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +8
-0+ configure.in | 8 +++++++- + src/video/SDL_egl.c | 12 ++++++------ + 3 files changed, 20 insertions(+), 8 deletions(-) + +diff --git a/configure.in b/configure.in +index 5ac2130..daee88b 100644 +--- a/configure.in ++++ b/configure.in
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch line 52
Quoted 10 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +10
-0+@@ -1566,6 +1566,9 @@ AC_HELP_STRING([--enable-video-rpi], [use Raspberry Pi video driver [[default=ye + if test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" ++ elif test x$VENDOR = xbuildroot; then ++ RPI_CFLAGS="-I${STAGING_DIR}/usr/include/interface/vcos/pthreads -I${STAGING_DIR}/usr/include/interface/vmcs_host/linux" ++ RPI_LDFLAGS="-L${STAGING_DIR}/usr/lib -lbcm_host -lvchostif" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host"
Here is a different suggestion. In the "else", do the following:
AC_PATH_PROG(PKG_CONFIG, pkg-config, no) if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host` RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host` else RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" fi
This should use pkg-config if available, and bcm_host is available as pkg-config module, and if not default to the hardcoded path in /opt/vc.
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch line 61
Quoted 9 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +9
-0+@@ -3260,7 +3263,10 @@ case "$host" in + SUMMARY_video="${SUMMARY_video} android" + fi + ;; +- *-*-linux*) ARCH=linux ;; ++ *-*-linux*) ++ ARCH=linux ++ VENDOR=buildroot ++ ;;
It would make this change unneeded.
Quoted 4 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +4
-0+ #if SDL_VIDEO_DRIVER_RPI + /* Raspbian places the OpenGL ES/EGL binaries in a non standard path */ +-#define DEFAULT_EGL "/opt/vc/lib/libbrcmEGL.so" +-#define DEFAULT_OGL_ES2 "/opt/vc/lib/libbrcmGLESv2.so"
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch line 84
Quoted 10 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +10
-0+-#define ALT_EGL "/opt/vc/lib/libEGL.so" +-#define ALT_OGL_ES2 "/opt/vc/lib/libGLESv2.so" +-#define DEFAULT_OGL_ES_PVR "/opt/vc/lib/libGLES_CM.so" +-#define DEFAULT_OGL_ES "/opt/vc/lib/libGLESv1_CM.so" ++#define DEFAULT_EGL "libbrcmEGL.so" ++#define DEFAULT_OGL_ES2 "libbrcmGLESv2.so" ++#define ALT_EGL "libEGL.so" ++#define ALT_OGL_ES2 "libGLESv2.so" ++#define DEFAULT_OGL_ES_PVR "libGLES_CM.so" ++#define DEFAULT_OGL_ES "libGLESv1_CM.so"
I am not totally sure how to solve this though. I think the easiest solution is for the configure script to fill in another variable, like RPI_LIB_DIR. It would be set to empty in the pkg-config case, assuming the libraries are in the right location, and set to /opt/vc/lib in the hardcoded case. Or for the pkg-config case you do:
RPI_LIB_DIR=`PKG_CONFIG_SYSROOT_DIR=/ $PKG_CONFIG --libs-only-L bcm_host | sed 's/^-L//'`
But I believe leaving it to empty is fine as well. Indeed dlopen() automatically searches in the default library paths, and if the library is not installed in the default location, it's up to the user to pass LD_LIBRARY_PATH.
Best regards,
Thomas Petazzoni
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
PATCH 1/2 package/sdl2: Fix Raspberry Pi support for SDL2
Hi Thomas,
Quoted 4 lines · Thomas Petazzoni
Hello,
On Mon, 15 Jan 2018 19:34:49 -0800, Guillermo A. Amaral wrote:
Quoted 14 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch line 4
Quoted 10 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +4
-0@@ -0,0 +1,90 @@ +From 76cb63afbe53c984c9734dc4f034c670791ca4d2 Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Sun, 14 Jan 2018 23:01:47 -0800 +Subject: [PATCH] sdl2: Get Raspberry Pi video working on BuildrootIt's not nice to have this specific to Buildroot. It shouldn't be that way, and having it specific to Buildroot means that the patch cannot be accepted upstream. See below for a suggestion on how to improve.
Agreed, I'll first try to upstream the changes to the project.
Quoted 4 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch line 8
Quoted 1 line
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +1
-0+ configure | 8 +++++++-Do you really need to patch the configure script? What about fixing just configure.in, and using AUTORECONF = YES ?
I was not sure if that was the right way to go, so I left that off and updated the configure script too just in case. I'll take that into account for any future submissions.
Quoted 30 lines
Quoted 8 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +8
-0+ configure.in | 8 +++++++- + src/video/SDL_egl.c | 12 ++++++------ + 3 files changed, 20 insertions(+), 8 deletions(-) + +diff --git a/configure.in b/configure.in +index 5ac2130..daee88b 100644 +--- a/configure.in ++++ b/configure.inpackage/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch line 52
Quoted 10 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +10
-0+@@ -1566,6 +1566,9 @@ AC_HELP_STRING([--enable-video-rpi], [use Raspberry Pi video driver [[default=ye + if test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" ++ elif test x$VENDOR = xbuildroot; then ++ RPI_CFLAGS="-I${STAGING_DIR}/usr/include/interface/vcos/pthreads -I${STAGING_DIR}/usr/include/interface/vmcs_host/linux" ++ RPI_LDFLAGS="-L${STAGING_DIR}/usr/lib -lbcm_host -lvchostif" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host"Here is a different suggestion. In the "else", do the following:
AC_PATH_PROG(PKG_CONFIG, pkg-config, no) if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host` RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host` else RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" fi
Quoted 2 lines
This should use pkg-config if available, and
bcm_hostis available as pkg-config module, and if not default to the hardcoded path in/opt/vc.
Oh that's pretty good, I totally forgot about BRs pkg-config. I'll try it out.
Quoted 33 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch line 61
Quoted 9 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +9
-0+@@ -3260,7 +3263,10 @@ case "$host" in + SUMMARY_video="${SUMMARY_video} android" + fi + ;; +- *-*-linux*) ARCH=linux ;; ++ *-*-linux*) ++ ARCH=linux ++ VENDOR=buildroot ++ ;;It would make this change unneeded.
Quoted 4 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +4
-0+ #if SDL_VIDEO_DRIVER_RPI + /* Raspbian places the OpenGL ES/EGL binaries in a non standard path */ +-#define DEFAULT_EGL "/opt/vc/lib/libbrcmEGL.so" +-#define DEFAULT_OGL_ES2 "/opt/vc/lib/libbrcmGLESv2.so"package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch line 84
Quoted 10 lines
package/sdl2/0001-sdl2-rpi-video-buildroot-fix.patch new file +10
-0+-#define ALT_EGL "/opt/vc/lib/libEGL.so" +-#define ALT_OGL_ES2 "/opt/vc/lib/libGLESv2.so" +-#define DEFAULT_OGL_ES_PVR "/opt/vc/lib/libGLES_CM.so" +-#define DEFAULT_OGL_ES "/opt/vc/lib/libGLESv1_CM.so" ++#define DEFAULT_EGL "libbrcmEGL.so" ++#define DEFAULT_OGL_ES2 "libbrcmGLESv2.so" ++#define ALT_EGL "libEGL.so" ++#define ALT_OGL_ES2 "libGLESv2.so" ++#define DEFAULT_OGL_ES_PVR "libGLES_CM.so" ++#define DEFAULT_OGL_ES "libGLESv1_CM.so"I am not totally sure how to solve this though. I think the easiest solution is for the configure script to fill in another variable, like
RPI_LIB_DIR. It would be set to empty in the pkg-config case, assuming the libraries are in the right location, and set to/opt/vc/libin the hardcoded case. Or for the pkg-config case you do:
Quoted 7 lines
RPI_LIB_DIR=`PKG_CONFIG_SYSROOT_DIR=/ $PKG_CONFIG --libs-only-L bcm_host | sed 's/^-L//'`But I believe leaving it to empty is fine as well. Indeed
dlopen()automatically searches in the default library paths, and if the library is not installed in the default location, it's up to the user to passLD_LIBRARY_PATH.
Right, sounds like a plan.
Thanks for reviewing the patch, I'll update it. I'll try to get upstream as well.
Signature · 1 line
gamaral
PATCH 1/1 package/sdl2: Fix Raspberry Pi support in package SDL2
Backported upstream patch which makes SDL2 more cross-compiler friendly.
--- .../sdl2/0001-make-cross-compiler-friendly.patch | 176 +++++++++++++++++++++ package/sdl2/sdl2.mk | 8 +- 2 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 package/sdl2/0001-make-cross-compiler-friendly.patch
package/sdl2/0001-make-cross-compiler-friendly.patch new file +176 -0
@@ -0,0 +1,176 @@ +From ca98276a3b806b06a019ba5784b075d5d371befd Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Tue, 16 Jan 2018 22:19:12 -0800 +Subject: [PATCH] Make rpi video cross-compiler friendly. + +* Stops using fixed path to find GLES/EGL libs. +* Tries pkg-config to locate bcm_host. + +Signed-off-by: Guillermo A. Amaral <[email protected]> +--- + cmake/sdlchecks.cmake | 13 ++++++++----- + configure | 46 +++++++++++++++++++++++++++++++++++++++++++++- + configure.in | 6 +++++- + src/video/SDL_egl.c | 29 +++++++++++++++++++++++------ + 4 files changed, 81 insertions(+), 13 deletions(-) + +diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake +index e2e89a2..5dde86c 100644 +--- a/cmake/sdlchecks.cmake ++++ b/cmake/sdlchecks.cmake +@@ -1127,15 +1127,18 @@ endmacro() + # - n/a + macro(CheckRPI) + if(VIDEO_RPI) +- set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) +- set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) +- set(VIDEO_RPI_LIBS bcm_host ) ++ pkg_check_modules(VIDEO_RPI bcm_host brcmegl) ++ if (NOT VIDEO_RPI_FOUND) ++ set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) ++ set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) ++ set(VIDEO_RPI_LIBRARIES bcm_host ) ++ endif() + listtostr(VIDEO_RPI_INCLUDE_DIRS VIDEO_RPI_INCLUDE_FLAGS "-I") + listtostr(VIDEO_RPI_LIBRARY_DIRS VIDEO_RPI_LIBRARY_FLAGS "-L") + + set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") +- set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBS}") ++ set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBRARIES}") + check_c_source_compiles(" + #include <bcm_host.h> + int main(int argc, char **argv) {}" HAVE_VIDEO_RPI) +@@ -1147,7 +1150,7 @@ macro(CheckRPI) + set(SDL_VIDEO_DRIVER_RPI 1) + file(GLOB VIDEO_RPI_SOURCES ${SDL2_SOURCE_DIR}/src/video/raspberry/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_RPI_SOURCES}) +- list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBS}) ++ list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBRARIES}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") + endif(SDL_VIDEO AND HAVE_VIDEO_RPI) + endif(VIDEO_RPI) +diff --git a/configure b/configure +index b622085..5e91d08 100755 +--- a/configure ++++ b/configure +@@ -19485,7 +19485,51 @@ else + fi + + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ # Extract the first word of "pkg-config", so it can be a program name with args. ++set dummy pkg-config; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_path_PKG_CONFIG+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ case $PKG_CONFIG in ++ [\\/]* | ?:[\\/]*) ++ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ++ ;; ++ *) ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ++ ;; ++esac ++fi ++PKG_CONFIG=$ac_cv_path_PKG_CONFIG ++if test -n "$PKG_CONFIG"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 ++$as_echo "$PKG_CONFIG" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then ++ RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host brcmegl` ++ RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host brcmegl` ++ elif test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else +diff --git a/configure.in b/configure.in +index 5ac2130..6a0b380 100644 +--- a/configure.in ++++ b/configure.in +@@ -1563,7 +1563,11 @@ CheckRPI() + AC_HELP_STRING([--enable-video-rpi], [use Raspberry Pi video driver [[default=yes]]]), + , enable_video_rpi=yes) + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ AC_PATH_PROG(PKG_CONFIG, pkg-config, no) ++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then ++ RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host brcmegl` ++ RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host brcmegl` ++ elif test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else +diff --git a/src/video/SDL_egl.c b/src/video/SDL_egl.c +index 9ccc2c3..08132b4 100644 +--- a/src/video/SDL_egl.c ++++ b/src/video/SDL_egl.c +@@ -44,12 +44,13 @@ + + #if SDL_VIDEO_DRIVER_RPI + /* Raspbian places the OpenGL ES/EGL binaries in a non standard path */ +-#define DEFAULT_EGL "/opt/vc/lib/libbrcmEGL.so" +-#define DEFAULT_OGL_ES2 "/opt/vc/lib/libbrcmGLESv2.so" +-#define ALT_EGL "/opt/vc/lib/libEGL.so" +-#define ALT_OGL_ES2 "/opt/vc/lib/libGLESv2.so" +-#define DEFAULT_OGL_ES_PVR "/opt/vc/lib/libGLES_CM.so" +-#define DEFAULT_OGL_ES "/opt/vc/lib/libGLESv1_CM.so" ++static const char g_rpi_opt_path[] = "/opt/vc/lib"; ++#define DEFAULT_EGL "libbrcmEGL.so" ++#define DEFAULT_OGL_ES2 "libbrcmGLESv2.so" ++#define ALT_EGL "libEGL.so" ++#define ALT_OGL_ES2 "libGLESv2.so" ++#define DEFAULT_OGL_ES_PVR "libGLES_CM.so" ++#define DEFAULT_OGL_ES "libGLESv1_CM.so" + + #elif SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_VIVANTE + /* Android */ +@@ -257,6 +258,22 @@ SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_displa + const char *d3dcompiler; + #endif + ++#if SDL_VIDEO_DRIVER_RPI ++ path = SDL_getenv("LD_LIBRARY_PATH"); ++ if (path) { ++ const int path_size = SDL_strlen(path) + 1 + sizeof(g_rpi_opt_path); ++ char *new_path = SDL_calloc(1, path_size); ++ strcat(new_path, path); ++ strcat(new_path, ":"); ++ strcat(new_path, g_rpi_opt_path); ++ SDL_setenv("LD_LIBRARY_PATH", new_path, 1); ++ SDL_free(new_path); ++ } else { ++ SDL_setenv("LD_LIBRARY_PATH", g_rpi_opt_path, 1); ++ } ++ path = NULL; ++#endif ++ + if (_this->egl_data) { + return SDL_SetError("OpenGL ES context already created"); + } +-- +2.13.6 +
package/sdl2/sdl2.mk +7 -1
@@ -19,7 +19,6 @@ SDL2_CONF_OPTS += \ --disable-dbus \ --disable-pulseaudio \ --disable-video-wayland \ - --disable-video-rpi # We must enable static build to get compilation successful. SDL2_CONF_OPTS += --enable-static
@@ -39,6 +38,13 @@ else SDL2_CONF_OPTS += --disable-video-directfb endif +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +SDL2_DEPENDENCIES += rpi-userland +SDL2_CONF_OPTS += --enable-video-rpi +else +SDL2_CONF_OPTS += --disable-video-rpi +endif + # x-includes and x-libraries must be set for cross-compiling # By default x_includes and x_libraries contains unsafe paths. # (/usr/X11R6/include and /usr/X11R6/lib)
Signature · 1 line
2.13.6
PATCH 1/1 package/sdl2: Fix Raspberry Pi support in package SDL2
Hi,
Just a little heads up. I did try AUTORECONF but it would fail to generate the configure script.
The upstream patch contains the configure diff as well, so I left well enough alone.
Cheers,
G
Quoted 219 lines · Guillermo A. Amaral
Backported upstream patch which makes SDL2 more cross-compiler friendly.
Signed-off-by Guillermo A. Amaral <[email protected]>--- .../sdl2/0001-make-cross-compiler-friendly.patch | 176 +++++++++++++++++++++ package/sdl2/sdl2.mk | 8 +- 2 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 package/sdl2/0001-make-cross-compiler-friendly.patchpackage/sdl2/0001-make-cross-compiler-friendly.patch new file +176
-0@@ -0,0 +1,176 @@ +From ca98276a3b806b06a019ba5784b075d5d371befd Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Tue, 16 Jan 2018 22:19:12 -0800 +Subject: [PATCH] Make rpi video cross-compiler friendly. + +* Stops using fixed path to find GLES/EGL libs. +* Tries pkg-config to locate bcm_host. + +Signed-off-by: Guillermo A. Amaral <[email protected]> +--- + cmake/sdlchecks.cmake | 13 ++++++++----- + configure | 46 +++++++++++++++++++++++++++++++++++++++++++++- + configure.in | 6 +++++- + src/video/SDL_egl.c | 29 +++++++++++++++++++++++------ + 4 files changed, 81 insertions(+), 13 deletions(-) + +diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake +index e2e89a2..5dde86c 100644 +--- a/cmake/sdlchecks.cmake ++++ b/cmake/sdlchecks.cmake +@@ -1127,15 +1127,18 @@ endmacro() + # - n/a + macro(CheckRPI) + if(VIDEO_RPI) +- set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) +- set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) +- set(VIDEO_RPI_LIBS bcm_host ) ++ pkg_check_modules(VIDEO_RPI bcm_host brcmegl) ++ if (NOT VIDEO_RPI_FOUND) ++ set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) ++ set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) ++ set(VIDEO_RPI_LIBRARIES bcm_host ) ++ endif() + listtostr(VIDEO_RPI_INCLUDE_DIRS VIDEO_RPI_INCLUDE_FLAGS "-I") + listtostr(VIDEO_RPI_LIBRARY_DIRS VIDEO_RPI_LIBRARY_FLAGS "-L") + + set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") +- set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBS}") ++ set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBRARIES}") + check_c_source_compiles(" + #include <bcm_host.h> + int main(int argc, char **argv) {}" HAVE_VIDEO_RPI) +@@ -1147,7 +1150,7 @@ macro(CheckRPI) + set(SDL_VIDEO_DRIVER_RPI 1) + file(GLOB VIDEO_RPI_SOURCES ${SDL2_SOURCE_DIR}/src/video/raspberry/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_RPI_SOURCES}) +- list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBS}) ++ list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBRARIES}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") + endif(SDL_VIDEO AND HAVE_VIDEO_RPI) + endif(VIDEO_RPI) +diff --git a/configure b/configure +index b622085..5e91d08 100755 +--- a/configure ++++ b/configure +@@ -19485,7 +19485,51 @@ else + fi + + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ # Extract the first word of "pkg-config", so it can be a program name with args. ++set dummy pkg-config; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_path_PKG_CONFIG+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ case $PKG_CONFIG in ++ [\\/]* | ?:[\\/]*) ++ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ++ ;; ++ *) ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ++ ;; ++esac ++fi ++PKG_CONFIG=$ac_cv_path_PKG_CONFIG ++if test -n "$PKG_CONFIG"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 ++$as_echo "$PKG_CONFIG" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then ++ RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host brcmegl` ++ RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host brcmegl` ++ elif test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else +diff --git a/configure.in b/configure.in +index 5ac2130..6a0b380 100644 +--- a/configure.in ++++ b/configure.in +@@ -1563,7 +1563,11 @@ CheckRPI() + AC_HELP_STRING([--enable-video-rpi], [use Raspberry Pi video driver [[default=yes]]]), + , enable_video_rpi=yes) + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ AC_PATH_PROG(PKG_CONFIG, pkg-config, no) ++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then ++ RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host brcmegl` ++ RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host brcmegl` ++ elif test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else +diff --git a/src/video/SDL_egl.c b/src/video/SDL_egl.c +index 9ccc2c3..08132b4 100644 +--- a/src/video/SDL_egl.c ++++ b/src/video/SDL_egl.c +@@ -44,12 +44,13 @@ + + #if SDL_VIDEO_DRIVER_RPI + /* Raspbian places the OpenGL ES/EGL binaries in a non standard path */ +-#define DEFAULT_EGL "/opt/vc/lib/libbrcmEGL.so" +-#define DEFAULT_OGL_ES2 "/opt/vc/lib/libbrcmGLESv2.so" +-#define ALT_EGL "/opt/vc/lib/libEGL.so" +-#define ALT_OGL_ES2 "/opt/vc/lib/libGLESv2.so" +-#define DEFAULT_OGL_ES_PVR "/opt/vc/lib/libGLES_CM.so" +-#define DEFAULT_OGL_ES "/opt/vc/lib/libGLESv1_CM.so" ++static const char g_rpi_opt_path[] = "/opt/vc/lib"; ++#define DEFAULT_EGL "libbrcmEGL.so" ++#define DEFAULT_OGL_ES2 "libbrcmGLESv2.so" ++#define ALT_EGL "libEGL.so" ++#define ALT_OGL_ES2 "libGLESv2.so" ++#define DEFAULT_OGL_ES_PVR "libGLES_CM.so" ++#define DEFAULT_OGL_ES "libGLESv1_CM.so" + + #elif SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_VIVANTE + /* Android */ +@@ -257,6 +258,22 @@ SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_displa + const char *d3dcompiler; + #endif + ++#if SDL_VIDEO_DRIVER_RPI ++ path = SDL_getenv("LD_LIBRARY_PATH"); ++ if (path) { ++ const int path_size = SDL_strlen(path) + 1 + sizeof(g_rpi_opt_path); ++ char *new_path = SDL_calloc(1, path_size); ++ strcat(new_path, path); ++ strcat(new_path, ":"); ++ strcat(new_path, g_rpi_opt_path); ++ SDL_setenv("LD_LIBRARY_PATH", new_path, 1); ++ SDL_free(new_path); ++ } else { ++ SDL_setenv("LD_LIBRARY_PATH", g_rpi_opt_path, 1); ++ } ++ path = NULL; ++#endif ++ + if (_this->egl_data) { + return SDL_SetError("OpenGL ES context already created"); + } +-- +2.13.6 +package/sdl2/sdl2.mk +7
-1@@ -19,7 +19,6 @@ SDL2_CONF_OPTS += \ --disable-dbus \ --disable-pulseaudio \ --disable-video-wayland \ - --disable-video-rpi # We must enable static build to get compilation successful. SDL2_CONF_OPTS += --enable-static@@ -39,6 +38,13 @@ else SDL2_CONF_OPTS += --disable-video-directfb endif +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +SDL2_DEPENDENCIES += rpi-userland +SDL2_CONF_OPTS += --enable-video-rpi +else +SDL2_CONF_OPTS += --disable-video-rpi +endif + # x-includes and x-libraries must be set for cross-compiling # By default x_includes and x_libraries contains unsafe paths. # (/usr/X11R6/include and /usr/X11R6/lib)Signature · 1 line
2.13.6
Signature · 1 line
gamaral
PATCH 1/1 package/sdl2: Fix Raspberry Pi support in package SDL2
In reply to Guillermo A. AmaralHello,
Thanks for respining! It looks much better, but there's still one thing I'm not sure is very good. See below.
Quoted 10 lines · Guillermo A. Amaral
++#if
SDL_VIDEO_DRIVER_RPI
++ path =SDL_getenv("LD_LIBRARY_PATH");
++ if (path) {++ const int path_size = SDL_strlen(path) + 1 + sizeof(g_rpi_opt_path); ++ char *new_path = SDL_calloc(1, path_size); ++ strcat(new_path, path); ++ strcat(new_path, ":"); ++ strcat(new_path, g_rpi_opt_path); ++ SDL_setenv("LD_LIBRARY_PATH", new_path, 1); ++ SDL_free(new_path);
Quoted 4 lines
++ } else {
++SDL_setenv("LD_LIBRARY_PATH", g_rpi_opt_path, 1);
++ }
++ path = NULL;
Yerk, upstream has accepted this? To me, it looks really terrible to set LD_LIBRARY_PATH from within a program. Is it really considered a good practice ?
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
PATCH 1/1 package/sdl2: Fix Raspberry Pi support in package SDL2
Hello everybody,
Quoted 20 lines · Thomas Petazzoni
Thanks for respining! It looks much better, but there's still one thing I'm not sure is very good. See below.
Quoted 10 lines · Guillermo A. Amaral
++#if
SDL_VIDEO_DRIVER_RPI
++ path =SDL_getenv("LD_LIBRARY_PATH");
++ if (path) {++ const int path_size = SDL_strlen(path) + 1 + sizeof(g_rpi_opt_path); ++ char *new_path = SDL_calloc(1, path_size); ++ strcat(new_path, path); ++ strcat(new_path, ":"); ++ strcat(new_path, g_rpi_opt_path); ++ SDL_setenv("LD_LIBRARY_PATH", new_path, 1); ++ SDL_free(new_path);Quoted 4 lines
++ } else {
++SDL_setenv("LD_LIBRARY_PATH", g_rpi_opt_path, 1);
++ }
++ path = NULL;
Quoted 3 lines
Yerk, upstream has accepted this? To me, it looks really terrible to set
LD_LIBRARY_PATHfrom within a program. Is it really considered a good practice ?
Historically in WebKitGTK+ we have had our share of issues with environment variables, mainly due to ?setenv()? not being thread-safe: the only case in which it does really work is at the very beginning of program execution, before any threads or secondary processes are started. Otherwise it's easy to shoot oneself on the foot and end up with threads/processes that ?see? different values for the same environment variable.
Provided that the patch is adding to ?LD_LIBRARY_PATH?, maybe one option could be using ?patchelf? to add the path to the DT_RUNPATH entry in the ELF header of ?libSDL2.so? in a post-build (or post-install?) hook. Or, if possible, arrange to pass the needed linker flags to get the path added there.
Or, even better, add ?/opt/vc/lib? in DT_RUNPATH when the RPi VideoCore libraries are installed into ?/opt/vc? ? somehow that sounds more correct in my head. WDYT?
Cheers,
--
Adri?n ?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20180118/25b5f162/attachment.asc>
PATCH 1/1 package/sdl2: Fix Raspberry Pi support in package SDL2
Hello,
Quoted 7 lines · Adrian Perez de Castro
Historically in WebKitGTK+ we have had our share of issues with environment variables, mainly due to ?setenv()? not being thread-safe: the only case in which it does really work is at the very beginning of program execution, before any threads or secondary processes are started. Otherwise it's easy to shoot oneself on the foot and end up with threads/processes that ?see? different values for the same environment variable.
Quoted 8 lines
Provided that the patch is adding to ?LD_LIBRARY_PATH?, maybe one option could be using ?patchelf? to add the path to the
DT_RUNPATHentry in the ELF header of ?libSDL2.so? in a post-build (or post-install?) hook. Or, if possible, arrange to pass the needed linker flags to get the path added there.Or, even better, add ?/opt/vc/lib? in
DT_RUNPATHwhen the RPi VideoCore libraries are installed into ?/opt/vc? ? somehow that sounds more correct in my head. WDYT?
Yes, I agree it would be much better to add a -Wl,-rpath,/opt/vc/lib to the LDFLAGS if the libraries are in /opt/vc/lib.
Best regards,
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
PATCH 1/1 package/sdl2: Fix Raspberry Pi support in package SDL2
Quoted 16 lines · Thomas Petazzoni
Hello,
Quoted 12 lines · Adrian Perez de Castro
Historically in WebKitGTK+ we have had our share of issues with environment variables, mainly due to ?setenv()? not being thread-safe: the only case in which it does really work is at the very beginning of program execution, before any threads or secondary processes are started. Otherwise it's easy to shoot oneself on the foot and end up with threads/processes that ?see? different values for the same environment variable.
Provided that the patch is adding to ?LD_LIBRARY_PATH?, maybe one option could be using ?patchelf? to add the path to the
DT_RUNPATHentry in the ELF header of ?libSDL2.so? in a post-build (or post-install?) hook. Or, if possible, arrange to pass the needed linker flags to get the path added there.
Quoted 7 lines
Quoted 3 lines
Or, even better, add ?/opt/vc/lib? in
DT_RUNPATHwhen the RPi VideoCore libraries are installed into ?/opt/vc? ? somehow that sounds more correct in my head. WDYT?Yes, I agree it would be much better to add a -Wl,-rpath,/opt/vc/lib to the LDFLAGS if the libraries are in
/opt/vc/lib.
After 6-7 years, I hoped that darn path wouldn't be an issue anymore. If only Raspbian and friends would all add /opt/vc/lib to their ld.so.conf...
Anyway, I'll try the rpath approach, using LD_LIBRARY_PATH did hurt a little, but at the moment it looked like the lesser of two evils; They already added in another workaround for more library locations for the RPi and it's starting to look even more like a hodgepodge.
Cheers,
G
Signature · 1 line
gamaral
PATCH 1/1 package/sdl2: Fix Raspberry Pi support in package SDL2
Hello,
Quoted 11 lines · Guillermo A. Amaral
Quoted 2 lines
Yes, I agree it would be much better to add a -Wl,-rpath,/opt/vc/lib to the LDFLAGS if the libraries are in
/opt/vc/lib.After 6-7 years, I hoped that darn path wouldn't be an issue anymore. If only Raspbian and friends would all add
/opt/vc/libto their ld.so.conf...Anyway, I'll try the rpath approach, using
LD_LIBRARY_PATHdid hurt a little, but at the moment it looked like the lesser of two evils; They already added in another workaround for more library locations for the RPi and it's starting to look even more like a hodgepodge.
I would be the SDL2 upstream developers, I would just tell the RPi users to add /opt/vc/lib to /etc/ld.so.conf, if they really want to add libraries in this non-standard location.
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
PATCH 1/1 package/sdl2: Fix Raspberry Pi support for SDL2
Tweak build system to play well with Buildroot.
--- .../sdl2/0001-make-cross-compiler-friendly.patch | 167 +++++++++++++++++++++ package/sdl2/sdl2.mk | 8 +- 2 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 package/sdl2/0001-make-cross-compiler-friendly.patch
package/sdl2/0001-make-cross-compiler-friendly.patch new file +167 -0
@@ -0,0 +1,167 @@ +From 4cbd2fbfcbfe94b5826907f59ee963c69860e522 Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Thu, 18 Jan 2018 09:23:58 -0800 +Subject: [PATCH] Make rpi video cross-compiler friendly. + +* Stops using fixed path to find GLES/EGL libs. +* Tries pkg-config to locate bcm_host. + +Signed-off-by: Guillermo A. Amaral <[email protected]> +--- + cmake/sdlchecks.cmake | 15 ++++++++++----- + configure | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- + configure.in | 8 ++++++-- + src/video/SDL_egl.c | 12 ++++++------ + 4 files changed, 68 insertions(+), 15 deletions(-) + +diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake +index e2e89a2..fc715f1 100644 +--- a/cmake/sdlchecks.cmake ++++ b/cmake/sdlchecks.cmake +@@ -1127,15 +1127,19 @@ endmacro() + # - n/a + macro(CheckRPI) + if(VIDEO_RPI) +- set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) +- set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) +- set(VIDEO_RPI_LIBS bcm_host ) ++ pkg_check_modules(VIDEO_RPI bcm_host brcmegl) ++ if (NOT VIDEO_RPI_FOUND) ++ set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) ++ set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) ++ set(VIDEO_RPI_LIBRARIES bcm_host ) ++ set(VIDEO_RPI_LDFLAGS "-Wl,-rpath,/opt/vc/lib") ++ endif() + listtostr(VIDEO_RPI_INCLUDE_DIRS VIDEO_RPI_INCLUDE_FLAGS "-I") + listtostr(VIDEO_RPI_LIBRARY_DIRS VIDEO_RPI_LIBRARY_FLAGS "-L") + + set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") +- set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBS}") ++ set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBRARIES}") + check_c_source_compiles(" + #include <bcm_host.h> + int main(int argc, char **argv) {}" HAVE_VIDEO_RPI) +@@ -1147,8 +1151,9 @@ macro(CheckRPI) + set(SDL_VIDEO_DRIVER_RPI 1) + file(GLOB VIDEO_RPI_SOURCES ${SDL2_SOURCE_DIR}/src/video/raspberry/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_RPI_SOURCES}) +- list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBS}) ++ list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBRARIES}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") ++ list(APPEND EXTRA_LDFLAGS ${VIDEO_RPI_LDFLAGS}) + endif(SDL_VIDEO AND HAVE_VIDEO_RPI) + endif(VIDEO_RPI) + endmacro(CheckRPI) +diff --git a/configure b/configure +index b622085..d42a22a 100755 +--- a/configure ++++ b/configure +@@ -19485,12 +19485,56 @@ else + fi + + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ # Extract the first word of "pkg-config", so it can be a program name with args. ++set dummy pkg-config; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_path_PKG_CONFIG+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ case $PKG_CONFIG in ++ [\\/]* | ?:[\\/]*) ++ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ++ ;; ++ *) ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ++ ;; ++esac ++fi ++PKG_CONFIG=$ac_cv_path_PKG_CONFIG ++if test -n "$PKG_CONFIG"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 ++$as_echo "$PKG_CONFIG" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then ++ RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host brcmegl` ++ RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host brcmegl` ++ elif test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" +- RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" ++ RPI_LDFLAGS="-Wl,-rpath,/opt/vc/lib -L/opt/vc/lib -lbcm_host" + fi + + # Save the original compiler flags and libraries +diff --git a/configure.in b/configure.in +index 5ac2130..450bf62 100644 +--- a/configure.in ++++ b/configure.in +@@ -1563,12 +1563,16 @@ CheckRPI() + AC_HELP_STRING([--enable-video-rpi], [use Raspberry Pi video driver [[default=yes]]]), + , enable_video_rpi=yes) + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ AC_PATH_PROG(PKG_CONFIG, pkg-config, no) ++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then ++ RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host brcmegl` ++ RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host brcmegl` ++ elif test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" +- RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" ++ RPI_LDFLAGS="-Wl,-rpath,/opt/vc/lib -L/opt/vc/lib -lbcm_host" + fi + + # Save the original compiler flags and libraries +diff --git a/src/video/SDL_egl.c b/src/video/SDL_egl.c +index 9ccc2c3..23a7f2d 100644 +--- a/src/video/SDL_egl.c ++++ b/src/video/SDL_egl.c +@@ -44,12 +44,12 @@ + + #if SDL_VIDEO_DRIVER_RPI + /* Raspbian places the OpenGL ES/EGL binaries in a non standard path */ +-#define DEFAULT_EGL "/opt/vc/lib/libbrcmEGL.so" +-#define DEFAULT_OGL_ES2 "/opt/vc/lib/libbrcmGLESv2.so" +-#define ALT_EGL "/opt/vc/lib/libEGL.so" +-#define ALT_OGL_ES2 "/opt/vc/lib/libGLESv2.so" +-#define DEFAULT_OGL_ES_PVR "/opt/vc/lib/libGLES_CM.so" +-#define DEFAULT_OGL_ES "/opt/vc/lib/libGLESv1_CM.so" ++#define DEFAULT_EGL "libbrcmEGL.so" ++#define DEFAULT_OGL_ES2 "libbrcmGLESv2.so" ++#define ALT_EGL "libEGL.so" ++#define ALT_OGL_ES2 "libGLESv2.so" ++#define DEFAULT_OGL_ES_PVR "libGLES_CM.so" ++#define DEFAULT_OGL_ES "libGLESv1_CM.so" + + #elif SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_VIVANTE + /* Android */ +-- +2.13.6 +
package/sdl2/sdl2.mk +7 -1
@@ -19,7 +19,6 @@ SDL2_CONF_OPTS += \ --disable-dbus \ --disable-pulseaudio \ --disable-video-wayland \ - --disable-video-rpi # We must enable static build to get compilation successful. SDL2_CONF_OPTS += --enable-static
@@ -39,6 +38,13 @@ else SDL2_CONF_OPTS += --disable-video-directfb endif +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +SDL2_DEPENDENCIES += rpi-userland +SDL2_CONF_OPTS += --enable-video-rpi +else +SDL2_CONF_OPTS += --disable-video-rpi +endif + # x-includes and x-libraries must be set for cross-compiling # By default x_includes and x_libraries contains unsafe paths. # (/usr/X11R6/include and /usr/X11R6/lib)
Signature · 1 line
2.13.6
PATCH 1/1 package/sdl2: Fix Raspberry Pi support for SDL2
Howdy,
Tested and it works like a charm!
Thanks for the idea Adrian. :-)
Cheers,
G
Quoted 210 lines · Guillermo A. Amaral
Tweak build system to play well with Buildroot.
Signed-off-by Guillermo A. Amaral <[email protected]>--- .../sdl2/0001-make-cross-compiler-friendly.patch | 167 +++++++++++++++++++++ package/sdl2/sdl2.mk | 8 +- 2 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 package/sdl2/0001-make-cross-compiler-friendly.patchpackage/sdl2/0001-make-cross-compiler-friendly.patch new file +167
-0@@ -0,0 +1,167 @@ +From 4cbd2fbfcbfe94b5826907f59ee963c69860e522 Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Thu, 18 Jan 2018 09:23:58 -0800 +Subject: [PATCH] Make rpi video cross-compiler friendly. + +* Stops using fixed path to find GLES/EGL libs. +* Tries pkg-config to locate bcm_host. + +Signed-off-by: Guillermo A. Amaral <[email protected]> +--- + cmake/sdlchecks.cmake | 15 ++++++++++----- + configure | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- + configure.in | 8 ++++++-- + src/video/SDL_egl.c | 12 ++++++------ + 4 files changed, 68 insertions(+), 15 deletions(-) + +diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake +index e2e89a2..fc715f1 100644 +--- a/cmake/sdlchecks.cmake ++++ b/cmake/sdlchecks.cmake +@@ -1127,15 +1127,19 @@ endmacro() + # - n/a + macro(CheckRPI) + if(VIDEO_RPI) +- set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) +- set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) +- set(VIDEO_RPI_LIBS bcm_host ) ++ pkg_check_modules(VIDEO_RPI bcm_host brcmegl) ++ if (NOT VIDEO_RPI_FOUND) ++ set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) ++ set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) ++ set(VIDEO_RPI_LIBRARIES bcm_host ) ++ set(VIDEO_RPI_LDFLAGS "-Wl,-rpath,/opt/vc/lib") ++ endif() + listtostr(VIDEO_RPI_INCLUDE_DIRS VIDEO_RPI_INCLUDE_FLAGS "-I") + listtostr(VIDEO_RPI_LIBRARY_DIRS VIDEO_RPI_LIBRARY_FLAGS "-L") + + set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") +- set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBS}") ++ set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBRARIES}") + check_c_source_compiles(" + #include <bcm_host.h> + int main(int argc, char **argv) {}" HAVE_VIDEO_RPI) +@@ -1147,8 +1151,9 @@ macro(CheckRPI) + set(SDL_VIDEO_DRIVER_RPI 1) + file(GLOB VIDEO_RPI_SOURCES ${SDL2_SOURCE_DIR}/src/video/raspberry/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_RPI_SOURCES}) +- list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBS}) ++ list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBRARIES}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") ++ list(APPEND EXTRA_LDFLAGS ${VIDEO_RPI_LDFLAGS}) + endif(SDL_VIDEO AND HAVE_VIDEO_RPI) + endif(VIDEO_RPI) + endmacro(CheckRPI) +diff --git a/configure b/configure +index b622085..d42a22a 100755 +--- a/configure ++++ b/configure +@@ -19485,12 +19485,56 @@ else + fi + + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ # Extract the first word of "pkg-config", so it can be a program name with args. ++set dummy pkg-config; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_path_PKG_CONFIG+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ case $PKG_CONFIG in ++ [\\/]* | ?:[\\/]*) ++ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ++ ;; ++ *) ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ++ ;; ++esac ++fi ++PKG_CONFIG=$ac_cv_path_PKG_CONFIG ++if test -n "$PKG_CONFIG"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 ++$as_echo "$PKG_CONFIG" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then ++ RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host brcmegl` ++ RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host brcmegl` ++ elif test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" +- RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" ++ RPI_LDFLAGS="-Wl,-rpath,/opt/vc/lib -L/opt/vc/lib -lbcm_host" + fi + + # Save the original compiler flags and libraries +diff --git a/configure.in b/configure.in +index 5ac2130..450bf62 100644 +--- a/configure.in ++++ b/configure.in +@@ -1563,12 +1563,16 @@ CheckRPI() + AC_HELP_STRING([--enable-video-rpi], [use Raspberry Pi video driver [[default=yes]]]), + , enable_video_rpi=yes) + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ AC_PATH_PROG(PKG_CONFIG, pkg-config, no) ++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then ++ RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host brcmegl` ++ RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host brcmegl` ++ elif test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" +- RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" ++ RPI_LDFLAGS="-Wl,-rpath,/opt/vc/lib -L/opt/vc/lib -lbcm_host" + fi + + # Save the original compiler flags and libraries +diff --git a/src/video/SDL_egl.c b/src/video/SDL_egl.c +index 9ccc2c3..23a7f2d 100644 +--- a/src/video/SDL_egl.c ++++ b/src/video/SDL_egl.c +@@ -44,12 +44,12 @@ + + #if SDL_VIDEO_DRIVER_RPI + /* Raspbian places the OpenGL ES/EGL binaries in a non standard path */ +-#define DEFAULT_EGL "/opt/vc/lib/libbrcmEGL.so" +-#define DEFAULT_OGL_ES2 "/opt/vc/lib/libbrcmGLESv2.so" +-#define ALT_EGL "/opt/vc/lib/libEGL.so" +-#define ALT_OGL_ES2 "/opt/vc/lib/libGLESv2.so" +-#define DEFAULT_OGL_ES_PVR "/opt/vc/lib/libGLES_CM.so" +-#define DEFAULT_OGL_ES "/opt/vc/lib/libGLESv1_CM.so" ++#define DEFAULT_EGL "libbrcmEGL.so" ++#define DEFAULT_OGL_ES2 "libbrcmGLESv2.so" ++#define ALT_EGL "libEGL.so" ++#define ALT_OGL_ES2 "libGLESv2.so" ++#define DEFAULT_OGL_ES_PVR "libGLES_CM.so" ++#define DEFAULT_OGL_ES "libGLESv1_CM.so" + + #elif SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_VIVANTE + /* Android */ +-- +2.13.6 +package/sdl2/sdl2.mk +7
-1@@ -19,7 +19,6 @@ SDL2_CONF_OPTS += \ --disable-dbus \ --disable-pulseaudio \ --disable-video-wayland \ - --disable-video-rpi # We must enable static build to get compilation successful. SDL2_CONF_OPTS += --enable-static@@ -39,6 +38,13 @@ else SDL2_CONF_OPTS += --disable-video-directfb endif +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +SDL2_DEPENDENCIES += rpi-userland +SDL2_CONF_OPTS += --enable-video-rpi +else +SDL2_CONF_OPTS += --disable-video-rpi +endif + # x-includes and x-libraries must be set for cross-compiling # By default x_includes and x_libraries contains unsafe paths. # (/usr/X11R6/include and /usr/X11R6/lib)Signature · 1 line
2.13.6
Signature · 1 line
gamaral
Thomas Petazzoni
AppliedPATCH 1/1 package/sdl2: Fix Raspberry Pi support for SDL2
In reply to Guillermo A. AmaralHello,
Quoted 8 lines · Guillermo A. Amaral
Tweak build system to play well with Buildroot.
Signed-off-by Guillermo A. Amaral <[email protected]>--- .../sdl2/0001-make-cross-compiler-friendly.patch | 167 +++++++++++++++++++++ package/sdl2/sdl2.mk | 8 +- 2 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 package/sdl2/0001-make-cross-compiler-friendly.patch
Applied to master, thanks. Please submit the patch upstream if not already done. Thanks!
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH 1/1 package/sdl2: Fix Raspberry Pi support for SDL2
Hi,
Quoted 12 lines · Thomas Petazzoni
Hello,
Quoted 8 lines · Guillermo A. Amaral
Tweak build system to play well with Buildroot.
Signed-off-by Guillermo A. Amaral <[email protected]>--- .../sdl2/0001-make-cross-compiler-friendly.patch | 167 +++++++++++++++++++++ package/sdl2/sdl2.mk | 8 +- 2 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 package/sdl2/0001-make-cross-compiler-friendly.patch
Quoted 2 lines
Applied to master, thanks. Please submit the patch upstream if not already done. Thanks!
Already submitted.
Thanks again for taking the time to review,
G
Quoted 5 lines
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
Signature · 1 line
gamaral
PATCH 1/1 package/sdl2: Fix Raspberry Pi support for SDL2
In reply to Guillermo A. AmaralGuillermo, All,
Quoted 187 lines · Guillermo A. Amaral
Tweak build system to play well with Buildroot.
Signed-off-by Guillermo A. Amaral <[email protected]>--- .../sdl2/0001-make-cross-compiler-friendly.patch | 167 +++++++++++++++++++++ package/sdl2/sdl2.mk | 8 +- 2 files changed, 174 insertions(+), 1 deletion(-)create mode 100644
package/sdl2/0001-make-cross-compiler-friendly.patchpackage/sdl2/0001-make-cross-compiler-friendly.patch new file +167
-0@@ -0,0 +1,167 @@ +From 4cbd2fbfcbfe94b5826907f59ee963c69860e522 Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Thu, 18 Jan 2018 09:23:58 -0800 +Subject: [PATCH] Make rpi video cross-compiler friendly. + +* Stops using fixed path to find GLES/EGL libs. +* Tries pkg-config to locate bcm_host. + +Signed-off-by: Guillermo A. Amaral <[email protected]> +--- + cmake/sdlchecks.cmake | 15 ++++++++++----- + configure | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- + configure.in | 8 ++++++-- + src/video/SDL_egl.c | 12 ++++++------ + 4 files changed, 68 insertions(+), 15 deletions(-) + +diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake +index e2e89a2..fc715f1 100644 +--- a/cmake/sdlchecks.cmake ++++ b/cmake/sdlchecks.cmake +@@ -1127,15 +1127,19 @@ endmacro() + # - n/a + macro(CheckRPI) + if(VIDEO_RPI) +- set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) +- set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) +- set(VIDEO_RPI_LIBS bcm_host ) ++ pkg_check_modules(VIDEO_RPI bcm_host brcmegl) ++ if (NOT VIDEO_RPI_FOUND) ++ set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) ++ set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) ++ set(VIDEO_RPI_LIBRARIES bcm_host ) ++ set(VIDEO_RPI_LDFLAGS "-Wl,-rpath,/opt/vc/lib") ++ endif() + listtostr(VIDEO_RPI_INCLUDE_DIRS VIDEO_RPI_INCLUDE_FLAGS "-I") + listtostr(VIDEO_RPI_LIBRARY_DIRS VIDEO_RPI_LIBRARY_FLAGS "-L") + + set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") +- set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBS}") ++ set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBRARIES}") + check_c_source_compiles(" + #include <bcm_host.h> + int main(int argc, char **argv) {}" HAVE_VIDEO_RPI) +@@ -1147,8 +1151,9 @@ macro(CheckRPI) + set(SDL_VIDEO_DRIVER_RPI 1) + file(GLOB VIDEO_RPI_SOURCES ${SDL2_SOURCE_DIR}/src/video/raspberry/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_RPI_SOURCES}) +- list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBS}) ++ list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBRARIES}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") ++ list(APPEND EXTRA_LDFLAGS ${VIDEO_RPI_LDFLAGS}) + endif(SDL_VIDEO AND HAVE_VIDEO_RPI) + endif(VIDEO_RPI) + endmacro(CheckRPI) +diff --git a/configure b/configure +index b622085..d42a22a 100755 +--- a/configure ++++ b/configure +@@ -19485,12 +19485,56 @@ else + fi + + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ # Extract the first word of "pkg-config", so it can be a program name with args. ++set dummy pkg-config; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_path_PKG_CONFIG+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ case $PKG_CONFIG in ++ [\\/]* | ?:[\\/]*) ++ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ++ ;; ++ *) ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ++ ;; ++esac ++fi ++PKG_CONFIG=$ac_cv_path_PKG_CONFIG ++if test -n "$PKG_CONFIG"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 ++$as_echo "$PKG_CONFIG" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then ++ RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host brcmegl` ++ RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host brcmegl` ++ elif test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" +- RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" ++ RPI_LDFLAGS="-Wl,-rpath,/opt/vc/lib -L/opt/vc/lib -lbcm_host" + fi + + # Save the original compiler flags and libraries +diff --git a/configure.in b/configure.in +index 5ac2130..450bf62 100644 +--- a/configure.in ++++ b/configure.in +@@ -1563,12 +1563,16 @@ CheckRPI() + AC_HELP_STRING([--enable-video-rpi], [use Raspberry Pi video driver [[default=yes]]]), + , enable_video_rpi=yes) + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ AC_PATH_PROG(PKG_CONFIG, pkg-config, no) ++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host; then ++ RPI_CFLAGS=`$PKG_CONFIG --cflags bcm_host brcmegl` ++ RPI_LDFLAGS=`$PKG_CONFIG --libs bcm_host brcmegl` ++ elif test x$ARCH = xnetbsd; then + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" +- RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" ++ RPI_LDFLAGS="-Wl,-rpath,/opt/vc/lib -L/opt/vc/lib -lbcm_host" + fi + + # Save the original compiler flags and libraries +diff --git a/src/video/SDL_egl.c b/src/video/SDL_egl.c +index 9ccc2c3..23a7f2d 100644 +--- a/src/video/SDL_egl.c ++++ b/src/video/SDL_egl.c +@@ -44,12 +44,12 @@ + + #if SDL_VIDEO_DRIVER_RPI + /* Raspbian places the OpenGL ES/EGL binaries in a non standard path */ +-#define DEFAULT_EGL "/opt/vc/lib/libbrcmEGL.so" +-#define DEFAULT_OGL_ES2 "/opt/vc/lib/libbrcmGLESv2.so" +-#define ALT_EGL "/opt/vc/lib/libEGL.so" +-#define ALT_OGL_ES2 "/opt/vc/lib/libGLESv2.so" +-#define DEFAULT_OGL_ES_PVR "/opt/vc/lib/libGLES_CM.so" +-#define DEFAULT_OGL_ES "/opt/vc/lib/libGLESv1_CM.so" ++#define DEFAULT_EGL "libbrcmEGL.so" ++#define DEFAULT_OGL_ES2 "libbrcmGLESv2.so" ++#define ALT_EGL "libEGL.so" ++#define ALT_OGL_ES2 "libGLESv2.so" ++#define DEFAULT_OGL_ES_PVR "libGLES_CM.so" ++#define DEFAULT_OGL_ES "libGLESv1_CM.so" + + #elif SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_VIVANTE + /* Android */ +-- +2.13.6 +package/sdl2/sdl2.mk +0
-0
package/sdl2/sdl2.mk SDL2_CONF_OPTS += \ · line 22
Quoted 4 lines
package/sdl2/sdl2.mk +0
-1@@ -19,7 +19,6 @@ SDL2_CONF_OPTS += \ --disable-dbus \ --disable-pulseaudio \ --disable-video-wayland \ - --disable-video-rpi
--disable-video-wayland now has a dangling backslash.
Quoted 17 lines
package/sdl2/sdl2.mk +7
-0# We must enable static build to get compilation successful. SDL2_CONF_OPTS += --enable-static@@ -39,6 +38,13 @@ else SDL2_CONF_OPTS += --disable-video-directfb endif +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +SDL2_DEPENDENCIES += rpi-userland +SDL2_CONF_OPTS += --enable-video-rpi +else +SDL2_CONF_OPTS += --disable-video-rpi +endif + # x-includes and x-libraries must be set for cross-compiling # By default x_includes and x_libraries contains unsafe paths. # (/usr/X11R6/include and /usr/X11R6/lib)
A message that is not in the archive (sent off-list or not yet received): CAPeEpDouAm5vqoQQ3PmHcJwvssMe=3yyyrQUvc4zoaw3ehandw@mail.gmail.com
A message that is not in the archive (sent off-list or not yet received): CAPeEpDrdRC2eDW5Q=YEc8naVfNz6aLq7zbd4Wcx=FUmEmfdswQ@mail.gmail.com
A message that is not in the archive (sent off-list or not yet received): CAPeEpDqrw8369-bhX0j3+5T-ZWo_1bW6=tnYpw8SiWUj5KMBAQ@mail.gmail.com
A message that is not in the archive (sent off-list or not yet received): CAPeEpDoZ64=_wE=4OXQvZ_hJdZN9u7eAzOEbXP-+bH05dF1WGg@mail.gmail.com
PATCH 1/1 package/sdl2: Fix Raspberry Pi support for SDL2
Hi Ryan,
Yes, but to a blank line; It shouldn't break anything. I tend to leave those in, in order to reduce diff changes in the future.
That said, I can avoid doing that in future submissions if that's frowned upon here.
Cheers,
gamaral
On Jan 19, 2018 09:11, "Ryan Coe" <[email protected]> wrote:
Guillermo, All,
Quoted 211 lines · Guillermo A. Amaral
Tweak build system to play well with Buildroot.
Signed-off-by Guillermo A. Amaral <[email protected]>--- .../sdl2/0001-make-cross-compiler-friendly.patch | 167 +++++++++++++++++++++ package/sdl2/sdl2.mk | 8 +- 2 files changed, 174 insertions(+), 1 deletion(-)create mode 100644
package/sdl2/0001-make-cross-compiler-friendly.patchpackage/sdl2/0001-make-cross-compiler-friendly.patch new file +26
-0@@ -0,0 +1,167 @@ +From 4cbd2fbfcbfe94b5826907f59ee963c69860e522 Mon Sep 17 00:00:00 2001 +From: "Guillermo A. Amaral" <[email protected]> +Date: Thu, 18 Jan 2018 09:23:58 -0800 +Subject: [PATCH] Make rpi video cross-compiler friendly. + +* Stops using fixed path to find GLES/EGL libs. +* Tries pkg-config to locate bcm_host. + +Signed-off-by: Guillermo A. Amaral <[email protected]> +--- + cmake/sdlchecks.cmake | 15 ++++++++++----- + configure | 48 ++++++++++++++++++++++++++++++ ++++++++++++++++-- + configure.in | 8 ++++++-- + src/video/SDL_egl.c | 12 ++++++------ + 4 files changed, 68 insertions(+), 15 deletions(-) + +diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake +index e2e89a2..fc715f1 100644 +--- a/cmake/sdlchecks.cmake ++++ b/cmake/sdlchecks.cmake +@@ -1127,15 +1127,19 @@ endmacro() + # - n/a + macro(CheckRPI) + if(VIDEO_RPI) +- set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include""
/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" )+- set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) +- set(VIDEO_RPI_LIBS bcm_host ) ++ pkg_check_modules(VIDEO_RPI bcm_host brcmegl) ++ if (NOT VIDEO_RPI_FOUND) ++ set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) ++ set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) ++ set(VIDEO_RPI_LIBRARIES bcm_host ) ++ set(VIDEO_RPI_LDFLAGS "-Wl,-rpath,/opt/vc/lib")++
endif()package/sdl2/0001-make-cross-compiler-friendly.patch new file +5
-0+ listtostr(VIDEO_RPI_INCLUDE_DIRS VIDEO_RPI_INCLUDE_FLAGS "-I") + listtostr(VIDEO_RPI_LIBRARY_DIRS VIDEO_RPI_LIBRARY_FLAGS "-L") + + set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}")
+- set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBS}") ++ set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBRARIES}")package/sdl2/0001-make-cross-compiler-friendly.patch new file +6
-0+ check_c_source_compiles(" + #include <bcm_host.h> + int main(int argc, char **argv) {}" HAVE_VIDEO_RPI) +@@ -1147,8 +1151,9 @@ macro(CheckRPI) + set(SDL_VIDEO_DRIVER_RPI 1) + file(GLOB VIDEO_RPI_SOURCES ${SDL2_SOURCE_DIR}/src/video/raspberry/*.c)
package/sdl2/0001-make-cross-compiler-friendly.patch new file +4
-0+ set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_RPI_SOURCES}) +- list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBS}) ++ list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBRARIES}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS}${VIDEO_RPI_LIBRARY_FLAGS}")
++list(APPEND EXTRA_LDFLAGS ${VIDEO_RPI_LDFLAGS})package/sdl2/0001-make-cross-compiler-friendly.patch new file +13
-0+ endif(SDL_VIDEO AND HAVE_VIDEO_RPI) + endif(VIDEO_RPI) + endmacro(CheckRPI) +diff --git a/configure b/configure +index b622085..d42a22a 100755 +--- a/configure ++++ b/configure +@@ -19485,12 +19485,56 @@ else + fi + + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ # Extract the first word of "pkg-config", so it can be a programname with args.
++set dummy pkg-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_path_PKG_CONFIG+:} false; then :
++ $as_echo_n "(cached) " >&6
++else++ case $PKG_CONFIG in ++ [\\/]* | ?:[\\/]*) ++ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ++ ;; ++ *) ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR++for
as_dirin $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ forac_exec_extin '' $ac_executable_extensions; do
++ ifas_fn_executable_p"$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found
$as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ++ ;;
++esac
++fi
++PKG_CONFIG=$ac_cv_path_PKG_CONFIG
++if test -n "$PKG_CONFIG"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 ++$as_echo "$PKG_CONFIG" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; }
++fi
++
++
++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --existsbcm_host;
then
++ RPI_CFLAGS=$PKG_CONFIG --cflags bcm_host brcmegl
++ RPI_LDFLAGS=$PKG_CONFIG --libs bcm_host brcmegl
++ elif test x$ARCH = xnetbsd; thenpackage/sdl2/0001-make-cross-compiler-friendly.patch new file +1
-1+ RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux"
package/sdl2/0001-make-cross-compiler-friendly.patch new file +14
-2+ RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" +- RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" ++ RPI_LDFLAGS="-Wl,-rpath,/opt/vc/lib -L/opt/vc/lib -lbcm_host" + fi + + # Save the original compiler flags and libraries +diff --git a/configure.in b/configure.in +index 5ac2130..450bf62 100644 +--- a/configure.in ++++ b/configure.in +@@ -1563,12 +1563,16 @@ CheckRPI() + AC_HELP_STRING([--enable-video-rpi], [use Raspberry Pi video driver[[default=yes]]]),
package/sdl2/0001-make-cross-compiler-friendly.patch new file +5
-0+ , enable_video_rpi=yes) + if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then +- if test x$ARCH = xnetbsd; then ++ AC_PATH_PROG(PKG_CONFIG, pkg-config, no) ++ if test x$PKG_CONFIG != xno && $PKG_CONFIG --exists bcm_host;then
++ RPI_CFLAGS=$PKG_CONFIG --cflags bcm_host brcmegl
++ RPI_LDFLAGS=$PKG_CONFIG --libs bcm_host brcmegl
++ elif test x$ARCH = xnetbsd; thenpackage/sdl2/0001-make-cross-compiler-friendly.patch new file +1
-1+ RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux"
package/sdl2/0001-make-cross-compiler-friendly.patch new file +34
-2+ RPI_LDFLAGS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + else + RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" +- RPI_LDFLAGS="-L/opt/vc/lib -lbcm_host" ++ RPI_LDFLAGS="-Wl,-rpath,/opt/vc/lib -L/opt/vc/lib -lbcm_host" + fi + + # Save the original compiler flags and libraries +diff --git a/src/video/SDL_egl.c b/src/video/SDL_egl.c +index 9ccc2c3..23a7f2d 100644 +--- a/src/video/SDL_egl.c ++++ b/src/video/SDL_egl.c +@@ -44,12 +44,12 @@ + + #if SDL_VIDEO_DRIVER_RPI + /* Raspbian places the OpenGL ES/EGL binaries in a non standard path */ +-#define DEFAULT_EGL "/opt/vc/lib/libbrcmEGL.so" +-#define DEFAULT_OGL_ES2 "/opt/vc/lib/libbrcmGLESv2.so" +-#define ALT_EGL "/opt/vc/lib/libEGL.so" +-#define ALT_OGL_ES2 "/opt/vc/lib/libGLESv2.so" +-#define DEFAULT_OGL_ES_PVR "/opt/vc/lib/libGLES_CM.so" +-#define DEFAULT_OGL_ES "/opt/vc/lib/libGLESv1_CM.so" ++#define DEFAULT_EGL "libbrcmEGL.so" ++#define DEFAULT_OGL_ES2 "libbrcmGLESv2.so" ++#define ALT_EGL "libEGL.so" ++#define ALT_OGL_ES2 "libGLESv2.so" ++#define DEFAULT_OGL_ES_PVR "libGLES_CM.so" ++#define DEFAULT_OGL_ES "libGLESv1_CM.so" + + #elif SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_VIVANTE + /* Android */ +-- +2.13.6 +package/sdl2/sdl2.mk +0
-0
package/sdl2/sdl2.mk SDL2_CONF_OPTS += \ · line 22
Quoted 5 lines
package/sdl2/sdl2.mk +0
-1@@ -19,7 +19,6 @@ SDL2_CONF_OPTS += \ --disable-dbus \ --disable-pulseaudio \ --disable-video-wayland \ - --disable-video-rpi
--disable-video-wayland now has a dangling backslash.
# We must enable static build to get compilation successful.
Quoted 5 lines
package/sdl2/sdl2.mk +0
-0SDL2_CONF_OPTS += --enable-static@@ -39,6 +38,13 @@ else SDL2_CONF_OPTS += --disable-video-directfb endif
package/sdl2/sdl2.mk else · line 49
Quoted 10 lines
package/sdl2/sdl2.mk +6
-0+ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +SDL2_DEPENDENCIES += rpi-userland +SDL2_CONF_OPTS += --enable-video-rpi +else +SDL2_CONF_OPTS += --disable-video-rpi +endif + # x-includes and x-libraries must be set for cross-compiling # By default x_includes and x_libraries contains unsafe paths. # (/usr/X11R6/include and /usr/X11R6/lib)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20180119/d456eb13/attachment.html>
PATCH 1/1 package/sdl2: Fix Raspberry Pi support for SDL2
Quoted 8 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Guillermo" == Guillermo Amaral <[email protected]> writes:
Hi Ryan,
Yes, but to a blank line; It shouldn't break anything. I tend to leave those in, in order to reduce diff changes in the future.That said, I can avoid doing that in future submissions if that's frowned upon here.
We generally do remove them, yes.
Thanks.
Signature · 1 line
Bye, Peter Korsgaard
PATCH 1/1 package/sdl2: Remove trailing backslash
Left over from 9f8a6fdf9
--- package/sdl2/sdl2.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
package/sdl2/sdl2.mk +1 -1
@@ -18,7 +18,7 @@ SDL2_CONF_OPTS += \ --disable-esd \ --disable-dbus \ --disable-pulseaudio \ - --disable-video-wayland \ + --disable-video-wayland # We must enable static build to get compilation successful. SDL2_CONF_OPTS += --enable-static
Signature · 1 line
2.13.6
PATCH 1/1 package/sdl2: Remove trailing backslash
Quoted 4 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Guillermo" == Guillermo A Amaral <[email protected]> writes:
Left over from
9f8a6fdf9Signed-off-by Guillermo A. Amaral <[email protected]>
Committed, thanks.
Signature · 1 line
Bye, Peter Korsgaard