kodi.mk 10.0 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 = 17.3-Krypton
  9. KODI_SITE = $(call github,xbmc,xbmc,$(KODI_VERSION))
  10. KODI_LICENSE = GPL-2.0
  11. KODI_LICENSE_FILES = LICENSE.GPL
  12. # needed for binary addons
  13. KODI_INSTALL_STAGING = YES
  14. KODI_DEPENDENCIES = \
  15. bzip2 \
  16. expat \
  17. ffmpeg \
  18. fontconfig \
  19. freetype \
  20. host-gawk \
  21. host-gperf \
  22. host-kodi-jsonschemabuilder \
  23. host-kodi-texturepacker \
  24. host-nasm \
  25. host-swig \
  26. host-xmlstarlet \
  27. host-zip \
  28. libass \
  29. libcdio \
  30. libcrossguid \
  31. libcurl \
  32. libfribidi \
  33. libplist \
  34. libsamplerate \
  35. lzo \
  36. ncurses \
  37. openssl \
  38. pcre \
  39. python \
  40. readline \
  41. sqlite \
  42. taglib \
  43. tinyxml \
  44. yajl \
  45. zlib
  46. KODI_SUBDIR = project/cmake
  47. KODI_LIBDVDCSS_VERSION = 2f12236
  48. KODI_LIBDVDNAV_VERSION = 981488f
  49. KODI_LIBDVDREAD_VERSION = 17d99db
  50. KODI_EXTRA_DOWNLOADS = \
  51. https://github.com/xbmc/libdvdcss/archive/$(KODI_LIBDVDCSS_VERSION).tar.gz \
  52. https://github.com/xbmc/libdvdnav/archive/$(KODI_LIBDVDNAV_VERSION).tar.gz \
  53. https://github.com/xbmc/libdvdread/archive/$(KODI_LIBDVDREAD_VERSION).tar.gz
  54. KODI_CONF_OPTS += \
  55. -DENABLE_CCACHE=OFF \
  56. -DENABLE_DVDCSS=ON \
  57. -DENABLE_INTERNAL_CROSSGUID=OFF \
  58. -DENABLE_INTERNAL_FFMPEG=OFF \
  59. -DKODI_DEPENDSBUILD=OFF \
  60. -DENABLE_OPENSSL=ON \
  61. -DNATIVEPREFIX=$(HOST_DIR) \
  62. -DDEPENDS_PATH=$(@D) \
  63. -DWITH_TEXTUREPACKER=$(HOST_DIR)/bin/TexturePacker \
  64. -DLIBDVDCSS_URL=$(DL_DIR)/$(KODI_LIBDVDCSS_VERSION).tar.gz \
  65. -DLIBDVDNAV_URL=$(DL_DIR)/$(KODI_LIBDVDNAV_VERSION).tar.gz \
  66. -DLIBDVDREAD_URL=$(DL_DIR)/$(KODI_LIBDVDREAD_VERSION).tar.gz
  67. ifeq ($(BR2_arm),y)
  68. KODI_CONF_OPTS += -DWITH_ARCH=arm -DWITH_CPU=arm
  69. else ifeq ($(BR2_mips),y)
  70. KODI_CONF_OPTS += -DWITH_ARCH=mips -DWITH_CPU=mips
  71. else ifeq ($(BR2_i386),y)
  72. KODI_CONF_OPTS += -DWITH_ARCH=i486-linux -DWITH_CPU=$(BR2_GCC_TARGET_ARCH)
  73. else ifeq ($(BR2_x86_64),y)
  74. KODI_CONF_OPTS += -DWITH_ARCH=x86_64-linux -DWITH_CPU=x86_64
  75. endif
  76. ifeq ($(BR2_X86_CPU_HAS_SSE),y)
  77. KODI_CONF_OPTS += -D_SSE_OK=ON -D_SSE_TRUE=ON
  78. else
  79. KODI_CONF_OPTS += -D_SSE_OK=OFF -D_SSE_TRUE=OFF
  80. endif
  81. ifeq ($(BR2_X86_CPU_HAS_SSE2),y)
  82. KODI_CONF_OPTS += -D_SSE2_OK=ON -D_SSE2_TRUE=ON
  83. else
  84. KODI_CONF_OPTS += -D_SSE2_OK=OFF -D_SSE2_TRUE=OFF
  85. endif
  86. ifeq ($(BR2_X86_CPU_HAS_SSE3),y)
  87. KODI_CONF_OPTS += -D_SSE3_OK=ON -D_SSE3_TRUE=ON
  88. else
  89. KODI_CONF_OPTS += -D_SSE3_OK=OFF -D_SSE3_TRUE=OFF
  90. endif
  91. ifeq ($(BR2_X86_CPU_HAS_SSSE3),y)
  92. KODI_CONF_OPTS += -D_SSSE3_OK=ON -D_SSSE3_TRUE=ON
  93. else
  94. KODI_CONF_OPTS += -D_SSSE3_OK=OFF -D_SSSE3_TRUE=OFF
  95. endif
  96. ifeq ($(BR2_X86_CPU_HAS_SSE4),y)
  97. KODI_CONF_OPTS += -D_SSE41_OK=ON -D_SSE41_TRUE=ON
  98. else
  99. KODI_CONF_OPTS += -D_SSE41_OK=OFF -D_SSE41_TRUE=OFF
  100. endif
  101. ifeq ($(BR2_X86_CPU_HAS_SSE42),y)
  102. KODI_CONF_OPTS += -D_SSE42_OK=ON -D_SSE42_TRUE=ON
  103. else
  104. KODI_CONF_OPTS += -D_SSE42_OK=OFF -D_SSE42_TRUE=OFF
  105. endif
  106. ifeq ($(BR2_X86_CPU_HAS_AVX),y)
  107. KODI_CONF_OPTS += -D_AVX_OK=ON -D_AVX_TRUE=ON
  108. else
  109. KODI_CONF_OPTS += -D_AVX_OK=OFF -D_AVX_TRUE=OFF
  110. endif
  111. ifeq ($(BR2_X86_CPU_HAS_AVX2),y)
  112. KODI_CONF_OPTS += -D_AVX2_OK=ON -D_AVX2_TRUE=ON
  113. else
  114. KODI_CONF_OPTS += -D_AVX2_OK=OFF -D_AVX2_TRUE=OFF
  115. endif
  116. ifeq ($(BR2_PACKAGE_KODI_MYSQL),y)
  117. KODI_CONF_OPTS += -DENABLE_MYSQLCLIENT=ON
  118. KODI_DEPENDENCIES += mysql
  119. else
  120. KODI_CONF_OPTS += -DENABLE_MYSQLCLIENT=OFF
  121. endif
  122. ifeq ($(BR2_PACKAGE_KODI_NONFREE),y)
  123. KODI_CONF_OPTS += -DENABLE_NONFREE=ON
  124. KODI_LICENSE := $(KODI_LICENSE), unrar
  125. KODI_LICENSE_FILES += lib/UnrarXLib/license.txt
  126. else
  127. KODI_CONF_OPTS += -DENABLE_NONFREE=OFF
  128. endif
  129. ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)
  130. KODI_CONF_OPTS += -DCORE_SYSTEM_NAME=rbpi
  131. KODI_DEPENDENCIES += rpi-userland
  132. else
  133. # Kodi considers "rpbi" and "linux" as two separate platforms. The
  134. # below options, defined in
  135. # project/cmake/scripts/linux/ArchSetup.cmake are only valid for the
  136. # "linux" platforms. The "rpbi" platform has a different set of
  137. # options, defined in project/cmake/scripts/rbpi/
  138. KODI_CONF_OPTS += -DENABLE_LDGOLD=OFF
  139. ifeq ($(BR2_PACKAGE_LIBAMCODEC),y)
  140. KODI_CONF_OPTS += -DENABLE_AML=ON
  141. KODI_DEPENDENCIES += libamcodec
  142. else
  143. KODI_CONF_OPTS += -DENABLE_AML=OFF
  144. endif
  145. ifeq ($(BR2_PACKAGE_IMX_VPUWRAP),y)
  146. KODI_CONF_OPTS += -DENABLE_IMX=ON
  147. KODI_DEPENDENCIES += imx-vpuwrap
  148. else
  149. KODI_CONF_OPTS += -DENABLE_IMX=OFF
  150. endif
  151. endif
  152. ifeq ($(BR2_PACKAGE_HAS_UDEV),y)
  153. KODI_CONF_OPTS += -DENABLE_UDEV=ON
  154. KODI_DEPENDENCIES += udev
  155. else
  156. KODI_CONF_OPTS += -DENABLE_UDEV=OFF
  157. ifeq ($(BR2_PACKAGE_KODI_LIBUSB),y)
  158. KODI_CONF_OPTS += -DENABLE_LIBUSB=ON
  159. KODI_DEPENDENCIES += libusb-compat
  160. endif
  161. endif
  162. ifeq ($(BR2_PACKAGE_LIBCAP),y)
  163. KODI_CONF_OPTS += -DENABLE_CAP=ON
  164. KODI_DEPENDENCIES += libcap
  165. else
  166. KODI_CONF_OPTS += -DENABLE_CAP=OFF
  167. endif
  168. ifeq ($(BR2_PACKAGE_LIBXML2)$(BR2_PACKAGE_LIBXSLT),yy)
  169. KODI_CONF_OPTS += -DENABLE_XSLT=ON
  170. KODI_DEPENDENCIES += libxml2 libxslt
  171. else
  172. KODI_CONF_OPTS += -DENABLE_XSLT=OFF
  173. endif
  174. ifeq ($(BR2_PACKAGE_KODI_BLUEZ),y)
  175. KODI_CONF_OPTS += -DENABLE_BLUETOOTH=ON
  176. KODI_DEPENDENCIES += bluez5_utils
  177. else
  178. KODI_CONF_OPTS += -DENABLE_BLUETOOTH=OFF
  179. endif
  180. ifeq ($(BR2_PACKAGE_KODI_DBUS),y)
  181. KODI_DEPENDENCIES += dbus
  182. KODI_CONF_OPTS += -DENABLE_DBUS=ON
  183. else
  184. KODI_CONF_OPTS += -DENABLE_DBUS=OFF
  185. endif
  186. ifeq ($(BR2_PACKAGE_KODI_EVENTCLIENTS),y)
  187. KODI_CONF_OPTS += -DENABLE_EVENTCLIENTS=ON
  188. else
  189. KODI_CONF_OPTS += -DENABLE_EVENTCLIENTS=OFF
  190. endif
  191. ifeq ($(BR2_PACKAGE_KODI_ALSA_LIB),y)
  192. KODI_CONF_OPTS += -DENABLE_ALSA=ON
  193. KODI_DEPENDENCIES += alsa-lib
  194. else
  195. KODI_CONF_OPTS += -DENABLE_ALSA=OFF
  196. endif
  197. ifeq ($(BR2_PACKAGE_KODI_GL_EGL),y)
  198. KODI_DEPENDENCIES += libegl libglu libgl xlib_libX11 xlib_libXext \
  199. xlib_libXrandr libdrm
  200. KODI_CONF_OPTS += -DENABLE_OPENGL=ON -DENABLE_X11=ON -DENABLE_OPENGLES=OFF
  201. else
  202. KODI_CONF_OPTS += -DENABLE_OPENGL=OFF -DENABLE_X11=OFF
  203. endif
  204. ifeq ($(BR2_PACKAGE_KODI_EGL_GLES),y)
  205. KODI_DEPENDENCIES += libegl libgles
  206. KODI_CONF_OPTS += \
  207. -DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) `$(PKG_CONFIG_HOST_BINARY) --cflags --libs egl`" \
  208. -DCMAKE_C_FLAGS="$(TARGET_CFLAGS) `$(PKG_CONFIG_HOST_BINARY) --cflags --libs egl`" \
  209. -DENABLE_OPENGLES=ON
  210. else
  211. KODI_CONF_OPTS += -DENABLE_OPENGLES=OFF
  212. endif
  213. ifeq ($(BR2_PACKAGE_KODI_LIBMICROHTTPD),y)
  214. KODI_CONF_OPTS += -DENABLE_MICROHTTPD=ON
  215. KODI_DEPENDENCIES += libmicrohttpd
  216. else
  217. KODI_CONF_OPTS += -DENABLE_MICROHTTPD=OFF
  218. endif
  219. ifeq ($(BR2_PACKAGE_KODI_LIBSMBCLIENT),y)
  220. KODI_DEPENDENCIES += samba4
  221. KODI_CONF_OPTS += -DENABLE_SMBCLIENT=ON
  222. else
  223. KODI_CONF_OPTS += -DENABLE_SMBCLIENT=OFF
  224. endif
  225. ifeq ($(BR2_PACKAGE_KODI_LIBNFS),y)
  226. KODI_DEPENDENCIES += libnfs
  227. KODI_CONF_OPTS += -DENABLE_NFS=ON
  228. else
  229. KODI_CONF_OPTS += -DENABLE_NFS=OFF
  230. endif
  231. ifeq ($(BR2_PACKAGE_KODI_LIBBLURAY),y)
  232. KODI_DEPENDENCIES += libbluray
  233. KODI_CONF_OPTS += -DENABLE_BLURAY=ON
  234. else
  235. KODI_CONF_OPTS += -DENABLE_BLURAY=OFF
  236. endif
  237. ifeq ($(BR2_PACKAGE_KODI_LIBSHAIRPLAY),y)
  238. KODI_DEPENDENCIES += libshairplay
  239. KODI_CONF_OPTS += -DENABLE_AIRTUNES=ON
  240. else
  241. KODI_CONF_OPTS += -DENABLE_AIRTUNES=OFF
  242. endif
  243. ifeq ($(BR2_PACKAGE_KODI_LIBSSH),y)
  244. KODI_DEPENDENCIES += libssh
  245. KODI_CONF_OPTS += -DENABLE_SSH=ON
  246. else
  247. KODI_CONF_OPTS += -DENABLE_SSH=OFF
  248. endif
  249. ifeq ($(BR2_PACKAGE_KODI_AVAHI),y)
  250. KODI_DEPENDENCIES += avahi
  251. KODI_CONF_OPTS += -DENABLE_AVAHI=ON
  252. else
  253. KODI_CONF_OPTS += -DENABLE_AVAHI=OFF
  254. endif
  255. ifeq ($(BR2_PACKAGE_KODI_LIBCEC),y)
  256. KODI_DEPENDENCIES += libcec
  257. KODI_CONF_OPTS += -DENABLE_CEC=ON
  258. else
  259. KODI_CONF_OPTS += -DENABLE_CEC=OFF
  260. endif
  261. ifeq ($(BR2_PACKAGE_KODI_LCMS2),y)
  262. KODI_DEPENDENCIES += lcms2
  263. KODI_CONF_OPTS += -DENABLE_LCMS2=ON
  264. else
  265. KODI_CONF_OPTS += -DENABLE_LCMS2=OFF
  266. endif
  267. ifeq ($(BR2_PACKAGE_KODI_LIRC),y)
  268. KODI_CONF_OPTS += -DENABLE_LIRC=ON
  269. else
  270. KODI_CONF_OPTS += -DENABLE_LIRC=OFF
  271. endif
  272. ifeq ($(BR2_PACKAGE_KODI_LIBTHEORA),y)
  273. KODI_DEPENDENCIES += libtheora
  274. endif
  275. # kodi needs libva & libva-glx
  276. ifeq ($(BR2_PACKAGE_KODI_LIBVA)$(BR2_PACKAGE_MESA3D_DRI_DRIVER),yy)
  277. KODI_DEPENDENCIES += mesa3d libva
  278. KODI_CONF_OPTS += -DENABLE_VAAPI=ON
  279. else
  280. KODI_CONF_OPTS += -DENABLE_VAAPI=OFF
  281. endif
  282. ifeq ($(BR2_PACKAGE_KODI_LIBVDPAU),y)
  283. KODI_DEPENDENCIES += libvdpau
  284. KODI_CONF_OPTS += -DENABLE_VDPAU=ON
  285. else
  286. KODI_CONF_OPTS += -DENABLE_VDPAU=OFF
  287. endif
  288. ifeq ($(BR2_PACKAGE_KODI_UPNP),y)
  289. KODI_CONF_OPTS += -DENABLE_UPNP=ON
  290. else
  291. KODI_CONF_OPTS += -DENABLE_UPNP=OFF
  292. endif
  293. ifeq ($(BR2_PACKAGE_KODI_OPTICALDRIVE),y)
  294. KODI_CONF_OPTS += -DENABLE_OPTICAL=ON
  295. else
  296. KODI_CONF_OPTS += -DENABLE_OPTICAL=OFF
  297. endif
  298. ifeq ($(BR2_PACKAGE_KODI_PULSEAUDIO),y)
  299. KODI_CONF_OPTS += -DENABLE_PULSEAUDIO=ON
  300. KODI_DEPENDENCIES += pulseaudio
  301. else
  302. KODI_CONF_OPTS += -DENABLE_PULSEAUDIO=OFF
  303. endif
  304. # Remove versioncheck addon, updating Kodi is done by building a new
  305. # buildroot image.
  306. KODI_ADDON_MANIFEST = $(TARGET_DIR)/usr/share/kodi/system/addon-manifest.xml
  307. define KODI_CLEAN_UNUSED_ADDONS
  308. rm -Rf $(TARGET_DIR)/usr/share/kodi/addons/service.xbmc.versioncheck
  309. $(HOST_DIR)/bin/xml ed -L \
  310. -d "/addons/addon[text()='service.xbmc.versioncheck']" \
  311. $(KODI_ADDON_MANIFEST)
  312. endef
  313. KODI_POST_INSTALL_TARGET_HOOKS += KODI_CLEAN_UNUSED_ADDONS
  314. define KODI_INSTALL_BR_WRAPPER
  315. $(INSTALL) -D -m 0755 package/kodi/br-kodi \
  316. $(TARGET_DIR)/usr/bin/br-kodi
  317. endef
  318. KODI_POST_INSTALL_TARGET_HOOKS += KODI_INSTALL_BR_WRAPPER
  319. # When run from a startup script, Kodi has no $HOME where to store its
  320. # configuration, so ends up storing it in /.kodi (yes, at the root of
  321. # the rootfs). This is a problem for read-only filesystems. But we can't
  322. # easily change that, so create /.kodi as a symlink where we want the
  323. # config to eventually be. Add synlinks for the legacy XBMC name as well
  324. define KODI_INSTALL_CONFIG_DIR
  325. $(INSTALL) -d -m 0755 $(TARGET_DIR)/var/kodi
  326. ln -sf /var/kodi $(TARGET_DIR)/.kodi
  327. ln -sf /var/kodi $(TARGET_DIR)/var/xbmc
  328. ln -sf /var/kodi $(TARGET_DIR)/.xbmc
  329. endef
  330. KODI_POST_INSTALL_TARGET_HOOKS += KODI_INSTALL_CONFIG_DIR
  331. define KODI_INSTALL_INIT_SYSV
  332. $(INSTALL) -D -m 755 package/kodi/S50kodi \
  333. $(TARGET_DIR)/etc/init.d/S50kodi
  334. endef
  335. define KODI_INSTALL_INIT_SYSTEMD
  336. $(INSTALL) -D -m 644 package/kodi/kodi.service \
  337. $(TARGET_DIR)/usr/lib/systemd/system/kodi.service
  338. mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
  339. ln -fs ../../../../usr/lib/systemd/system/kodi.service \
  340. $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/kodi.service
  341. endef
  342. $(eval $(cmake-package))