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