RaspberryPI support #1282

Merged
merged 62 commits into from Sep 4, 2012
Commits
Jump to file
+19,695 −148
Split
View
@@ -537,6 +537,7 @@ lib/cmyth/Makefile
/xbmc/cores/dvdplayer/Makefile
/xbmc/cores/amlplayer/Makefile
+/xbmc/cores/omxplayer/Makefile
# /lib/ffmpeg/
/lib/ffmpeg/config.h
View
@@ -143,6 +143,10 @@ ifeq (@USE_AMLPLAYER@,1)
DIRECTORY_ARCHIVES += xbmc/cores/amlplayer/amlplayer.a
endif
+ifeq (@USE_OMXPLAYER@,1)
+DIRECTORY_ARCHIVES += xbmc/cores/omxplayer/omxplayer.a
+endif
+
PAPCODECS_DIRS= \
lib/xbadpcm \
lib/nosefart \
View
@@ -40,6 +40,10 @@ ifneq (@USE_EXTERNAL_FFMPEG@,1)
endif
INCLUDES+=-I@abs_top_srcdir@/xbmc/linux
INCLUDES+=-I@abs_top_srcdir@/xbmc/cores/dvdplayer
+ifeq (@USE_OMXPLAYER@,1)
+INCLUDES+=-I@abs_top_srcdir@/xbmc/cores/AudioEngine
+INCLUDES+=-I@abs_top_srcdir@/xbmc/cores/AudioEngine/Utils
+endif
DEFINES+= \
@ARCH_DEFINES@ \
-D_FILE_DEFINED \
View
@@ -154,7 +154,8 @@ libusb_disabled="== libusb disabled. Plug and play USB device support will not b
libusb_disabled_udev_found="== libusb disabled. =="
libcec_enabled="== libcec enabled. =="
libcec_disabled="== libcec disabled. CEC adapter support will not be available. =="
-libcec_disabled_missing_libs="== libcec disabled because both libudev and libusb are not available. CEC adapter support will not be available. =="
+libcec_disabled_missing_libs="== libcec disabled because it either needs libudev, or libusb a compatible version of the RPi API. CEC adapter support will not be available. =="
+cec_rpi_api_missing="== no compatible RPi API found =="
# External library message strings
external_libraries_enabled="== Use of all supported external libraries enabled. =="
@@ -184,6 +185,12 @@ AC_ARG_WITH([arch],
[use_arch=$withval],
[use_arch=no])
+AC_ARG_WITH([platform],
+ [AS_HELP_STRING([--with-platform],
+ [use a pre-configured config for common arm boards])],
+ [use_platform=$withval],
+ [use_platform=none])
+
AC_ARG_WITH([cpu],
[AS_HELP_STRING([--with-cpu],
[build with given cpu passing to ffmpeg (default is no)])],
@@ -475,7 +482,7 @@ AC_ARG_ENABLE([libcap],
AC_ARG_ENABLE([player],
[AS_HELP_STRING([--enable-player],
- [enable additional players from a list of comma separated names, (default is none, choices are amlplayer)])],
+ [enable additional players from a list of comma separated names, (default is none, choices are amlplayer, omxplayer)])],
[add_players=$enableval],
[add_players=no])
@@ -639,11 +646,37 @@ if test "$target_platform" = "target_android" ; then
AC_DEFINE(HAS_EGLGLES, [1], [Define if supporting EGL based GLES Framebuffer])
fi
+case $use_platform in
+ raspberry-pi)
+ target_platform=target_raspberry_pi
+ use_neon=no
+ use_texturepacker=yes
+ use_texturepacker_native=yes
+ use_arch="arm"
+ use_cpu=arm1176jzf-s
+ use_armv5te="yes"
+ use_armv6t2="no"
+ use_armv6="yes"
+ use_armvfp="yes"
+ use_hardcoded_tables="yes"
+ use_alsa="no"
+ USE_TEXTUREPACKER_NATIVE_ROOT="$TEXTUREPACKER_NATIVE_ROOT"
+ ARCH="arm"
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_ARMEL -DTARGET_RASPBERRY_PI")
+ AC_DEFINE(HAS_EGLGLES, [1], [Define if supporting EGL based GLES Framebuffer])
+ USE_OMXLIB=1; AC_DEFINE([HAVE_OMXLIB],[1],["Define to 1 if OMX libs is enabled"])
+ CFLAGS="$CFLAGS"
+ CXXFLAGS="$CXXFLAGS"
+ ffmpeg_target_os=linux
+ ;;
+esac
+
if test "$build_shared_lib" = "yes"; then
final_message="$final_message\n Shared lib\tYes"
AC_SUBST(USE_LIBXBMC,1)
fi
+
# platform debug flags
if test "$use_debug" = "yes"; then
final_message="$final_message\n Debugging:\tYes"
@@ -670,8 +703,13 @@ CXXFLAGS="$CXXFLAGS $DEBUG_FLAGS"
if test "$use_optimizations" = "yes"; then
final_message="$final_message\n Optimization:\tYes"
- CXXFLAGS="$CXXFLAGS -O2"
- CFLAGS="$CFLAGS -O2"
+ if test "$target_platform" = "target_raspberry_pi"; then
+ CXXFLAGS="$CXXFLAGS"
+ CFLAGS="$CFLAGS"
+ else
+ CXXFLAGS="$CXXFLAGS -O2"
+ CFLAGS="$CFLAGS -O2"
+ fi
else
final_message="$final_message\n Optimization:\tNo"
fi
@@ -703,6 +741,9 @@ if test "$host_vendor" = "apple" ; then
LIBS="$LIBS -framework QuartzCore"
fi
USE_EXTERNAL_FFMPEG=1
+elif test "$target_platform" = "target_raspberry_pi"; then
+ ARCH="arm"
+ use_arch="arm"
elif test "$use_arch" = "arm"; then
CFLAGS="$CFLAGS -mno-apcs-stack-check"
CXXFLAGS="$CXXFLAGS -mno-apcs-stack-check"
@@ -792,8 +833,15 @@ if test "$use_gles" = "yes"; then
AC_DEFINE([HAVE_LIBGLESV2],[1],["Define to 1 if you have the `GLESv2' library (-lGLESv2)."])
AC_MSG_RESULT(== WARNING: OpenGLES support is assumed.)
else
- AC_CHECK_LIB([EGL], [main],, AC_MSG_ERROR($missing_library))
- AC_CHECK_LIB([GLESv2],[main],, AC_MSG_ERROR($missing_library))
+ if test "$target_platform" = "target_raspberry_pi"; then
+ AC_DEFINE([HAVE_LIBEGL],[1],["Define to 1 if you have the `EGL' library (-lEGL)."])
+ AC_DEFINE([HAVE_LIBGLESV2],[1],["Define to 1 if you have the `GLESv2' library (-lGLESv2)."])
+ AC_MSG_RESULT(== WARNING: OpenGLES support is assumed.)
+ LIBS="$LIBS -lEGL -lGLESv2 -lbcm_host -lvcos -lvchiq_arm"
+ else
+ AC_CHECK_LIB([EGL], [main],, AC_MSG_ERROR($missing_library))
+ AC_CHECK_LIB([GLESv2],[main],, AC_MSG_ERROR($missing_library))
+ fi
fi
else
if test "$use_gl" = "yes"; then
@@ -1351,9 +1399,22 @@ fi
# libcec
USE_LIBCEC=0
+USE_CEC_RPI_API=0
+use_rpi_cec_api="auto"
if test "x$use_libcec" != "xno"; then
- # libcec needs libudev or libusb under linux, or the device will never be detected.
- if test "$host_vendor" != "apple" && test "$use_libusb" = "no" && test "$use_libudev" = "no"; then
+ case "${host_cpu}" in
+ arm*)
+ echo "will check for RPi support"
+ AC_CHECK_HEADER(interface/vmcs_host/vc_cec.h,,use_rpi_cec_api="no")
+ ;;
+ *)
+ echo "will not check for RPi support (unsupported cpu: ${host_cpu})"
+ use_rpi_cec_api="no"
+ ;;
+ esac
+
+ # libcec needs libudev, libusb or the RPi API under linux, or the device will never be detected.
+ if test "$host_vendor" != "apple" && test "$use_libusb" = "no" && test "$use_libudev" = "no" && test "$use_rpi_cec_api" = "no"; then
if test "x$use_libcec" != "xauto"; then
AC_MSG_ERROR($libcec_disabled_missing_libs)
else
@@ -1364,11 +1425,20 @@ if test "x$use_libcec" != "xno"; then
# libcec is dyloaded, so we need to check for its headers and link any depends.
if test "x$use_libcec" != "xno"; then
- PKG_CHECK_MODULES([CEC],[libcec >= 1.7.0],,[use_libcec="no";AC_MSG_RESULT($libcec_disabled)])
+ if test "x$use_libcec" != "xauto"; then
+ PKG_CHECK_MODULES([CEC],[libcec >= 1.8.0],,[use_libcec="no";AC_MSG_ERROR($libcec_disabled)])
+ else
+ PKG_CHECK_MODULES([CEC],[libcec >= 1.8.0],,[use_libcec="no";AC_MSG_RESULT($libcec_disabled)])
+ fi
if test "x$use_libcec" != "xno"; then
INCLUDES="$INCLUDES $CEC_CFLAGS"
USE_LIBCEC=1;AC_DEFINE([HAVE_LIBCEC],[1],["Define to 1 if libcec is installed"])
+ if test "x$use_rpi_cec_api" != "xno"; then
+ LIBS+=" -lvcos -lvchiq_arm"
+ AC_DEFINE([HAVE_CEC_RPI_API],[1],["Define to 1 if the CEC RPi API is installed"])
+ USE_CEC_RPI_API=1
+ fi
XB_FIND_SONAME([LIBCEC],[cec],[use_libcec])
AC_MSG_NOTICE($libcec_enabled)
else
@@ -1627,6 +1697,10 @@ if test "$host_vendor" = "apple" ; then
use_openmax="no"
USE_OPENMAX=0
AC_MSG_NOTICE($openmax_disabled)
+elif test "$target_platform" = "target_raspberry_pi"; then
+ use_openmax="no"
+ USE_OPENMAX=0
+ AC_MSG_NOTICE($openmax_disabled)
else
if test "$use_gles" = "yes" && test "$use_openmax" = "auto"; then
PKG_CHECK_MODULES([OPENMAX], [libomxil-bellagio],
@@ -1654,6 +1728,9 @@ case $add_players in
AC_CHECK_HEADER([amlplayer/amports/amstream.h],, AC_MSG_ERROR($missing_headers))
XB_ADD_PLAYER([AMLPLAYER], [amlplayer])
;;
+ *omxplayer*)
+ XB_ADD_PLAYER([OMXPLAYER], [omxplayer])
+ ;;
esac
# platform specific bin utilities
@@ -2053,6 +2130,11 @@ fi
if test "x$use_libcec" != "xno"; then
final_message="$final_message\n libcec support:\tYes"
+ if test "x$use_rpi_cec_api" != "xno"; then
+ final_message="$final_message\n libcec RPi support:\tYes"
+ else
+ final_message="$final_message\n libcec RPi support:\tNo"
+ fi
else
final_message="$final_message\n libcec support:\tNo"
fi
@@ -2123,6 +2205,7 @@ OUTPUT_FILES="Makefile \
xbmc/cores/AudioEngine/Makefile \
xbmc/cores/paplayer/Makefile \
xbmc/cores/amlplayer/Makefile \
+ xbmc/cores/omxplayer/Makefile \
lib/timidity/Makefile \
lib/xbadpcm/Makefile \
lib/asap/Makefile \
@@ -2228,6 +2311,7 @@ AC_SUBST(USE_AIRTUNES)
AC_SUBST(USE_LIBUDEV)
AC_SUBST(USE_LIBUSB)
AC_SUBST(USE_LIBCEC)
+AC_SUBST(USE_CEC_RPI_API)
AC_SUBST(USE_MYSQL)
AC_SUBST(USE_WEB_SERVER)
AC_SUBST(USE_ANDROID)
@@ -2368,6 +2452,10 @@ XB_CONFIG_MODULE([lib/ffmpeg], [
`if test "$use_arch" != "no"; then echo --arch=$use_arch; fi`\
`if test "$use_cpu" != "no"; then echo --cpu=$use_cpu; fi`\
`if test "$use_neon" = "yes"; then echo --enable-neon; else echo --disable-neon; fi`\
+ `if test "$use_armv5te" = "yes"; then echo --enable-armv5te; else echo --disable-armv5te; fi`\
+ `if test "$use_armv6t2" = "yes"; then echo --enable-armv6t2; else echo --disable-armv6t2; fi`\
+ `if test "$use_armv6" = "yes"; then echo --enable-armv6; else echo --disable-armv6; fi`\
+ `if test "$use_armvfp" = "yes"; then echo --enable-armvfp; else echo --disable-armvfp; fi`\
--target-os=$ffmpeg_target_os \
--disable-muxers \
--enable-muxer=spdif \
@@ -2393,6 +2481,7 @@ XB_CONFIG_MODULE([lib/ffmpeg], [
--enable-protocol=http \
--enable-pthreads \
--enable-runtime-cpudetect \
+ `if test "$use_hardcoded_tables" = "yes"; then echo --enable-hardcoded-tables; else echo --disable-hardcoded-tables; fi`\
`if test "$target_platform" = "target_android" && test "$host_cpu" = "i686"; then echo --disable-mmx; fi #workaround for gcc 4.6 bug` \
`if test "$target_platform" = "target_android"; then echo '--custom-libname-with-major="\$(SLIBPREF)\$(FULLNAME)-\$(LIBMAJOR)-${ARCH}\$(SLIBSUF)"'; \
else echo '--custom-libname-with-major="\$(FULLNAME)-\$(LIBMAJOR)-${ARCH}\$(SLIBSUF)"'; fi` \
View
@@ -0,0 +1,35 @@
+TOC
+1. Introduction
+2. Installing and setting up the buildroot environment
+
+-----------------------------------------------------------------------------
+1. Introduction
+-----------------------------------------------------------------------------
+
+For developemnt you can use a customized buildroot to produce a small
+raspberrypi system image which is used to boot the raspberrypi and as
+crosscompile environment.
+
+-----------------------------------------------------------------------------
+2. Installing and setting up the buildroot environment
+-----------------------------------------------------------------------------
+
+Create a top level directory where you checkout xbmc and buildroot.
+
+For example :
+
+mkdir /opt/xbmc-raspberrypi
+cd /opt/xbmc-raspberrypi
+
+Checkout xbmc :
+
+git clone https://github.com/xbmc/xbmc.git
+
+Checkout buildroot :
+
+git clone https://github.com/huceke/buildroot-rbp.git
+
+cd /opt/xbmc-raspberrypi/buildroot-rbp
+
+Follow the instroctions in README.rbp how to build the system and xbmc.
+
View
@@ -7,7 +7,7 @@
# lib name, version
LIBNAME=libcec
-VERSION=1.7.1
+VERSION=1.8.1
SOURCE=$(LIBNAME)-$(VERSION)
# download location and format
@@ -12,11 +12,6 @@ SRCS= \
squish.cpp
CXXFLAGS+=-I.
-ifeq ($(findstring powerpc,$(ARCH)),powerpc)
- CXXFLAGS+=-DSQUISH_USE_ALTIVEC=1 -maltivec
-else ifeq ($(findstring x86,$(ARCH)), x86)
- CXXFLAGS+=-DSQUISH_USE_SSE=2 -msse2
-endif
LIB=libsquish.a
@@ -32,9 +27,9 @@ all: $(LIB) $(NATIVE_LIB)
# TexturePacker links to libsquish and needs to run on build system, so make a native flavor.
$(NATIVE_LIB): $(SRCS)
ifeq ($(findstring Darwin,$(shell uname -s)),Darwin)
- g++ $(NATIVE_ARCH) -DSQUISH_USE_SSE=2 -msse2 -I. $(SRCS) -dynamiclib -install_name `pwd`/libsquish-native.so -o $@
+ g++ $(NATIVE_ARCH) -I. $(SRCS) -dynamiclib -install_name `pwd`/libsquish-native.so -o $@
else
- g++ -DSQUISH_USE_SSE=2 -msse2 -I. $(SRCS) -shared -fPIC -Wl,-soname,`pwd`/libsquish-native.so -o $@
+ g++ -I. $(SRCS) -shared -fPIC -Wl,-soname,`pwd`/libsquish-native.so -o $@
endif
endif
View
@@ -28,13 +28,23 @@
// Set to 1 when building squish to use Altivec instructions.
#ifndef SQUISH_USE_ALTIVEC
+#if defined(__ALTIVEC__)
+#define SQUISH_USE_ALTIVEC 1
+#else
#define SQUISH_USE_ALTIVEC 0
#endif
+#endif
// Set to 1 or 2 when building squish to use SSE or SSE2 instructions.
#ifndef SQUISH_USE_SSE
+#if defined(__SSE2__)
+#define SQUISH_USE_SSE 2
+#elif defined(__SSE__)
+#define SQUISH_USE_SSE 1
+#else
#define SQUISH_USE_SSE 0
#endif
+#endif
// Internally set SQUISH_USE_SIMD when either Altivec or SSE is available.
#if SQUISH_USE_ALTIVEC && SQUISH_USE_SSE
@@ -1,3 +1,3 @@
; filename source of the file
-libcec-1.7.1.zip http://mirrors.xbmc.org/build-deps/win32/
+libcec-1.8.1.zip http://mirrors.xbmc.org/build-deps/win32/
View
@@ -9,6 +9,26 @@
<setting key="key_power" value="XBMC.ShutDown()" label="13015" order="6" />
</peripheral>
+ <peripheral vendor_product="2708:1001" bus="rpi" name="Raspberry Pi CEC Adapter" mapTo="cec">
+ <setting key="enabled" type="bool" value="1" label="305" order="1" />
+ <setting key="activate_source" type="bool" value="1" label="36020" order="2" />
+ <setting key="wake_devices" type="string" value="0" label="36007" order="3" />
+ <setting key="standby_devices" type="string" value="0" label="36008" order="4" />
+ <setting key="cec_standby_screensaver" type="bool" value="1" label="36009" order="5" />
+ <setting key="standby_pc_on_tv_standby" type="enum" value="13011" label="36029" order="6" lvalues="36028|13005|13011" />
+ <setting key="standby_tv_on_pc_standby" type="bool" value="1" label="36026" order="7" />
+ <setting key="send_inactive_source" type="bool" value="1" label="36025" order="8" />
+ <setting key="use_tv_menu_language" type="bool" value="1" label="36018" order="9" />
+
+ <setting key="tv_vendor" type="int" value="0" configurable="0" />
+ <setting key="device_name" type="string" value="XBMC" configurable="0" />
+ <setting key="device_type" type="int" value="1" configurable="0" />
+ <setting key="physical_address" type="string" label="36021" value="0" configurable="0" />
+ <setting key="cec_hdmi_port" type="int" value="1" label="36015" configurable="0" />
+ <setting key="connected_device" type="int" label="36019" value="0" configurable="0" />
+ <setting key="port" type="string" value="" label="36022" configurable="0" />
+ </peripheral>
+
<peripheral vendor_product="2548:1001" bus="usb" name="Pulse-Eight CEC Adapter" mapTo="cec">
<setting key="enabled" type="bool" value="1" label="305" order="1" />
<setting key="activate_source" type="bool" value="1" label="36020" order="2" />
Oops, something went wrong.