kodi.mk 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. ################################################################################
  2. #
  3. # kodi
  4. #
  5. ################################################################################
  6. # When updating the version, please also update kodi-jsonschemabuilder
  7. # and kodi-texturepacker
  8. KODI_VERSION = 18.9-Leia
  9. KODI_SITE = $(call github,xbmc,xbmc,$(KODI_VERSION))
  10. KODI_LICENSE = GPL-2.0
  11. KODI_LICENSE_FILES = LICENSE.md
  12. # needed for binary addons
  13. KODI_INSTALL_STAGING = YES
  14. # kodi recommends building out-of-source
  15. KODI_SUPPORTS_IN_SOURCE_BUILD = NO
  16. KODI_DEPENDENCIES = \
  17. expat \
  18. flatbuffers \
  19. fmt \
  20. fontconfig \
  21. freetype \
  22. fstrcmp \
  23. gnutls \
  24. host-flatbuffers \
  25. host-gawk \
  26. host-gettext \
  27. host-gperf \
  28. host-kodi-jsonschemabuilder \
  29. host-kodi-texturepacker \
  30. host-nasm \
  31. host-swig \
  32. host-xmlstarlet \
  33. libass \
  34. libcdio \
  35. libcrossguid \
  36. libcurl \
  37. libfribidi \
  38. libplist \
  39. libsamplerate \
  40. lzo \
  41. ncurses \
  42. openssl \
  43. pcre \
  44. python \
  45. rapidjson \
  46. sqlite \
  47. taglib \
  48. tinyxml \
  49. zlib
  50. # taken from tools/depends/target/*/*-VERSION
  51. KODI_FFMPEG_VERSION = 4.0.4-Leia-18.4
  52. KODI_LIBDVDCSS_VERSION = 1.4.2-Leia-Beta-5
  53. KODI_LIBDVDNAV_VERSION = 6.0.0-Leia-Alpha-3
  54. KODI_LIBDVDREAD_VERSION = 6.0.0-Leia-Alpha-3
  55. KODI_EXTRA_DOWNLOADS += \
  56. $(call github,xbmc,FFmpeg,$(KODI_FFMPEG_VERSION))/kodi-ffmpeg-$(KODI_FFMPEG_VERSION).tar.gz \
  57. $(call github,xbmc,libdvdcss,$(KODI_LIBDVDCSS_VERSION))/kodi-libdvdcss-$(KODI_LIBDVDCSS_VERSION).tar.gz \
  58. $(call github,xbmc,libdvdnav,$(KODI_LIBDVDNAV_VERSION))/kodi-libdvdnav-$(KODI_LIBDVDNAV_VERSION).tar.gz \
  59. $(call github,xbmc,libdvdread,$(KODI_LIBDVDREAD_VERSION))/kodi-libdvdread-$(KODI_LIBDVDREAD_VERSION).tar.gz
  60. define KODI_CPLUFF_AUTOCONF
  61. cd $(KODI_SRCDIR)/lib/cpluff && ./autogen.sh
  62. endef
  63. KODI_PRE_CONFIGURE_HOOKS += KODI_CPLUFF_AUTOCONF
  64. KODI_DEPENDENCIES += host-automake host-autoconf host-libtool
  65. KODI_CONF_OPTS += \
  66. -DCMAKE_C_FLAGS="$(TARGET_CFLAGS) $(KODI_C_FLAGS)" \
  67. -DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) $(KODI_CXX_FLAGS)" \
  68. -DENABLE_APP_AUTONAME=OFF \
  69. -DENABLE_CCACHE=OFF \
  70. -DENABLE_DVDCSS=ON \
  71. -DENABLE_INTERNAL_CROSSGUID=OFF \
  72. -DENABLE_INTERNAL_FFMPEG=ON \
  73. -DENABLE_INTERNAL_FLATBUFFERS=OFF \
  74. -DFFMPEG_URL=$(KODI_DL_DIR)/kodi-ffmpeg-$(KODI_FFMPEG_VERSION).tar.gz \
  75. -DKODI_DEPENDSBUILD=OFF \
  76. -DENABLE_LDGOLD=OFF \
  77. -DNATIVEPREFIX=$(HOST_DIR) \
  78. -DDEPENDS_PATH=$(STAGING_DIR)/usr \
  79. -DWITH_JSONSCHEMABUILDER=$(HOST_DIR)/bin/JsonSchemaBuilder \
  80. -DWITH_TEXTUREPACKER=$(HOST_DIR)/bin/TexturePacker \
  81. -DLIBDVDCSS_URL=$(KODI_DL_DIR)/kodi-libdvdcss-$(KODI_LIBDVDCSS_VERSION).tar.gz \
  82. -DLIBDVDNAV_URL=$(KODI_DL_DIR)/kodi-libdvdnav-$(KODI_LIBDVDNAV_VERSION).tar.gz \
  83. -DLIBDVDREAD_URL=$(KODI_DL_DIR)/kodi-libdvdread-$(KODI_LIBDVDREAD_VERSION).tar.gz
  84. ifeq ($(BR2_ENABLE_LOCALE),)
  85. KODI_DEPENDENCIES += libiconv
  86. endif
  87. ifeq ($(BR2_PACKAGE_KODI_PLATFORM_RBPI),y)
  88. # These CPU-specific options are only used on rbpi:
  89. # https://github.com/xbmc/xbmc/blob/Krypton/project/cmake/scripts/rbpi/ArchSetup.cmake#L13
  90. ifeq ($(BR2_arm1176jzf_s)$(BR2_cortex_a7)$(BR2_cortex_a53),y)
  91. KODI_CONF_OPTS += -DWITH_CPU="$(GCC_TARGET_CPU)"
  92. endif
  93. else ifeq ($(BR2_arceb)$(BR2_arcle),y)
  94. KODI_CONF_OPTS += -DWITH_ARCH=arc -DWITH_CPU=arc
  95. else ifeq ($(BR2_armeb),y)
  96. KODI_CONF_OPTS += -DWITH_ARCH=arm -DWITH_CPU=arm
  97. else ifeq ($(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el),y)
  98. KODI_CONF_OPTS += \
  99. -DWITH_ARCH=mips$(if $(BR2_ARCH_IS_64),64) \
  100. -DWITH_CPU=mips$(if $(BR2_ARCH_IS_64),64)
  101. else ifeq ($(BR2_powerpc)$(BR2_powerpc64le),y)
  102. KODI_CONF_OPTS += \
  103. -DWITH_ARCH=powerpc$(if $(BR2_ARCH_IS_64),64) \
  104. -DWITH_CPU=powerpc$(if $(BR2_ARCH_IS_64),64)
  105. else ifeq ($(BR2_powerpc64)$(BR2_sparc64)$(BR2_sh4)$(BR2_xtensa),y)
  106. KODI_CONF_OPTS += -DWITH_ARCH=$(BR2_ARCH) -DWITH_CPU=$(BR2_ARCH)
  107. else
  108. # Kodi auto-detects ARCH, tested: arm, aarch64, i386, x86_64
  109. # see project/cmake/scripts/linux/ArchSetup.cmake
  110. KODI_CONF_OPTS += -DWITH_CPU=$(BR2_ARCH)
  111. endif
  112. ifeq ($(BR2_X86_CPU_HAS_SSE),y)
  113. KODI_CONF_OPTS += -D_SSE_OK=ON -D_SSE_TRUE=ON
  114. else
  115. KODI_CONF_OPTS += -D_SSE_OK=OFF -D_SSE_TRUE=OFF
  116. endif
  117. ifeq ($(BR2_X86_CPU_HAS_SSE2),y)
  118. KODI_CONF_OPTS += -D_SSE2_OK=ON -D_SSE2_TRUE=ON
  119. else
  120. KODI_CONF_OPTS += -D_SSE2_OK=OFF -D_SSE2_TRUE=OFF
  121. endif
  122. ifeq ($(BR2_X86_CPU_HAS_SSE3),y)
  123. KODI_CONF_OPTS += -D_SSE3_OK=ON -D_SSE3_TRUE=ON
  124. else
  125. KODI_CONF_OPTS += -D_SSE3_OK=OFF -D_SSE3_TRUE=OFF
  126. endif
  127. ifeq ($(BR2_X86_CPU_HAS_SSSE3),y)
  128. KODI_CONF_OPTS += -D_SSSE3_OK=ON -D_SSSE3_TRUE=ON
  129. else
  130. KODI_CONF_OPTS += -D_SSSE3_OK=OFF -D_SSSE3_TRUE=OFF
  131. endif
  132. ifeq ($(BR2_X86_CPU_HAS_SSE4),y)
  133. KODI_CONF_OPTS += -D_SSE41_OK=ON -D_SSE41_TRUE=ON
  134. else
  135. KODI_CONF_OPTS += -D_SSE41_OK=OFF -D_SSE41_TRUE=OFF
  136. endif
  137. ifeq ($(BR2_X86_CPU_HAS_SSE42),y)
  138. KODI_CONF_OPTS += -D_SSE42_OK=ON -D_SSE42_TRUE=ON
  139. else
  140. KODI_CONF_OPTS += -D_SSE42_OK=OFF -D_SSE42_TRUE=OFF
  141. endif
  142. ifeq ($(BR2_X86_CPU_HAS_AVX),y)
  143. KODI_CONF_OPTS += -D_AVX_OK=ON -D_AVX_TRUE=ON
  144. else
  145. KODI_CONF_OPTS += -D_AVX_OK=OFF -D_AVX_TRUE=OFF
  146. endif
  147. ifeq ($(BR2_X86_CPU_HAS_AVX2),y)
  148. KODI_CONF_OPTS += -D_AVX2_OK=ON -D_AVX2_TRUE=ON
  149. else
  150. KODI_CONF_OPTS += -D_AVX2_OK=OFF -D_AVX2_TRUE=OFF
  151. endif
  152. # mips: uses __atomic_load_8
  153. ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
  154. KODI_CXX_FLAGS += -latomic
  155. endif
  156. ifeq ($(BR2_PACKAGE_KODI_PLATFORM_RBPI),y)
  157. KODI_CONF_OPTS += -DCORE_PLATFORM_NAME=rbpi
  158. KODI_DEPENDENCIES += libinput libxkbcommon rpi-userland
  159. endif
  160. ifeq ($(BR2_PACKAGE_KODI_PLATFORM_WAYLAND_GL),y)
  161. KODI_CONF_OPTS += \
  162. -DCORE_PLATFORM_NAME=wayland \
  163. -DWAYLAND_RENDER_SYSTEM=gl
  164. KODI_DEPENDENCIES += libegl libgl libglu libxkbcommon waylandpp
  165. endif
  166. ifeq ($(BR2_PACKAGE_KODI_PLATFORM_WAYLAND_GLES),y)
  167. KODI_CONF_OPTS += \
  168. -DCORE_PLATFORM_NAME=wayland \
  169. -DWAYLAND_RENDER_SYSTEM=gles
  170. KODI_C_FLAGS += `$(PKG_CONFIG_HOST_BINARY) --cflags egl`
  171. KODI_CXX_FLAGS += `$(PKG_CONFIG_HOST_BINARY) --cflags egl`
  172. KODI_DEPENDENCIES += libegl libgles libxkbcommon waylandpp
  173. endif
  174. ifeq ($(BR2_PACKAGE_KODI_PLATFORM_X11_OPENGL),y)
  175. KODI_CONF_OPTS += -DCORE_PLATFORM_NAME=x11
  176. KODI_DEPENDENCIES += libegl libglu libgl xlib_libX11 xlib_libXext \
  177. xlib_libXrandr libdrm
  178. endif
  179. ifeq ($(BR2_PACKAGE_KODI_MYSQL),y)
  180. KODI_CONF_OPTS += -DENABLE_MYSQLCLIENT=ON
  181. KODI_DEPENDENCIES += mysql
  182. else
  183. KODI_CONF_OPTS += -DENABLE_MYSQLCLIENT=OFF
  184. endif
  185. ifeq ($(BR2_PACKAGE_HAS_UDEV),y)
  186. KODI_CONF_OPTS += -DENABLE_UDEV=ON
  187. KODI_DEPENDENCIES += udev
  188. else
  189. KODI_CONF_OPTS += -DENABLE_UDEV=OFF
  190. ifeq ($(BR2_PACKAGE_KODI_LIBUSB),y)
  191. KODI_CONF_OPTS += -DENABLE_LIBUSB=ON
  192. KODI_DEPENDENCIES += libusb-compat
  193. endif
  194. endif
  195. ifeq ($(BR2_PACKAGE_LIBCAP),y)
  196. KODI_CONF_OPTS += -DENABLE_CAP=ON
  197. KODI_DEPENDENCIES += libcap
  198. else
  199. KODI_CONF_OPTS += -DENABLE_CAP=OFF
  200. endif
  201. ifeq ($(BR2_PACKAGE_LIBXML2)$(BR2_PACKAGE_LIBXSLT),yy)
  202. KODI_CONF_OPTS += -DENABLE_XSLT=ON
  203. KODI_DEPENDENCIES += libxml2 libxslt
  204. else
  205. KODI_CONF_OPTS += -DENABLE_XSLT=OFF
  206. endif
  207. ifeq ($(BR2_PACKAGE_KODI_BLUEZ),y)
  208. KODI_CONF_OPTS += -DENABLE_BLUETOOTH=ON
  209. KODI_DEPENDENCIES += bluez5_utils
  210. else
  211. KODI_CONF_OPTS += -DENABLE_BLUETOOTH=OFF
  212. endif
  213. ifeq ($(BR2_PACKAGE_KODI_DBUS),y)
  214. KODI_DEPENDENCIES += dbus
  215. KODI_CONF_OPTS += -DENABLE_DBUS=ON
  216. else
  217. KODI_CONF_OPTS += -DENABLE_DBUS=OFF
  218. endif
  219. ifeq ($(BR2_PACKAGE_KODI_EVENTCLIENTS),y)
  220. KODI_CONF_OPTS += -DENABLE_EVENTCLIENTS=ON
  221. else
  222. KODI_CONF_OPTS += -DENABLE_EVENTCLIENTS=OFF
  223. endif
  224. ifeq ($(BR2_PACKAGE_KODI_ALSA_LIB),y)
  225. KODI_CONF_OPTS += -DENABLE_ALSA=ON
  226. KODI_DEPENDENCIES += alsa-lib
  227. else
  228. KODI_CONF_OPTS += -DENABLE_ALSA=OFF
  229. endif
  230. ifeq ($(BR2_PACKAGE_KODI_LIBMICROHTTPD),y)
  231. KODI_CONF_OPTS += -DENABLE_MICROHTTPD=ON
  232. KODI_DEPENDENCIES += libmicrohttpd
  233. else
  234. KODI_CONF_OPTS += -DENABLE_MICROHTTPD=OFF
  235. endif
  236. ifeq ($(BR2_PACKAGE_KODI_LIBSMBCLIENT),y)
  237. KODI_DEPENDENCIES += samba4
  238. KODI_CONF_OPTS += -DENABLE_SMBCLIENT=ON
  239. else
  240. KODI_CONF_OPTS += -DENABLE_SMBCLIENT=OFF
  241. endif
  242. ifeq ($(BR2_PACKAGE_KODI_LIBNFS),y)
  243. KODI_DEPENDENCIES += libnfs
  244. KODI_CONF_OPTS += -DENABLE_NFS=ON
  245. else
  246. KODI_CONF_OPTS += -DENABLE_NFS=OFF
  247. endif
  248. ifeq ($(BR2_PACKAGE_KODI_LIBBLURAY),y)
  249. KODI_DEPENDENCIES += libbluray
  250. KODI_CONF_OPTS += -DENABLE_BLURAY=ON
  251. else
  252. KODI_CONF_OPTS += -DENABLE_BLURAY=OFF
  253. endif
  254. ifeq ($(BR2_PACKAGE_KODI_LIBSHAIRPLAY),y)
  255. KODI_DEPENDENCIES += libshairplay
  256. KODI_CONF_OPTS += -DENABLE_AIRTUNES=ON
  257. else
  258. KODI_CONF_OPTS += -DENABLE_AIRTUNES=OFF
  259. endif
  260. ifeq ($(BR2_PACKAGE_KODI_AVAHI),y)
  261. KODI_DEPENDENCIES += avahi
  262. KODI_CONF_OPTS += -DENABLE_AVAHI=ON
  263. else
  264. KODI_CONF_OPTS += -DENABLE_AVAHI=OFF
  265. endif
  266. ifeq ($(BR2_PACKAGE_KODI_LIBCEC),y)
  267. KODI_DEPENDENCIES += libcec
  268. KODI_CONF_OPTS += -DENABLE_CEC=ON
  269. else
  270. KODI_CONF_OPTS += -DENABLE_CEC=OFF
  271. endif
  272. ifeq ($(BR2_PACKAGE_KODI_LCMS2),y)
  273. KODI_DEPENDENCIES += lcms2
  274. KODI_CONF_OPTS += -DENABLE_LCMS2=ON
  275. else
  276. KODI_CONF_OPTS += -DENABLE_LCMS2=OFF
  277. endif
  278. ifeq ($(BR2_PACKAGE_LIRC_TOOLS),y)
  279. KODI_DEPENDENCIES += lirc-tools
  280. endif
  281. # kodi needs libva & libva-glx
  282. ifeq ($(BR2_PACKAGE_KODI_LIBVA)$(BR2_PACKAGE_MESA3D_DRI_DRIVER),yy)
  283. KODI_DEPENDENCIES += mesa3d libva
  284. KODI_CONF_OPTS += -DENABLE_VAAPI=ON
  285. else
  286. KODI_CONF_OPTS += -DENABLE_VAAPI=OFF
  287. endif
  288. ifeq ($(BR2_PACKAGE_KODI_LIBVDPAU),y)
  289. KODI_DEPENDENCIES += libvdpau
  290. KODI_CONF_OPTS += -DENABLE_VDPAU=ON
  291. else
  292. KODI_CONF_OPTS += -DENABLE_VDPAU=OFF
  293. endif
  294. ifeq ($(BR2_PACKAGE_KODI_UPNP),y)
  295. KODI_CONF_OPTS += -DENABLE_UPNP=ON
  296. else
  297. KODI_CONF_OPTS += -DENABLE_UPNP=OFF
  298. endif
  299. ifeq ($(BR2_PACKAGE_KODI_OPTICALDRIVE),y)
  300. KODI_CONF_OPTS += -DENABLE_OPTICAL=ON
  301. else
  302. KODI_CONF_OPTS += -DENABLE_OPTICAL=OFF
  303. endif
  304. ifeq ($(BR2_PACKAGE_KODI_PULSEAUDIO),y)
  305. KODI_CONF_OPTS += -DENABLE_PULSEAUDIO=ON
  306. KODI_DEPENDENCIES += pulseaudio
  307. else
  308. KODI_CONF_OPTS += -DENABLE_PULSEAUDIO=OFF
  309. endif
  310. # Remove versioncheck addon, updating Kodi is done by building a new
  311. # buildroot image.
  312. KODI_ADDON_MANIFEST = $(TARGET_DIR)/usr/share/kodi/system/addon-manifest.xml
  313. define KODI_CLEAN_UNUSED_ADDONS
  314. rm -Rf $(TARGET_DIR)/usr/share/kodi/addons/service.xbmc.versioncheck
  315. $(HOST_DIR)/bin/xml ed -L \
  316. -d "/addons/addon[text()='service.xbmc.versioncheck']" \
  317. $(KODI_ADDON_MANIFEST)
  318. endef
  319. KODI_POST_INSTALL_TARGET_HOOKS += KODI_CLEAN_UNUSED_ADDONS
  320. define KODI_INSTALL_BR_WRAPPER
  321. $(INSTALL) -D -m 0755 package/kodi/br-kodi \
  322. $(TARGET_DIR)/usr/bin/br-kodi
  323. endef
  324. KODI_POST_INSTALL_TARGET_HOOKS += KODI_INSTALL_BR_WRAPPER
  325. # When run from a startup script, Kodi has no $HOME where to store its
  326. # configuration, so ends up storing it in /.kodi (yes, at the root of
  327. # the rootfs). This is a problem for read-only filesystems. But we can't
  328. # easily change that, so create /.kodi as a symlink where we want the
  329. # config to eventually be. Add synlinks for the legacy XBMC name as well
  330. define KODI_INSTALL_CONFIG_DIR
  331. $(INSTALL) -d -m 0755 $(TARGET_DIR)/var/kodi
  332. ln -sf /var/kodi $(TARGET_DIR)/.kodi
  333. ln -sf /var/kodi $(TARGET_DIR)/var/xbmc
  334. ln -sf /var/kodi $(TARGET_DIR)/.xbmc
  335. endef
  336. KODI_POST_INSTALL_TARGET_HOOKS += KODI_INSTALL_CONFIG_DIR
  337. define KODI_INSTALL_INIT_SYSV
  338. $(INSTALL) -D -m 755 package/kodi/S50kodi \
  339. $(TARGET_DIR)/etc/init.d/S50kodi
  340. endef
  341. define KODI_INSTALL_INIT_SYSTEMD
  342. $(INSTALL) -D -m 644 package/kodi/kodi.service \
  343. $(TARGET_DIR)/usr/lib/systemd/system/kodi.service
  344. endef
  345. $(eval $(cmake-package))