From 5f8335c1e49ce108ef3481863833c98efa00411b Mon Sep 17 00:00:00 2001 From: manuel Date: Thu, 2 Jul 2020 23:09:26 +0200 Subject: sync with upstream --- cmake/scripts/android/ArchSetup.cmake | 9 +- cmake/scripts/android/Install.cmake | 6 +- cmake/scripts/common/AddonHelpers.cmake | 53 +++++++-- cmake/scripts/common/AddonHelpers.dox | 59 ++++++++++ cmake/scripts/common/ArchSetup.cmake | 26 +---- cmake/scripts/common/CheckTargetPlatform.cmake | 5 +- cmake/scripts/common/CompilerSettings.cmake | 7 ++ cmake/scripts/common/GenerateVersionedFiles.cmake | 3 - cmake/scripts/common/HandleDepends.cmake | 20 +++- cmake/scripts/common/Macros.cmake | 72 ------------ cmake/scripts/common/PrepareEnv.cmake | 17 ++- cmake/scripts/darwin/Macros.cmake | 8 ++ cmake/scripts/darwin_embedded/ArchSetup.cmake | 65 +++++++++++ cmake/scripts/darwin_embedded/ExtraTargets.cmake | 25 ++++ cmake/scripts/darwin_embedded/Install.cmake | 135 ++++++++++++++++++++++ cmake/scripts/darwin_embedded/Macros.cmake | 118 +++++++++++++++++++ cmake/scripts/darwin_embedded/PathSetup.cmake | 7 ++ cmake/scripts/freebsd/ArchSetup.cmake | 7 +- cmake/scripts/ios/ArchSetup.cmake | 61 ---------- cmake/scripts/ios/Install.cmake | 99 ---------------- cmake/scripts/ios/Macros.cmake | 1 - cmake/scripts/ios/PathSetup.cmake | 1 - cmake/scripts/linux/ArchSetup.cmake | 40 +++++-- cmake/scripts/osx/ArchSetup.cmake | 14 ++- cmake/scripts/osx/Install.cmake | 1 + cmake/scripts/osx/Macros.cmake | 2 +- cmake/scripts/windows/ArchSetup.cmake | 11 +- cmake/scripts/windowsstore/ArchSetup.cmake | 13 ++- cmake/scripts/windowsstore/Macros.cmake | 2 +- 29 files changed, 570 insertions(+), 317 deletions(-) create mode 100644 cmake/scripts/common/AddonHelpers.dox create mode 100644 cmake/scripts/common/CompilerSettings.cmake create mode 100644 cmake/scripts/darwin/Macros.cmake create mode 100644 cmake/scripts/darwin_embedded/ArchSetup.cmake create mode 100644 cmake/scripts/darwin_embedded/ExtraTargets.cmake create mode 100644 cmake/scripts/darwin_embedded/Install.cmake create mode 100644 cmake/scripts/darwin_embedded/Macros.cmake create mode 100644 cmake/scripts/darwin_embedded/PathSetup.cmake delete mode 100644 cmake/scripts/ios/ArchSetup.cmake delete mode 100644 cmake/scripts/ios/Install.cmake delete mode 120000 cmake/scripts/ios/Macros.cmake delete mode 120000 cmake/scripts/ios/PathSetup.cmake (limited to 'cmake/scripts') diff --git a/cmake/scripts/android/ArchSetup.cmake b/cmake/scripts/android/ArchSetup.cmake index 69bb88d..1e529de 100644 --- a/cmake/scripts/android/ArchSetup.cmake +++ b/cmake/scripts/android/ArchSetup.cmake @@ -2,7 +2,7 @@ if(NOT CMAKE_TOOLCHAIN_FILE) message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for android. See ${CMAKE_SOURCE_DIR}/cmake/README.md") endif() -set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_LINUX -D_LINUX -DTARGET_ANDROID) +set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_LINUX -DTARGET_ANDROID) set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64=1) @@ -10,6 +10,7 @@ set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_LARGEFILE64_SOURCE set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/android/activity/XBMCApp.cpp) set(PLATFORM_DIR platform/linux) +set(PLATFORMDEFS_DIR platform/posix) if(WITH_ARCH) set(ARCH ${WITH_ARCH}) else() @@ -26,16 +27,18 @@ else() elseif(CPU STREQUAL i686) set(ARCH i486-linux) set(NEON False) + elseif(CPU STREQUAL x86_64) + set(ARCH x86_64) + set(NEON False) else() message(SEND_ERROR "Unknown CPU: ${CPU}") endif() endif() # Additional SYSTEM_DEFINES -list(APPEND SYSTEM_DEFINES -DHAS_ZEROCONF -DHAS_LINUX_NETWORK) +list(APPEND SYSTEM_DEFINES -DHAS_ZEROCONF) set(ENABLE_X11 OFF CACHE BOOL "" FORCE) -set(ENABLE_AML OFF CACHE BOOL "" FORCE) set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE) set(ENABLE_MDNS OFF CACHE BOOL "" FORCE) diff --git a/cmake/scripts/android/Install.cmake b/cmake/scripts/android/Install.cmake index a121295..5b7b411 100644 --- a/cmake/scripts/android/Install.cmake +++ b/cmake/scripts/android/Install.cmake @@ -107,7 +107,7 @@ add_custom_target(bundle ${CMAKE_BINARY_DIR}/tools/android/packaging/media COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/tools/android/packaging/xbmc/res ${CMAKE_BINARY_DIR}/tools/android/packaging/xbmc/res - COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/lib/python2.7 ${libdir}/python2.7 + COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/lib/python${PYTHON_VERSION} ${libdir}/python${PYTHON_VERSION} COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/share/${APP_NAME_LC} ${datadir}/${APP_NAME_LC} COMMAND ${CMAKE_COMMAND} -E copy $ ${libdir}/${APP_NAME_LC}/$) @@ -153,13 +153,12 @@ foreach(lib IN LISTS required_dyload dyload_optional ITEMS Shairplay) endif() endforeach() add_bundle_file(${ASS_LIBRARY} ${libdir} "") -add_bundle_file(${BLURAY_LIBRARY} ${libdir} "") +add_bundle_file(${SHAIRPLAY_LIBRARY} ${libdir} "") add_bundle_file(${SMBCLIENT_LIBRARY} ${libdir} "") # Main targets from Makefile.in if(CPU MATCHES i686) set(CPU x86) - set(ARCH x86) endif() foreach(target apk obb apk-unsigned apk-obb apk-obb-unsigned apk-noobb apk-clean apk-sign) add_custom_target(${target} @@ -168,7 +167,6 @@ foreach(target apk obb apk-unsigned apk-obb apk-obb-unsigned apk-noobb apk-clean CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR} CC=${CMAKE_C_COMPILER} CPU=${CPU} - ARCH=${ARCH} HOST=${HOST} TOOLCHAIN=${TOOLCHAIN} PREFIX=${prefix} diff --git a/cmake/scripts/common/AddonHelpers.cmake b/cmake/scripts/common/AddonHelpers.cmake index 2f3f302..c541ad7 100644 --- a/cmake/scripts/common/AddonHelpers.cmake +++ b/cmake/scripts/common/AddonHelpers.cmake @@ -92,6 +92,7 @@ macro (build_addon target prefix libs) endforeach() endif() + message(STATUS "Addon dependency check ...") # Set defines used in addon.xml.in and read from versions.h to set add-on # version parts automatically file(STRINGS ${KODI_INCLUDE_DIR}/versions.h BIN_ADDON_PARTS) @@ -108,7 +109,8 @@ macro (build_addon target prefix libs) if("${include_name}" MATCHES "_DEPENDS") # Use start definition name as base for other value type list(GET loop_var 0 list_name) - string(REPLACE "_DEPENDS" "" depends_name ${list_name}) + string(REPLACE "_DEPENDS" "_MIN" depends_minver ${list_name}) + string(REPLACE "_DEPENDS" "" depends_ver ${list_name}) string(REPLACE "_DEPENDS" "_XML_ID" xml_entry_name ${list_name}) string(REPLACE "_DEPENDS" "_USED" used_type_name ${list_name}) @@ -120,16 +122,14 @@ macro (build_addon target prefix libs) foreach(src_file ${USED_SOURCES}) file(STRINGS ${src_file} BIN_ADDON_SRC_PARTS) foreach(loop_var ${BIN_ADDON_SRC_PARTS}) - string(FIND "${loop_var}" "#include" matchres) - if("${matchres}" EQUAL 0) - string(REPLACE " " ";" loop_var "${loop_var}") - list(GET loop_var 1 include_name) - string(REGEX REPLACE "[<>\"]|kodi/" "" include_name "${include_name}") - if(include_name MATCHES ${depend_header}) - set(ADDON_DEPENDS "${ADDON_DEPENDS}\n") - # Inform with them the addon header about used type + string(REGEX MATCH "^[ \t]*#[ \t]*(include|import)[ \t]*[<\"](kodi\/)?(.+)[\">]" include_name "${loop_var}") + if(include_name AND CMAKE_MATCH_3 MATCHES ^${depend_header}) + get_directory_property(CURRENT_DEFS COMPILE_DEFINITIONS) + if(NOT used_type_name IN_LIST CURRENT_DEFS) + set(ADDON_DEPENDS "${ADDON_DEPENDS}\n") + # Inform with them the addon header about used type, if not present before add_definitions(-D${used_type_name}) - message(STATUS "Added usage definition: ${used_type_name}") + message(STATUS " - Added API usage definition: ${used_type_name} (Version: \"${${depends_ver}}\", Min. Version: \"${${depends_minver}}\")") set(FOUND_HEADER_USAGE 1) endif() endif() @@ -276,6 +276,18 @@ macro (build_addon target prefix libs) install(FILES ${${prefix}_ADDITIONAL_BINARY} DESTINATION ${target} COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) endif() + if(${prefix}_ADDITIONAL_BINARY_EXE) + install(PROGRAMS ${${prefix}_ADDITIONAL_BINARY_EXE} DESTINATION ${target} + COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) + endif() + if(${prefix}_ADDITIONAL_BINARY_PARTS) + install(FILES ${${prefix}_ADDITIONAL_BINARY_PARTS} DESTINATION ${target} + COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) + endif() + if(${prefix}_ADDITIONAL_BINARY_DIRS) + install(DIRECTORY ${${prefix}_ADDITIONAL_BINARY_DIRS} DESTINATION ${target} USE_SOURCE_PERMISSIONS + COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) + endif() else() # NOT WIN32 if(NOT CPACK_PACKAGE_DIRECTORY) set(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}) @@ -296,6 +308,18 @@ macro (build_addon target prefix libs) install(FILES ${${prefix}_ADDITIONAL_BINARY} DESTINATION ${target} COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) endif() + if(${prefix}_ADDITIONAL_BINARY_EXE) + install(PROGRAMS ${${prefix}_ADDITIONAL_BINARY_EXE} DESTINATION ${target} + COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) + endif() + if(${prefix}_ADDITIONAL_BINARY_PARTS) + install(FILES ${${prefix}_ADDITIONAL_BINARY_PARTS} DESTINATION ${target} + COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) + endif() + if(${prefix}_ADDITIONAL_BINARY_DIRS) + install(DIRECTORY ${${prefix}_ADDITIONAL_BINARY_DIRS} DESTINATION ${target} USE_SOURCE_PERMISSIONS + COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) + endif() endif() add_cpack_workaround(${target} ${${prefix}_VERSION} ${ext}) else() @@ -339,6 +363,15 @@ macro (build_addon target prefix libs) if(${prefix}_ADDITIONAL_BINARY) install(FILES ${${prefix}_ADDITIONAL_BINARY} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target}) endif() + if(${prefix}_ADDITIONAL_BINARY_EXE) + install(PROGRAMS ${${prefix}_ADDITIONAL_BINARY_EXE} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target}) + endif() + if(${prefix}_ADDITIONAL_BINARY_PARTS) + install(FILES ${${prefix}_ADDITIONAL_BINARY_PARTS} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target}) + endif() + if(${prefix}_ADDITIONAL_BINARY_DIRS) + install(DIRECTORY ${${prefix}_ADDITIONAL_BINARY_DIRS} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target} USE_SOURCE_PERMISSIONS) + endif() endif() if(${APP_NAME_UC}_BUILD_DIR) file(GLOB_RECURSE files ${CMAKE_CURRENT_SOURCE_DIR}/${target}/*) diff --git a/cmake/scripts/common/AddonHelpers.dox b/cmake/scripts/common/AddonHelpers.dox new file mode 100644 index 0000000..d3acec0 --- /dev/null +++ b/cmake/scripts/common/AddonHelpers.dox @@ -0,0 +1,59 @@ +/*! +\addtogroup cpp_cmake + +Kodi which uses it as a library for its binary addons has a special build +system for this. + +To implement this, a CMake macro brought by Kodi is used, this is +"build_addon (...)". This processes various definitions passed by the addon to +process the construction. + + +-------------------------------------------------------------------------------- + +Here a minmal example of the for addon used CMakeLists.txt: + +~~~~~~~~~~~~~{.cmake} +cmake_minimum_required(VERSION 3.5) +project(example.addon) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}) + +find_package(Kodi REQUIRED) + +include_directories(${KODI_INCLUDE_DIR} + +set(DEPLIBS ) # Here empty +set(EXAMPLE_SOURCES src/main.cpp) +set(EXAMPLE_HEADERS src/main.h) + +build_addon((example.addon EXAMPLE DEPLIBS) + +include(CPack) +~~~~~~~~~~~~~ + + +-------------------------------------------------------------------------------- + +This is a list of special variables that can be passed to the macro. +The parts defined with "*" must be given the second name given to the macro. + +Here to define the necessary creation and installation files on addon CMakeLists.txt: +| Name | Description +|-----------------------------|------------------------------------------------- +| *_SOURCES | List of source code files to be complicated. +| *_HEADERS | List of used source code header files. +| *_CUSTOM_BINARY | For special cases where an already created library from an external source is inserted, the "* _SOURCES" and "* _HEADERS" are unused in this case.
This is currently used primarily on game addons. +| *_CUSTOM_DATA | To add additional required data from a folder, which are stored in the shared folder of the addon.
With a "/" at the end of the content given to the folder is used, without the folder itself. +| *_ADDITIONAL_BINARY | In case the additional library has to be installed for the addon, the path or CMake name can be given here. +| *_ADDITIONAL_BINARY_EXE | In case you need to addon an additional application you can give the path or CMake name, it will be in the same folder as the addon library.
The mode bits are set there as EXE. +| *_ADDITIONAL_BINARY_DIRS | To add complete folders additionally to folders containing the addon library.
With a "/" at the end of the content given to the folder is used, without the folder itself. + +External creation Options, given by `-D...`: +| Name | Description +|-----------------------------|------------------------------------------------- +| PACKAGE_ZIP | To create a package as a ZIP file. This is also used to install locally addon together.
Default is OFF. +| PACKAGE_TGZ | To create a package as a TGZ file.
Default is OFF. +| BUILD_SHARED_LIBS | To define if addon library is shared or static.
Default is ON to have shared. +| USE_LTO | Use link time optimization.
Default is OFF. +*/ diff --git a/cmake/scripts/common/ArchSetup.cmake b/cmake/scripts/common/ArchSetup.cmake index 07ce6d4..2e1eb12 100644 --- a/cmake/scripts/common/ArchSetup.cmake +++ b/cmake/scripts/common/ArchSetup.cmake @@ -18,24 +18,7 @@ include(CheckCXXSourceCompiles) include(CheckSymbolExists) include(CheckFunctionExists) include(CheckIncludeFile) - -# Macro to check if a given type exists in a given header -# Arguments: -# header the header to check -# type the type to check for existence -# var the compiler definition to set if type exists -# On return: -# If type was found, the definition is added to SYSTEM_DEFINES -macro(check_type header type var) - check_cxx_source_compiles("#include <${header}> - int main() - { - ${type} s; - }" ${var}) - if(${var}) - list(APPEND SYSTEM_DEFINES -D${var}=1) - endif() -endmacro() +include(CheckTypeSize) # Macro to check if a given builtin function exists # Arguments: @@ -95,17 +78,12 @@ endif() include(${CMAKE_SOURCE_DIR}/cmake/scripts/${CORE_SYSTEM_NAME}/ArchSetup.cmake) message(STATUS "Core system type: ${CORE_SYSTEM_NAME}") -message(STATUS "Platform: ${PLATFORM}") +message(STATUS "Platform: ${CORE_PLATFORM_NAME}") message(STATUS "CPU: ${CPU}, ARCH: ${ARCH}") message(STATUS "Cross-Compiling: ${CMAKE_CROSSCOMPILING}") message(STATUS "Execute build artefacts on host: ${CORE_HOST_IS_TARGET}") message(STATUS "Depends based build: ${KODI_DEPENDSBUILD}") -check_type(string std::u16string HAVE_STD__U16_STRING) -check_type(string std::u32string HAVE_STD__U32_STRING) -check_type(string char16_t HAVE_CHAR16_T) -check_type(string char32_t HAVE_CHAR32_T) -check_type(stdint.h uint_least16_t HAVE_STDINT_H) check_symbol_exists(posix_fadvise fcntl.h HAVE_POSIX_FADVISE) check_symbol_exists(PRIdMAX inttypes.h HAVE_INTTYPES_H) check_builtin("long* temp=0; long ret=__sync_add_and_fetch(temp, 1)" HAS_BUILTIN_SYNC_ADD_AND_FETCH) diff --git a/cmake/scripts/common/CheckTargetPlatform.cmake b/cmake/scripts/common/CheckTargetPlatform.cmake index 526e4bd..d776085 100644 --- a/cmake/scripts/common/CheckTargetPlatform.cmake +++ b/cmake/scripts/common/CheckTargetPlatform.cmake @@ -29,7 +29,10 @@ function(check_target_platform dir target_platform build) string(SUBSTRING ${platform} 1 ${platform_length} platform) # check if the current platform does not match the extracted platform - if(NOT ${platform} STREQUAL ${target_platform}) + if(${platform} STREQUAL ${target_platform}) + set(${build} FALSE) + break() + elseif(NOT ${platform} STREQUAL ${target_platform}) set(${build} TRUE) endif() endif() diff --git a/cmake/scripts/common/CompilerSettings.cmake b/cmake/scripts/common/CompilerSettings.cmake new file mode 100644 index 0000000..b4e7e89 --- /dev/null +++ b/cmake/scripts/common/CompilerSettings.cmake @@ -0,0 +1,7 @@ +# Languages and global compiler settings +if(NOT DEFINED CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 14) + set(CMAKE_CXX_STANDARD 14) +endif() +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp") diff --git a/cmake/scripts/common/GenerateVersionedFiles.cmake b/cmake/scripts/common/GenerateVersionedFiles.cmake index 1d324db..d54b524 100644 --- a/cmake/scripts/common/GenerateVersionedFiles.cmake +++ b/cmake/scripts/common/GenerateVersionedFiles.cmake @@ -24,9 +24,6 @@ foreach(loop_var ${ADDON_XML_IN_FILE}) string(REPLACE ${CORE_SOURCE_DIR} ${CMAKE_BINARY_DIR} dest_dir ${source_dir}) file(MAKE_DIRECTORY ${dest_dir}) - # copy everything except addon.xml.in to build folder - file(COPY "${source_dir}" DESTINATION "${CMAKE_BINARY_DIR}/addons" REGEX ".xml.in" EXCLUDE) - configure_file(${source_dir}/addon.xml.in ${dest_dir}/addon.xml @ONLY) unset(source_dir) diff --git a/cmake/scripts/common/HandleDepends.cmake b/cmake/scripts/common/HandleDepends.cmake index 40e382b..7cacd25 100644 --- a/cmake/scripts/common/HandleDepends.cmake +++ b/cmake/scripts/common/HandleDepends.cmake @@ -68,8 +68,8 @@ function(add_addon_depends addon searchpath) -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME} -DENABLE_STATIC=1 -DBUILD_SHARED_LIBS=0) - # windows store args - if (CMAKE_SYSTEM_NAME STREQUAL WindowsStore) + # windows args + if (CMAKE_SYSTEM_NAME STREQUAL WindowsStore OR CMAKE_SYSTEM_NAME STREQUAL Windows) list(APPEND BUILD_ARGS -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}) endif() @@ -78,8 +78,10 @@ function(add_addon_depends addon searchpath) # make sure we create strings, not lists set(TMP_C_FLAGS "${CMAKE_C_FLAGS} ${ARCH_DEFINES}") set(TMP_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_DEFINES}") + set(TMP_EXE_LINKER_FLAGS "-L${OUTPUT_DIR}/lib ${CMAKE_EXE_LINKER_FLAGS}") list(APPEND BUILD_ARGS -DCMAKE_C_FLAGS=${TMP_C_FLAGS} - -DCMAKE_CXX_FLAGS=${TMP_CXX_FLAGS}) + -DCMAKE_CXX_FLAGS=${TMP_CXX_FLAGS} + -DCMAKE_EXE_LINKER_FLAGS=${TMP_EXE_LINKER_FLAGS}) endif() if(CMAKE_TOOLCHAIN_FILE) @@ -88,6 +90,17 @@ function(add_addon_depends addon searchpath) message(${BUILD_ARGS}) endif() + # used for addons where need special folders to store there content (if + # not set the addon define it byself). + # e.g. Google Chromium addon where his git bring: + # - "unable to create file" ... "Filename too long" + # see also WARNING by Windows on: https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart + if(THIRD_PARTY_PATH) + message(STATUS "Third party lib path specified") + message(STATUS ${THIRD_PARTY_PATH}) + list(APPEND BUILD_ARGS -DTHIRD_PARTY_PATH=${THIRD_PARTY_PATH}) + endif() + set(PATCH_COMMAND) # if there's a CMakeLists.txt use it to prepare the build @@ -215,7 +228,6 @@ function(add_addon_depends addon searchpath) -DOUTPUT_DIR=${OUTPUT_DIR} -DCMAKE_PREFIX_PATH=${OUTPUT_DIR} -DCMAKE_INSTALL_PREFIX=${OUTPUT_DIR} - -DCMAKE_EXE_LINKER_FLAGS=-L${OUTPUT_DIR}/lib -DCMAKE_INCLUDE_PATH=${OUTPUT_DIR}/include) endif() diff --git a/cmake/scripts/common/Macros.cmake b/cmake/scripts/common/Macros.cmake index eefd7c8..f7327e3 100644 --- a/cmake/scripts/common/Macros.cmake +++ b/cmake/scripts/common/Macros.cmake @@ -111,26 +111,6 @@ function(core_add_test_library name) endforeach() endfunction() -# Add an addon callback library -# Arguments: -# name name of the library to add -# Implicit arguments: -# SOURCES the sources of the library -# HEADERS the headers of the library (only for IDE support) -# OTHERS other library related files (only for IDE support) -# On return: -# Library target is defined and added to LIBRARY_FILES -function(core_add_addon_library name) - get_filename_component(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} NAME) - list(APPEND SOURCES lib${name}.cpp) - core_add_shared_library(${name} OUTPUT_DIRECTORY addons/${DIRECTORY}) - set_target_properties(${name} PROPERTIES FOLDER addons) - target_include_directories(${name} PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi - ${CMAKE_SOURCE_DIR}/xbmc) -endfunction() - # Add an dl-loaded shared library # Arguments: # name name of the library to add @@ -386,25 +366,6 @@ function(core_require_dep) endforeach() endfunction() -# add required dyloaded dependencies of main application -# Arguments: -# dep_list One or many dependency specifications (see split_dependency_specification) -# for syntax). The dependency name is used uppercased as variable prefix. -# On return: -# dependency added to ${SYSTEM_INCLUDES}, ${dep}_SONAME is set up -function(core_require_dyload_dep) - foreach(depspec ${ARGN}) - split_dependency_specification(${depspec} dep version) - find_package_with_ver(${dep} ${version} REQUIRED) - string(TOUPPER ${dep} depup) - list(APPEND SYSTEM_INCLUDES ${${depup}_INCLUDE_DIRS}) - list(APPEND DEP_DEFINES ${${depup}_DEFINITIONS}) - find_soname(${depup} REQUIRED) - export_dep() - set(${depup}_SONAME ${${depup}_SONAME} PARENT_SCOPE) - endforeach() -endfunction() - # helper macro for optional deps macro(setup_enable_switch) string(TOUPPER ${dep} depup) @@ -450,39 +411,6 @@ function(core_optional_dep) set(final_message ${final_message} PARENT_SCOPE) endfunction() -# add optional dyloaded dependencies of main application -# Arguments: -# dep_list One or many dependency specifications (see split_dependency_specification) -# for syntax). The dependency name is used uppercased as variable prefix. -# On return: -# dependency optionally added to ${SYSTEM_INCLUDES}, ${DEP_DEFINES}, ${dep}_SONAME is set up -function(core_optional_dyload_dep) - foreach(depspec ${ARGN}) - set(_required False) - split_dependency_specification(${depspec} dep version) - setup_enable_switch() - if(${enable_switch} STREQUAL AUTO) - find_package_with_ver(${dep} ${version}) - elseif(${${enable_switch}}) - find_package_with_ver(${dep} ${version} REQUIRED) - set(_required True) - endif() - - if(${depup}_FOUND) - list(APPEND SYSTEM_INCLUDES ${${depup}_INCLUDE_DIRS}) - find_soname(${depup} REQUIRED) - list(APPEND DEP_DEFINES ${${depup}_DEFINITIONS}) - set(final_message ${final_message} "${depup} enabled: Yes" PARENT_SCOPE) - export_dep() - set(${depup}_SONAME ${${depup}_SONAME} PARENT_SCOPE) - elseif(_required) - message(FATAL_ERROR "${depup} enabled but not found") - else() - set(final_message ${final_message} "${depup} enabled: No" PARENT_SCOPE) - endif() - endforeach() -endfunction() - function(core_file_read_filtered result filepattern) # Reads STRINGS from text files # with comments filtered out diff --git a/cmake/scripts/common/PrepareEnv.cmake b/cmake/scripts/common/PrepareEnv.cmake index 753dca1..559788f 100644 --- a/cmake/scripts/common/PrepareEnv.cmake +++ b/cmake/scripts/common/PrepareEnv.cmake @@ -34,6 +34,14 @@ endif() set(PLATFORM_TAG ${CORE_SYSTEM_NAME}) +# The CPU variable is given either by ./tools/depends or by the +# ./cmake/scripts/common/ArchSetup.cmake (which refers to the Kodi building +# itself). However, this file is only used by addons, so CPU can not always +# be defined, so in this case, if empty, the base CPU will be used. +if(NOT CPU) + set(CPU ${CMAKE_SYSTEM_PROCESSOR}) +endif() + if(CORE_SYSTEM_NAME STREQUAL android) if (CPU MATCHES "v7a") set(PLATFORM_TAG ${PLATFORM_TAG}-armv7) @@ -41,13 +49,14 @@ if(CORE_SYSTEM_NAME STREQUAL android) set(PLATFORM_TAG ${PLATFORM_TAG}-aarch64) elseif (CPU MATCHES "i686") set(PLATFORM_TAG ${PLATFORM_TAG}-i686) + elseif (CPU MATCHES "x86_64") + set(PLATFORM_TAG ${PLATFORM_TAG}-x86_64) else() message(FATAL_ERROR "Unsupported architecture") endif() -elseif(CORE_SYSTEM_NAME STREQUAL ios) - if (CPU MATCHES armv7) - set(PLATFORM_TAG ${PLATFORM_TAG}-armv7) - elseif (CPU MATCHES arm64) +elseif(CORE_SYSTEM_NAME STREQUAL darwin_embedded) + set(PLATFORM_TAG ${CORE_PLATFORM_NAME}) + if (CPU MATCHES arm64) set(PLATFORM_TAG ${PLATFORM_TAG}-aarch64) else() message(FATAL_ERROR "Unsupported architecture") diff --git a/cmake/scripts/darwin/Macros.cmake b/cmake/scripts/darwin/Macros.cmake new file mode 100644 index 0000000..9a805c4 --- /dev/null +++ b/cmake/scripts/darwin/Macros.cmake @@ -0,0 +1,8 @@ +macro(enable_arc) + if(CMAKE_GENERATOR STREQUAL Xcode) + set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) + else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-arc") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-arc") + endif() +endmacro() diff --git a/cmake/scripts/darwin_embedded/ArchSetup.cmake b/cmake/scripts/darwin_embedded/ArchSetup.cmake new file mode 100644 index 0000000..7160da9 --- /dev/null +++ b/cmake/scripts/darwin_embedded/ArchSetup.cmake @@ -0,0 +1,65 @@ +if(NOT CMAKE_TOOLCHAIN_FILE) + message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for ios/tvos. See ${CMAKE_SOURCE_DIR}/cmake/README.md") +endif() + +set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/${CORE_PLATFORM_NAME_LC}/XBMCApplication.mm) +set(PLATFORM_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/${CORE_PLATFORM_NAME_LC}/Info.plist.in) + +set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_EMBEDDED) +if(CORE_PLATFORM_NAME_LC STREQUAL tvos) + list(APPEND ARCH_DEFINES -DTARGET_DARWIN_TVOS) +else() + list(APPEND ARCH_DEFINES -DTARGET_DARWIN_IOS) +endif() +set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE + -D__STDC_CONSTANT_MACROS -DHAS_IOS_NETWORK -DHAS_ZEROCONF) +set(PLATFORM_DIR platform/darwin) +set(PLATFORMDEFS_DIR platform/posix) +set(CMAKE_SYSTEM_NAME Darwin) +if(WITH_ARCH) + set(ARCH ${WITH_ARCH}) +else() + if(CPU STREQUAL arm64) + set(ARCH aarch64) + else() + message(SEND_ERROR "Unknown CPU: ${CPU}") + endif() + set(CMAKE_OSX_ARCHITECTURES ${CPU}) + set(NEON True) +endif() + +list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX}) + +list(APPEND DEPLIBS "-framework CoreFoundation" "-framework CoreVideo" + "-framework CoreAudio" "-framework AudioToolbox" + "-framework QuartzCore" "-framework MediaPlayer" + "-framework CFNetwork" "-framework CoreGraphics" + "-framework Foundation" "-framework UIKit" + "-framework CoreMedia" "-framework AVFoundation" + "-framework VideoToolbox" "-lresolv" "-ObjC" + "-framework AVKit" "-framework GameController") + +set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE) + +# AppleTV already has built-in AirPlay support +if(CORE_PLATFORM_NAME_LC STREQUAL tvos) + set(ENABLE_AIRTUNES OFF CACHE BOOL "" FORCE) +endif() +set(CMAKE_XCODE_ATTRIBUTE_INLINES_ARE_PRIVATE_EXTERN OFF) +set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN OFF) +set(CMAKE_XCODE_ATTRIBUTE_COPY_PHASE_STRIP OFF) + +include(cmake/scripts/darwin/Macros.cmake) +enable_arc() + +# Xcode strips dead code by default which breaks wrapping +set(CMAKE_XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING OFF) + +option(ENABLE_XCODE_ADDONBUILD "Enable Xcode automatic addon building?" OFF) + +# Unify output directories for iOS/tvOS packaging scripts +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CORE_BUILD_DIR}/${CORE_BUILD_CONFIG}) +foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CORE_BUILD_DIR}/${CORE_BUILD_CONFIG}) +endforeach() diff --git a/cmake/scripts/darwin_embedded/ExtraTargets.cmake b/cmake/scripts/darwin_embedded/ExtraTargets.cmake new file mode 100644 index 0000000..2b9980a --- /dev/null +++ b/cmake/scripts/darwin_embedded/ExtraTargets.cmake @@ -0,0 +1,25 @@ +if(CORE_PLATFORM_NAME_LC STREQUAL tvos) + # top shelf extension + set(TOPSHELF_EXTENSION_NAME "${APP_NAME_LC}-topshelf") + set(TOPSHELF_BUNDLE_EXTENSION appex) + set(TOPSHELF_DIR "${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/tvos/TopShelf") + # same path as the output Info.plist, taken from cmGlobalXCodeGenerator::ComputeInfoPListLocation() + set(ENTITLEMENTS_OUT_PATH "${CMAKE_BINARY_DIR}/CMakeFiles/${TOPSHELF_EXTENSION_NAME}.dir/TopShelf.entitlements") + + set(SOURCES + ${TOPSHELF_DIR}/ServiceProvider.m + ${TOPSHELF_DIR}/../tvosShared.m) + set(HEADERS + ${TOPSHELF_DIR}/ServiceProvider.h + ${TOPSHELF_DIR}/../tvosShared.h) + add_executable(${TOPSHELF_EXTENSION_NAME} MACOSX_BUNDLE ${SOURCES} ${HEADERS}) + + configure_file(${TOPSHELF_DIR}/TopShelf.entitlements.in ${ENTITLEMENTS_OUT_PATH} @ONLY) + set_target_properties(${TOPSHELF_EXTENSION_NAME} PROPERTIES BUNDLE_EXTENSION ${TOPSHELF_BUNDLE_EXTENSION} + MACOSX_BUNDLE_INFO_PLIST ${TOPSHELF_DIR}/Info.plist.in + XCODE_PRODUCT_TYPE com.apple.product-type.tv-app-extension + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${ENTITLEMENTS_OUT_PATH}) + target_link_libraries(${TOPSHELF_EXTENSION_NAME} "-framework TVServices" "-framework Foundation") + + add_dependencies(${APP_NAME_LC} ${TOPSHELF_EXTENSION_NAME}) +endif() diff --git a/cmake/scripts/darwin_embedded/Install.cmake b/cmake/scripts/darwin_embedded/Install.cmake new file mode 100644 index 0000000..af18277 --- /dev/null +++ b/cmake/scripts/darwin_embedded/Install.cmake @@ -0,0 +1,135 @@ +# IOS/TVOS packaging +if(CORE_PLATFORM_NAME_LC STREQUAL tvos) + # asset catalog + set(ASSET_CATALOG "${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/tvos/Assets.xcassets") + set(ASSET_CATALOG_ASSETS Assets) + set(ASSET_CATALOG_LAUNCH_IMAGE LaunchImage) + + message("generating missing asset catalog images...") + execute_process(COMMAND ${CMAKE_SOURCE_DIR}/tools/darwin/Support/GenerateMissingImages-tvos.py "${ASSET_CATALOG}" ${ASSET_CATALOG_ASSETS} ${ASSET_CATALOG_LAUNCH_IMAGE}) + + target_sources(${APP_NAME_LC} PRIVATE "${ASSET_CATALOG}") + set_source_files_properties("${ASSET_CATALOG}" PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") # adds to Copy Bundle Resources build phase + + # entitlements + set(ENTITLEMENTS_OUT_PATH "${CMAKE_BINARY_DIR}/CMakeFiles/${APP_NAME_LC}.dir/Kodi.entitlements") + configure_file(${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/tvos/Kodi.entitlements.in ${ENTITLEMENTS_OUT_PATH} @ONLY) + + set_target_properties(${APP_NAME_LC} PROPERTIES XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME ${ASSET_CATALOG_ASSETS} + XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME ${ASSET_CATALOG_LAUNCH_IMAGE} + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${ENTITLEMENTS_OUT_PATH}) + +else() + set(BUNDLE_RESOURCES ${CMAKE_SOURCE_DIR}/media/splash.jpg + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29@2x.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon40x40.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon40x40@2x.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon50x50.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon50x50@2x.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon57x57.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon57x57@2x.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon60x60.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon60x60@2x.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon72x72.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon72x72@2x.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon76x76.png + ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon76x76@2x.png) + + target_sources(${APP_NAME_LC} PRIVATE ${BUNDLE_RESOURCES}) + foreach(file IN LISTS BUNDLE_RESOURCES) + set_source_files_properties(${file} PROPERTIES MACOSX_PACKAGE_LOCATION .) + endforeach() + + target_sources(${APP_NAME_LC} PRIVATE ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchScreen.storyboard) + set_source_files_properties(${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchScreen.storyboard PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + +endif() + +# setup code signing +# dev team ID / identity (certificate) +set(DEVELOPMENT_TEAM "" CACHE STRING "Development Team") +set(CODE_SIGN_IDENTITY $,iPhone\ Developer,> CACHE STRING "Code Sign Identity") + +# app provisioning profile +set(CODE_SIGN_STYLE_APP Automatic) +set(PROVISIONING_PROFILE_APP "" CACHE STRING "Provisioning profile name for the Kodi app") +if(PROVISIONING_PROFILE_APP) + set(CODE_SIGN_STYLE_APP Manual) +endif() + +# top shelf provisioning profile +if(CORE_PLATFORM_NAME_LC STREQUAL tvos) + set(CODE_SIGN_STYLE_TOPSHELF Automatic) + set(PROVISIONING_PROFILE_TOPSHELF "" CACHE STRING "Provisioning profile name for the Top Shelf") + if(PROVISIONING_PROFILE_TOPSHELF) + set(CODE_SIGN_STYLE_TOPSHELF Manual) + endif() + set_target_properties(${TOPSHELF_EXTENSION_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${CODE_SIGN_IDENTITY}" + XCODE_ATTRIBUTE_CODE_SIGN_STYLE ${CODE_SIGN_STYLE_TOPSHELF} + XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${DEVELOPMENT_TEAM}" + XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "${PROVISIONING_PROFILE_TOPSHELF}") + # copy extension inside PlugIns dir of the app bundle + add_custom_command(TARGET ${APP_NAME_LC} POST_BUILD + COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory $ + $/PlugIns/${TOPSHELF_EXTENSION_NAME}.${TOPSHELF_BUNDLE_EXTENSION} + MAIN_DEPENDENCY ${TOPSHELF_EXTENSION_NAME}) +endif() +set_target_properties(${APP_NAME_LC} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${CODE_SIGN_IDENTITY}" + XCODE_ATTRIBUTE_CODE_SIGN_STYLE ${CODE_SIGN_STYLE_APP} + XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${DEVELOPMENT_TEAM}" + XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "${PROVISIONING_PROFILE_APP}") + +# Create xcode target that allows to build binary-addons. +if(ADDONS_TO_BUILD) + set(_addons "ADDONS=${ADDONS_TO_BUILD}") +endif() +add_custom_target(binary-addons + COMMAND $(MAKE) -C ${CMAKE_SOURCE_DIR}/tools/depends/target/binary-addons clean + COMMAND $(MAKE) -C ${CMAKE_SOURCE_DIR}/tools/depends/target/binary-addons VERBOSE=1 V=99 + INSTALL_PREFIX="${CMAKE_BINARY_DIR}/addons" CROSS_COMPILING=yes ${_addons}) +if(ENABLE_XCODE_ADDONBUILD) + add_dependencies(${APP_NAME_LC} binary-addons) +endif() +unset(_addons) + +add_custom_command(TARGET ${APP_NAME_LC} POST_BUILD + # TODO: Remove in sync with CopyRootFiles-darwin_embedded expecting the ".bin" file + COMMAND ${CMAKE_COMMAND} -E copy $ + $/${APP_NAME}.bin + + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/DllPaths_generated.h + ${CMAKE_BINARY_DIR}/xbmc/DllPaths_generated.h + COMMAND "ACTION=build" + "APP_NAME=${APP_NAME}" + "XBMC_DEPENDS=${DEPENDS_PATH}" + ${CMAKE_SOURCE_DIR}/tools/darwin/Support/CopyRootFiles-darwin_embedded.command + COMMAND "XBMC_DEPENDS=${DEPENDS_PATH}" + "PYTHON_VERSION=${PYTHON_VERSION}" + ${CMAKE_SOURCE_DIR}/tools/darwin/Support/copyframeworks-darwin_embedded.command + COMMAND ${CMAKE_SOURCE_DIR}/tools/darwin/Support/copyframeworks-dylibs2frameworks.command + COMMAND "XBMC_DEPENDS=${DEPENDS_PATH}" + "NATIVEPREFIX=${NATIVEPREFIX}" + ${CMAKE_SOURCE_DIR}/tools/darwin/Support/Codesign.command +) + +if(CORE_PLATFORM_NAME_LC STREQUAL tvos) + add_custom_command(TARGET ${APP_NAME_LC} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/share/${APP_NAME_LC} $/AppData/AppHome + ) +endif() + +set(DEPENDS_ROOT_FOR_XCODE ${NATIVEPREFIX}/..) +configure_file(${CMAKE_SOURCE_DIR}/tools/darwin/packaging/darwin_embedded/mkdeb-darwin_embedded.sh.in + ${CMAKE_BINARY_DIR}/tools/darwin/packaging/darwin_embedded/mkdeb-darwin_embedded.sh @ONLY) + +if(CORE_PLATFORM_NAME_LC STREQUAL ios) + configure_file(${CMAKE_SOURCE_DIR}/tools/darwin/packaging/darwin_embedded/migrate_to_kodi.sh.in + ${CMAKE_BINARY_DIR}/tools/darwin/packaging/darwin_embedded/migrate_to_kodi.sh @ONLY) +endif() + +add_custom_target(deb + COMMAND sh ./mkdeb-darwin_embedded.sh ${CORE_BUILD_CONFIG} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tools/darwin/packaging/darwin_embedded) +add_dependencies(deb ${APP_NAME_LC}) + diff --git a/cmake/scripts/darwin_embedded/Macros.cmake b/cmake/scripts/darwin_embedded/Macros.cmake new file mode 100644 index 0000000..91f2d86 --- /dev/null +++ b/cmake/scripts/darwin_embedded/Macros.cmake @@ -0,0 +1,118 @@ +function(core_link_library lib wraplib) + if(CMAKE_GENERATOR MATCHES "Unix Makefiles" OR CMAKE_GENERATOR STREQUAL Ninja) + set(wrapper_obj cores/dll-loader/exports/CMakeFiles/wrapper.dir/wrapper.c.o) + elseif(CMAKE_GENERATOR MATCHES "Xcode") + set(wrapper_obj cores/dll-loader/exports/kodi.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/wrapper.build/Objects-$(CURRENT_VARIANT)/$(CURRENT_ARCH)/wrapper.o) + else() + message(FATAL_ERROR "Unsupported generator in core_link_library") + endif() + + set(export -bundle -undefined dynamic_lookup + -Wl,-alias_list,${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/cores/dll-loader/exports/wrapper.def + ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/${wrapper_obj}) + set(extension ${CMAKE_SHARED_MODULE_SUFFIX}) + set(check_arg "") + if(TARGET ${lib}) + set(target ${lib}) + set(link_lib $) + set(check_arg ${ARGV2}) + set(data_arg ${ARGV3}) + + # iOS: EFFECTIVE_PLATFORM_NAME is not resolved + # http://public.kitware.com/pipermail/cmake/2016-March/063049.html + if(CORE_SYSTEM_NAME STREQUAL darwin_embedded) + get_target_property(dir ${lib} BINARY_DIR) + set(link_lib ${dir}/${CORE_BUILD_CONFIG}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}) + endif() + else() + set(target ${ARGV2}) + set(link_lib ${lib}) + set(check_arg ${ARGV3}) + set(data_arg ${ARGV4}) + endif() + if(check_arg STREQUAL export) + set(export ${export} + -Wl,--version-script=${ARGV3}) + elseif(check_arg STREQUAL extras) + foreach(arg ${data_arg}) + list(APPEND export ${arg}) + endforeach() + elseif(check_arg STREQUAL archives) + set(extra_libs ${data_arg}) + endif() + get_filename_component(dir ${wraplib} DIRECTORY) + + # We can't simply pass the linker flags to the args section of the custom command + # because cmake will add quotes around it (and the linker will fail due to those). + # We need to do this handstand first ... + string(REPLACE " " ";" CUSTOM_COMMAND_ARGS_LDFLAGS ${CMAKE_SHARED_LINKER_FLAGS}) + + add_custom_command(OUTPUT ${wraplib}-${ARCH}${extension} + COMMAND ${CMAKE_COMMAND} -E make_directory ${dir} + COMMAND ${CMAKE_C_COMPILER} + ARGS ${CUSTOM_COMMAND_ARGS_LDFLAGS} ${export} -Wl,-force_load ${link_lib} ${extra_libs} + -o ${CMAKE_BINARY_DIR}/${wraplib}-${ARCH}${extension} + DEPENDS ${target} wrapper.def wrapper + VERBATIM) + + get_filename_component(libname ${wraplib} NAME_WE) + add_custom_target(wrap_${libname} ALL DEPENDS ${wraplib}-${ARCH}${extension}) + set_target_properties(wrap_${libname} PROPERTIES FOLDER lib/wrapped) + add_dependencies(${APP_NAME_LC}-libraries wrap_${libname}) + + set(LIBRARY_FILES ${LIBRARY_FILES} ${CMAKE_BINARY_DIR}/${wraplib}-${ARCH}${extension} CACHE STRING "" FORCE) +endfunction() + +function(find_soname lib) + cmake_parse_arguments(arg "REQUIRED" "" "" ${ARGN}) + + string(TOLOWER ${lib} liblow) + if(${lib}_LDFLAGS) + set(link_lib "${${lib}_LDFLAGS}") + else() + set(link_lib "${${lib}_LIBRARIES}") + endif() + + execute_process(COMMAND ${CMAKE_C_COMPILER} -print-search-dirs + COMMAND fgrep libraries: + COMMAND sed "s/[^=]*=\\(.*\\)/\\1/" + COMMAND sed "s/:/ /g" + ERROR_QUIET + OUTPUT_VARIABLE cc_lib_path + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND echo ${link_lib} + COMMAND sed "s/-L[ ]*//g" + COMMAND sed "s/-l[^ ]*//g" + ERROR_QUIET + OUTPUT_VARIABLE env_lib_path + OUTPUT_STRIP_TRAILING_WHITESPACE) + + foreach(path ${cc_lib_path} ${env_lib_path}) + if(IS_DIRECTORY ${path}) + execute_process(COMMAND ls -- ${path}/lib${liblow}.dylib + ERROR_QUIET + OUTPUT_VARIABLE lib_file + OUTPUT_STRIP_TRAILING_WHITESPACE) + else() + set(lib_file ${path}) + endif() + if(lib_file) + # we want the path/name that is embedded in the dylib + execute_process(COMMAND otool -L ${lib_file} + COMMAND grep -v lib${liblow}.dylib + COMMAND grep ${liblow} + COMMAND awk "{V=1; print $V}" + ERROR_QUIET + OUTPUT_VARIABLE filename + OUTPUT_STRIP_TRAILING_WHITESPACE) + get_filename_component(${lib}_SONAME "${filename}" NAME) + if(VERBOSE) + message(STATUS "${lib} soname: ${${lib}_SONAME}") + endif() + endif() + endforeach() + if(arg_REQUIRED AND NOT ${lib}_SONAME) + message(FATAL_ERROR "Could not find dynamically loadable library ${lib}") + endif() + set(${lib}_SONAME ${${lib}_SONAME} PARENT_SCOPE) +endfunction() diff --git a/cmake/scripts/darwin_embedded/PathSetup.cmake b/cmake/scripts/darwin_embedded/PathSetup.cmake new file mode 100644 index 0000000..efaca0b --- /dev/null +++ b/cmake/scripts/darwin_embedded/PathSetup.cmake @@ -0,0 +1,7 @@ +set(BUNDLE_IDENTIFIER_DESC "Bundle ID") +if(CORE_PLATFORM_NAME_LC STREQUAL tvos) + string(CONCAT BUNDLE_IDENTIFIER_DESC "${BUNDLE_IDENTIFIER_DESC}" " (app, top shelf, group ID)") +endif() +set(PLATFORM_BUNDLE_IDENTIFIER "${APP_PACKAGE}-${CORE_PLATFORM_NAME_LC}" CACHE STRING "${BUNDLE_IDENTIFIER_DESC}") +list(APPEND final_message "Bundle ID: ${PLATFORM_BUNDLE_IDENTIFIER}") +include(cmake/scripts/osx/PathSetup.cmake) diff --git a/cmake/scripts/freebsd/ArchSetup.cmake b/cmake/scripts/freebsd/ArchSetup.cmake index 3d5599c..7da6c51 100644 --- a/cmake/scripts/freebsd/ArchSetup.cmake +++ b/cmake/scripts/freebsd/ArchSetup.cmake @@ -1,7 +1,8 @@ -set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_FREEBSD) +set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_FREEBSD) set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_LARGEFILE64_SOURCE - -D_FILE_OFFSET_BITS=64) + -D_FILE_OFFSET_BITS=64 -DHAS_OSS) set(PLATFORM_DIR platform/linux) +set(PLATFORMDEFS_DIR platform/posix) set(SYSTEM_LDFLAGS -L/usr/local/lib) if(WITH_ARCH) set(ARCH ${WITH_ARCH}) @@ -30,4 +31,4 @@ if(NOT ENABLE_ALSA) endif() # Additional SYSTEM_DEFINES -list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK) +list(APPEND SYSTEM_DEFINES -DHAS_POSIX_NETWORK -DHAS_FREEBSD_NETWORK) diff --git a/cmake/scripts/ios/ArchSetup.cmake b/cmake/scripts/ios/ArchSetup.cmake deleted file mode 100644 index b6c626f..0000000 --- a/cmake/scripts/ios/ArchSetup.cmake +++ /dev/null @@ -1,61 +0,0 @@ -if(NOT CMAKE_TOOLCHAIN_FILE) - message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for ios. See ${CMAKE_SOURCE_DIR}/cmake/README.md") -endif() - -set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/XBMCApplication.mm) - -set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_IOS) -set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE - -D__STDC_CONSTANT_MACROS) -set(PLATFORM_DIR platform/linux) -set(CMAKE_SYSTEM_NAME Darwin) -if(WITH_ARCH) - set(ARCH ${WITH_ARCH}) -else() - if(CPU STREQUAL armv7) - set(CMAKE_OSX_ARCHITECTURES ${CPU}) - set(ARCH arm) - set(NEON True) - elseif(CPU STREQUAL arm64) - set(CMAKE_OSX_ARCHITECTURES ${CPU}) - set(ARCH aarch64) - set(NEON True) - else() - message(SEND_ERROR "Unknown CPU: ${CPU}") - endif() -endif() - -# Additional SYSTEM_DEFINES -list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK -DHAS_ZEROCONF) - -list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX}) - -list(APPEND DEPLIBS "-framework CoreFoundation" "-framework CoreVideo" - "-framework CoreAudio" "-framework AudioToolbox" - "-framework QuartzCore" "-framework MediaPlayer" - "-framework CFNetwork" "-framework CoreGraphics" - "-framework Foundation" "-framework UIKit" - "-framework CoreMedia" "-framework AVFoundation" - "-framework VideoToolbox") - -set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE) - -set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "9.0") -set(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2") - -set(CMAKE_XCODE_ATTRIBUTE_INLINES_ARE_PRIVATE_EXTERN OFF) -set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN OFF) -set(CMAKE_XCODE_ATTRIBUTE_COPY_PHASE_STRIP OFF) - -# Xcode strips dead code by default which breaks wrapping -set(CMAKE_XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING OFF) - -# Unify output directories for iOS packaging scripts -if(NOT CMAKE_GENERATOR MATCHES Xcode) - set(CORE_BUILD_CONFIG "${CORE_BUILD_CONFIG}-iphoneos") -endif() -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CORE_BUILD_DIR}/${CORE_BUILD_CONFIG}) -foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) - string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CORE_BUILD_DIR}/${CORE_BUILD_CONFIG}) -endforeach() diff --git a/cmake/scripts/ios/Install.cmake b/cmake/scripts/ios/Install.cmake deleted file mode 100644 index 7668e7c..0000000 --- a/cmake/scripts/ios/Install.cmake +++ /dev/null @@ -1,99 +0,0 @@ -# IOS packaging - -set(BUNDLE_RESOURCES ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1100-Landscape-2436h@3x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1100-Portrait-2436h@3x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Landscape-1792h@2x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Portrait-2224h@2x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Landscape-2224h@2x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Portrait-2388h@2x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Landscape-2388h@2x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Landscape-2688h@3x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Portrait-1792h@2x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Portrait-2688h@3x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-568h@2x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-700-568h@2x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-700-Landscape@2x~ipad.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-700-Portrait@2x~ipad.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-700@2x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-800-667h@2x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-800-Landscape-736h@3x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-800-Portrait-736h@3x.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-Landscape@2x~ipad.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-Portrait@2x~ipad.png - ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage@2x.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29@2x.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon40x40.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon40x40@2x.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon50x50.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon50x50@2x.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon57x57.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon57x57@2x.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon60x60.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon60x60@2x.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon72x72.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon72x72@2x.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon76x76.png - ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon76x76@2x.png) - -target_sources(${APP_NAME_LC} PRIVATE ${BUNDLE_RESOURCES}) -foreach(file IN LISTS BUNDLE_RESOURCES) - set_source_files_properties(${file} PROPERTIES MACOSX_PACKAGE_LOCATION .) -endforeach() - -target_sources(${APP_NAME_LC} PRIVATE ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/English.lproj/InfoPlist.strings) -set_source_files_properties(${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/English.lproj/InfoPlist.strings PROPERTIES MACOSX_PACKAGE_LOCATION "./English.lproj") - -# Options for code signing propagated as env vars to Codesign.command via Xcode -set(IOS_CODE_SIGN_IDENTITY "" CACHE STRING "Code Sign Identity") -if(IOS_CODE_SIGN_IDENTITY) - set_target_properties(${APP_NAME_LC} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED TRUE - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ${IOS_CODE_SIGN_IDENTITY}) -endif() - -add_custom_command(TARGET ${APP_NAME_LC} POST_BUILD - # TODO: Remove in sync with CopyRootFiles-ios expecting the ".bin" file - COMMAND ${CMAKE_COMMAND} -E copy $ - $/${APP_NAME}.bin - - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/DllPaths_generated.h - ${CMAKE_BINARY_DIR}/xbmc/DllPaths_generated.h - COMMAND "ACTION=build" - "TARGET_BUILD_DIR=$/.." - "TARGET_NAME=${APP_NAME}.app" - "APP_NAME=${APP_NAME}" - "PRODUCT_NAME=${APP_NAME}" - "WRAPPER_EXTENSION=app" - "SRCROOT=${CMAKE_BINARY_DIR}" - ${CMAKE_SOURCE_DIR}/tools/darwin/Support/CopyRootFiles-ios.command - COMMAND "XBMC_DEPENDS=${DEPENDS_PATH}" - "TARGET_BUILD_DIR=$/.." - "TARGET_NAME=${APP_NAME}.app" - "APP_NAME=${APP_NAME}" - "PRODUCT_NAME=${APP_NAME}" - "FULL_PRODUCT_NAME=${APP_NAME}.app" - "WRAPPER_EXTENSION=app" - "SRCROOT=${CMAKE_BINARY_DIR}" - ${CMAKE_SOURCE_DIR}/tools/darwin/Support/copyframeworks-ios.command - COMMAND "XBMC_DEPENDS=${DEPENDS_PATH}" - "NATIVEPREFIX=${NATIVEPREFIX}" - "PLATFORM_NAME=${PLATFORM}" - "CODESIGNING_FOLDER_PATH=$" - "BUILT_PRODUCTS_DIR=$/.." - "WRAPPER_NAME=${APP_NAME}.app" - "APP_NAME=${APP_NAME}" - "CURRENT_ARCH=${ARCH}" - ${CMAKE_SOURCE_DIR}/tools/darwin/Support/Codesign.command -) - -set(DEPENDS_ROOT_FOR_XCODE ${NATIVEPREFIX}/..) -configure_file(${CMAKE_SOURCE_DIR}/tools/darwin/packaging/ios/mkdeb-ios.sh.in - ${CMAKE_BINARY_DIR}/tools/darwin/packaging/ios/mkdeb-ios.sh @ONLY) -configure_file(${CMAKE_SOURCE_DIR}/tools/darwin/packaging/migrate_to_kodi_ios.sh.in - ${CMAKE_BINARY_DIR}/tools/darwin/packaging/migrate_to_kodi_ios.sh @ONLY) - -add_custom_target(deb - COMMAND sh ./mkdeb-ios.sh ${CORE_BUILD_CONFIG} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tools/darwin/packaging/ios) -add_dependencies(deb ${APP_NAME_LC}) - diff --git a/cmake/scripts/ios/Macros.cmake b/cmake/scripts/ios/Macros.cmake deleted file mode 120000 index 54c1b28..0000000 --- a/cmake/scripts/ios/Macros.cmake +++ /dev/null @@ -1 +0,0 @@ -../osx/Macros.cmake \ No newline at end of file diff --git a/cmake/scripts/ios/PathSetup.cmake b/cmake/scripts/ios/PathSetup.cmake deleted file mode 120000 index d7f25b2..0000000 --- a/cmake/scripts/ios/PathSetup.cmake +++ /dev/null @@ -1 +0,0 @@ -../osx/PathSetup.cmake \ No newline at end of file diff --git a/cmake/scripts/linux/ArchSetup.cmake b/cmake/scripts/linux/ArchSetup.cmake index 602ef3d..04fc6e3 100644 --- a/cmake/scripts/linux/ArchSetup.cmake +++ b/cmake/scripts/linux/ArchSetup.cmake @@ -1,8 +1,8 @@ # we always want to use GNU features if available, so set _GNU_SOURCE -set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_LINUX -D_GNU_SOURCE) -set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_FILE_DEFINED - -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64) +set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_LINUX -D_GNU_SOURCE) +set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_FILE_OFFSET_BITS=64) set(PLATFORM_DIR platform/linux) +set(PLATFORMDEFS_DIR platform/posix) set(CMAKE_SYSTEM_NAME Linux) if(WITH_ARCH) set(ARCH ${WITH_ARCH}) @@ -84,10 +84,27 @@ endif() include(LDGOLD) include(CheckIncludeFiles) -check_include_files("linux/memfd.h" HAVE_LINUX_MEMFD) -if(HAVE_LINUX_MEMFD) - list(APPEND ARCH_DEFINES "-DHAVE_LINUX_MEMFD=1") +check_include_files("linux/udmabuf.h" HAVE_LINUX_UDMABUF) +if(HAVE_LINUX_UDMABUF) + list(APPEND ARCH_DEFINES "-DHAVE_LINUX_UDMABUF=1") +else() + message(STATUS "include/linux/udmabuf.h not found") +endif() + +check_include_files("linux/dma-heap.h" HAVE_LINUX_DMA_HEAP) +if(HAVE_LINUX_DMA_HEAP) + list(APPEND ARCH_DEFINES "-DHAVE_LINUX_DMA_HEAP=1") +else() + message(STATUS "include/linux/dma-heap.h not found") +endif() + +check_include_files("linux/dma-buf.h" HAVE_LINUX_DMA_BUF) +if(HAVE_LINUX_DMA_BUF) + list(APPEND ARCH_DEFINES "-DHAVE_LINUX_DMA_BUF=1") +else() + message(STATUS "include/linux/dma-buf.h not found") endif() + include(CheckSymbolExists) set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE") check_symbol_exists("mkostemp" "stdlib.h" HAVE_MKOSTEMP) @@ -96,8 +113,17 @@ if(HAVE_MKOSTEMP) list(APPEND ARCH_DEFINES "-DHAVE_MKOSTEMP=1") endif() +set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE") +check_symbol_exists("memfd_create" "sys/mman.h" HAVE_LINUX_MEMFD) +set(CMAKE_REQUIRED_DEFINITIONS "") +if(HAVE_LINUX_MEMFD) + list(APPEND ARCH_DEFINES "-DHAVE_LINUX_MEMFD=1") +else() + message(STATUS "memfd_create() not found") +endif() + # Additional SYSTEM_DEFINES -list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK) +list(APPEND SYSTEM_DEFINES -DHAS_POSIX_NETWORK -DHAS_LINUX_NETWORK) # Code Coverage if(CMAKE_BUILD_TYPE STREQUAL Coverage) diff --git a/cmake/scripts/osx/ArchSetup.cmake b/cmake/scripts/osx/ArchSetup.cmake index 74f2ed4..7d8f58b 100644 --- a/cmake/scripts/osx/ArchSetup.cmake +++ b/cmake/scripts/osx/ArchSetup.cmake @@ -6,10 +6,11 @@ set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/posix/main.cpp ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/osx/SDLMain.mm ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/osx/SDLMain.h) -set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX) +set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX) set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D__STDC_CONSTANT_MACROS) -set(PLATFORM_DIR platform/linux) +set(PLATFORM_DIR platform/darwin) +set(PLATFORMDEFS_DIR platform/posix) set(CMAKE_SYSTEM_NAME Darwin) if(WITH_ARCH) set(ARCH ${WITH_ARCH}) @@ -23,7 +24,7 @@ else() endif() # Additional SYSTEM_DEFINES -list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK -DHAS_SDL -DHAS_ZEROCONF) +list(APPEND SYSTEM_DEFINES -DHAS_POSIX_NETWORK -DHAS_OSX_NETWORK -DHAS_SDL -DHAS_ZEROCONF) list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX}) @@ -32,7 +33,10 @@ list(APPEND DEPLIBS "-framework DiskArbitration" "-framework IOKit" "-framework ApplicationServices" "-framework AppKit" "-framework CoreAudio" "-framework AudioToolbox" "-framework CoreGraphics" "-framework CoreMedia" - "-framework VideoToolbox") + "-framework VideoToolbox" "-framework Security") -set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) +set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13) set(CMAKE_XCODE_ATTRIBUTE_CLANG_LINK_OBJC_RUNTIME OFF) + +include(cmake/scripts/darwin/Macros.cmake) +enable_arc() diff --git a/cmake/scripts/osx/Install.cmake b/cmake/scripts/osx/Install.cmake index 77c771c..aca31b4 100644 --- a/cmake/scripts/osx/Install.cmake +++ b/cmake/scripts/osx/Install.cmake @@ -22,6 +22,7 @@ add_custom_target(bundle "APP_NAME=${APP_NAME}" "FULL_PRODUCT_NAME=${APP_NAME}.app" "SRCROOT=${CMAKE_BINARY_DIR}" + "PYTHON_VERSION=${PYTHON_VERSION}" ${CMAKE_SOURCE_DIR}/tools/darwin/Support/copyframeworks-osx.command) set_target_properties(bundle PROPERTIES FOLDER "Build Utilities") add_dependencies(bundle ${APP_NAME_LC}) diff --git a/cmake/scripts/osx/Macros.cmake b/cmake/scripts/osx/Macros.cmake index 52f87d1..251cc79 100644 --- a/cmake/scripts/osx/Macros.cmake +++ b/cmake/scripts/osx/Macros.cmake @@ -20,7 +20,7 @@ function(core_link_library lib wraplib) # iOS: EFFECTIVE_PLATFORM_NAME is not resolved # http://public.kitware.com/pipermail/cmake/2016-March/063049.html - if(CORE_SYSTEM_NAME STREQUAL ios AND CMAKE_GENERATOR STREQUAL Xcode) + if(CORE_SYSTEM_NAME STREQUAL darwin_embedded) get_target_property(dir ${lib} BINARY_DIR) set(link_lib ${dir}/${CORE_BUILD_CONFIG}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}) endif() diff --git a/cmake/scripts/windows/ArchSetup.cmake b/cmake/scripts/windows/ArchSetup.cmake index 032632c..f3628f2 100644 --- a/cmake/scripts/windows/ArchSetup.cmake +++ b/cmake/scripts/windows/ArchSetup.cmake @@ -35,7 +35,6 @@ set(MINGW_LIBS_DIR ${CMAKE_SOURCE_DIR}/${DEPS_FOLDER_RELATIVE}/mingwlibs/${ARCH} list(APPEND CMAKE_PREFIX_PATH ${MINGW_LIBS_DIR}) list(APPEND CMAKE_LIBRARY_PATH ${MINGW_LIBS_DIR}/bin) list(APPEND CMAKE_PREFIX_PATH ${DEPENDENCIES_DIR}) -set(PYTHON_INCLUDE_DIR ${DEPENDENCIES_DIR}/include/python) # -------- Compiler options --------- @@ -46,12 +45,9 @@ set(SYSTEM_DEFINES -DWIN32_LEAN_AND_MEAN -DNOMINMAX -DHAS_DX -D__STDC_CONSTANT_M -DPLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi" -DPLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi" -DUNICODE -D_UNICODE + -DFRIBIDI_STATIC $<$:-DD3D_DEBUG_INFO>) -if(${ARCH} STREQUAL win32) - list(APPEND SYSTEM_DEFINES $<$:-D_ITERATOR_DEBUG_LEVEL=0>) -endif() - # Additional SYSTEM_DEFINES list(APPEND SYSTEM_DEFINES -DHAS_WIN32_NETWORK -DHAS_FILESYSTEM_SMB) @@ -74,7 +70,8 @@ link_directories(${DEPENDENCIES_DIR}/lib) # Additional libraries list(APPEND DEPLIBS bcrypt.lib d3d11.lib DInput8.lib DSound.lib winmm.lib Mpr.lib Iphlpapi.lib WS2_32.lib - PowrProf.lib setupapi.lib Shlwapi.lib dwmapi.lib dxguid.lib DelayImp.lib) + PowrProf.lib setupapi.lib Shlwapi.lib dwmapi.lib dxguid.lib DelayImp.lib version.lib + crypt32.lib Mfplat.lib Mfuuid.lib Strmiids.lib) # NODEFAULTLIB option set(_nodefaultlibs_RELEASE libcmt) @@ -87,7 +84,7 @@ foreach(_lib ${_nodefaultlibs_DEBUG}) endforeach() # DELAYLOAD option -set(_delayloadlibs zlib.dll libmysql.dll libxslt.dll dnssd.dll dwmapi.dll sqlite3.dll +set(_delayloadlibs zlib.dll libmariadb.dll libxslt.dll dnssd.dll dwmapi.dll sqlite3.dll d3dcompiler_47.dll) foreach(_lib ${_delayloadlibs}) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DELAYLOAD:\"${_lib}\"") diff --git a/cmake/scripts/windowsstore/ArchSetup.cmake b/cmake/scripts/windowsstore/ArchSetup.cmake index 2e6d7cb..ad55a01 100644 --- a/cmake/scripts/windowsstore/ArchSetup.cmake +++ b/cmake/scripts/windowsstore/ArchSetup.cmake @@ -53,8 +53,6 @@ list(APPEND CMAKE_PREFIX_PATH ${MINGW_LIBS_DIR}) list(APPEND CMAKE_LIBRARY_PATH ${MINGW_LIBS_DIR}/bin) # dependencies list(APPEND CMAKE_PREFIX_PATH ${DEPENDENCIES_DIR}) -# for python -set(PYTHON_INCLUDE_DIR ${DEPENDENCIES_DIR}/include/python) # -------- Compiler options --------- @@ -64,22 +62,24 @@ add_options(CXX ALL_BUILDS "/wd\"4146\"") add_options(CXX ALL_BUILDS "/wd\"4251\"") add_options(CXX ALL_BUILDS "/wd\"4668\"") add_options(CXX ALL_BUILDS "/wd\"5033\"") -set(ARCH_DEFINES -D_WINDOWS -DTARGET_WINDOWS -DTARGET_WINDOWS_STORE -DXBMC_EXPORT -DMS_UWP) +set(ARCH_DEFINES -D_WINDOWS -DTARGET_WINDOWS -DTARGET_WINDOWS_STORE -DXBMC_EXPORT -DMS_UWP -DMS_STORE) if(NOT SDK_TARGET_ARCH STREQUAL arm) list(APPEND ARCH_DEFINES -D__SSE__ -D__SSE2__) endif() set(SYSTEM_DEFINES -DWIN32_LEAN_AND_MEAN -DNOMINMAX -DHAS_DX -D__STDC_CONSTANT_MACROS - -DFMT_HEADER_ONLY -DTAGLIB_STATIC -DNPT_CONFIG_ENABLE_LOGGING + -DTAGLIB_STATIC -DNPT_CONFIG_ENABLE_LOGGING -DPLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi" -DPLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi" -DUNICODE -D_UNICODE + -DFRIBIDI_STATIC $<$:-DD3D_DEBUG_INFO>) # Additional SYSTEM_DEFINES list(APPEND SYSTEM_DEFINES -DHAS_WIN10_NETWORK) # The /MP option enables /FS by default. -set(CMAKE_CXX_FLAGS "/MP ${CMAKE_CXX_FLAGS} /EHsc /await /std:c++latest") +set(CMAKE_CXX_FLAGS "/MP ${CMAKE_CXX_FLAGS} /EHsc /await") +set(CMAKE_CXX_STANDARD 17) # Google Test needs to use shared version of runtime libraries set(gtest_force_shared_crt ON CACHE STRING "" FORCE) @@ -91,7 +91,8 @@ set(gtest_force_shared_crt ON CACHE STRING "" FORCE) link_directories(${MINGW_LIBS_DIR}/lib ${DEPENDENCIES_DIR}/lib) -list(APPEND DEPLIBS bcrypt.lib d3d11.lib WS2_32.lib dxguid.lib dloadhelper.lib WindowsApp.lib) +list(APPEND DEPLIBS bcrypt.lib d3d11.lib WS2_32.lib dxguid.lib dloadhelper.lib WindowsApp.lib + Mfplat.lib Mfuuid.lib Strmiids.lib) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /WINMD:NO") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:msvcrt /DEBUG:FASTLINK /OPT:NOREF /OPT:NOICF") diff --git a/cmake/scripts/windowsstore/Macros.cmake b/cmake/scripts/windowsstore/Macros.cmake index de89c62..c8cb960 100644 --- a/cmake/scripts/windowsstore/Macros.cmake +++ b/cmake/scripts/windowsstore/Macros.cmake @@ -112,7 +112,7 @@ endmacro() macro(winstore_append_props target) # exclude debug dlls from packaging - set(DEBUG_DLLS zlibd.dll freetyped.dll sqlite3d.dll) + set(DEBUG_DLLS zlibd.dll) foreach(_dll ${DEBUG_DLLS}) if (DEBUG_DLLS_EXCLUDE) list(APPEND DEBUG_DLLS_EXCLUDE "\;$(BuildRootPath)/dlls/${_dll}") -- cgit v1.2.3