From 8cdf8dec703d882b46ca50a769fabb95ffc48e2c Mon Sep 17 00:00:00 2001 From: manuel Date: Thu, 24 Nov 2016 21:27:41 +0100 Subject: sync with upstream --- project/cmake/CMakeLists.txt | 335 +++++++++++++++++++++++++++---------------- 1 file changed, 215 insertions(+), 120 deletions(-) (limited to 'project/cmake/CMakeLists.txt') diff --git a/project/cmake/CMakeLists.txt b/project/cmake/CMakeLists.txt index de0ea20..fa1156d 100644 --- a/project/cmake/CMakeLists.txt +++ b/project/cmake/CMakeLists.txt @@ -1,51 +1,62 @@ cmake_minimum_required(VERSION 3.1) -project(kodi) +project(kodi LANGUAGES CXX C ASM) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/modules) if(DEPENDS_DIR) list(APPEND CMAKE_PREFIX_PATH ${DEPENDS_DIR}) endif() +# Set CORE_SOURCE_DIR and CORE_BUILD_DIR +get_filename_component(CORE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/../.. ABSOLUTE) +set(CORE_BUILD_DIR build) + +message(STATUS "Source directory: ${CORE_SOURCE_DIR}") +message(STATUS "Build directory: ${CMAKE_BINARY_DIR}") +if(CMAKE_BINARY_DIR STREQUAL CORE_SOURCE_DIR) + message(WARNING "In-source build detected. It is recommended to build out-of-source.") +endif() + +# Hide messages from Check*.cmake (e.g. CheckCSourceCompiles) +if(NOT VERBOSE) + set(CMAKE_REQUIRED_QUIET ON) +endif() + +# Includes +include(modules/extra/ECMEnableSanitizers.cmake) +include(scripts/common/GeneratorSetup.cmake) +include(scripts/common/AddOptions.cmake) +include(scripts/common/ArchSetup.cmake) +include(scripts/common/Macros.cmake) +include(scripts/common/ProjectMacros.cmake) +include(scripts/${CORE_SYSTEM_NAME}/PathSetup.cmake) +include(ExternalProject) + +# Languages and global compiler settings set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp") # general option(VERBOSE "Enable verbose output?" OFF) option(ENABLE_DVDCSS "Enable libdvdcss support?" ON) option(ENABLE_UPNP "Enable UPnP support?" ON) option(ENABLE_NONFREE "Enable non-free components?" ON) -option(ENABLE_MICROHTTPD "Enable MicroHttpd webserver?" ON) -option(ENABLE_MYSQLCLIENT "Enable MySql support?" ON) -option(ENABLE_AVAHI "Enable Avahi support?" ON) -option(ENABLE_RTMP "Enable RTMP support?" ON) -option(ENABLE_BLURAY "Enable BluRay support?" ON) -option(ENABLE_PLIST "Enable AirPlay support?" ON) -option(ENABLE_NFS "Enable NFS support?" ON) option(ENABLE_AIRTUNES "Enable AirTunes support?" ON) option(ENABLE_CEC "Enable CEC support?" ON) +option(ENABLE_OPTICAL "Enable optical support?" ON) if(UNIX) if(NOT APPLE) option(ENABLE_INTERNAL_FFMPEG "Enable internal ffmpeg?" ON) - else() - option(ENABLE_VTB "Enable VTB support?" OFF) endif() option(FFMPEG_PATH "Path to external ffmpeg?" "") option(ENABLE_INTERNAL_CROSSGUID "Enable internal crossguid?" ON) - option(ENABLE_ALSA "Enable ALSA support?" ON) - option(ENABLE_PULSEAUDIO "Enable PulseAudio support?" ON) - option(ENABLE_DBUS "Enable dbus support?" ON) - option(ENABLE_LIBUSB "Enable libusb support?" ON) - option(ENABLE_UDEV "Enable UDev support?" ON) - option(ENABLE_OPENGL "Enable OpenGL?" ON) - option(ENABLE_OPENGLES "Enable OpenGLES?" ON) option(ENABLE_OPENSSL "Enable OpenSSL?" ON) option(ENABLE_SDL "Enable SDL?" OFF) - option(ENABLE_X11 "Enable X11 support?" ON) - option(ENABLE_EGL "Enable EGL?" OFF) - option(ENABLE_VAAPI "Enable VAAPI support?" ON) - option(ENABLE_VDPAU "Enable VDPAU support?" ON) - option(ENABLE_OPTICAL "Enable optical support?" ON) + if(CORE_SYSTEM_NAME STREQUAL linux OR CORE_SYSTEM_NAME STREQUAL freebsd) + option(ENABLE_X11 "Enable X11 support?" ON) + option(ENABLE_AML "Enable AML?" OFF) + endif() endif() # System options if(NOT WIN32) @@ -53,25 +64,26 @@ if(NOT WIN32) option(WITH_CPU "build with given cpu" OFF) option(ENABLE_CCACHE "Enable Ccache support" ON) endif() +if(CORE_SYSTEM_NAME STREQUAL linux OR CORE_SYSTEM_NAME STREQUAL rbpi) + option(ENABLE_LIRC "Enable LIRC support?" ON) + option(ENABLE_EVENTCLIENTS "Enable event clients support?" OFF) +endif() -get_filename_component(CORE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/../.. ABSOLUTE) -set(CORE_BUILD_DIR build) - -message(STATUS "Source directory: ${CORE_SOURCE_DIR}") -message(STATUS "Build directory: ${CMAKE_BINARY_DIR}") - -include(scripts/common/generatorsetup.cmake) -include(scripts/common/addoptions.cmake) -include(scripts/common/archsetup.cmake) -include(scripts/common/macros.cmake) -include(scripts/common/managestring.cmake) -include(scripts/common/projectmacros.cmake) -include(scripts/common/pathsetup.cmake) -include(ExternalProject) +# Build static libraries per directory +if(NOT CMAKE_GENERATOR MATCHES "Visual Studio" AND NOT CMAKE_GENERATOR STREQUAL Xcode) + set(ENABLE_STATIC_LIBS TRUE) +else() + set(ENABLE_STATIC_LIBS FALSE) +endif() -core_find_git_rev() +core_find_git_rev(APP_SCMID FULL) core_find_versions() +# Dynamically loaded libraries built with the project +add_custom_target(${APP_NAME_LC}-libraries) +set(LIBRARY_FILES "" CACHE STRING "" FORCE) +mark_as_advanced(LIBRARY_FILES) + set(INCLUDES ${CORE_SOURCE_DIR} ${CORE_SOURCE_DIR}/addons/library.xbmc.addon ${CORE_SOURCE_DIR}/lib @@ -84,20 +96,19 @@ set(INCLUDES ${CORE_SOURCE_DIR} find_package(PkgConfig) if(CMAKE_CROSSCOMPILING) if(PKG_CONFIG_EXECUTABLE) - message(STATUS "CMAKE_CROSSCOMPILING: ${CMAKE_CROSSCOMPILING}") set(PKG_CONFIG_FOUND TRUE) endif() endif() -find_package(Threads REQUIRED) +find_package(Threads REQUIRED QUIET) list(APPEND DEPLIBS ${CMAKE_THREAD_LIBS_INIT}) # Required dependencies set(required_deps Sqlite3 FreeType PCRE Cpluff LibDvd - TinyXML Python Yajl Xslt - JPEG Lzo2 Fribidi TagLib FFMPEG CrossGUID) + TinyXML Python Yajl + Lzo2 Fribidi TagLib FFMPEG CrossGUID) if(NOT WIN32) - list(APPEND required_deps LibSmbClient ZLIB) + list(APPEND required_deps ZLIB) else() list(APPEND required_deps D3DX11Effects) endif() @@ -106,18 +117,18 @@ if(CORE_SYSTEM_NAME STREQUAL android) endif() # Optional dependencies -set(optional_deps MicroHttpd MySqlClient SSH - Alsa UDev Dbus Avahi +set(optional_deps MicroHttpd MySqlClient SSH XSLT + Alsa UDEV DBus Avahi SmbClient PulseAudio VDPAU VAAPI) # Required, dyloaded deps set(required_dyload Curl ASS) # Optional, dyloaded deps -set(dyload_optional RTMP CEC Bluray Plist NFS) +set(dyload_optional CEC Bluray Plist NFS) # Required by shared objects we link -set(required_dep_libs PNG EXPAT) +set(required_dep_libs EXPAT) # Required tools find_package(TexturePacker REQUIRED) @@ -165,6 +176,11 @@ if(ENABLE_OPTICAL) core_require_dep(Cdio) endif() +if(ENABLE_LIRC) + set(LIRC_DEVICE /dev/lircd CACHE STRING "LIRC device to use") + list(APPEND DEP_DEFINES -DLIRC_DEVICE="${LIRC_DEVICE}" -DHAVE_LIRC=1) +endif() + if(ENABLE_AIRTUNES) find_package(Shairplay) if(SHAIRPLAY_FOUND) @@ -172,36 +188,36 @@ if(ENABLE_AIRTUNES) endif() endif() -if(ENABLE_VTB) - list(APPEND DEP_DEFINES -DHAVE_VIDEOTOOLBOXDECODER=1) +if(CORE_SYSTEM_NAME STREQUAL osx) + core_require_dep(Sdl) +else() + core_optional_dep(Sdl) endif() if(NOT WIN32) core_optional_dep(OpenGl) if(OPENGL_FOUND) - if(NOT APPLE) - core_optional_dep(Sdl) - else() - core_require_dep(Sdl) - endif() core_optional_dep(X ENABLE_X11) + core_optional_dep(LibDRM ENABLE_X11) core_optional_dep(XRandR ENABLE_X11) else() - core_optional_dep(OpenGLES ENABLE_OPENGLES) + core_optional_dep(OpenGLES) if(OPENGLES_FOUND) - core_optional_dep(EGL ENABLE_EGL) - core_optional_dep(OMX ENABLE_OMX) - core_optional_dep(AML ENABLE_AML) core_optional_dep(X ENABLE_X11) - core_optional_dep(Sdl) + core_optional_dep(LibDRM ENABLE_X11) endif() endif() - - if(CORE_SYSTEM_NAME STREQUAL rbpi) - core_require_dep(MMAL) + if(NOT APPLE) + core_require_dep(EGL) endif() endif() +if(CORE_SYSTEM_NAME STREQUAL android OR CORE_SYSTEM_NAME STREQUAL linux) + core_optional_dep(AML) +elseif(CORE_SYSTEM_NAME STREQUAL rbpi) + core_require_dep(MMAL) +endif() + if(ENABLE_CCACHE) core_optional_dep(CCache) endif() @@ -217,7 +233,7 @@ add_custom_command(OUTPUT ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp -DARCH_DEFINES="${ARCH_DEFINES}" -DAPP_SCMID=${APP_SCMID} -Dprefix=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} - -P ${PROJECT_SOURCE_DIR}/scripts/common/generateversionedfiles.cmake + -P ${PROJECT_SOURCE_DIR}/scripts/common/GenerateVersionedFiles.cmake DEPENDS ${CORE_SOURCE_DIR}/version.txt ${CORE_SOURCE_DIR}/addons/xbmc.addon/addon.xml.in ${CORE_SOURCE_DIR}/addons/kodi.guilib/addon.xml.in @@ -226,13 +242,15 @@ list(APPEND install_data addons/xbmc.addon/addon.xml) list(APPEND install_data addons/xbmc.json/addon.xml) list(APPEND install_data addons/kodi.guilib/addon.xml) add_library(compileinfo OBJECT ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp) +set_target_properties(compileinfo PROPERTIES FOLDER "Build Utilities") target_compile_options(compileinfo PRIVATE "${SYSTEM_DEFINES}") # RC File if(WIN32) - configure_file(${CORE_SOURCE_DIR}/xbmc/win32/XBMC_PC.rc.in - ${CORE_BUILD_DIR}/xbmc/win32/XBMC_PC.rc @ONLY) - add_library(resources OBJECT ${CORE_BUILD_DIR}/xbmc/win32/XBMC_PC.rc) + configure_file(${CORE_SOURCE_DIR}/xbmc/platform/win32/XBMC_PC.rc.in + ${CORE_BUILD_DIR}/xbmc/platform/win32/XBMC_PC.rc @ONLY) + add_library(resources OBJECT ${CORE_BUILD_DIR}/xbmc/platform/win32/XBMC_PC.rc) + set_target_properties(resources PROPERTIES FOLDER "Build Utilities") target_include_directories(resources PRIVATE ${CORE_SOURCE_DIR}/tools/windows/packaging/media) set(RESOURCES $) endif() @@ -247,23 +265,8 @@ mark_as_advanced(core_DEPENDS) mark_as_advanced(test_archives) mark_as_advanced(test_sources) -file(STRINGS ${PROJECT_SOURCE_DIR}/installdata/addon-bindings.txt bindings) -foreach(binding ${bindings}) - list(APPEND addon_bindings ${CORE_SOURCE_DIR}/${binding}) -endforeach() - -file(STRINGS ${PROJECT_SOURCE_DIR}/installdata/cmake-files.txt cmakefiles) -foreach(cmakefile ${cmakefiles}) - list(APPEND cmake_files ${CORE_SOURCE_DIR}/${cmakefile}) -endforeach() - add_subdirectory(${CORE_SOURCE_DIR}/lib/gtest ${CORE_BUILD_DIR}/gtest EXCLUDE_FROM_ALL) - -# Subdirs -core_add_subdirs_from_filelist(${PROJECT_SOURCE_DIR}/treedata/common/*.txt - ${PROJECT_SOURCE_DIR}/treedata/${CORE_SYSTEM_NAME}/*.txt) -core_add_optional_subdirs_from_filelist(${PROJECT_SOURCE_DIR}/treedata/optional/common/*.txt - ${PROJECT_SOURCE_DIR}/treedata/optional/${CORE_SYSTEM_NAME}/*.txt) +set_target_properties(gtest PROPERTIES FOLDER "External Projects") # copy files to build tree copy_files_from_filelist_to_buildtree(${PROJECT_SOURCE_DIR}/installdata/common/*.txt @@ -281,23 +284,9 @@ endforeach() add_custom_target(pack-skins ALL DEPENDS TexturePacker::TexturePacker export-files ${XBT_FILES}) - -core_link_library(exif system/libexif) -if(CORE_SYSTEM_NAME STREQUAL linux) - core_link_library(sse4 system/libsse4) -endif() - -core_link_library(XBMC_addon addons/library.xbmc.addon/libXBMC_addon) -core_link_library(XBMC_codec addons/library.xbmc.codec/libXBMC_codec) -core_link_library(XBMC_pvr addons/library.xbmc.pvr/libXBMC_pvr) -core_link_library(KODI_adsp addons/library.kodi.adsp/libKODI_adsp) -core_link_library(KODI_audioengine addons/library.kodi.audioengine/libKODI_audioengine) -core_link_library(KODI_guilib addons/library.kodi.guilib/libKODI_guilib) -core_link_library(KODI_inputstream addons/library.kodi.inputstream/libKODI_inputstream) -core_link_library(KODI_peripheral addons/library.kodi.peripheral/libKODI_peripheral) +set_target_properties(pack-skins PROPERTIES FOLDER "Build Utilities") file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/system/players/VideoPlayer) -add_custom_target(wrap-libraries ALL DEPENDS ${WRAP_FILES}) set(LIBCEC_SONAME "${CEC_SONAME}") if(NOT CORE_SYSTEM_NAME STREQUAL windows AND NOT CORE_SYSTEM_NAME STREQUAL android) @@ -308,62 +297,166 @@ elseif(CORE_SYSTEM_NAME STREQUAL android) ${CORE_BUILD_DIR}/DllPaths_generated_android.h @ONLY) endif() +# main library (used for main binary and tests) +add_library(lib${APP_NAME_LC} STATIC $) +set_target_properties(lib${APP_NAME_LC} PROPERTIES PREFIX "") +add_dependencies(lib${APP_NAME_LC} libcpluff ffmpeg dvdnav crossguid) + # Codegen add_subdirectory(${CORE_SOURCE_DIR}/xbmc/interfaces/swig build/swig) # Other files (IDE) set(OTHER_FILES README.md) +# Subdirs +core_add_subdirs_from_filelist(${PROJECT_SOURCE_DIR}/treedata/common/*.txt + ${PROJECT_SOURCE_DIR}/treedata/${CORE_SYSTEM_NAME}/*.txt) +core_add_optional_subdirs_from_filelist(${PROJECT_SOURCE_DIR}/treedata/optional/common/*.txt + ${PROJECT_SOURCE_DIR}/treedata/optional/${CORE_SYSTEM_NAME}/*.txt) + +target_link_libraries(lib${APP_NAME_LC} PUBLIC ${core_DEPENDS} ${SYSTEM_LDFLAGS} ${DEPLIBS} ${CMAKE_DL_LIBS}) +set_target_properties(lib${APP_NAME_LC} PROPERTIES PROJECT_LABEL "xbmc") +source_group_by_folder(lib${APP_NAME_LC} RELATIVE ${CORE_SOURCE_DIR}/xbmc) +if(WIN32) + add_precompiled_header(lib${APP_NAME_LC} pch.h ${CORE_SOURCE_DIR}/xbmc/platform/win32/pch.cpp PCH_TARGET kodi) + set_language_cxx(lib${APP_NAME_LC}) +endif() + # main binary -add_executable(${APP_NAME_LC} ${CORE_MAIN_SOURCE} $ "${RESOURCES}" ${OTHER_FILES}) +if(NOT CORE_SYSTEM_NAME STREQUAL android) + add_executable(${APP_NAME_LC} ${CORE_MAIN_SOURCE} "${RESOURCES}" ${OTHER_FILES}) +else() + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") + add_library(${APP_NAME_LC} SHARED ${CORE_MAIN_SOURCE} "${RESOURCES}" ${OTHER_FILES}) +endif() +add_dependencies(${APP_NAME_LC} ${APP_NAME_LC}-libraries export-files pack-skins) whole_archive(_MAIN_LIBRARIES ${core_DEPENDS}) -target_link_libraries(${APP_NAME_LC} ${SYSTEM_LDFLAGS} ${_MAIN_LIBRARIES} ${DEPLIBS} ${CMAKE_DL_LIBS}) +target_link_libraries(${APP_NAME_LC} ${_MAIN_LIBRARIES} lib${APP_NAME_LC} ${DEPLIBS}) unset(_MAIN_LIBRARIES) -add_dependencies(${APP_NAME_LC} export-files) -if(NOT WIN32) - set_target_properties(${APP_NAME_LC} PROPERTIES SUFFIX ".bin") -else() + +if(WIN32) set_target_properties(${APP_NAME_LC} PROPERTIES WIN32_EXECUTABLE ON) - copy_main_dlls_to_buildtree() + set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT ${APP_NAME_LC}) + target_sources(kodi PRIVATE ${CORE_SOURCE_DIR}/xbmc/platform/win32/app.manifest) +elseif(CORE_SYSTEM_NAME STREQUAL android) + # Nothing +else() + set_target_properties(${APP_NAME_LC} PROPERTIES SUFFIX ".bin") endif() # testing copy_files_from_filelist_to_buildtree(${PROJECT_SOURCE_DIR}/installdata/test-reference-data.txt NO_INSTALL) -add_executable(${APP_NAME_LC}-test EXCLUDE_FROM_ALL ${CORE_SOURCE_DIR}/xbmc/test/xbmc-test.cpp $) -whole_archive(_TEST_LIBRARIES ${core_DEPENDS} gtest ${test_archives}) -target_link_libraries(${APP_NAME_LC}-test ${SYSTEM_LDFLAGS} ${_TEST_LIBRARIES} ${DEPLIBS} ${CMAKE_DL_LIBS}) +add_executable(${APP_NAME_LC}-test EXCLUDE_FROM_ALL ${CORE_SOURCE_DIR}/xbmc/test/xbmc-test.cpp ${test_sources}) +whole_archive(_TEST_LIBRARIES ${core_DEPENDS} gtest) +target_link_libraries(${APP_NAME_LC}-test PRIVATE ${SYSTEM_LDFLAGS} ${_TEST_LIBRARIES} lib${APP_NAME_LC} ${DEPLIBS} ${CMAKE_DL_LIBS}) unset(_TEST_LIBRARIES) -add_dependencies(${APP_NAME_LC}-test export-files) +add_dependencies(${APP_NAME_LC}-test ${APP_NAME_LC}-libraries export-files) +if(WIN32) + add_precompiled_header(${APP_NAME_LC}-test pch.h ${CORE_SOURCE_DIR}/xbmc/platform/win32/pch.cpp PCH_TARGET kodi) +endif() -# make test and make check (cannot be executed when cross compiling) -if(NOT CMAKE_CROSSCOMPILING) +# Enable unit-test related targets +if(CORE_HOST_IS_TARGET) enable_testing() gtest_add_tests(${APP_NAME_LC}-test "" ${test_sources}) add_custom_target(check ${CMAKE_CTEST_COMMAND} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) add_dependencies(check ${APP_NAME_LC}-test) + # Valgrind (memcheck) + find_program(VALGRIND_EXECUTABLE NAMES valgrind) + if(VALGRIND_EXECUTABLE) + set(CTEST_MEMORYCHECK_COMMAND ${VALGRIND_EXECUTABLE}) + set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "-q --trace-children=yes --leak-check=yes --track-origins=yes") + include(CTest) + add_custom_target(check-valgrind ${CMAKE_CTEST_COMMAND} -D ExperimentalMemCheck \${ARGS} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) + add_dependencies(check-valgrind ${APP_NAME_LC}-test) + endif() + # For testing commit series - add_custom_target(check-commits ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/scripts/common/checkcommits.cmake + add_custom_target(check-commits ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/scripts/common/CheckCommits.cmake -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}) + set_target_properties(check-commits PROPERTIES FOLDER "Build Utilities") + + # code coverage + if(CMAKE_BUILD_TYPE STREQUAL Coverage) + if(EXISTS ${PROJECT_SOURCE_DIR}/scripts/${CORE_SYSTEM_NAME}/CodeCoverage.cmake) + include(${PROJECT_SOURCE_DIR}/scripts/${CORE_SYSTEM_NAME}/CodeCoverage.cmake) + else() + message(FATAL_ERROR "Code coverage not (yet) implemented for platform ${CORE_SYSTEM_NAME}") + endif() + endif() + + # Documentation + find_package(Doxygen) + if(DOXYGEN_FOUND) + add_custom_target(doc + COMMAND ${DOXYGEN_EXECUTABLE} ${CORE_SOURCE_DIR}/doxygen_resources/Doxyfile.doxy + COMMAND ${CMAKE_COMMAND} -E echo "Documentation built to: file://${CORE_SOURCE_DIR}/docs/html/index.html" + WORKING_DIRECTORY ${CORE_SOURCE_DIR}/doxygen_resources + COMMENT "Generating Doxygen documentation" VERBATIM) + endif() endif() # link wrapper if(FFMPEG_LINK_EXECUTABLE) set(CMAKE_CXX_LINK_EXECUTABLE "${FFMPEG_LINK_EXECUTABLE}") endif() +if(FFMPEG_CREATE_SHARED_LIBRARY) + set(CMAKE_CXX_CREATE_SHARED_LIBRARY "${FFMPEG_CREATE_SHARED_LIBRARY}") +endif() + +# Platform specific additional extra targets +if(EXISTS ${PROJECT_SOURCE_DIR}/scripts/${CORE_SYSTEM_NAME}/ExtraTargets.cmake) + include(${PROJECT_SOURCE_DIR}/scripts/${CORE_SYSTEM_NAME}/ExtraTargets.cmake) +endif() + +include(scripts/${CORE_SYSTEM_NAME}/Install.cmake) -# randr -if(ENABLE_X11 AND XRANDR_FOUND) - add_executable(kodi-xrandr ${CORE_SOURCE_DIR}/xbmc-xrandr.c) - target_link_libraries(kodi-xrandr ${SYSTEM_LDFLAGS} ${X_LIBRARIES} m ${XRANDR_LIBRARIES}) +# Add uninstall target +if(CMAKE_GENERATOR MATCHES Makefile) + add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/scripts/common/Uninstall.cmake) + set_target_properties(uninstall PROPERTIES FOLDER "Build Utilities") endif() -# XBMCHelper -if(CORE_SYSTEM_TYPE STREQUAL darwin) - add_subdirectory(${CORE_SOURCE_DIR}/tools/EventClients/Clients/OSXRemote build/XBMCHelper) +# Create target that allows to build binary-addons. +# Use make binary-addons ADDONS="visualization.spectrum" to select the addons to build. +if(CMAKE_GENERATOR STREQUAL "Unix Makefiles") + if(CMAKE_CROSSCOMPILING) + set(_cross_args CROSS_COMPILING=yes TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) + endif() + if(NOT CORE_SYSTEM_NAME STREQUAL android) + set(_prefix ${CMAKE_BINARY_DIR}/addons) + set(_extra "CMAKE_EXTRA=-DPACKAGE_ZIP=ON") + else() + set(_prefix ${CMAKE_INSTALL_PREFIX}) + endif() + add_custom_target(binary-addons + COMMAND $(MAKE) -C ${CORE_SOURCE_DIR}/tools/depends/target/binary-addons clean + COMMAND $(MAKE) -C ${CORE_SOURCE_DIR}/tools/depends/target/binary-addons VERBOSE=1 V=99 + PREFIX=${_prefix} INSTALL_PREFIX=${_prefix} ${_cross_args} ${_extra}) + unset(_cross_args) + unset(_prefix) endif() -include(scripts/${CORE_SYSTEM_NAME}/install.cmake) +# Prepare add-on build env +core_file_read_filtered(bindings ${CORE_SOURCE_DIR}/xbmc/addons/addon-bindings.mk) +foreach(binding ${bindings}) + string(REPLACE " =" ";" binding "${binding}") + string(REPLACE "+=" ";" binding "${binding}") + list(GET binding 1 header) + get_filename_component(file ${header} NAME) + configure_file(${CORE_SOURCE_DIR}/${header} ${CORE_BUILD_DIR}/include/${APP_NAME_LC}/${file} COPYONLY) +endforeach() + +set(APP_LIB_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/${APP_NAME_LC}) +set(APP_INCLUDE_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include/${APP_NAME_LC}) +set(CXX11_SWITCH "-std=c++11") +configure_file(${PROJECT_SOURCE_DIR}/KodiConfig.cmake.in + ${CORE_BUILD_DIR}/lib/${APP_NAME_LC}/${APP_NAME}Config.cmake @ONLY) +configure_file(${PROJECT_SOURCE_DIR}/scripts/common/AddonHelpers.cmake + ${CORE_BUILD_DIR}/lib/${APP_NAME_LC}/AddonHelpers.cmake COPYONLY) +configure_file(${PROJECT_SOURCE_DIR}/scripts/common/AddOptions.cmake + ${CORE_BUILD_DIR}/lib/${APP_NAME_LC}/AddOptions.cmake COPYONLY) # Status message(STATUS "#---- CONFIGURATION ----#") @@ -388,6 +481,8 @@ if(VERBOSE) message(STATUS "datarootdir: ${datarootdir}") message(STATUS "#---------------------------------------------#") message(STATUS "GIT_REV: ${APP_SCMID}") + message(STATUS "#---------------------------------------------#") + message(STATUS "CPACK_GENERATOR : ${CPACK_GENERATOR}") + message(STATUS "CPACK_SOURCE_GENERATOR: ${CPACK_SOURCE_GENERATOR}") + message(STATUS "#---------------------------------------------#") endif() -message(STATUS "#---------------------------------------------#") - -- cgit v1.2.3