1 cmake_minimum_required(VERSION 3.12)
3 # Version 3.20 is required for multi-config generator expressions to work
4 cmake_minimum_required(VERSION 3.20)
6 project(kodi LANGUAGES CXX C ASM)
9 set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
10 cmake_policy(SET CMP0069 NEW)
13 list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
14 list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules/buildtools)
16 list(APPEND CMAKE_PREFIX_PATH ${DEPENDS_DIR})
20 set(CORE_BUILD_DIR build)
21 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
23 message(STATUS "Source directory: ${CMAKE_SOURCE_DIR}")
24 message(STATUS "Build directory: ${CMAKE_BINARY_DIR}")
25 if(CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
26 message(WARNING "In-source build detected. It is recommended to build out-of-source.")
29 # Hide messages from Check*.cmake (e.g. CheckCSourceCompiles)
31 set(CMAKE_REQUIRED_QUIET ON)
35 include(cmake/modules/extra/ECMEnableSanitizers.cmake)
36 include(cmake/scripts/common/GeneratorSetup.cmake)
37 include(cmake/scripts/common/AddOptions.cmake)
38 include(cmake/scripts/common/Platform.cmake)
39 include(cmake/scripts/common/ArchSetup.cmake)
40 include(cmake/scripts/common/Macros.cmake)
41 include(cmake/scripts/common/ProjectMacros.cmake)
43 include(cmake/scripts/common/PathSetup.cmake)
44 include(cmake/scripts/common/CompilerSettings.cmake)
45 include(ExternalProject)
46 include(CMakeDependentOption)
47 include(cmake/scripts/common/DependencyOptions.cmake)
50 option(VERBOSE "Enable verbose output?" OFF)
51 option(ENABLE_CLANGTIDY "Enable clang-tidy support?" OFF)
52 option(ENABLE_CPPCHECK "Enable cppcheck support?" OFF)
53 option(ENABLE_DVDCSS "Enable libdvdcss support?" ON)
54 option(ENABLE_INCLUDEWHATYOUUSE "Enable include-what-you-use support?" OFF)
55 option(ENABLE_UPNP "Enable UPnP support?" ON)
56 option(ENABLE_AIRTUNES "Enable AirTunes support?" ON)
57 option(ENABLE_OPTICAL "Enable optical support?" ON)
58 option(ENABLE_PYTHON "Enable python support?" ON)
59 option(ENABLE_TESTING "Enable testing support?" ON)
61 # Internal Depends - supported on all platforms
63 # These are required enabled for all CI platforms, and recommended for all builds
64 option(ENABLE_INTERNAL_CROSSGUID "Enable internal crossguid?" ON)
65 option(ENABLE_INTERNAL_RapidJSON "Enable internal rapidjson?" ON)
67 # use ffmpeg from depends or system
68 option(ENABLE_INTERNAL_FFMPEG "Enable internal ffmpeg?" OFF)
70 # These are built for all platforms not using system libs or disabled by user
71 dependent_option(ENABLE_INTERNAL_FLATBUFFERS "Enable internal flatbuffers?")
72 dependent_option(ENABLE_INTERNAL_FMT "Enable internal fmt?")
73 dependent_option(ENABLE_INTERNAL_NFS "Enable internal libnfs?")
74 dependent_option(ENABLE_INTERNAL_PCRE "Enable internal pcre?")
75 dependent_option(ENABLE_INTERNAL_SPDLOG "Enable internal spdlog?")
76 dependent_option(ENABLE_INTERNAL_TAGLIB "Enable internal taglib?")
78 # Internal Depends - supported on UNIX platforms
80 option(FFMPEG_PATH "Path to external ffmpeg?" "")
81 option(ENABLE_INTERNAL_FSTRCMP "Enable internal fstrcmp?" OFF)
82 option(ENABLE_INTERNAL_DAV1D "Enable internal dav1d?" OFF)
83 option(ENABLE_INTERNAL_GTEST "Enable internal gtest?" OFF)
84 option(ENABLE_INTERNAL_UDFREAD "Enable internal udfread?" OFF)
86 # prefer kissfft from xbmc/contrib but let use system one on unices
87 cmake_dependent_option(ENABLE_INTERNAL_KISSFFT "Enable internal kissfft?" ON "UNIX" ON)
90 option(WITH_ARCH "build with given arch" OFF)
91 option(WITH_CPU "build with given cpu" OFF)
93 if(CORE_SYSTEM_NAME STREQUAL linux)
94 option(ENABLE_EVENTCLIENTS "Enable event clients support?" OFF)
95 option(ADDONS_CONFIGURE_AT_STARTUP "Configure binary addons at startup?" ON)
98 # set scope of INTERNAL_DEPS
99 set_property(GLOBAL PROPERTY INTERNAL_DEPS_PROP)
101 # Build static libraries per directory
102 if(NOT CMAKE_GENERATOR MATCHES "Visual Studio" AND NOT CMAKE_GENERATOR STREQUAL Xcode)
103 set(ENABLE_STATIC_LIBS TRUE)
105 set(ENABLE_STATIC_LIBS FALSE)
108 core_find_git_rev(APP_SCMID FULL)
110 # Dynamically loaded libraries built with the project
111 add_custom_target(${APP_NAME_LC}-libraries)
112 set(LIBRARY_FILES "" CACHE STRING "" FORCE)
113 mark_as_advanced(LIBRARY_FILES)
115 set(INCLUDES ${CMAKE_SOURCE_DIR}
116 ${CMAKE_SOURCE_DIR}/lib
117 ${CMAKE_SOURCE_DIR}/xbmc
118 ${CMAKE_SOURCE_DIR}/xbmc/${PLATFORM_DIR}
119 ${CMAKE_SOURCE_DIR}/xbmc/cores/VideoPlayer
120 ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
121 ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include)
123 if (NOT PLATFORMDEFS_DIR STREQUAL "")
124 list(APPEND INCLUDES ${CMAKE_SOURCE_DIR}/xbmc/${PLATFORMDEFS_DIR})
127 find_package(PkgConfig)
128 set(THREADS_PREFER_PTHREAD_FLAG ON)
129 find_package(Threads REQUIRED QUIET)
130 list(APPEND DEPLIBS ${CMAKE_THREAD_LIBS_INIT})
133 foreach(depspec ${PLATFORM_REQUIRED_DEPS})
134 # We need to specify ENABLE_${PLATFORM_REQUIRED_DEPS} in order for the
135 # optional subdirectory for the specified platform to get built.
136 split_dependency_specification(${depspec} dep version)
137 string(TOUPPER ${dep} depup)
138 if(NOT ${ENABLE_${depup}} STREQUAL AUTO AND NOT ${ENABLE_${depup}})
139 message(WARNING "Your request to disable the dependency ${dep} required on platform ${CORE_PLATFORM_NAME} was ignored. Please choose another platform or add \"-DENABLE_${depup}=ON\" to your CMake command line to resolve this warning.")
141 set(ENABLE_${depup} "ON" CACHE BOOL "Force enabling required ${depup} support" FORCE)
144 # Required tools. Keep in alphabetical order please
145 set(required_buildtools FlatC
150 # Optional build tools
151 set(optional_buildtools CCache
157 # Find build tools - Optional and required
158 core_optional_dep(${optional_buildtools})
159 core_require_dep(${required_buildtools})
161 # Required dependencies. Keep in alphabetical order please
162 set(required_deps ASS
185 ${PLATFORM_REQUIRED_DEPS})
187 # Optional dependencies. Keep in alphabetical order please
188 set(optional_deps Alsa
211 ${PLATFORM_OPTIONAL_DEPS})
213 # Check optional deps first, since their availability can influence required ones, e.g. ffmpeg
214 core_optional_dep(${optional_deps})
215 core_require_dep(${required_deps})
217 if(ENABLE_MARIADBCLIENT AND NOT ENABLE_MARIADBCLIENT STREQUAL AUTO AND ENABLE_MYSQLCLIENT AND NOT ENABLE_MYSQLCLIENT STREQUAL AUTO)
218 MESSAGE(FATAL_ERROR "You can not use MySql and MariaDB at the same time. Disable one by adding -DENABLE_MYSQLCLIENT=OFF or -DENABLE_MARIADBCLIENT=OFF.")
219 elseif(ENABLE_MYSQLCLIENT AND NOT ENABLE_MYSQLCLIENT STREQUAL AUTO)
220 set(ENABLE_MARIADBCLIENT OFF CACHE BOOL "")
223 core_optional_dep(MariaDBClient)
224 if(NOT MARIADBCLIENT_FOUND)
225 core_optional_dep(MySqlClient)
229 core_optional_dep(LibUSB)
233 list(APPEND DEP_DEFINES "-DHAS_UPNP=1")
237 list(APPEND DEP_DEFINES -DHAS_DVD_DRIVE -DHAS_CDDA_RIPPER)
241 find_package(Shairplay)
243 core_require_dep(Shairplay)
247 # find all folders containing addon.xml.in
248 # used to define ADDON_XML_OUTPUTS, ADDON_XML_DEPENDS and ADDON_INSTALL_DATA
249 # Function defined in ./cmake/scripts/common/Macros.cmake
250 set(outputFilterRegex "addons/xbmc.json")
251 find_addon_xml_in_files(${outputFilterRegex})
254 add_custom_command(OUTPUT ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp
256 COMMAND ${CMAKE_COMMAND} -DCORE_SOURCE_DIR=${CMAKE_SOURCE_DIR}
257 -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME}
258 -DCORE_PLATFORM_NAME_LC="${CORE_PLATFORM_NAME_LC}"
259 -DCORE_BUILD_DIR=${CORE_BUILD_DIR}
260 -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}
261 -DARCH_DEFINES="${ARCH_DEFINES}"
262 -DAPP_SCMID=${APP_SCMID}
263 -DAPP_COPYRIGHT_YEARS=${APP_COPYRIGHT_YEARS}
264 -DAPP_BUILD_DATE=${APP_BUILD_DATE}
265 -DAPP_SHARED_LIBRARY_SUFFIX="${APP_SHARED_LIBRARY_SUFFIX}"
266 -DPYTHON_VERSION=${PYTHON_VERSION}
267 -Dprefix=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
268 -DKODI_WEBSERVER_EXTRA_WHITELIST="${KODI_WEBSERVER_EXTRA_WHITELIST}"
269 -P ${CMAKE_SOURCE_DIR}/cmake/scripts/common/GenerateVersionedFiles.cmake
270 DEPENDS ${CMAKE_SOURCE_DIR}/version.txt
273 ${CMAKE_SOURCE_DIR}/xbmc/CompileInfo.cpp.in)
274 list(APPEND install_data ${ADDON_INSTALL_DATA})
275 add_library(compileinfo OBJECT ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp)
276 set_target_properties(compileinfo PROPERTIES FOLDER "Build Utilities")
277 target_compile_options(compileinfo PRIVATE ${SYSTEM_DEFINES} ${ARCH_DEFINES})
278 add_dependencies(compileinfo fmt::fmt)
281 target_compile_options(compileinfo PUBLIC ${CORE_COMPILE_OPTIONS})
286 configure_file(${CMAKE_SOURCE_DIR}/xbmc/platform/win32/XBMC_PC.rc.in
287 ${CORE_BUILD_DIR}/xbmc/platform/win32/XBMC_PC.rc @ONLY)
288 add_library(resources OBJECT ${CORE_BUILD_DIR}/xbmc/platform/win32/XBMC_PC.rc)
289 set_target_properties(resources PROPERTIES FOLDER "Build Utilities")
290 target_include_directories(resources PRIVATE ${CMAKE_SOURCE_DIR}/tools/windows/packaging/media)
291 set(RESOURCES $<TARGET_OBJECTS:resources>)
295 core_add_subdirs_from_filelist(${CMAKE_SOURCE_DIR}/cmake/messages/flatbuffers/*.txt)
297 include_directories(${INCLUDES} SYSTEM ${SYSTEM_INCLUDES})
298 add_compile_options(${ARCH_DEFINES} "${SYSTEM_DEFINES}" ${DEP_DEFINES} ${PATH_DEFINES})
300 set(core_DEPENDS "" CACHE STRING "" FORCE)
301 set(test_archives "" CACHE STRING "" FORCE)
302 set(test_sources "" CACHE STRING "" FORCE)
303 mark_as_advanced(core_DEPENDS)
304 mark_as_advanced(test_archives)
305 mark_as_advanced(test_sources)
307 # copy files to build tree
308 copy_files_from_filelist_to_buildtree(${CMAKE_SOURCE_DIR}/cmake/installdata/common/*.txt
309 ${CMAKE_SOURCE_DIR}/cmake/installdata/${CORE_SYSTEM_NAME}/*.txt)
311 list(APPEND SKINS "${CMAKE_SOURCE_DIR}/addons/skin.estuary\;${CMAKE_SOURCE_DIR}")
312 list(APPEND SKINS "${CMAKE_SOURCE_DIR}/addons/skin.estouchy\;${CMAKE_SOURCE_DIR}")
314 # These are skins that are copied into place from the source tree
315 foreach(skin ${SKINS})
317 list(GET skin 1 relative)
318 copy_skin_to_buildtree(${dir} ${relative})
321 add_custom_target(pack-skins ALL
322 DEPENDS TexturePacker::TexturePacker::Executable export-files ${XBT_FILES})
323 set_target_properties(pack-skins PROPERTIES FOLDER "Build Utilities")
325 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/system/players/VideoPlayer)
327 set(LIBCEC_SONAME "${CEC_SONAME}")
328 if(NOT CORE_SYSTEM_NAME STREQUAL windows AND NOT CORE_SYSTEM_NAME STREQUAL android AND NOT CORE_SYSTEM_NAME STREQUAL windowsstore)
329 configure_file(${CMAKE_SOURCE_DIR}/xbmc/DllPaths_generated.h.in
330 ${CORE_BUILD_DIR}/DllPaths_generated.h @ONLY)
331 elseif(CORE_SYSTEM_NAME STREQUAL android)
332 configure_file(${CMAKE_SOURCE_DIR}/xbmc/DllPaths_generated_android.h.in
333 ${CORE_BUILD_DIR}/DllPaths_generated_android.h @ONLY)
336 get_property(INTERNAL_DEPS GLOBAL PROPERTY INTERNAL_DEPS_PROP)
337 set(GLOBAL_TARGET_DEPS ${INTERNAL_DEPS} ${PLATFORM_GLOBAL_TARGET_DEPS})
339 # main library (used for main binary and tests)
340 if(CMAKE_GENERATOR STREQUAL Xcode)
341 add_library(compileinfo_obj OBJECT IMPORTED)
342 set_property(TARGET compileinfo_obj PROPERTY IMPORTED_OBJECTS
343 "${CMAKE_BINARY_DIR}/$(PROJECT_NAME).build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/compileinfo.build/$(OBJECT_FILE_DIR_normal:base)/$(CURRENT_ARCH)/CompileInfo.o"
345 add_library(lib${APP_NAME_LC} STATIC)
346 add_dependencies(lib${APP_NAME_LC} compileinfo)
347 target_link_libraries(lib${APP_NAME_LC} PUBLIC compileinfo_obj)
349 add_library(lib${APP_NAME_LC} STATIC $<TARGET_OBJECTS:compileinfo>)
351 add_dependencies(lib${APP_NAME_LC} ${GLOBAL_TARGET_DEPS})
352 set_target_properties(lib${APP_NAME_LC} PROPERTIES PREFIX "")
355 set(OTHER_FILES cmake/README.md)
358 foreach(CORE_PLATFORM_LC ${CORE_PLATFORM_NAME_LC})
359 core_add_subdirs_from_filelist(${CMAKE_SOURCE_DIR}/cmake/treedata/common/${CORE_PLATFORM_LC}/*.txt
360 ${CMAKE_SOURCE_DIR}/cmake/treedata/${CORE_SYSTEM_NAME}/${CORE_PLATFORM_LC}/*.txt)
363 core_add_subdirs_from_filelist(${CMAKE_SOURCE_DIR}/cmake/treedata/common/*.txt
364 ${CMAKE_SOURCE_DIR}/cmake/treedata/${CORE_SYSTEM_NAME}/*.txt)
365 core_add_optional_subdirs_from_filelist(${CMAKE_SOURCE_DIR}/cmake/treedata/optional/common/*.txt
366 ${CMAKE_SOURCE_DIR}/cmake/treedata/optional/${CORE_SYSTEM_NAME}/*.txt)
368 target_link_libraries(lib${APP_NAME_LC} PUBLIC ${core_DEPENDS} ${SYSTEM_LDFLAGS} ${DEPLIBS} ${CMAKE_DL_LIBS})
369 set_target_properties(lib${APP_NAME_LC} PROPERTIES PROJECT_LABEL "xbmc")
370 source_group_by_folder(lib${APP_NAME_LC} RELATIVE ${CMAKE_SOURCE_DIR}/xbmc)
372 add_precompiled_header(lib${APP_NAME_LC} pch.h ${CMAKE_SOURCE_DIR}/xbmc/platform/win32/pch.cpp)
373 set_language_cxx(lib${APP_NAME_LC})
377 if(NOT CORE_SYSTEM_NAME STREQUAL android)
378 if(CORE_SYSTEM_NAME STREQUAL windowsstore)
379 winstore_add_target_properties(${APP_NAME_LC})
381 add_executable(${APP_NAME_LC} ${CORE_MAIN_SOURCE} "${RESOURCES}" ${OTHER_FILES})
382 set_target_properties(${APP_NAME_LC} PROPERTIES ENABLE_EXPORTS ON)
384 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
385 add_library(${APP_NAME_LC} SHARED ${CORE_MAIN_SOURCE} "${RESOURCES}" ${OTHER_FILES})
387 # Statically resolve global references to shared library (ie. ffmpeg) definitions.
388 # Related to https://stackoverflow.com/questions/46307266/including-objects-to-a-shared-library-from-a-c-archive-a
389 set_target_properties(${APP_NAME_LC} PROPERTIES LINK_FLAGS "-Wl,-Bsymbolic")
391 add_dependencies(${APP_NAME_LC} ${APP_NAME_LC}-libraries export-files pack-skins)
392 whole_archive(_MAIN_LIBRARIES ${FSTRCMP_LIBRARY} ${core_DEPENDS})
393 target_link_libraries(${APP_NAME_LC} ${_MAIN_LIBRARIES} lib${APP_NAME_LC} ${DEPLIBS})
394 unset(_MAIN_LIBRARIES)
397 set_target_properties(${APP_NAME_LC} PROPERTIES WIN32_EXECUTABLE ON)
398 set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT ${APP_NAME_LC})
399 if(NOT CORE_SYSTEM_NAME STREQUAL windowsstore)
400 target_sources(${APP_NAME_LC} PRIVATE ${CMAKE_SOURCE_DIR}/xbmc/platform/win32/app.manifest)
402 set_target_properties(${APP_NAME_LC} PROPERTIES VS_USER_PROPS ${VCPROJECT_PROPS_FILE}
403 VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION ${VS_MINIMUM_SDK_VERSION})
405 elseif(CORE_SYSTEM_NAME STREQUAL android)
407 elseif(CORE_SYSTEM_NAME STREQUAL darwin_embedded)
408 set_target_properties(${APP_NAME_LC} PROPERTIES OUTPUT_NAME ${APP_NAME}
409 MACOSX_BUNDLE_INFO_PLIST ${PLATFORM_BUNDLE_INFO_PLIST})
411 set_target_properties(${APP_NAME_LC} PROPERTIES SUFFIX ${APP_BINARY_SUFFIX})
415 if(HOST_CAN_EXECUTE_TARGET AND ENABLE_TESTING)
418 copy_files_from_filelist_to_buildtree(${CMAKE_SOURCE_DIR}/cmake/installdata/test-reference-data.txt NO_INSTALL)
419 add_executable(${APP_NAME_LC}-test EXCLUDE_FROM_ALL ${CMAKE_SOURCE_DIR}/xbmc/test/xbmc-test.cpp ${test_sources})
421 set_target_properties(PROPERTIES ENABLE_EXPORTS ON)
423 whole_archive(_TEST_LIBRARIES ${core_DEPENDS} ${GTEST_LIBRARY})
424 target_link_libraries(${APP_NAME_LC}-test PRIVATE ${SYSTEM_LDFLAGS} ${_TEST_LIBRARIES} lib${APP_NAME_LC} ${DEPLIBS} ${CMAKE_DL_LIBS})
425 unset(_TEST_LIBRARIES)
427 if (ENABLE_INTERNAL_GTEST)
428 add_dependencies(${APP_NAME_LC}-test ${APP_NAME_LC}-libraries export-files gtest)
431 # Enable unit-test related targets
433 gtest_add_tests(${APP_NAME_LC}-test "" ${test_sources})
434 add_custom_target(check ${CMAKE_CTEST_COMMAND} WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
435 add_dependencies(check ${APP_NAME_LC}-test)
437 # Valgrind (memcheck)
438 find_program(VALGRIND_EXECUTABLE NAMES valgrind)
439 if(VALGRIND_EXECUTABLE)
440 set(CTEST_MEMORYCHECK_COMMAND ${VALGRIND_EXECUTABLE})
441 set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "-q --trace-children=yes --leak-check=yes --track-origins=yes")
443 add_custom_target(check-valgrind ${CMAKE_CTEST_COMMAND} -D ExperimentalMemCheck \${ARGS} WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
444 add_dependencies(check-valgrind ${APP_NAME_LC}-test)
447 # For testing commit series
448 add_custom_target(check-commits ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/scripts/common/CheckCommits.cmake
449 -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR})
450 set_target_properties(check-commits PROPERTIES FOLDER "Build Utilities")
452 include(${CMAKE_SOURCE_DIR}/cmake/scripts/common/StaticAnalysis.cmake)
455 if(CMAKE_BUILD_TYPE STREQUAL Coverage)
456 if(EXISTS ${CMAKE_SOURCE_DIR}/cmake/scripts/${CORE_SYSTEM_NAME}/CodeCoverage.cmake)
457 include(${CMAKE_SOURCE_DIR}/cmake/scripts/${CORE_SYSTEM_NAME}/CodeCoverage.cmake)
459 message(FATAL_ERROR "Code coverage not (yet) implemented for platform ${CORE_SYSTEM_NAME}")
465 find_package(Doxygen)
467 add_custom_target(doc
468 COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.doxy
469 COMMAND ${CMAKE_COMMAND} -E echo "Documentation built to: file://${CMAKE_SOURCE_DIR}/docs/html/index.html"
470 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
471 COMMENT "Generating Doxygen documentation" VERBATIM)
475 if(FFMPEG_LINK_EXECUTABLE)
476 set(CMAKE_CXX_LINK_EXECUTABLE "${FFMPEG_LINK_EXECUTABLE}")
478 if(FFMPEG_CREATE_SHARED_LIBRARY)
479 set(CMAKE_CXX_CREATE_SHARED_LIBRARY "${FFMPEG_CREATE_SHARED_LIBRARY}")
482 # Platform specific additional extra targets
483 if(EXISTS ${CMAKE_SOURCE_DIR}/cmake/scripts/${CORE_SYSTEM_NAME}/ExtraTargets.cmake)
484 include(${CMAKE_SOURCE_DIR}/cmake/scripts/${CORE_SYSTEM_NAME}/ExtraTargets.cmake)
487 include(cmake/scripts/${CORE_SYSTEM_NAME}/Install.cmake)
489 # Add uninstall target
490 if(CMAKE_GENERATOR MATCHES Makefile)
491 add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/scripts/common/Uninstall.cmake)
492 set_target_properties(uninstall PROPERTIES FOLDER "Build Utilities")
495 # Create target that allows to build binary-addons.
496 # Use make binary-addons ADDONS="visualization.spectrum" to select the addons to build.
497 if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
498 if(CMAKE_CROSSCOMPILING)
499 set(_cross_args CROSS_COMPILING=yes)
501 if(NOT CORE_SYSTEM_NAME STREQUAL android)
502 set(_prefix ${CMAKE_BINARY_DIR}/addons)
503 set(_extra "CMAKE_EXTRA=-DPACKAGE_ZIP=ON")
505 set(_prefix ${CMAKE_INSTALL_PREFIX})
507 add_custom_target(binary-addons
508 COMMAND $(MAKE) -C ${CMAKE_SOURCE_DIR}/tools/depends/target/binary-addons clean
509 COMMAND $(MAKE) -C ${CMAKE_SOURCE_DIR}/tools/depends/target/binary-addons VERBOSE=1 V=99
510 PREFIX=${_prefix} INSTALL_PREFIX=${_prefix} ${_cross_args} ${_extra})
515 # Prepare add-on build env
516 include(${CORE_SOURCE_DIR}/xbmc/addons/AddonBindings.cmake)
517 file(COPY ${CORE_ADDON_BINDINGS_FILES} ${CORE_ADDON_BINDINGS_DIRS}/
518 DESTINATION ${CORE_BUILD_DIR}/include/${APP_NAME_LC}
519 REGEX ".txt" EXCLUDE)
521 set(APP_LIB_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/${APP_NAME_LC})
522 set(APP_INCLUDE_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include/${APP_NAME_LC})
523 configure_file(${CMAKE_SOURCE_DIR}/cmake/KodiConfig.cmake.in
524 ${CORE_BUILD_DIR}/lib/${APP_NAME_LC}/${APP_NAME}Config.cmake @ONLY)
525 configure_file(${CMAKE_SOURCE_DIR}/cmake/scripts/common/AddonHelpers.cmake
526 ${CORE_BUILD_DIR}/lib/${APP_NAME_LC}/AddonHelpers.cmake COPYONLY)
527 configure_file(${CMAKE_SOURCE_DIR}/cmake/scripts/common/AddOptions.cmake
528 ${CORE_BUILD_DIR}/lib/${APP_NAME_LC}/AddOptions.cmake COPYONLY)
531 message(STATUS "#---- CONFIGURATION ----#")
532 foreach(msg ${final_message})
533 message(STATUS ${msg})
537 message(STATUS "\n#--------------- Internal Variables -------------#")
538 message(STATUS "DEPLIBS: ${DEPLIBS}")
539 message(STATUS "core_DEPENDS: ${core_DEPENDS}")
540 message(STATUS "#---------------------------------------------#")
541 message(STATUS "SYSTEM_LDFLAGS : ${SYSTEM_LDFLAGS}")
542 message(STATUS "CMAKE_DL_LIBS : ${CMAKE_DL_LIBS}")
543 message(STATUS "CMAKE_C_FLAGS : ${CMAKE_C_FLAGS}")
544 message(STATUS "CMAKE_CXX_FLAGS : ${CMAKE_CXX_FLAGS}")
545 message(STATUS "CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}")
546 message(STATUS "LTO_OPTIMIZATION : ${CMAKE_INTERPROCEDURAL_OPTIMIZATION}")
547 if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
548 message(STATUS "CMAKE_CXX_COMPILE_OPTIONS_IPO: ${CMAKE_CXX_COMPILE_OPTIONS_IPO}")
549 message(STATUS "CMAKE_C_COMPILE_OPTIONS_IPO : ${CMAKE_C_COMPILE_OPTIONS_IPO}")
550 message(STATUS "CMAKE_AR : ${CMAKE_AR}")
551 message(STATUS "CMAKE_NM : ${CMAKE_NM}")
552 message(STATUS "CMAKE_LINKER : ${CMAKE_LINKER}")
554 message(STATUS "#---------------------------------------------#")
555 message(STATUS "bindir : ${bindir}")
556 message(STATUS "includedir : ${includedir}")
557 message(STATUS "libdir : ${libdir}")
558 message(STATUS "datarootdir: ${datarootdir}")
559 message(STATUS "#---------------------------------------------#")
560 message(STATUS "BINARY: ${APP_NAME_LC}${APP_BINARY_SUFFIX}")
561 message(STATUS "#---------------------------------------------#")
562 message(STATUS "GIT_REV: ${APP_SCMID}")
563 message(STATUS "Build date: ${APP_BUILD_DATE}")
564 message(STATUS "#---------------------------------------------#")
565 message(STATUS "CPACK_GENERATOR : ${CPACK_GENERATOR}")
566 message(STATUS "CPACK_SOURCE_GENERATOR: ${CPACK_SOURCE_GENERATOR}")
567 message(STATUS "#---------------------------------------------#")