summaryrefslogtreecommitdiffstats
path: root/project/cmake/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'project/cmake/CMakeLists.txt')
-rw-r--r--project/cmake/CMakeLists.txt367
1 files changed, 367 insertions, 0 deletions
diff --git a/project/cmake/CMakeLists.txt b/project/cmake/CMakeLists.txt
new file mode 100644
index 0000000..03b3752
--- /dev/null
+++ b/project/cmake/CMakeLists.txt
@@ -0,0 +1,367 @@
1cmake_minimum_required(VERSION 3.1)
2project(kodi)
3
4list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/modules)
5if(DEPENDS_DIR)
6 list(APPEND CMAKE_PREFIX_PATH ${DEPENDS_DIR})
7endif()
8
9set(CMAKE_CXX_STANDARD 11)
10set(CMAKE_CXX_STANDARD_REQUIRED ON)
11set(CMAKE_CXX_EXTENSIONS OFF)
12
13# general
14option(VERBOSE "Enable verbose output?" OFF)
15option(ENABLE_DVDCSS "Enable libdvdcss support?" ON)
16option(ENABLE_UPNP "Enable UPnP support?" ON)
17option(ENABLE_NONFREE "Enable non-free components?" ON)
18option(ENABLE_MICROHTTPD "Enable MicroHttpd webserver?" ON)
19option(ENABLE_MYSQLCLIENT "Enable MySql support?" ON)
20option(ENABLE_AVAHI "Enable Avahi support?" ON)
21option(ENABLE_RTMP "Enable RTMP support?" ON)
22option(ENABLE_BLURAY "Enable BluRay support?" ON)
23option(ENABLE_PLIST "Enable AirPlay support?" ON)
24option(ENABLE_NFS "Enable NFS support?" ON)
25option(ENABLE_AIRTUNES "Enable AirTunes support?" ON)
26option(ENABLE_CEC "Enable CEC support?" ON)
27if(UNIX)
28 if(NOT APPLE)
29 option(ENABLE_INTERNAL_FFMPEG "Enable internal ffmpeg?" ON)
30 else()
31 option(ENABLE_VTB "Enable VTB support?" OFF)
32 endif()
33 option(FFMPEG_PATH "Path to external ffmpeg?" "")
34 option(ENABLE_INTERNAL_CROSSGUID "Enable internal crossguid?" ON)
35 option(ENABLE_ALSA "Enable ALSA support?" ON)
36 option(ENABLE_PULSEAUDIO "Enable PulseAudio support?" ON)
37 option(ENABLE_DBUS "Enable dbus support?" ON)
38 option(ENABLE_LIBUSB "Enable libusb support?" ON)
39 option(ENABLE_UDEV "Enable UDev support?" ON)
40 option(ENABLE_OPENGL "Enable OpenGL?" ON)
41 option(ENABLE_OPENGLES "Enable OpenGLES?" ON)
42 option(ENABLE_OPENSSL "Enable OpenSSL?" ON)
43 option(ENABLE_SDL "Enable SDL?" OFF)
44 option(ENABLE_X11 "Enable X11 support?" ON)
45 option(ENABLE_EGL "Enable EGL?" OFF)
46 option(ENABLE_VAAPI "Enable VAAPI support?" ON)
47 option(ENABLE_VDPAU "Enable VDPAU support?" ON)
48 option(ENABLE_OPTICAL "Enable optical support?" ON)
49endif()
50# System options
51if(NOT WIN32)
52 option(WITH_ARCH "build with given arch" OFF)
53 option(WITH_CPU "build with given cpu" OFF)
54 option(ENABLE_CCACHE "Enable Ccache support" ON)
55endif()
56
57get_filename_component(CORE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/../.. ABSOLUTE)
58set(CORE_BUILD_DIR build)
59
60include(scripts/common/generatorsetup.cmake)
61include(scripts/common/addoptions.cmake)
62include(scripts/common/archsetup.cmake)
63include(scripts/common/macros.cmake)
64include(scripts/common/managestring.cmake)
65include(scripts/common/projectmacros.cmake)
66include(scripts/common/pathsetup.cmake)
67include(ExternalProject)
68
69core_find_git_rev()
70core_find_versions()
71
72set(INCLUDES ${CORE_SOURCE_DIR}
73 ${CORE_SOURCE_DIR}/addons/library.xbmc.addon
74 ${CORE_SOURCE_DIR}/lib
75 ${CORE_SOURCE_DIR}/lib/gtest/include
76 ${CORE_SOURCE_DIR}/xbmc
77 ${CORE_SOURCE_DIR}/xbmc/${PLATFORM_DIR}
78 ${CORE_SOURCE_DIR}/xbmc/cores/VideoPlayer
79 ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR})
80
81find_package(PkgConfig)
82if(CMAKE_CROSSCOMPILING)
83 if(PKG_CONFIG_EXECUTABLE)
84 message(STATUS "CMAKE_CROSSCOMPILING: ${CMAKE_CROSSCOMPILING}")
85 set(PKG_CONFIG_FOUND TRUE)
86 endif()
87endif()
88
89find_package(Threads REQUIRED)
90list(APPEND DEPLIBS ${CMAKE_THREAD_LIBS_INIT})
91
92# Required dependencies
93set(required_deps Sqlite3 FreeType PCRE Cpluff LibDvd
94 TinyXML Python Yajl Xslt
95 JPEG Lzo2 Fribidi TagLib FFMPEG CrossGUID)
96if(NOT WIN32)
97 list(APPEND required_deps LibSmbClient ZLIB)
98else()
99 list(APPEND required_deps D3DX11Effects)
100endif()
101if(CORE_SYSTEM_NAME STREQUAL android)
102 list(APPEND required_deps Zip)
103endif()
104
105# Optional dependencies
106set(optional_deps MicroHttpd MySqlClient SSH
107 Alsa UDev Dbus Avahi
108 PulseAudio VDPAU VAAPI)
109
110# Required, dyloaded deps
111set(required_dyload Curl ASS)
112
113# Optional, dyloaded deps
114set(dyload_optional RTMP CEC Bluray Plist NFS)
115
116# Required by shared objects we link
117set(required_dep_libs PNG EXPAT)
118
119# Required tools
120find_package(TexturePacker REQUIRED)
121find_package(JsonSchemaBuilder REQUIRED)
122
123foreach(dep ${required_dep_libs})
124 find_package(${dep} REQUIRED)
125endforeach()
126
127foreach(dep ${required_deps})
128 core_require_dep(${dep})
129endforeach()
130
131foreach(dep ${optional_deps})
132 core_optional_dep(${dep})
133endforeach()
134
135if(NOT UDEV_FOUND)
136 core_optional_dep(LibUSB)
137endif()
138
139foreach(dep ${required_dyload})
140 core_require_dyload_dep(${dep})
141endforeach()
142
143foreach(dep ${dyload_optional})
144 core_optional_dyload_dep(${dep})
145endforeach()
146
147if(ENABLE_OPENSSL)
148 core_require_dep(OpenSSL)
149 list(APPEND DEP_DEFINES "-DHAVE_OPENSSL=1")
150endif()
151
152if(ENABLE_UPNP)
153 list(APPEND DEP_DEFINES "-DUSE_UPNP=1")
154endif()
155
156if(ENABLE_NONFREE)
157 list(APPEND DEP_DEFINES "-DHAVE_XBMC_NONFREE=1")
158endif()
159
160if(ENABLE_OPTICAL)
161 list(APPEND DEP_DEFINES -DHAS_DVD_DRIVE)
162 core_require_dep(Cdio)
163endif()
164
165if(ENABLE_AIRTUNES)
166 find_package(Shairplay)
167 if(SHAIRPLAY_FOUND)
168 core_require_dyload_dep(Shairplay)
169 endif()
170endif()
171
172if(ENABLE_VTB)
173 list(APPEND DEP_DEFINES -DHAVE_VIDEOTOOLBOXDECODER=1)
174endif()
175
176if(NOT WIN32)
177 core_optional_dep(OpenGl)
178 if(OPENGL_FOUND)
179 if(NOT APPLE)
180 core_optional_dep(Sdl)
181 else()
182 core_require_dep(Sdl)
183 endif()
184 core_optional_dep(X ENABLE_X11)
185 core_optional_dep(XRandR ENABLE_X11)
186 else()
187 core_optional_dep(OpenGLES ENABLE_OPENGLES)
188 if(OPENGLES_FOUND)
189 core_optional_dep(EGL ENABLE_EGL)
190 core_optional_dep(OMX ENABLE_OMX)
191 core_optional_dep(AML ENABLE_AML)
192 core_optional_dep(X ENABLE_X11)
193 core_optional_dep(Sdl)
194 endif()
195 endif()
196
197 if(CORE_SYSTEM_NAME STREQUAL rbpi)
198 core_require_dep(MMAL)
199 endif()
200endif()
201
202if(ENABLE_CCACHE)
203 core_optional_dep(CCache)
204endif()
205
206# Compile Info
207add_custom_command(OUTPUT ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp
208 COMMAND ${CMAKE_COMMAND} -DCORE_SOURCE_DIR=${CORE_SOURCE_DIR}
209 -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME}
210 -DCORE_BUILD_DIR=${CORE_BUILD_DIR}
211 -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}
212 -DARCH_DEFINES="${ARCH_DEFINES}"
213 -DAPP_SCMID=${APP_SCMID}
214 -Dprefix=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
215 -P ${PROJECT_SOURCE_DIR}/scripts/common/generateversionedfiles.cmake
216 DEPENDS ${CORE_SOURCE_DIR}/version.txt
217 ${CORE_SOURCE_DIR}/addons/xbmc.addon/addon.xml.in
218 ${CORE_SOURCE_DIR}/addons/kodi.guilib/addon.xml.in
219 ${CORE_SOURCE_DIR}/xbmc/CompileInfo.cpp.in)
220list(APPEND install_data addons/xbmc.addon/addon.xml)
221add_library(compileinfo OBJECT ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp)
222target_compile_options(compileinfo PRIVATE "${SYSTEM_DEFINES}")
223
224# RC File
225if(WIN32)
226 configure_file(${CORE_SOURCE_DIR}/xbmc/win32/XBMC_PC.rc.in
227 ${CORE_BUILD_DIR}/xbmc/win32/XBMC_PC.rc @ONLY)
228 add_library(resources OBJECT ${CORE_BUILD_DIR}/xbmc/win32/XBMC_PC.rc)
229 target_include_directories(resources PRIVATE ${CORE_SOURCE_DIR}/tools/windows/packaging/media)
230 set(RESOURCES $<TARGET_OBJECTS:resources>)
231endif()
232
233include_directories(${INCLUDES} ${SYSTEM_INCLUDES})
234add_compile_options(${ARCH_DEFINES} "${SYSTEM_DEFINES}" ${DEP_DEFINES} ${PATH_DEFINES})
235
236set(core_DEPENDS "" CACHE STRING "" FORCE)
237set(test_archives "" CACHE STRING "" FORCE)
238set(test_sources "" CACHE STRING "" FORCE)
239mark_as_advanced(core_DEPENDS)
240mark_as_advanced(test_archives)
241mark_as_advanced(test_sources)
242
243file(STRINGS ${PROJECT_SOURCE_DIR}/installdata/addon-bindings.txt bindings)
244foreach(binding ${bindings})
245 list(APPEND addon_bindings ${CORE_SOURCE_DIR}/${binding})
246endforeach()
247
248add_subdirectory(${CORE_SOURCE_DIR}/lib/gtest ${CORE_BUILD_DIR}/gtest EXCLUDE_FROM_ALL)
249
250# Subdirs
251core_add_subdirs_from_filelist(${PROJECT_SOURCE_DIR}/treedata/common/*.txt
252 ${PROJECT_SOURCE_DIR}/treedata/${CORE_SYSTEM_NAME}/*.txt)
253core_add_optional_subdirs_from_filelist(${PROJECT_SOURCE_DIR}/treedata/optional/common/*.txt
254 ${PROJECT_SOURCE_DIR}/treedata/optional/${CORE_SYSTEM_NAME}/*.txt)
255
256# copy files to build tree
257copy_files_from_filelist_to_buildtree(${PROJECT_SOURCE_DIR}/installdata/common/*.txt
258 ${PROJECT_SOURCE_DIR}/installdata/${CORE_SYSTEM_NAME}/*.txt)
259
260list(APPEND SKINS "${CORE_SOURCE_DIR}/addons/skin.estuary\;${CORE_SOURCE_DIR}")
261list(APPEND SKINS "${CORE_SOURCE_DIR}/addons/skin.estouchy\;${CORE_SOURCE_DIR}")
262
263# These are skins that are copied into place from the source tree
264foreach(skin ${SKINS})
265 list(GET skin 0 dir)
266 list(GET skin 1 relative)
267 copy_skin_to_buildtree(${dir} ${relative})
268endforeach()
269
270add_custom_target(pack-skins ALL
271 DEPENDS TexturePacker::TexturePacker export-files ${XBT_FILES})
272
273core_link_library(exif system/libexif)
274if(CORE_SYSTEM_NAME STREQUAL linux)
275 core_link_library(sse4 system/libsse4)
276endif()
277
278core_link_library(XBMC_addon addons/library.xbmc.addon/libXBMC_addon)
279core_link_library(XBMC_codec addons/library.xbmc.codec/libXBMC_codec)
280core_link_library(KODI_guilib addons/library.kodi.guilib/libKODI_guilib)
281core_link_library(KODI_adsp addons/library.kodi.adsp/libKODI_adsp)
282core_link_library(XBMC_pvr addons/library.xbmc.pvr/libXBMC_pvr)
283
284file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/system/players/VideoPlayer)
285add_custom_target(wrap-libraries ALL DEPENDS ${WRAP_FILES})
286
287set(LIBCEC_SONAME "${CEC_SONAME}")
288if(NOT CORE_SYSTEM_NAME STREQUAL windows AND NOT CORE_SYSTEM_NAME STREQUAL android)
289 configure_file(${CORE_SOURCE_DIR}/xbmc/DllPaths_generated.h.in
290 ${CORE_BUILD_DIR}/DllPaths_generated.h @ONLY)
291elseif(CORE_SYSTEM_NAME STREQUAL android)
292 configure_file(${CORE_SOURCE_DIR}/xbmc/DllPaths_generated_android.h.in
293 ${CORE_BUILD_DIR}/DllPaths_generated_android.h @ONLY)
294endif()
295
296# Codegen
297add_subdirectory(${CORE_SOURCE_DIR}/xbmc/interfaces/swig build/swig)
298
299# Other files (IDE)
300set(OTHER_FILES README.md)
301
302# main binary
303add_executable(${APP_NAME_LC} ${CORE_MAIN_SOURCE} $<TARGET_OBJECTS:compileinfo> "${RESOURCES}" ${OTHER_FILES})
304whole_archive(_MAIN_LIBRARIES ${core_DEPENDS})
305target_link_libraries(${APP_NAME_LC} ${SYSTEM_LDFLAGS} ${_MAIN_LIBRARIES} ${DEPLIBS} ${CMAKE_DL_LIBS})
306unset(_MAIN_LIBRARIES)
307add_dependencies(${APP_NAME_LC} export-files)
308if(NOT WIN32)
309 set_target_properties(${APP_NAME_LC} PROPERTIES SUFFIX ".bin")
310else()
311 set_target_properties(${APP_NAME_LC} PROPERTIES WIN32_EXECUTABLE ON)
312 copy_main_dlls_to_buildtree()
313endif()
314
315# testing
316copy_files_from_filelist_to_buildtree(${PROJECT_SOURCE_DIR}/installdata/test-reference-data.txt 1)
317add_executable(${APP_NAME_LC}-test EXCLUDE_FROM_ALL ${CORE_SOURCE_DIR}/xbmc/test/xbmc-test.cpp $<TARGET_OBJECTS:compileinfo>)
318whole_archive(_TEST_LIBRARIES ${core_DEPENDS} gtest ${test_archives})
319target_link_libraries(${APP_NAME_LC}-test ${SYSTEM_LDFLAGS} ${_TEST_LIBRARIES} ${DEPLIBS} ${CMAKE_DL_LIBS})
320unset(_TEST_LIBRARIES)
321add_dependencies(${APP_NAME_LC}-test export-files)
322
323# make test and make check (cannot be executed when cross compiling)
324if(NOT CMAKE_CROSSCOMPILING)
325 enable_testing()
326 gtest_add_tests(${APP_NAME_LC}-test "" ${test_sources})
327 add_custom_target(check ${CMAKE_CTEST_COMMAND} WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
328 add_dependencies(check ${APP_NAME_LC}-test)
329
330 # For testing commit series
331 add_custom_target(check-commits ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/scripts/common/checkcommits.cmake
332 -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR})
333endif()
334
335# link wrapper
336if(FFMPEG_LINK_EXECUTABLE)
337 set(CMAKE_CXX_LINK_EXECUTABLE "${FFMPEG_LINK_EXECUTABLE}")
338endif()
339
340# randr
341if(ENABLE_X11 AND XRANDR_FOUND)
342 add_executable(kodi-xrandr ${CORE_SOURCE_DIR}/xbmc-xrandr.c)
343 target_link_libraries(kodi-xrandr ${SYSTEM_LDFLAGS} ${X_LIBRARIES} m ${XRANDR_LIBRARIES})
344endif()
345
346# XBMCHelper
347if(CORE_SYSTEM_TYPE STREQUAL darwin)
348 add_subdirectory(${CORE_SOURCE_DIR}/tools/EventClients/Clients/OSXRemote build/XBMCHelper)
349endif()
350
351include(scripts/${CORE_SYSTEM_NAME}/install.cmake)
352
353# Status
354message(STATUS "#---- CONFIGURATION ----#")
355foreach(msg ${final_message})
356 message(STATUS ${msg})
357endforeach()
358
359if(VERBOSE)
360 message(STATUS "\n#---- Internal Variables ----# ")
361 message(STATUS "DEPLIBS: ${DEPLIBS}")
362 message(STATUS "SYSTEM_LDFLAGS: ${SYSTEM_LDFLAGS}")
363 message(STATUS "core_DEPENDS: ${core_DEPENDS}")
364 message(STATUS "CMAKE_DL_LIBS: ${CMAKE_DL_LIBS}")
365endif()
366message(STATUS "#-----------------------#")
367