| From 4cbd2fbfcbfe94b5826907f59ee963c69860e522 Mon Sep 17 00:00:00 2001 |
| From: "Guillermo A. Amaral" <g@maral.me> |
| 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 <g@maral.me> |
| --- |
| 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 |
| |