diff options
| author | manuel <manuel@mausz.at> | 2020-07-02 23:09:26 +0200 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2020-07-02 23:09:26 +0200 |
| commit | 5f8335c1e49ce108ef3481863833c98efa00411b (patch) | |
| tree | f02b5c1c9765bb6a14c8eb42bb4f81b9face0b55 /cmake/scripts | |
| parent | e317daf081a1048904fdf0b548946fa3ba6593a7 (diff) | |
| download | kodi-pvr-build-5f8335c1e49ce108ef3481863833c98efa00411b.tar.gz kodi-pvr-build-5f8335c1e49ce108ef3481863833c98efa00411b.tar.bz2 kodi-pvr-build-5f8335c1e49ce108ef3481863833c98efa00411b.zip | |
Diffstat (limited to 'cmake/scripts')
28 files changed, 532 insertions, 279 deletions
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) | |||
| 2 | message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for android. See ${CMAKE_SOURCE_DIR}/cmake/README.md") | 2 | message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for android. See ${CMAKE_SOURCE_DIR}/cmake/README.md") |
| 3 | endif() | 3 | endif() |
| 4 | 4 | ||
| 5 | set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_LINUX -D_LINUX -DTARGET_ANDROID) | 5 | set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_LINUX -DTARGET_ANDROID) |
| 6 | set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_LARGEFILE64_SOURCE | 6 | set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_LARGEFILE64_SOURCE |
| 7 | -D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64=1) | 7 | -D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64=1) |
| 8 | 8 | ||
| @@ -10,6 +10,7 @@ set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_LARGEFILE64_SOURCE | |||
| 10 | set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/android/activity/XBMCApp.cpp) | 10 | set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/android/activity/XBMCApp.cpp) |
| 11 | 11 | ||
| 12 | set(PLATFORM_DIR platform/linux) | 12 | set(PLATFORM_DIR platform/linux) |
| 13 | set(PLATFORMDEFS_DIR platform/posix) | ||
| 13 | if(WITH_ARCH) | 14 | if(WITH_ARCH) |
| 14 | set(ARCH ${WITH_ARCH}) | 15 | set(ARCH ${WITH_ARCH}) |
| 15 | else() | 16 | else() |
| @@ -26,16 +27,18 @@ else() | |||
| 26 | elseif(CPU STREQUAL i686) | 27 | elseif(CPU STREQUAL i686) |
| 27 | set(ARCH i486-linux) | 28 | set(ARCH i486-linux) |
| 28 | set(NEON False) | 29 | set(NEON False) |
| 30 | elseif(CPU STREQUAL x86_64) | ||
| 31 | set(ARCH x86_64) | ||
| 32 | set(NEON False) | ||
| 29 | else() | 33 | else() |
| 30 | message(SEND_ERROR "Unknown CPU: ${CPU}") | 34 | message(SEND_ERROR "Unknown CPU: ${CPU}") |
| 31 | endif() | 35 | endif() |
| 32 | endif() | 36 | endif() |
| 33 | 37 | ||
| 34 | # Additional SYSTEM_DEFINES | 38 | # Additional SYSTEM_DEFINES |
| 35 | list(APPEND SYSTEM_DEFINES -DHAS_ZEROCONF -DHAS_LINUX_NETWORK) | 39 | list(APPEND SYSTEM_DEFINES -DHAS_ZEROCONF) |
| 36 | 40 | ||
| 37 | set(ENABLE_X11 OFF CACHE BOOL "" FORCE) | 41 | set(ENABLE_X11 OFF CACHE BOOL "" FORCE) |
| 38 | set(ENABLE_AML OFF CACHE BOOL "" FORCE) | ||
| 39 | set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE) | 42 | set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE) |
| 40 | set(ENABLE_MDNS OFF CACHE BOOL "" FORCE) | 43 | set(ENABLE_MDNS OFF CACHE BOOL "" FORCE) |
| 41 | 44 | ||
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 | |||
| 107 | ${CMAKE_BINARY_DIR}/tools/android/packaging/media | 107 | ${CMAKE_BINARY_DIR}/tools/android/packaging/media |
| 108 | COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/tools/android/packaging/xbmc/res | 108 | COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/tools/android/packaging/xbmc/res |
| 109 | ${CMAKE_BINARY_DIR}/tools/android/packaging/xbmc/res | 109 | ${CMAKE_BINARY_DIR}/tools/android/packaging/xbmc/res |
| 110 | COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/lib/python2.7 ${libdir}/python2.7 | 110 | COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/lib/python${PYTHON_VERSION} ${libdir}/python${PYTHON_VERSION} |
| 111 | COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/share/${APP_NAME_LC} ${datadir}/${APP_NAME_LC} | 111 | COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/share/${APP_NAME_LC} ${datadir}/${APP_NAME_LC} |
| 112 | COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${APP_NAME_LC}> | 112 | COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${APP_NAME_LC}> |
| 113 | ${libdir}/${APP_NAME_LC}/$<TARGET_FILE_NAME:${APP_NAME_LC}>) | 113 | ${libdir}/${APP_NAME_LC}/$<TARGET_FILE_NAME:${APP_NAME_LC}>) |
| @@ -153,13 +153,12 @@ foreach(lib IN LISTS required_dyload dyload_optional ITEMS Shairplay) | |||
| 153 | endif() | 153 | endif() |
| 154 | endforeach() | 154 | endforeach() |
| 155 | add_bundle_file(${ASS_LIBRARY} ${libdir} "") | 155 | add_bundle_file(${ASS_LIBRARY} ${libdir} "") |
| 156 | add_bundle_file(${BLURAY_LIBRARY} ${libdir} "") | 156 | add_bundle_file(${SHAIRPLAY_LIBRARY} ${libdir} "") |
| 157 | add_bundle_file(${SMBCLIENT_LIBRARY} ${libdir} "") | 157 | add_bundle_file(${SMBCLIENT_LIBRARY} ${libdir} "") |
| 158 | 158 | ||
| 159 | # Main targets from Makefile.in | 159 | # Main targets from Makefile.in |
| 160 | if(CPU MATCHES i686) | 160 | if(CPU MATCHES i686) |
| 161 | set(CPU x86) | 161 | set(CPU x86) |
| 162 | set(ARCH x86) | ||
| 163 | endif() | 162 | endif() |
| 164 | foreach(target apk obb apk-unsigned apk-obb apk-obb-unsigned apk-noobb apk-clean apk-sign) | 163 | foreach(target apk obb apk-unsigned apk-obb apk-obb-unsigned apk-noobb apk-clean apk-sign) |
| 165 | add_custom_target(${target} | 164 | add_custom_target(${target} |
| @@ -168,7 +167,6 @@ foreach(target apk obb apk-unsigned apk-obb apk-obb-unsigned apk-noobb apk-clean | |||
| 168 | CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR} | 167 | CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR} |
| 169 | CC=${CMAKE_C_COMPILER} | 168 | CC=${CMAKE_C_COMPILER} |
| 170 | CPU=${CPU} | 169 | CPU=${CPU} |
| 171 | ARCH=${ARCH} | ||
| 172 | HOST=${HOST} | 170 | HOST=${HOST} |
| 173 | TOOLCHAIN=${TOOLCHAIN} | 171 | TOOLCHAIN=${TOOLCHAIN} |
| 174 | PREFIX=${prefix} | 172 | 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) | |||
| 92 | endforeach() | 92 | endforeach() |
| 93 | endif() | 93 | endif() |
| 94 | 94 | ||
| 95 | message(STATUS "Addon dependency check ...") | ||
| 95 | # Set defines used in addon.xml.in and read from versions.h to set add-on | 96 | # Set defines used in addon.xml.in and read from versions.h to set add-on |
| 96 | # version parts automatically | 97 | # version parts automatically |
| 97 | file(STRINGS ${KODI_INCLUDE_DIR}/versions.h BIN_ADDON_PARTS) | 98 | file(STRINGS ${KODI_INCLUDE_DIR}/versions.h BIN_ADDON_PARTS) |
| @@ -108,7 +109,8 @@ macro (build_addon target prefix libs) | |||
| 108 | if("${include_name}" MATCHES "_DEPENDS") | 109 | if("${include_name}" MATCHES "_DEPENDS") |
| 109 | # Use start definition name as base for other value type | 110 | # Use start definition name as base for other value type |
| 110 | list(GET loop_var 0 list_name) | 111 | list(GET loop_var 0 list_name) |
| 111 | string(REPLACE "_DEPENDS" "" depends_name ${list_name}) | 112 | string(REPLACE "_DEPENDS" "_MIN" depends_minver ${list_name}) |
| 113 | string(REPLACE "_DEPENDS" "" depends_ver ${list_name}) | ||
| 112 | string(REPLACE "_DEPENDS" "_XML_ID" xml_entry_name ${list_name}) | 114 | string(REPLACE "_DEPENDS" "_XML_ID" xml_entry_name ${list_name}) |
| 113 | string(REPLACE "_DEPENDS" "_USED" used_type_name ${list_name}) | 115 | string(REPLACE "_DEPENDS" "_USED" used_type_name ${list_name}) |
| 114 | 116 | ||
| @@ -120,16 +122,14 @@ macro (build_addon target prefix libs) | |||
| 120 | foreach(src_file ${USED_SOURCES}) | 122 | foreach(src_file ${USED_SOURCES}) |
| 121 | file(STRINGS ${src_file} BIN_ADDON_SRC_PARTS) | 123 | file(STRINGS ${src_file} BIN_ADDON_SRC_PARTS) |
| 122 | foreach(loop_var ${BIN_ADDON_SRC_PARTS}) | 124 | foreach(loop_var ${BIN_ADDON_SRC_PARTS}) |
| 123 | string(FIND "${loop_var}" "#include" matchres) | 125 | string(REGEX MATCH "^[ \t]*#[ \t]*(include|import)[ \t]*[<\"](kodi\/)?(.+)[\">]" include_name "${loop_var}") |
| 124 | if("${matchres}" EQUAL 0) | 126 | if(include_name AND CMAKE_MATCH_3 MATCHES ^${depend_header}) |
| 125 | string(REPLACE " " ";" loop_var "${loop_var}") | 127 | get_directory_property(CURRENT_DEFS COMPILE_DEFINITIONS) |
| 126 | list(GET loop_var 1 include_name) | 128 | if(NOT used_type_name IN_LIST CURRENT_DEFS) |
| 127 | string(REGEX REPLACE "[<>\"]|kodi/" "" include_name "${include_name}") | 129 | set(ADDON_DEPENDS "${ADDON_DEPENDS}\n<import addon=\"${${xml_entry_name}}\" minversion=\"${${depends_minver}}\" version=\"${${depends_ver}}\"/>") |
| 128 | if(include_name MATCHES ${depend_header}) | 130 | # Inform with them the addon header about used type, if not present before |
| 129 | set(ADDON_DEPENDS "${ADDON_DEPENDS}\n<import addon=\"${${xml_entry_name}}\" version=\"${${depends_name}}\"/>") | ||
| 130 | # Inform with them the addon header about used type | ||
| 131 | add_definitions(-D${used_type_name}) | 131 | add_definitions(-D${used_type_name}) |
| 132 | message(STATUS "Added usage definition: ${used_type_name}") | 132 | message(STATUS " - Added API usage definition: ${used_type_name} (Version: \"${${depends_ver}}\", Min. Version: \"${${depends_minver}}\")") |
| 133 | set(FOUND_HEADER_USAGE 1) | 133 | set(FOUND_HEADER_USAGE 1) |
| 134 | endif() | 134 | endif() |
| 135 | endif() | 135 | endif() |
| @@ -276,6 +276,18 @@ macro (build_addon target prefix libs) | |||
| 276 | install(FILES ${${prefix}_ADDITIONAL_BINARY} DESTINATION ${target} | 276 | install(FILES ${${prefix}_ADDITIONAL_BINARY} DESTINATION ${target} |
| 277 | COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) | 277 | COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) |
| 278 | endif() | 278 | endif() |
| 279 | if(${prefix}_ADDITIONAL_BINARY_EXE) | ||
| 280 | install(PROGRAMS ${${prefix}_ADDITIONAL_BINARY_EXE} DESTINATION ${target} | ||
| 281 | COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) | ||
| 282 | endif() | ||
| 283 | if(${prefix}_ADDITIONAL_BINARY_PARTS) | ||
| 284 | install(FILES ${${prefix}_ADDITIONAL_BINARY_PARTS} DESTINATION ${target} | ||
| 285 | COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) | ||
| 286 | endif() | ||
| 287 | if(${prefix}_ADDITIONAL_BINARY_DIRS) | ||
| 288 | install(DIRECTORY ${${prefix}_ADDITIONAL_BINARY_DIRS} DESTINATION ${target} USE_SOURCE_PERMISSIONS | ||
| 289 | COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) | ||
| 290 | endif() | ||
| 279 | else() # NOT WIN32 | 291 | else() # NOT WIN32 |
| 280 | if(NOT CPACK_PACKAGE_DIRECTORY) | 292 | if(NOT CPACK_PACKAGE_DIRECTORY) |
| 281 | set(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}) | 293 | set(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}) |
| @@ -296,6 +308,18 @@ macro (build_addon target prefix libs) | |||
| 296 | install(FILES ${${prefix}_ADDITIONAL_BINARY} DESTINATION ${target} | 308 | install(FILES ${${prefix}_ADDITIONAL_BINARY} DESTINATION ${target} |
| 297 | COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) | 309 | COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) |
| 298 | endif() | 310 | endif() |
| 311 | if(${prefix}_ADDITIONAL_BINARY_EXE) | ||
| 312 | install(PROGRAMS ${${prefix}_ADDITIONAL_BINARY_EXE} DESTINATION ${target} | ||
| 313 | COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) | ||
| 314 | endif() | ||
| 315 | if(${prefix}_ADDITIONAL_BINARY_PARTS) | ||
| 316 | install(FILES ${${prefix}_ADDITIONAL_BINARY_PARTS} DESTINATION ${target} | ||
| 317 | COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) | ||
| 318 | endif() | ||
| 319 | if(${prefix}_ADDITIONAL_BINARY_DIRS) | ||
| 320 | install(DIRECTORY ${${prefix}_ADDITIONAL_BINARY_DIRS} DESTINATION ${target} USE_SOURCE_PERMISSIONS | ||
| 321 | COMPONENT ${target}-${${prefix}_VERSION}-${PLATFORM_TAG}) | ||
| 322 | endif() | ||
| 299 | endif() | 323 | endif() |
| 300 | add_cpack_workaround(${target} ${${prefix}_VERSION} ${ext}) | 324 | add_cpack_workaround(${target} ${${prefix}_VERSION} ${ext}) |
| 301 | else() | 325 | else() |
| @@ -339,6 +363,15 @@ macro (build_addon target prefix libs) | |||
| 339 | if(${prefix}_ADDITIONAL_BINARY) | 363 | if(${prefix}_ADDITIONAL_BINARY) |
| 340 | install(FILES ${${prefix}_ADDITIONAL_BINARY} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target}) | 364 | install(FILES ${${prefix}_ADDITIONAL_BINARY} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target}) |
| 341 | endif() | 365 | endif() |
| 366 | if(${prefix}_ADDITIONAL_BINARY_EXE) | ||
| 367 | install(PROGRAMS ${${prefix}_ADDITIONAL_BINARY_EXE} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target}) | ||
| 368 | endif() | ||
| 369 | if(${prefix}_ADDITIONAL_BINARY_PARTS) | ||
| 370 | install(FILES ${${prefix}_ADDITIONAL_BINARY_PARTS} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target}) | ||
| 371 | endif() | ||
| 372 | if(${prefix}_ADDITIONAL_BINARY_DIRS) | ||
| 373 | install(DIRECTORY ${${prefix}_ADDITIONAL_BINARY_DIRS} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target} USE_SOURCE_PERMISSIONS) | ||
| 374 | endif() | ||
| 342 | endif() | 375 | endif() |
| 343 | if(${APP_NAME_UC}_BUILD_DIR) | 376 | if(${APP_NAME_UC}_BUILD_DIR) |
| 344 | file(GLOB_RECURSE files ${CMAKE_CURRENT_SOURCE_DIR}/${target}/*) | 377 | 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 @@ | |||
| 1 | /*! | ||
| 2 | \addtogroup cpp_cmake | ||
| 3 | |||
| 4 | Kodi which uses it as a library for its binary addons has a special build | ||
| 5 | system for this. | ||
| 6 | |||
| 7 | To implement this, a CMake macro brought by Kodi is used, this is | ||
| 8 | "build_addon (...)". This processes various definitions passed by the addon to | ||
| 9 | process the construction. | ||
| 10 | |||
| 11 | |||
| 12 | -------------------------------------------------------------------------------- | ||
| 13 | |||
| 14 | <b>Here a minmal example of the for addon used CMakeLists.txt:</b> | ||
| 15 | |||
| 16 | ~~~~~~~~~~~~~{.cmake} | ||
| 17 | cmake_minimum_required(VERSION 3.5) | ||
| 18 | project(example.addon) | ||
| 19 | |||
| 20 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}) | ||
| 21 | |||
| 22 | find_package(Kodi REQUIRED) | ||
| 23 | |||
| 24 | include_directories(${KODI_INCLUDE_DIR} | ||
| 25 | |||
| 26 | set(DEPLIBS ) # Here empty | ||
| 27 | set(EXAMPLE_SOURCES src/main.cpp) | ||
| 28 | set(EXAMPLE_HEADERS src/main.h) | ||
| 29 | |||
| 30 | build_addon((example.addon EXAMPLE DEPLIBS) | ||
| 31 | |||
| 32 | include(CPack) | ||
| 33 | ~~~~~~~~~~~~~ | ||
| 34 | |||
| 35 | |||
| 36 | -------------------------------------------------------------------------------- | ||
| 37 | |||
| 38 | This is a list of special variables that can be passed to the macro. | ||
| 39 | The parts defined with "*" must be given the second name given to the macro. | ||
| 40 | |||
| 41 | Here to define the necessary creation and installation files on addon CMakeLists.txt: | ||
| 42 | | Name | Description | ||
| 43 | |-----------------------------|------------------------------------------------- | ||
| 44 | | *_SOURCES | List of source code files to be complicated. | ||
| 45 | | *_HEADERS | List of used source code header files. | ||
| 46 | | *_CUSTOM_BINARY | For special cases where an already created library from an external source is inserted, the <b>"* _SOURCES"</b> and <b>"* _HEADERS"</b> are unused in this case.<br>This is currently used primarily on game addons. | ||
| 47 | | *_CUSTOM_DATA | To add additional required data from a folder, which are stored in the shared folder of the addon.<br>With a "/" at the end of the content given to the folder is used, without the folder itself. | ||
| 48 | | *_ADDITIONAL_BINARY | In case the additional library has to be installed for the addon, the path or CMake name can be given here. | ||
| 49 | | *_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.<br>The mode bits are set there as EXE. | ||
| 50 | | *_ADDITIONAL_BINARY_DIRS | To add complete folders additionally to folders containing the addon library.<br>With a "/" at the end of the content given to the folder is used, without the folder itself. | ||
| 51 | |||
| 52 | External creation Options, given by `-D...`: | ||
| 53 | | Name | Description | ||
| 54 | |-----------------------------|------------------------------------------------- | ||
| 55 | | PACKAGE_ZIP | To create a package as a ZIP file. This is also used to install locally addon together.<br>Default is OFF. | ||
| 56 | | PACKAGE_TGZ | To create a package as a TGZ file.<br>Default is OFF. | ||
| 57 | | BUILD_SHARED_LIBS | To define if addon library is shared or static.<br>Default is ON to have shared. | ||
| 58 | | USE_LTO | Use link time optimization.<br>Default is OFF. | ||
| 59 | */ | ||
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) | |||
| 18 | include(CheckSymbolExists) | 18 | include(CheckSymbolExists) |
| 19 | include(CheckFunctionExists) | 19 | include(CheckFunctionExists) |
| 20 | include(CheckIncludeFile) | 20 | include(CheckIncludeFile) |
| 21 | 21 | include(CheckTypeSize) | |
| 22 | # Macro to check if a given type exists in a given header | ||
| 23 | # Arguments: | ||
| 24 | # header the header to check | ||
| 25 | # type the type to check for existence | ||
| 26 | # var the compiler definition to set if type exists | ||
| 27 | # On return: | ||
| 28 | # If type was found, the definition is added to SYSTEM_DEFINES | ||
| 29 | macro(check_type header type var) | ||
| 30 | check_cxx_source_compiles("#include <${header}> | ||
| 31 | int main() | ||
| 32 | { | ||
| 33 | ${type} s; | ||
| 34 | }" ${var}) | ||
| 35 | if(${var}) | ||
| 36 | list(APPEND SYSTEM_DEFINES -D${var}=1) | ||
| 37 | endif() | ||
| 38 | endmacro() | ||
| 39 | 22 | ||
| 40 | # Macro to check if a given builtin function exists | 23 | # Macro to check if a given builtin function exists |
| 41 | # Arguments: | 24 | # Arguments: |
| @@ -95,17 +78,12 @@ endif() | |||
| 95 | include(${CMAKE_SOURCE_DIR}/cmake/scripts/${CORE_SYSTEM_NAME}/ArchSetup.cmake) | 78 | include(${CMAKE_SOURCE_DIR}/cmake/scripts/${CORE_SYSTEM_NAME}/ArchSetup.cmake) |
| 96 | 79 | ||
| 97 | message(STATUS "Core system type: ${CORE_SYSTEM_NAME}") | 80 | message(STATUS "Core system type: ${CORE_SYSTEM_NAME}") |
| 98 | message(STATUS "Platform: ${PLATFORM}") | 81 | message(STATUS "Platform: ${CORE_PLATFORM_NAME}") |
| 99 | message(STATUS "CPU: ${CPU}, ARCH: ${ARCH}") | 82 | message(STATUS "CPU: ${CPU}, ARCH: ${ARCH}") |
| 100 | message(STATUS "Cross-Compiling: ${CMAKE_CROSSCOMPILING}") | 83 | message(STATUS "Cross-Compiling: ${CMAKE_CROSSCOMPILING}") |
| 101 | message(STATUS "Execute build artefacts on host: ${CORE_HOST_IS_TARGET}") | 84 | message(STATUS "Execute build artefacts on host: ${CORE_HOST_IS_TARGET}") |
| 102 | message(STATUS "Depends based build: ${KODI_DEPENDSBUILD}") | 85 | message(STATUS "Depends based build: ${KODI_DEPENDSBUILD}") |
| 103 | 86 | ||
| 104 | check_type(string std::u16string HAVE_STD__U16_STRING) | ||
| 105 | check_type(string std::u32string HAVE_STD__U32_STRING) | ||
| 106 | check_type(string char16_t HAVE_CHAR16_T) | ||
| 107 | check_type(string char32_t HAVE_CHAR32_T) | ||
| 108 | check_type(stdint.h uint_least16_t HAVE_STDINT_H) | ||
| 109 | check_symbol_exists(posix_fadvise fcntl.h HAVE_POSIX_FADVISE) | 87 | check_symbol_exists(posix_fadvise fcntl.h HAVE_POSIX_FADVISE) |
| 110 | check_symbol_exists(PRIdMAX inttypes.h HAVE_INTTYPES_H) | 88 | check_symbol_exists(PRIdMAX inttypes.h HAVE_INTTYPES_H) |
| 111 | check_builtin("long* temp=0; long ret=__sync_add_and_fetch(temp, 1)" HAS_BUILTIN_SYNC_ADD_AND_FETCH) | 89 | 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) | |||
| 29 | string(SUBSTRING ${platform} 1 ${platform_length} platform) | 29 | string(SUBSTRING ${platform} 1 ${platform_length} platform) |
| 30 | 30 | ||
| 31 | # check if the current platform does not match the extracted platform | 31 | # check if the current platform does not match the extracted platform |
| 32 | if(NOT ${platform} STREQUAL ${target_platform}) | 32 | if(${platform} STREQUAL ${target_platform}) |
| 33 | set(${build} FALSE) | ||
| 34 | break() | ||
| 35 | elseif(NOT ${platform} STREQUAL ${target_platform}) | ||
| 33 | set(${build} TRUE) | 36 | set(${build} TRUE) |
| 34 | endif() | 37 | endif() |
| 35 | endif() | 38 | 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 @@ | |||
| 1 | # Languages and global compiler settings | ||
| 2 | if(NOT DEFINED CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 14) | ||
| 3 | set(CMAKE_CXX_STANDARD 14) | ||
| 4 | endif() | ||
| 5 | set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||
| 6 | set(CMAKE_CXX_EXTENSIONS OFF) | ||
| 7 | 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}) | |||
| 24 | string(REPLACE ${CORE_SOURCE_DIR} ${CMAKE_BINARY_DIR} dest_dir ${source_dir}) | 24 | string(REPLACE ${CORE_SOURCE_DIR} ${CMAKE_BINARY_DIR} dest_dir ${source_dir}) |
| 25 | file(MAKE_DIRECTORY ${dest_dir}) | 25 | file(MAKE_DIRECTORY ${dest_dir}) |
| 26 | 26 | ||
| 27 | # copy everything except addon.xml.in to build folder | ||
| 28 | file(COPY "${source_dir}" DESTINATION "${CMAKE_BINARY_DIR}/addons" REGEX ".xml.in" EXCLUDE) | ||
| 29 | |||
| 30 | configure_file(${source_dir}/addon.xml.in ${dest_dir}/addon.xml @ONLY) | 27 | configure_file(${source_dir}/addon.xml.in ${dest_dir}/addon.xml @ONLY) |
| 31 | 28 | ||
| 32 | unset(source_dir) | 29 | 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) | |||
| 68 | -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME} | 68 | -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME} |
| 69 | -DENABLE_STATIC=1 | 69 | -DENABLE_STATIC=1 |
| 70 | -DBUILD_SHARED_LIBS=0) | 70 | -DBUILD_SHARED_LIBS=0) |
| 71 | # windows store args | 71 | # windows args |
| 72 | if (CMAKE_SYSTEM_NAME STREQUAL WindowsStore) | 72 | if (CMAKE_SYSTEM_NAME STREQUAL WindowsStore OR CMAKE_SYSTEM_NAME STREQUAL Windows) |
| 73 | list(APPEND BUILD_ARGS -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} | 73 | list(APPEND BUILD_ARGS -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} |
| 74 | -DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}) | 74 | -DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}) |
| 75 | endif() | 75 | endif() |
| @@ -78,8 +78,10 @@ function(add_addon_depends addon searchpath) | |||
| 78 | # make sure we create strings, not lists | 78 | # make sure we create strings, not lists |
| 79 | set(TMP_C_FLAGS "${CMAKE_C_FLAGS} ${ARCH_DEFINES}") | 79 | set(TMP_C_FLAGS "${CMAKE_C_FLAGS} ${ARCH_DEFINES}") |
| 80 | set(TMP_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_DEFINES}") | 80 | set(TMP_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_DEFINES}") |
| 81 | set(TMP_EXE_LINKER_FLAGS "-L${OUTPUT_DIR}/lib ${CMAKE_EXE_LINKER_FLAGS}") | ||
| 81 | list(APPEND BUILD_ARGS -DCMAKE_C_FLAGS=${TMP_C_FLAGS} | 82 | list(APPEND BUILD_ARGS -DCMAKE_C_FLAGS=${TMP_C_FLAGS} |
| 82 | -DCMAKE_CXX_FLAGS=${TMP_CXX_FLAGS}) | 83 | -DCMAKE_CXX_FLAGS=${TMP_CXX_FLAGS} |
| 84 | -DCMAKE_EXE_LINKER_FLAGS=${TMP_EXE_LINKER_FLAGS}) | ||
| 83 | endif() | 85 | endif() |
| 84 | 86 | ||
| 85 | if(CMAKE_TOOLCHAIN_FILE) | 87 | if(CMAKE_TOOLCHAIN_FILE) |
| @@ -88,6 +90,17 @@ function(add_addon_depends addon searchpath) | |||
| 88 | message(${BUILD_ARGS}) | 90 | message(${BUILD_ARGS}) |
| 89 | endif() | 91 | endif() |
| 90 | 92 | ||
| 93 | # used for addons where need special folders to store there content (if | ||
| 94 | # not set the addon define it byself). | ||
| 95 | # e.g. Google Chromium addon where his git bring: | ||
| 96 | # - "unable to create file" ... "Filename too long" | ||
| 97 | # see also WARNING by Windows on: https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart | ||
| 98 | if(THIRD_PARTY_PATH) | ||
| 99 | message(STATUS "Third party lib path specified") | ||
| 100 | message(STATUS ${THIRD_PARTY_PATH}) | ||
| 101 | list(APPEND BUILD_ARGS -DTHIRD_PARTY_PATH=${THIRD_PARTY_PATH}) | ||
| 102 | endif() | ||
| 103 | |||
| 91 | set(PATCH_COMMAND) | 104 | set(PATCH_COMMAND) |
| 92 | 105 | ||
| 93 | # if there's a CMakeLists.txt use it to prepare the build | 106 | # if there's a CMakeLists.txt use it to prepare the build |
| @@ -215,7 +228,6 @@ function(add_addon_depends addon searchpath) | |||
| 215 | -DOUTPUT_DIR=${OUTPUT_DIR} | 228 | -DOUTPUT_DIR=${OUTPUT_DIR} |
| 216 | -DCMAKE_PREFIX_PATH=${OUTPUT_DIR} | 229 | -DCMAKE_PREFIX_PATH=${OUTPUT_DIR} |
| 217 | -DCMAKE_INSTALL_PREFIX=${OUTPUT_DIR} | 230 | -DCMAKE_INSTALL_PREFIX=${OUTPUT_DIR} |
| 218 | -DCMAKE_EXE_LINKER_FLAGS=-L${OUTPUT_DIR}/lib | ||
| 219 | -DCMAKE_INCLUDE_PATH=${OUTPUT_DIR}/include) | 231 | -DCMAKE_INCLUDE_PATH=${OUTPUT_DIR}/include) |
| 220 | endif() | 232 | endif() |
| 221 | 233 | ||
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) | |||
| 111 | endforeach() | 111 | endforeach() |
| 112 | endfunction() | 112 | endfunction() |
| 113 | 113 | ||
| 114 | # Add an addon callback library | ||
| 115 | # Arguments: | ||
| 116 | # name name of the library to add | ||
| 117 | # Implicit arguments: | ||
| 118 | # SOURCES the sources of the library | ||
| 119 | # HEADERS the headers of the library (only for IDE support) | ||
| 120 | # OTHERS other library related files (only for IDE support) | ||
| 121 | # On return: | ||
| 122 | # Library target is defined and added to LIBRARY_FILES | ||
| 123 | function(core_add_addon_library name) | ||
| 124 | get_filename_component(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} NAME) | ||
| 125 | list(APPEND SOURCES lib${name}.cpp) | ||
| 126 | core_add_shared_library(${name} OUTPUT_DIRECTORY addons/${DIRECTORY}) | ||
| 127 | set_target_properties(${name} PROPERTIES FOLDER addons) | ||
| 128 | target_include_directories(${name} PRIVATE | ||
| 129 | ${CMAKE_CURRENT_SOURCE_DIR} | ||
| 130 | ${CMAKE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi | ||
| 131 | ${CMAKE_SOURCE_DIR}/xbmc) | ||
| 132 | endfunction() | ||
| 133 | |||
| 134 | # Add an dl-loaded shared library | 114 | # Add an dl-loaded shared library |
| 135 | # Arguments: | 115 | # Arguments: |
| 136 | # name name of the library to add | 116 | # name name of the library to add |
| @@ -386,25 +366,6 @@ function(core_require_dep) | |||
| 386 | endforeach() | 366 | endforeach() |
| 387 | endfunction() | 367 | endfunction() |
| 388 | 368 | ||
| 389 | # add required dyloaded dependencies of main application | ||
| 390 | # Arguments: | ||
| 391 | # dep_list One or many dependency specifications (see split_dependency_specification) | ||
| 392 | # for syntax). The dependency name is used uppercased as variable prefix. | ||
| 393 | # On return: | ||
| 394 | # dependency added to ${SYSTEM_INCLUDES}, ${dep}_SONAME is set up | ||
| 395 | function(core_require_dyload_dep) | ||
| 396 | foreach(depspec ${ARGN}) | ||
| 397 | split_dependency_specification(${depspec} dep version) | ||
| 398 | find_package_with_ver(${dep} ${version} REQUIRED) | ||
| 399 | string(TOUPPER ${dep} depup) | ||
| 400 | list(APPEND SYSTEM_INCLUDES ${${depup}_INCLUDE_DIRS}) | ||
| 401 | list(APPEND DEP_DEFINES ${${depup}_DEFINITIONS}) | ||
| 402 | find_soname(${depup} REQUIRED) | ||
| 403 | export_dep() | ||
| 404 | set(${depup}_SONAME ${${depup}_SONAME} PARENT_SCOPE) | ||
| 405 | endforeach() | ||
| 406 | endfunction() | ||
| 407 | |||
| 408 | # helper macro for optional deps | 369 | # helper macro for optional deps |
| 409 | macro(setup_enable_switch) | 370 | macro(setup_enable_switch) |
| 410 | string(TOUPPER ${dep} depup) | 371 | string(TOUPPER ${dep} depup) |
| @@ -450,39 +411,6 @@ function(core_optional_dep) | |||
| 450 | set(final_message ${final_message} PARENT_SCOPE) | 411 | set(final_message ${final_message} PARENT_SCOPE) |
| 451 | endfunction() | 412 | endfunction() |
| 452 | 413 | ||
| 453 | # add optional dyloaded dependencies of main application | ||
| 454 | # Arguments: | ||
| 455 | # dep_list One or many dependency specifications (see split_dependency_specification) | ||
| 456 | # for syntax). The dependency name is used uppercased as variable prefix. | ||
| 457 | # On return: | ||
| 458 | # dependency optionally added to ${SYSTEM_INCLUDES}, ${DEP_DEFINES}, ${dep}_SONAME is set up | ||
| 459 | function(core_optional_dyload_dep) | ||
| 460 | foreach(depspec ${ARGN}) | ||
| 461 | set(_required False) | ||
| 462 | split_dependency_specification(${depspec} dep version) | ||
| 463 | setup_enable_switch() | ||
| 464 | if(${enable_switch} STREQUAL AUTO) | ||
| 465 | find_package_with_ver(${dep} ${version}) | ||
| 466 | elseif(${${enable_switch}}) | ||
| 467 | find_package_with_ver(${dep} ${version} REQUIRED) | ||
| 468 | set(_required True) | ||
| 469 | endif() | ||
| 470 | |||
| 471 | if(${depup}_FOUND) | ||
| 472 | list(APPEND SYSTEM_INCLUDES ${${depup}_INCLUDE_DIRS}) | ||
| 473 | find_soname(${depup} REQUIRED) | ||
| 474 | list(APPEND DEP_DEFINES ${${depup}_DEFINITIONS}) | ||
| 475 | set(final_message ${final_message} "${depup} enabled: Yes" PARENT_SCOPE) | ||
| 476 | export_dep() | ||
| 477 | set(${depup}_SONAME ${${depup}_SONAME} PARENT_SCOPE) | ||
| 478 | elseif(_required) | ||
| 479 | message(FATAL_ERROR "${depup} enabled but not found") | ||
| 480 | else() | ||
| 481 | set(final_message ${final_message} "${depup} enabled: No" PARENT_SCOPE) | ||
| 482 | endif() | ||
| 483 | endforeach() | ||
| 484 | endfunction() | ||
| 485 | |||
| 486 | function(core_file_read_filtered result filepattern) | 414 | function(core_file_read_filtered result filepattern) |
| 487 | # Reads STRINGS from text files | 415 | # Reads STRINGS from text files |
| 488 | # with comments filtered out | 416 | # 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() | |||
| 34 | 34 | ||
| 35 | set(PLATFORM_TAG ${CORE_SYSTEM_NAME}) | 35 | set(PLATFORM_TAG ${CORE_SYSTEM_NAME}) |
| 36 | 36 | ||
| 37 | # The CPU variable is given either by ./tools/depends or by the | ||
| 38 | # ./cmake/scripts/common/ArchSetup.cmake (which refers to the Kodi building | ||
| 39 | # itself). However, this file is only used by addons, so CPU can not always | ||
| 40 | # be defined, so in this case, if empty, the base CPU will be used. | ||
| 41 | if(NOT CPU) | ||
| 42 | set(CPU ${CMAKE_SYSTEM_PROCESSOR}) | ||
| 43 | endif() | ||
| 44 | |||
| 37 | if(CORE_SYSTEM_NAME STREQUAL android) | 45 | if(CORE_SYSTEM_NAME STREQUAL android) |
| 38 | if (CPU MATCHES "v7a") | 46 | if (CPU MATCHES "v7a") |
| 39 | set(PLATFORM_TAG ${PLATFORM_TAG}-armv7) | 47 | set(PLATFORM_TAG ${PLATFORM_TAG}-armv7) |
| @@ -41,13 +49,14 @@ if(CORE_SYSTEM_NAME STREQUAL android) | |||
| 41 | set(PLATFORM_TAG ${PLATFORM_TAG}-aarch64) | 49 | set(PLATFORM_TAG ${PLATFORM_TAG}-aarch64) |
| 42 | elseif (CPU MATCHES "i686") | 50 | elseif (CPU MATCHES "i686") |
| 43 | set(PLATFORM_TAG ${PLATFORM_TAG}-i686) | 51 | set(PLATFORM_TAG ${PLATFORM_TAG}-i686) |
| 52 | elseif (CPU MATCHES "x86_64") | ||
| 53 | set(PLATFORM_TAG ${PLATFORM_TAG}-x86_64) | ||
| 44 | else() | 54 | else() |
| 45 | message(FATAL_ERROR "Unsupported architecture") | 55 | message(FATAL_ERROR "Unsupported architecture") |
| 46 | endif() | 56 | endif() |
| 47 | elseif(CORE_SYSTEM_NAME STREQUAL ios) | 57 | elseif(CORE_SYSTEM_NAME STREQUAL darwin_embedded) |
| 48 | if (CPU MATCHES armv7) | 58 | set(PLATFORM_TAG ${CORE_PLATFORM_NAME}) |
| 49 | set(PLATFORM_TAG ${PLATFORM_TAG}-armv7) | 59 | if (CPU MATCHES arm64) |
| 50 | elseif (CPU MATCHES arm64) | ||
| 51 | set(PLATFORM_TAG ${PLATFORM_TAG}-aarch64) | 60 | set(PLATFORM_TAG ${PLATFORM_TAG}-aarch64) |
| 52 | else() | 61 | else() |
| 53 | message(FATAL_ERROR "Unsupported architecture") | 62 | 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 @@ | |||
| 1 | macro(enable_arc) | ||
| 2 | if(CMAKE_GENERATOR STREQUAL Xcode) | ||
| 3 | set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) | ||
| 4 | else() | ||
| 5 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-arc") | ||
| 6 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-arc") | ||
| 7 | endif() | ||
| 8 | endmacro() | ||
diff --git a/cmake/scripts/ios/ArchSetup.cmake b/cmake/scripts/darwin_embedded/ArchSetup.cmake index b6c626f..7160da9 100644 --- a/cmake/scripts/ios/ArchSetup.cmake +++ b/cmake/scripts/darwin_embedded/ArchSetup.cmake | |||
| @@ -1,33 +1,33 @@ | |||
| 1 | if(NOT CMAKE_TOOLCHAIN_FILE) | 1 | if(NOT CMAKE_TOOLCHAIN_FILE) |
| 2 | message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for ios. See ${CMAKE_SOURCE_DIR}/cmake/README.md") | 2 | message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for ios/tvos. See ${CMAKE_SOURCE_DIR}/cmake/README.md") |
| 3 | endif() | 3 | endif() |
| 4 | 4 | ||
| 5 | set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/XBMCApplication.mm) | 5 | set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/${CORE_PLATFORM_NAME_LC}/XBMCApplication.mm) |
| 6 | set(PLATFORM_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/${CORE_PLATFORM_NAME_LC}/Info.plist.in) | ||
| 6 | 7 | ||
| 7 | set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_IOS) | 8 | set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_EMBEDDED) |
| 9 | if(CORE_PLATFORM_NAME_LC STREQUAL tvos) | ||
| 10 | list(APPEND ARCH_DEFINES -DTARGET_DARWIN_TVOS) | ||
| 11 | else() | ||
| 12 | list(APPEND ARCH_DEFINES -DTARGET_DARWIN_IOS) | ||
| 13 | endif() | ||
| 8 | set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE | 14 | set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE |
| 9 | -D__STDC_CONSTANT_MACROS) | 15 | -D__STDC_CONSTANT_MACROS -DHAS_IOS_NETWORK -DHAS_ZEROCONF) |
| 10 | set(PLATFORM_DIR platform/linux) | 16 | set(PLATFORM_DIR platform/darwin) |
| 17 | set(PLATFORMDEFS_DIR platform/posix) | ||
| 11 | set(CMAKE_SYSTEM_NAME Darwin) | 18 | set(CMAKE_SYSTEM_NAME Darwin) |
| 12 | if(WITH_ARCH) | 19 | if(WITH_ARCH) |
| 13 | set(ARCH ${WITH_ARCH}) | 20 | set(ARCH ${WITH_ARCH}) |
| 14 | else() | 21 | else() |
| 15 | if(CPU STREQUAL armv7) | 22 | if(CPU STREQUAL arm64) |
| 16 | set(CMAKE_OSX_ARCHITECTURES ${CPU}) | ||
| 17 | set(ARCH arm) | ||
| 18 | set(NEON True) | ||
| 19 | elseif(CPU STREQUAL arm64) | ||
| 20 | set(CMAKE_OSX_ARCHITECTURES ${CPU}) | ||
| 21 | set(ARCH aarch64) | 23 | set(ARCH aarch64) |
| 22 | set(NEON True) | ||
| 23 | else() | 24 | else() |
| 24 | message(SEND_ERROR "Unknown CPU: ${CPU}") | 25 | message(SEND_ERROR "Unknown CPU: ${CPU}") |
| 25 | endif() | 26 | endif() |
| 27 | set(CMAKE_OSX_ARCHITECTURES ${CPU}) | ||
| 28 | set(NEON True) | ||
| 26 | endif() | 29 | endif() |
| 27 | 30 | ||
| 28 | # Additional SYSTEM_DEFINES | ||
| 29 | list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK -DHAS_ZEROCONF) | ||
| 30 | |||
| 31 | list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX}) | 31 | list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX}) |
| 32 | 32 | ||
| 33 | list(APPEND DEPLIBS "-framework CoreFoundation" "-framework CoreVideo" | 33 | list(APPEND DEPLIBS "-framework CoreFoundation" "-framework CoreVideo" |
| @@ -36,24 +36,28 @@ list(APPEND DEPLIBS "-framework CoreFoundation" "-framework CoreVideo" | |||
| 36 | "-framework CFNetwork" "-framework CoreGraphics" | 36 | "-framework CFNetwork" "-framework CoreGraphics" |
| 37 | "-framework Foundation" "-framework UIKit" | 37 | "-framework Foundation" "-framework UIKit" |
| 38 | "-framework CoreMedia" "-framework AVFoundation" | 38 | "-framework CoreMedia" "-framework AVFoundation" |
| 39 | "-framework VideoToolbox") | 39 | "-framework VideoToolbox" "-lresolv" "-ObjC" |
| 40 | "-framework AVKit" "-framework GameController") | ||
| 40 | 41 | ||
| 41 | set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE) | 42 | set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE) |
| 42 | 43 | ||
| 43 | set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "9.0") | 44 | # AppleTV already has built-in AirPlay support |
| 44 | set(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2") | 45 | if(CORE_PLATFORM_NAME_LC STREQUAL tvos) |
| 45 | 46 | set(ENABLE_AIRTUNES OFF CACHE BOOL "" FORCE) | |
| 47 | endif() | ||
| 46 | set(CMAKE_XCODE_ATTRIBUTE_INLINES_ARE_PRIVATE_EXTERN OFF) | 48 | set(CMAKE_XCODE_ATTRIBUTE_INLINES_ARE_PRIVATE_EXTERN OFF) |
| 47 | set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN OFF) | 49 | set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN OFF) |
| 48 | set(CMAKE_XCODE_ATTRIBUTE_COPY_PHASE_STRIP OFF) | 50 | set(CMAKE_XCODE_ATTRIBUTE_COPY_PHASE_STRIP OFF) |
| 49 | 51 | ||
| 52 | include(cmake/scripts/darwin/Macros.cmake) | ||
| 53 | enable_arc() | ||
| 54 | |||
| 50 | # Xcode strips dead code by default which breaks wrapping | 55 | # Xcode strips dead code by default which breaks wrapping |
| 51 | set(CMAKE_XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING OFF) | 56 | set(CMAKE_XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING OFF) |
| 52 | 57 | ||
| 53 | # Unify output directories for iOS packaging scripts | 58 | option(ENABLE_XCODE_ADDONBUILD "Enable Xcode automatic addon building?" OFF) |
| 54 | if(NOT CMAKE_GENERATOR MATCHES Xcode) | 59 | |
| 55 | set(CORE_BUILD_CONFIG "${CORE_BUILD_CONFIG}-iphoneos") | 60 | # Unify output directories for iOS/tvOS packaging scripts |
| 56 | endif() | ||
| 57 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CORE_BUILD_DIR}/${CORE_BUILD_CONFIG}) | 61 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CORE_BUILD_DIR}/${CORE_BUILD_CONFIG}) |
| 58 | foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) | 62 | foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) |
| 59 | string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) | 63 | string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) |
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 @@ | |||
| 1 | if(CORE_PLATFORM_NAME_LC STREQUAL tvos) | ||
| 2 | # top shelf extension | ||
| 3 | set(TOPSHELF_EXTENSION_NAME "${APP_NAME_LC}-topshelf") | ||
| 4 | set(TOPSHELF_BUNDLE_EXTENSION appex) | ||
| 5 | set(TOPSHELF_DIR "${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/tvos/TopShelf") | ||
| 6 | # same path as the output Info.plist, taken from cmGlobalXCodeGenerator::ComputeInfoPListLocation() | ||
| 7 | set(ENTITLEMENTS_OUT_PATH "${CMAKE_BINARY_DIR}/CMakeFiles/${TOPSHELF_EXTENSION_NAME}.dir/TopShelf.entitlements") | ||
| 8 | |||
| 9 | set(SOURCES | ||
| 10 | ${TOPSHELF_DIR}/ServiceProvider.m | ||
| 11 | ${TOPSHELF_DIR}/../tvosShared.m) | ||
| 12 | set(HEADERS | ||
| 13 | ${TOPSHELF_DIR}/ServiceProvider.h | ||
| 14 | ${TOPSHELF_DIR}/../tvosShared.h) | ||
| 15 | add_executable(${TOPSHELF_EXTENSION_NAME} MACOSX_BUNDLE ${SOURCES} ${HEADERS}) | ||
| 16 | |||
| 17 | configure_file(${TOPSHELF_DIR}/TopShelf.entitlements.in ${ENTITLEMENTS_OUT_PATH} @ONLY) | ||
| 18 | set_target_properties(${TOPSHELF_EXTENSION_NAME} PROPERTIES BUNDLE_EXTENSION ${TOPSHELF_BUNDLE_EXTENSION} | ||
| 19 | MACOSX_BUNDLE_INFO_PLIST ${TOPSHELF_DIR}/Info.plist.in | ||
| 20 | XCODE_PRODUCT_TYPE com.apple.product-type.tv-app-extension | ||
| 21 | XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${ENTITLEMENTS_OUT_PATH}) | ||
| 22 | target_link_libraries(${TOPSHELF_EXTENSION_NAME} "-framework TVServices" "-framework Foundation") | ||
| 23 | |||
| 24 | add_dependencies(${APP_NAME_LC} ${TOPSHELF_EXTENSION_NAME}) | ||
| 25 | 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 @@ | |||
| 1 | # IOS/TVOS packaging | ||
| 2 | if(CORE_PLATFORM_NAME_LC STREQUAL tvos) | ||
| 3 | # asset catalog | ||
| 4 | set(ASSET_CATALOG "${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/tvos/Assets.xcassets") | ||
| 5 | set(ASSET_CATALOG_ASSETS Assets) | ||
| 6 | set(ASSET_CATALOG_LAUNCH_IMAGE LaunchImage) | ||
| 7 | |||
| 8 | message("generating missing asset catalog images...") | ||
| 9 | execute_process(COMMAND ${CMAKE_SOURCE_DIR}/tools/darwin/Support/GenerateMissingImages-tvos.py "${ASSET_CATALOG}" ${ASSET_CATALOG_ASSETS} ${ASSET_CATALOG_LAUNCH_IMAGE}) | ||
| 10 | |||
| 11 | target_sources(${APP_NAME_LC} PRIVATE "${ASSET_CATALOG}") | ||
| 12 | set_source_files_properties("${ASSET_CATALOG}" PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") # adds to Copy Bundle Resources build phase | ||
| 13 | |||
| 14 | # entitlements | ||
| 15 | set(ENTITLEMENTS_OUT_PATH "${CMAKE_BINARY_DIR}/CMakeFiles/${APP_NAME_LC}.dir/Kodi.entitlements") | ||
| 16 | configure_file(${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/tvos/Kodi.entitlements.in ${ENTITLEMENTS_OUT_PATH} @ONLY) | ||
| 17 | |||
| 18 | set_target_properties(${APP_NAME_LC} PROPERTIES XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME ${ASSET_CATALOG_ASSETS} | ||
| 19 | XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME ${ASSET_CATALOG_LAUNCH_IMAGE} | ||
| 20 | XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${ENTITLEMENTS_OUT_PATH}) | ||
| 21 | |||
| 22 | else() | ||
| 23 | set(BUNDLE_RESOURCES ${CMAKE_SOURCE_DIR}/media/splash.jpg | ||
| 24 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29.png | ||
| 25 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29@2x.png | ||
| 26 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon40x40.png | ||
| 27 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon40x40@2x.png | ||
| 28 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon50x50.png | ||
| 29 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon50x50@2x.png | ||
| 30 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon57x57.png | ||
| 31 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon57x57@2x.png | ||
| 32 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon60x60.png | ||
| 33 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon60x60@2x.png | ||
| 34 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon72x72.png | ||
| 35 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon72x72@2x.png | ||
| 36 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon76x76.png | ||
| 37 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon76x76@2x.png) | ||
| 38 | |||
| 39 | target_sources(${APP_NAME_LC} PRIVATE ${BUNDLE_RESOURCES}) | ||
| 40 | foreach(file IN LISTS BUNDLE_RESOURCES) | ||
| 41 | set_source_files_properties(${file} PROPERTIES MACOSX_PACKAGE_LOCATION .) | ||
| 42 | endforeach() | ||
| 43 | |||
| 44 | target_sources(${APP_NAME_LC} PRIVATE ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchScreen.storyboard) | ||
| 45 | set_source_files_properties(${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchScreen.storyboard PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") | ||
| 46 | |||
| 47 | endif() | ||
| 48 | |||
| 49 | # setup code signing | ||
| 50 | # dev team ID / identity (certificate) | ||
| 51 | set(DEVELOPMENT_TEAM "" CACHE STRING "Development Team") | ||
| 52 | set(CODE_SIGN_IDENTITY $<IF:$<BOOL:${DEVELOPMENT_TEAM}>,iPhone\ Developer,> CACHE STRING "Code Sign Identity") | ||
| 53 | |||
| 54 | # app provisioning profile | ||
| 55 | set(CODE_SIGN_STYLE_APP Automatic) | ||
| 56 | set(PROVISIONING_PROFILE_APP "" CACHE STRING "Provisioning profile name for the Kodi app") | ||
| 57 | if(PROVISIONING_PROFILE_APP) | ||
| 58 | set(CODE_SIGN_STYLE_APP Manual) | ||
| 59 | endif() | ||
| 60 | |||
| 61 | # top shelf provisioning profile | ||
| 62 | if(CORE_PLATFORM_NAME_LC STREQUAL tvos) | ||
| 63 | set(CODE_SIGN_STYLE_TOPSHELF Automatic) | ||
| 64 | set(PROVISIONING_PROFILE_TOPSHELF "" CACHE STRING "Provisioning profile name for the Top Shelf") | ||
| 65 | if(PROVISIONING_PROFILE_TOPSHELF) | ||
| 66 | set(CODE_SIGN_STYLE_TOPSHELF Manual) | ||
| 67 | endif() | ||
| 68 | set_target_properties(${TOPSHELF_EXTENSION_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${CODE_SIGN_IDENTITY}" | ||
| 69 | XCODE_ATTRIBUTE_CODE_SIGN_STYLE ${CODE_SIGN_STYLE_TOPSHELF} | ||
| 70 | XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${DEVELOPMENT_TEAM}" | ||
| 71 | XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "${PROVISIONING_PROFILE_TOPSHELF}") | ||
| 72 | # copy extension inside PlugIns dir of the app bundle | ||
| 73 | add_custom_command(TARGET ${APP_NAME_LC} POST_BUILD | ||
| 74 | COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory $<TARGET_BUNDLE_DIR:${TOPSHELF_EXTENSION_NAME}> | ||
| 75 | $<TARGET_BUNDLE_DIR:${APP_NAME_LC}>/PlugIns/${TOPSHELF_EXTENSION_NAME}.${TOPSHELF_BUNDLE_EXTENSION} | ||
| 76 | MAIN_DEPENDENCY ${TOPSHELF_EXTENSION_NAME}) | ||
| 77 | endif() | ||
| 78 | set_target_properties(${APP_NAME_LC} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${CODE_SIGN_IDENTITY}" | ||
| 79 | XCODE_ATTRIBUTE_CODE_SIGN_STYLE ${CODE_SIGN_STYLE_APP} | ||
| 80 | XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${DEVELOPMENT_TEAM}" | ||
| 81 | XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "${PROVISIONING_PROFILE_APP}") | ||
| 82 | |||
| 83 | # Create xcode target that allows to build binary-addons. | ||
| 84 | if(ADDONS_TO_BUILD) | ||
| 85 | set(_addons "ADDONS=${ADDONS_TO_BUILD}") | ||
| 86 | endif() | ||
| 87 | add_custom_target(binary-addons | ||
| 88 | COMMAND $(MAKE) -C ${CMAKE_SOURCE_DIR}/tools/depends/target/binary-addons clean | ||
| 89 | COMMAND $(MAKE) -C ${CMAKE_SOURCE_DIR}/tools/depends/target/binary-addons VERBOSE=1 V=99 | ||
| 90 | INSTALL_PREFIX="${CMAKE_BINARY_DIR}/addons" CROSS_COMPILING=yes ${_addons}) | ||
| 91 | if(ENABLE_XCODE_ADDONBUILD) | ||
| 92 | add_dependencies(${APP_NAME_LC} binary-addons) | ||
| 93 | endif() | ||
| 94 | unset(_addons) | ||
| 95 | |||
| 96 | add_custom_command(TARGET ${APP_NAME_LC} POST_BUILD | ||
| 97 | # TODO: Remove in sync with CopyRootFiles-darwin_embedded expecting the ".bin" file | ||
| 98 | COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${APP_NAME_LC}> | ||
| 99 | $<TARGET_FILE_DIR:${APP_NAME_LC}>/${APP_NAME}.bin | ||
| 100 | |||
| 101 | COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/DllPaths_generated.h | ||
| 102 | ${CMAKE_BINARY_DIR}/xbmc/DllPaths_generated.h | ||
| 103 | COMMAND "ACTION=build" | ||
| 104 | "APP_NAME=${APP_NAME}" | ||
| 105 | "XBMC_DEPENDS=${DEPENDS_PATH}" | ||
| 106 | ${CMAKE_SOURCE_DIR}/tools/darwin/Support/CopyRootFiles-darwin_embedded.command | ||
| 107 | COMMAND "XBMC_DEPENDS=${DEPENDS_PATH}" | ||
| 108 | "PYTHON_VERSION=${PYTHON_VERSION}" | ||
| 109 | ${CMAKE_SOURCE_DIR}/tools/darwin/Support/copyframeworks-darwin_embedded.command | ||
| 110 | COMMAND ${CMAKE_SOURCE_DIR}/tools/darwin/Support/copyframeworks-dylibs2frameworks.command | ||
| 111 | COMMAND "XBMC_DEPENDS=${DEPENDS_PATH}" | ||
| 112 | "NATIVEPREFIX=${NATIVEPREFIX}" | ||
| 113 | ${CMAKE_SOURCE_DIR}/tools/darwin/Support/Codesign.command | ||
| 114 | ) | ||
| 115 | |||
| 116 | if(CORE_PLATFORM_NAME_LC STREQUAL tvos) | ||
| 117 | add_custom_command(TARGET ${APP_NAME_LC} POST_BUILD | ||
| 118 | COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/share/${APP_NAME_LC} $<TARGET_FILE_DIR:${APP_NAME_LC}>/AppData/AppHome | ||
| 119 | ) | ||
| 120 | endif() | ||
| 121 | |||
| 122 | set(DEPENDS_ROOT_FOR_XCODE ${NATIVEPREFIX}/..) | ||
| 123 | configure_file(${CMAKE_SOURCE_DIR}/tools/darwin/packaging/darwin_embedded/mkdeb-darwin_embedded.sh.in | ||
| 124 | ${CMAKE_BINARY_DIR}/tools/darwin/packaging/darwin_embedded/mkdeb-darwin_embedded.sh @ONLY) | ||
| 125 | |||
| 126 | if(CORE_PLATFORM_NAME_LC STREQUAL ios) | ||
| 127 | configure_file(${CMAKE_SOURCE_DIR}/tools/darwin/packaging/darwin_embedded/migrate_to_kodi.sh.in | ||
| 128 | ${CMAKE_BINARY_DIR}/tools/darwin/packaging/darwin_embedded/migrate_to_kodi.sh @ONLY) | ||
| 129 | endif() | ||
| 130 | |||
| 131 | add_custom_target(deb | ||
| 132 | COMMAND sh ./mkdeb-darwin_embedded.sh ${CORE_BUILD_CONFIG} | ||
| 133 | WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tools/darwin/packaging/darwin_embedded) | ||
| 134 | add_dependencies(deb ${APP_NAME_LC}) | ||
| 135 | |||
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 @@ | |||
| 1 | function(core_link_library lib wraplib) | ||
| 2 | if(CMAKE_GENERATOR MATCHES "Unix Makefiles" OR CMAKE_GENERATOR STREQUAL Ninja) | ||
| 3 | set(wrapper_obj cores/dll-loader/exports/CMakeFiles/wrapper.dir/wrapper.c.o) | ||
| 4 | elseif(CMAKE_GENERATOR MATCHES "Xcode") | ||
| 5 | set(wrapper_obj cores/dll-loader/exports/kodi.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/wrapper.build/Objects-$(CURRENT_VARIANT)/$(CURRENT_ARCH)/wrapper.o) | ||
| 6 | else() | ||
| 7 | message(FATAL_ERROR "Unsupported generator in core_link_library") | ||
| 8 | endif() | ||
| 9 | |||
| 10 | set(export -bundle -undefined dynamic_lookup | ||
| 11 | -Wl,-alias_list,${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/cores/dll-loader/exports/wrapper.def | ||
| 12 | ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/${wrapper_obj}) | ||
| 13 | set(extension ${CMAKE_SHARED_MODULE_SUFFIX}) | ||
| 14 | set(check_arg "") | ||
| 15 | if(TARGET ${lib}) | ||
| 16 | set(target ${lib}) | ||
| 17 | set(link_lib $<TARGET_FILE:${lib}>) | ||
| 18 | set(check_arg ${ARGV2}) | ||
| 19 | set(data_arg ${ARGV3}) | ||
| 20 | |||
| 21 | # iOS: EFFECTIVE_PLATFORM_NAME is not resolved | ||
| 22 | # http://public.kitware.com/pipermail/cmake/2016-March/063049.html | ||
| 23 | if(CORE_SYSTEM_NAME STREQUAL darwin_embedded) | ||
| 24 | get_target_property(dir ${lib} BINARY_DIR) | ||
| 25 | set(link_lib ${dir}/${CORE_BUILD_CONFIG}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}) | ||
| 26 | endif() | ||
| 27 | else() | ||
| 28 | set(target ${ARGV2}) | ||
| 29 | set(link_lib ${lib}) | ||
| 30 | set(check_arg ${ARGV3}) | ||
| 31 | set(data_arg ${ARGV4}) | ||
| 32 | endif() | ||
| 33 | if(check_arg STREQUAL export) | ||
| 34 | set(export ${export} | ||
| 35 | -Wl,--version-script=${ARGV3}) | ||
| 36 | elseif(check_arg STREQUAL extras) | ||
| 37 | foreach(arg ${data_arg}) | ||
| 38 | list(APPEND export ${arg}) | ||
| 39 | endforeach() | ||
| 40 | elseif(check_arg STREQUAL archives) | ||
| 41 | set(extra_libs ${data_arg}) | ||
| 42 | endif() | ||
| 43 | get_filename_component(dir ${wraplib} DIRECTORY) | ||
| 44 | |||
| 45 | # We can't simply pass the linker flags to the args section of the custom command | ||
| 46 | # because cmake will add quotes around it (and the linker will fail due to those). | ||
| 47 | # We need to do this handstand first ... | ||
| 48 | string(REPLACE " " ";" CUSTOM_COMMAND_ARGS_LDFLAGS ${CMAKE_SHARED_LINKER_FLAGS}) | ||
| 49 | |||
| 50 | add_custom_command(OUTPUT ${wraplib}-${ARCH}${extension} | ||
| 51 | COMMAND ${CMAKE_COMMAND} -E make_directory ${dir} | ||
| 52 | COMMAND ${CMAKE_C_COMPILER} | ||
| 53 | ARGS ${CUSTOM_COMMAND_ARGS_LDFLAGS} ${export} -Wl,-force_load ${link_lib} ${extra_libs} | ||
| 54 | -o ${CMAKE_BINARY_DIR}/${wraplib}-${ARCH}${extension} | ||
| 55 | DEPENDS ${target} wrapper.def wrapper | ||
| 56 | VERBATIM) | ||
| 57 | |||
| 58 | get_filename_component(libname ${wraplib} NAME_WE) | ||
| 59 | add_custom_target(wrap_${libname} ALL DEPENDS ${wraplib}-${ARCH}${extension}) | ||
| 60 | set_target_properties(wrap_${libname} PROPERTIES FOLDER lib/wrapped) | ||
| 61 | add_dependencies(${APP_NAME_LC}-libraries wrap_${libname}) | ||
| 62 | |||
| 63 | set(LIBRARY_FILES ${LIBRARY_FILES} ${CMAKE_BINARY_DIR}/${wraplib}-${ARCH}${extension} CACHE STRING "" FORCE) | ||
| 64 | endfunction() | ||
| 65 | |||
| 66 | function(find_soname lib) | ||
| 67 | cmake_parse_arguments(arg "REQUIRED" "" "" ${ARGN}) | ||
| 68 | |||
| 69 | string(TOLOWER ${lib} liblow) | ||
| 70 | if(${lib}_LDFLAGS) | ||
| 71 | set(link_lib "${${lib}_LDFLAGS}") | ||
| 72 | else() | ||
| 73 | set(link_lib "${${lib}_LIBRARIES}") | ||
| 74 | endif() | ||
| 75 | |||
| 76 | execute_process(COMMAND ${CMAKE_C_COMPILER} -print-search-dirs | ||
| 77 | COMMAND fgrep libraries: | ||
| 78 | COMMAND sed "s/[^=]*=\\(.*\\)/\\1/" | ||
| 79 | COMMAND sed "s/:/ /g" | ||
| 80 | ERROR_QUIET | ||
| 81 | OUTPUT_VARIABLE cc_lib_path | ||
| 82 | OUTPUT_STRIP_TRAILING_WHITESPACE) | ||
| 83 | execute_process(COMMAND echo ${link_lib} | ||
| 84 | COMMAND sed "s/-L[ ]*//g" | ||
| 85 | COMMAND sed "s/-l[^ ]*//g" | ||
| 86 | ERROR_QUIET | ||
| 87 | OUTPUT_VARIABLE env_lib_path | ||
| 88 | OUTPUT_STRIP_TRAILING_WHITESPACE) | ||
| 89 | |||
| 90 | foreach(path ${cc_lib_path} ${env_lib_path}) | ||
| 91 | if(IS_DIRECTORY ${path}) | ||
| 92 | execute_process(COMMAND ls -- ${path}/lib${liblow}.dylib | ||
| 93 | ERROR_QUIET | ||
| 94 | OUTPUT_VARIABLE lib_file | ||
| 95 | OUTPUT_STRIP_TRAILING_WHITESPACE) | ||
| 96 | else() | ||
| 97 | set(lib_file ${path}) | ||
| 98 | endif() | ||
| 99 | if(lib_file) | ||
| 100 | # we want the path/name that is embedded in the dylib | ||
| 101 | execute_process(COMMAND otool -L ${lib_file} | ||
| 102 | COMMAND grep -v lib${liblow}.dylib | ||
| 103 | COMMAND grep ${liblow} | ||
| 104 | COMMAND awk "{V=1; print $V}" | ||
| 105 | ERROR_QUIET | ||
| 106 | OUTPUT_VARIABLE filename | ||
| 107 | OUTPUT_STRIP_TRAILING_WHITESPACE) | ||
| 108 | get_filename_component(${lib}_SONAME "${filename}" NAME) | ||
| 109 | if(VERBOSE) | ||
| 110 | message(STATUS "${lib} soname: ${${lib}_SONAME}") | ||
| 111 | endif() | ||
| 112 | endif() | ||
| 113 | endforeach() | ||
| 114 | if(arg_REQUIRED AND NOT ${lib}_SONAME) | ||
| 115 | message(FATAL_ERROR "Could not find dynamically loadable library ${lib}") | ||
| 116 | endif() | ||
| 117 | set(${lib}_SONAME ${${lib}_SONAME} PARENT_SCOPE) | ||
| 118 | 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 @@ | |||
| 1 | set(BUNDLE_IDENTIFIER_DESC "Bundle ID") | ||
| 2 | if(CORE_PLATFORM_NAME_LC STREQUAL tvos) | ||
| 3 | string(CONCAT BUNDLE_IDENTIFIER_DESC "${BUNDLE_IDENTIFIER_DESC}" " (app, top shelf, group ID)") | ||
| 4 | endif() | ||
| 5 | set(PLATFORM_BUNDLE_IDENTIFIER "${APP_PACKAGE}-${CORE_PLATFORM_NAME_LC}" CACHE STRING "${BUNDLE_IDENTIFIER_DESC}") | ||
| 6 | list(APPEND final_message "Bundle ID: ${PLATFORM_BUNDLE_IDENTIFIER}") | ||
| 7 | 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 @@ | |||
| 1 | set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_FREEBSD) | 1 | set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_FREEBSD) |
| 2 | set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_LARGEFILE64_SOURCE | 2 | set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_LARGEFILE64_SOURCE |
| 3 | -D_FILE_OFFSET_BITS=64) | 3 | -D_FILE_OFFSET_BITS=64 -DHAS_OSS) |
| 4 | set(PLATFORM_DIR platform/linux) | 4 | set(PLATFORM_DIR platform/linux) |
| 5 | set(PLATFORMDEFS_DIR platform/posix) | ||
| 5 | set(SYSTEM_LDFLAGS -L/usr/local/lib) | 6 | set(SYSTEM_LDFLAGS -L/usr/local/lib) |
| 6 | if(WITH_ARCH) | 7 | if(WITH_ARCH) |
| 7 | set(ARCH ${WITH_ARCH}) | 8 | set(ARCH ${WITH_ARCH}) |
| @@ -30,4 +31,4 @@ if(NOT ENABLE_ALSA) | |||
| 30 | endif() | 31 | endif() |
| 31 | 32 | ||
| 32 | # Additional SYSTEM_DEFINES | 33 | # Additional SYSTEM_DEFINES |
| 33 | list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK) | 34 | list(APPEND SYSTEM_DEFINES -DHAS_POSIX_NETWORK -DHAS_FREEBSD_NETWORK) |
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 @@ | |||
| 1 | # IOS packaging | ||
| 2 | |||
| 3 | set(BUNDLE_RESOURCES ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1100-Landscape-2436h@3x.png | ||
| 4 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1100-Portrait-2436h@3x.png | ||
| 5 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Landscape-1792h@2x.png | ||
| 6 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Portrait-2224h@2x.png | ||
| 7 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Landscape-2224h@2x.png | ||
| 8 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Portrait-2388h@2x.png | ||
| 9 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Landscape-2388h@2x.png | ||
| 10 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Landscape-2688h@3x.png | ||
| 11 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Portrait-1792h@2x.png | ||
| 12 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-1200-Portrait-2688h@3x.png | ||
| 13 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-568h@2x.png | ||
| 14 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-700-568h@2x.png | ||
| 15 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-700-Landscape@2x~ipad.png | ||
| 16 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-700-Portrait@2x~ipad.png | ||
| 17 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-700@2x.png | ||
| 18 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-800-667h@2x.png | ||
| 19 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-800-Landscape-736h@3x.png | ||
| 20 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-800-Portrait-736h@3x.png | ||
| 21 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-Landscape@2x~ipad.png | ||
| 22 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage-Portrait@2x~ipad.png | ||
| 23 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/LaunchImage@2x.png | ||
| 24 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29.png | ||
| 25 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29@2x.png | ||
| 26 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon40x40.png | ||
| 27 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon40x40@2x.png | ||
| 28 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon50x50.png | ||
| 29 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon50x50@2x.png | ||
| 30 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon57x57.png | ||
| 31 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon57x57@2x.png | ||
| 32 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon60x60.png | ||
| 33 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon60x60@2x.png | ||
| 34 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon72x72.png | ||
| 35 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon72x72@2x.png | ||
| 36 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon76x76.png | ||
| 37 | ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon76x76@2x.png) | ||
| 38 | |||
| 39 | target_sources(${APP_NAME_LC} PRIVATE ${BUNDLE_RESOURCES}) | ||
| 40 | foreach(file IN LISTS BUNDLE_RESOURCES) | ||
| 41 | set_source_files_properties(${file} PROPERTIES MACOSX_PACKAGE_LOCATION .) | ||
| 42 | endforeach() | ||
| 43 | |||
| 44 | target_sources(${APP_NAME_LC} PRIVATE ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/English.lproj/InfoPlist.strings) | ||
| 45 | set_source_files_properties(${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/English.lproj/InfoPlist.strings PROPERTIES MACOSX_PACKAGE_LOCATION "./English.lproj") | ||
| 46 | |||
| 47 | # Options for code signing propagated as env vars to Codesign.command via Xcode | ||
| 48 | set(IOS_CODE_SIGN_IDENTITY "" CACHE STRING "Code Sign Identity") | ||
| 49 | if(IOS_CODE_SIGN_IDENTITY) | ||
| 50 | set_target_properties(${APP_NAME_LC} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED TRUE | ||
| 51 | XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ${IOS_CODE_SIGN_IDENTITY}) | ||
| 52 | endif() | ||
| 53 | |||
| 54 | add_custom_command(TARGET ${APP_NAME_LC} POST_BUILD | ||
| 55 | # TODO: Remove in sync with CopyRootFiles-ios expecting the ".bin" file | ||
| 56 | COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${APP_NAME_LC}> | ||
| 57 | $<TARGET_FILE_DIR:${APP_NAME_LC}>/${APP_NAME}.bin | ||
| 58 | |||
| 59 | COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/DllPaths_generated.h | ||
| 60 | ${CMAKE_BINARY_DIR}/xbmc/DllPaths_generated.h | ||
| 61 | COMMAND "ACTION=build" | ||
| 62 | "TARGET_BUILD_DIR=$<TARGET_FILE_DIR:${APP_NAME_LC}>/.." | ||
| 63 | "TARGET_NAME=${APP_NAME}.app" | ||
| 64 | "APP_NAME=${APP_NAME}" | ||
| 65 | "PRODUCT_NAME=${APP_NAME}" | ||
| 66 | "WRAPPER_EXTENSION=app" | ||
| 67 | "SRCROOT=${CMAKE_BINARY_DIR}" | ||
| 68 | ${CMAKE_SOURCE_DIR}/tools/darwin/Support/CopyRootFiles-ios.command | ||
| 69 | COMMAND "XBMC_DEPENDS=${DEPENDS_PATH}" | ||
| 70 | "TARGET_BUILD_DIR=$<TARGET_FILE_DIR:${APP_NAME_LC}>/.." | ||
| 71 | "TARGET_NAME=${APP_NAME}.app" | ||
| 72 | "APP_NAME=${APP_NAME}" | ||
| 73 | "PRODUCT_NAME=${APP_NAME}" | ||
| 74 | "FULL_PRODUCT_NAME=${APP_NAME}.app" | ||
| 75 | "WRAPPER_EXTENSION=app" | ||
| 76 | "SRCROOT=${CMAKE_BINARY_DIR}" | ||
| 77 | ${CMAKE_SOURCE_DIR}/tools/darwin/Support/copyframeworks-ios.command | ||
| 78 | COMMAND "XBMC_DEPENDS=${DEPENDS_PATH}" | ||
| 79 | "NATIVEPREFIX=${NATIVEPREFIX}" | ||
| 80 | "PLATFORM_NAME=${PLATFORM}" | ||
| 81 | "CODESIGNING_FOLDER_PATH=$<TARGET_FILE_DIR:${APP_NAME_LC}>" | ||
| 82 | "BUILT_PRODUCTS_DIR=$<TARGET_FILE_DIR:${APP_NAME_LC}>/.." | ||
| 83 | "WRAPPER_NAME=${APP_NAME}.app" | ||
| 84 | "APP_NAME=${APP_NAME}" | ||
| 85 | "CURRENT_ARCH=${ARCH}" | ||
| 86 | ${CMAKE_SOURCE_DIR}/tools/darwin/Support/Codesign.command | ||
| 87 | ) | ||
| 88 | |||
| 89 | set(DEPENDS_ROOT_FOR_XCODE ${NATIVEPREFIX}/..) | ||
| 90 | configure_file(${CMAKE_SOURCE_DIR}/tools/darwin/packaging/ios/mkdeb-ios.sh.in | ||
| 91 | ${CMAKE_BINARY_DIR}/tools/darwin/packaging/ios/mkdeb-ios.sh @ONLY) | ||
| 92 | configure_file(${CMAKE_SOURCE_DIR}/tools/darwin/packaging/migrate_to_kodi_ios.sh.in | ||
| 93 | ${CMAKE_BINARY_DIR}/tools/darwin/packaging/migrate_to_kodi_ios.sh @ONLY) | ||
| 94 | |||
| 95 | add_custom_target(deb | ||
| 96 | COMMAND sh ./mkdeb-ios.sh ${CORE_BUILD_CONFIG} | ||
| 97 | WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tools/darwin/packaging/ios) | ||
| 98 | add_dependencies(deb ${APP_NAME_LC}) | ||
| 99 | |||
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 @@ | |||
| 1 | ../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 @@ | |||
| 1 | ../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 @@ | |||
| 1 | # we always want to use GNU features if available, so set _GNU_SOURCE | 1 | # we always want to use GNU features if available, so set _GNU_SOURCE |
| 2 | set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_LINUX -D_GNU_SOURCE) | 2 | set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_LINUX -D_GNU_SOURCE) |
| 3 | set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_FILE_DEFINED | 3 | set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_FILE_OFFSET_BITS=64) |
| 4 | -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64) | ||
| 5 | set(PLATFORM_DIR platform/linux) | 4 | set(PLATFORM_DIR platform/linux) |
| 5 | set(PLATFORMDEFS_DIR platform/posix) | ||
| 6 | set(CMAKE_SYSTEM_NAME Linux) | 6 | set(CMAKE_SYSTEM_NAME Linux) |
| 7 | if(WITH_ARCH) | 7 | if(WITH_ARCH) |
| 8 | set(ARCH ${WITH_ARCH}) | 8 | set(ARCH ${WITH_ARCH}) |
| @@ -84,10 +84,27 @@ endif() | |||
| 84 | include(LDGOLD) | 84 | include(LDGOLD) |
| 85 | 85 | ||
| 86 | include(CheckIncludeFiles) | 86 | include(CheckIncludeFiles) |
| 87 | check_include_files("linux/memfd.h" HAVE_LINUX_MEMFD) | 87 | check_include_files("linux/udmabuf.h" HAVE_LINUX_UDMABUF) |
| 88 | if(HAVE_LINUX_MEMFD) | 88 | if(HAVE_LINUX_UDMABUF) |
| 89 | list(APPEND ARCH_DEFINES "-DHAVE_LINUX_MEMFD=1") | 89 | list(APPEND ARCH_DEFINES "-DHAVE_LINUX_UDMABUF=1") |
| 90 | else() | ||
| 91 | message(STATUS "include/linux/udmabuf.h not found") | ||
| 92 | endif() | ||
| 93 | |||
| 94 | check_include_files("linux/dma-heap.h" HAVE_LINUX_DMA_HEAP) | ||
| 95 | if(HAVE_LINUX_DMA_HEAP) | ||
| 96 | list(APPEND ARCH_DEFINES "-DHAVE_LINUX_DMA_HEAP=1") | ||
| 97 | else() | ||
| 98 | message(STATUS "include/linux/dma-heap.h not found") | ||
| 99 | endif() | ||
| 100 | |||
| 101 | check_include_files("linux/dma-buf.h" HAVE_LINUX_DMA_BUF) | ||
| 102 | if(HAVE_LINUX_DMA_BUF) | ||
| 103 | list(APPEND ARCH_DEFINES "-DHAVE_LINUX_DMA_BUF=1") | ||
| 104 | else() | ||
| 105 | message(STATUS "include/linux/dma-buf.h not found") | ||
| 90 | endif() | 106 | endif() |
| 107 | |||
| 91 | include(CheckSymbolExists) | 108 | include(CheckSymbolExists) |
| 92 | set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE") | 109 | set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE") |
| 93 | check_symbol_exists("mkostemp" "stdlib.h" HAVE_MKOSTEMP) | 110 | check_symbol_exists("mkostemp" "stdlib.h" HAVE_MKOSTEMP) |
| @@ -96,8 +113,17 @@ if(HAVE_MKOSTEMP) | |||
| 96 | list(APPEND ARCH_DEFINES "-DHAVE_MKOSTEMP=1") | 113 | list(APPEND ARCH_DEFINES "-DHAVE_MKOSTEMP=1") |
| 97 | endif() | 114 | endif() |
| 98 | 115 | ||
| 116 | set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE") | ||
| 117 | check_symbol_exists("memfd_create" "sys/mman.h" HAVE_LINUX_MEMFD) | ||
| 118 | set(CMAKE_REQUIRED_DEFINITIONS "") | ||
| 119 | if(HAVE_LINUX_MEMFD) | ||
| 120 | list(APPEND ARCH_DEFINES "-DHAVE_LINUX_MEMFD=1") | ||
| 121 | else() | ||
| 122 | message(STATUS "memfd_create() not found") | ||
| 123 | endif() | ||
| 124 | |||
| 99 | # Additional SYSTEM_DEFINES | 125 | # Additional SYSTEM_DEFINES |
| 100 | list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK) | 126 | list(APPEND SYSTEM_DEFINES -DHAS_POSIX_NETWORK -DHAS_LINUX_NETWORK) |
| 101 | 127 | ||
| 102 | # Code Coverage | 128 | # Code Coverage |
| 103 | if(CMAKE_BUILD_TYPE STREQUAL Coverage) | 129 | 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 | |||
| 6 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/osx/SDLMain.mm | 6 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/osx/SDLMain.mm |
| 7 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/osx/SDLMain.h) | 7 | ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/osx/SDLMain.h) |
| 8 | 8 | ||
| 9 | set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX) | 9 | set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX) |
| 10 | set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE | 10 | set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE |
| 11 | -D__STDC_CONSTANT_MACROS) | 11 | -D__STDC_CONSTANT_MACROS) |
| 12 | set(PLATFORM_DIR platform/linux) | 12 | set(PLATFORM_DIR platform/darwin) |
| 13 | set(PLATFORMDEFS_DIR platform/posix) | ||
| 13 | set(CMAKE_SYSTEM_NAME Darwin) | 14 | set(CMAKE_SYSTEM_NAME Darwin) |
| 14 | if(WITH_ARCH) | 15 | if(WITH_ARCH) |
| 15 | set(ARCH ${WITH_ARCH}) | 16 | set(ARCH ${WITH_ARCH}) |
| @@ -23,7 +24,7 @@ else() | |||
| 23 | endif() | 24 | endif() |
| 24 | 25 | ||
| 25 | # Additional SYSTEM_DEFINES | 26 | # Additional SYSTEM_DEFINES |
| 26 | list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK -DHAS_SDL -DHAS_ZEROCONF) | 27 | list(APPEND SYSTEM_DEFINES -DHAS_POSIX_NETWORK -DHAS_OSX_NETWORK -DHAS_SDL -DHAS_ZEROCONF) |
| 27 | 28 | ||
| 28 | list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX}) | 29 | list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX}) |
| 29 | 30 | ||
| @@ -32,7 +33,10 @@ list(APPEND DEPLIBS "-framework DiskArbitration" "-framework IOKit" | |||
| 32 | "-framework ApplicationServices" "-framework AppKit" | 33 | "-framework ApplicationServices" "-framework AppKit" |
| 33 | "-framework CoreAudio" "-framework AudioToolbox" | 34 | "-framework CoreAudio" "-framework AudioToolbox" |
| 34 | "-framework CoreGraphics" "-framework CoreMedia" | 35 | "-framework CoreGraphics" "-framework CoreMedia" |
| 35 | "-framework VideoToolbox") | 36 | "-framework VideoToolbox" "-framework Security") |
| 36 | 37 | ||
| 37 | set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) | 38 | set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13) |
| 38 | set(CMAKE_XCODE_ATTRIBUTE_CLANG_LINK_OBJC_RUNTIME OFF) | 39 | set(CMAKE_XCODE_ATTRIBUTE_CLANG_LINK_OBJC_RUNTIME OFF) |
| 40 | |||
| 41 | include(cmake/scripts/darwin/Macros.cmake) | ||
| 42 | 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 | |||
| 22 | "APP_NAME=${APP_NAME}" | 22 | "APP_NAME=${APP_NAME}" |
| 23 | "FULL_PRODUCT_NAME=${APP_NAME}.app" | 23 | "FULL_PRODUCT_NAME=${APP_NAME}.app" |
| 24 | "SRCROOT=${CMAKE_BINARY_DIR}" | 24 | "SRCROOT=${CMAKE_BINARY_DIR}" |
| 25 | "PYTHON_VERSION=${PYTHON_VERSION}" | ||
| 25 | ${CMAKE_SOURCE_DIR}/tools/darwin/Support/copyframeworks-osx.command) | 26 | ${CMAKE_SOURCE_DIR}/tools/darwin/Support/copyframeworks-osx.command) |
| 26 | set_target_properties(bundle PROPERTIES FOLDER "Build Utilities") | 27 | set_target_properties(bundle PROPERTIES FOLDER "Build Utilities") |
| 27 | add_dependencies(bundle ${APP_NAME_LC}) | 28 | 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) | |||
| 20 | 20 | ||
| 21 | # iOS: EFFECTIVE_PLATFORM_NAME is not resolved | 21 | # iOS: EFFECTIVE_PLATFORM_NAME is not resolved |
| 22 | # http://public.kitware.com/pipermail/cmake/2016-March/063049.html | 22 | # http://public.kitware.com/pipermail/cmake/2016-March/063049.html |
| 23 | if(CORE_SYSTEM_NAME STREQUAL ios AND CMAKE_GENERATOR STREQUAL Xcode) | 23 | if(CORE_SYSTEM_NAME STREQUAL darwin_embedded) |
| 24 | get_target_property(dir ${lib} BINARY_DIR) | 24 | get_target_property(dir ${lib} BINARY_DIR) |
| 25 | set(link_lib ${dir}/${CORE_BUILD_CONFIG}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}) | 25 | set(link_lib ${dir}/${CORE_BUILD_CONFIG}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}) |
| 26 | endif() | 26 | 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} | |||
| 35 | list(APPEND CMAKE_PREFIX_PATH ${MINGW_LIBS_DIR}) | 35 | list(APPEND CMAKE_PREFIX_PATH ${MINGW_LIBS_DIR}) |
| 36 | list(APPEND CMAKE_LIBRARY_PATH ${MINGW_LIBS_DIR}/bin) | 36 | list(APPEND CMAKE_LIBRARY_PATH ${MINGW_LIBS_DIR}/bin) |
| 37 | list(APPEND CMAKE_PREFIX_PATH ${DEPENDENCIES_DIR}) | 37 | list(APPEND CMAKE_PREFIX_PATH ${DEPENDENCIES_DIR}) |
| 38 | set(PYTHON_INCLUDE_DIR ${DEPENDENCIES_DIR}/include/python) | ||
| 39 | 38 | ||
| 40 | # -------- Compiler options --------- | 39 | # -------- Compiler options --------- |
| 41 | 40 | ||
| @@ -46,12 +45,9 @@ set(SYSTEM_DEFINES -DWIN32_LEAN_AND_MEAN -DNOMINMAX -DHAS_DX -D__STDC_CONSTANT_M | |||
| 46 | -DPLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi" | 45 | -DPLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi" |
| 47 | -DPLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi" | 46 | -DPLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi" |
| 48 | -DUNICODE -D_UNICODE | 47 | -DUNICODE -D_UNICODE |
| 48 | -DFRIBIDI_STATIC | ||
| 49 | $<$<CONFIG:Debug>:-DD3D_DEBUG_INFO>) | 49 | $<$<CONFIG:Debug>:-DD3D_DEBUG_INFO>) |
| 50 | 50 | ||
| 51 | if(${ARCH} STREQUAL win32) | ||
| 52 | list(APPEND SYSTEM_DEFINES $<$<CONFIG:Debug>:-D_ITERATOR_DEBUG_LEVEL=0>) | ||
| 53 | endif() | ||
| 54 | |||
| 55 | # Additional SYSTEM_DEFINES | 51 | # Additional SYSTEM_DEFINES |
| 56 | list(APPEND SYSTEM_DEFINES -DHAS_WIN32_NETWORK -DHAS_FILESYSTEM_SMB) | 52 | list(APPEND SYSTEM_DEFINES -DHAS_WIN32_NETWORK -DHAS_FILESYSTEM_SMB) |
| 57 | 53 | ||
| @@ -74,7 +70,8 @@ link_directories(${DEPENDENCIES_DIR}/lib) | |||
| 74 | 70 | ||
| 75 | # Additional libraries | 71 | # Additional libraries |
| 76 | list(APPEND DEPLIBS bcrypt.lib d3d11.lib DInput8.lib DSound.lib winmm.lib Mpr.lib Iphlpapi.lib WS2_32.lib | 72 | list(APPEND DEPLIBS bcrypt.lib d3d11.lib DInput8.lib DSound.lib winmm.lib Mpr.lib Iphlpapi.lib WS2_32.lib |
| 77 | PowrProf.lib setupapi.lib Shlwapi.lib dwmapi.lib dxguid.lib DelayImp.lib) | 73 | PowrProf.lib setupapi.lib Shlwapi.lib dwmapi.lib dxguid.lib DelayImp.lib version.lib |
| 74 | crypt32.lib Mfplat.lib Mfuuid.lib Strmiids.lib) | ||
| 78 | 75 | ||
| 79 | # NODEFAULTLIB option | 76 | # NODEFAULTLIB option |
| 80 | set(_nodefaultlibs_RELEASE libcmt) | 77 | set(_nodefaultlibs_RELEASE libcmt) |
| @@ -87,7 +84,7 @@ foreach(_lib ${_nodefaultlibs_DEBUG}) | |||
| 87 | endforeach() | 84 | endforeach() |
| 88 | 85 | ||
| 89 | # DELAYLOAD option | 86 | # DELAYLOAD option |
| 90 | set(_delayloadlibs zlib.dll libmysql.dll libxslt.dll dnssd.dll dwmapi.dll sqlite3.dll | 87 | set(_delayloadlibs zlib.dll libmariadb.dll libxslt.dll dnssd.dll dwmapi.dll sqlite3.dll |
| 91 | d3dcompiler_47.dll) | 88 | d3dcompiler_47.dll) |
| 92 | foreach(_lib ${_delayloadlibs}) | 89 | foreach(_lib ${_delayloadlibs}) |
| 93 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DELAYLOAD:\"${_lib}\"") | 90 | 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}) | |||
| 53 | list(APPEND CMAKE_LIBRARY_PATH ${MINGW_LIBS_DIR}/bin) | 53 | list(APPEND CMAKE_LIBRARY_PATH ${MINGW_LIBS_DIR}/bin) |
| 54 | # dependencies | 54 | # dependencies |
| 55 | list(APPEND CMAKE_PREFIX_PATH ${DEPENDENCIES_DIR}) | 55 | list(APPEND CMAKE_PREFIX_PATH ${DEPENDENCIES_DIR}) |
| 56 | # for python | ||
| 57 | set(PYTHON_INCLUDE_DIR ${DEPENDENCIES_DIR}/include/python) | ||
| 58 | 56 | ||
| 59 | 57 | ||
| 60 | # -------- Compiler options --------- | 58 | # -------- Compiler options --------- |
| @@ -64,22 +62,24 @@ add_options(CXX ALL_BUILDS "/wd\"4146\"") | |||
| 64 | add_options(CXX ALL_BUILDS "/wd\"4251\"") | 62 | add_options(CXX ALL_BUILDS "/wd\"4251\"") |
| 65 | add_options(CXX ALL_BUILDS "/wd\"4668\"") | 63 | add_options(CXX ALL_BUILDS "/wd\"4668\"") |
| 66 | add_options(CXX ALL_BUILDS "/wd\"5033\"") | 64 | add_options(CXX ALL_BUILDS "/wd\"5033\"") |
| 67 | set(ARCH_DEFINES -D_WINDOWS -DTARGET_WINDOWS -DTARGET_WINDOWS_STORE -DXBMC_EXPORT -DMS_UWP) | 65 | set(ARCH_DEFINES -D_WINDOWS -DTARGET_WINDOWS -DTARGET_WINDOWS_STORE -DXBMC_EXPORT -DMS_UWP -DMS_STORE) |
| 68 | if(NOT SDK_TARGET_ARCH STREQUAL arm) | 66 | if(NOT SDK_TARGET_ARCH STREQUAL arm) |
| 69 | list(APPEND ARCH_DEFINES -D__SSE__ -D__SSE2__) | 67 | list(APPEND ARCH_DEFINES -D__SSE__ -D__SSE2__) |
| 70 | endif() | 68 | endif() |
| 71 | set(SYSTEM_DEFINES -DWIN32_LEAN_AND_MEAN -DNOMINMAX -DHAS_DX -D__STDC_CONSTANT_MACROS | 69 | set(SYSTEM_DEFINES -DWIN32_LEAN_AND_MEAN -DNOMINMAX -DHAS_DX -D__STDC_CONSTANT_MACROS |
| 72 | -DFMT_HEADER_ONLY -DTAGLIB_STATIC -DNPT_CONFIG_ENABLE_LOGGING | 70 | -DTAGLIB_STATIC -DNPT_CONFIG_ENABLE_LOGGING |
| 73 | -DPLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi" | 71 | -DPLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi" |
| 74 | -DPLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi" | 72 | -DPLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi" |
| 75 | -DUNICODE -D_UNICODE | 73 | -DUNICODE -D_UNICODE |
| 74 | -DFRIBIDI_STATIC | ||
| 76 | $<$<CONFIG:Debug>:-DD3D_DEBUG_INFO>) | 75 | $<$<CONFIG:Debug>:-DD3D_DEBUG_INFO>) |
| 77 | 76 | ||
| 78 | # Additional SYSTEM_DEFINES | 77 | # Additional SYSTEM_DEFINES |
| 79 | list(APPEND SYSTEM_DEFINES -DHAS_WIN10_NETWORK) | 78 | list(APPEND SYSTEM_DEFINES -DHAS_WIN10_NETWORK) |
| 80 | 79 | ||
| 81 | # The /MP option enables /FS by default. | 80 | # The /MP option enables /FS by default. |
| 82 | set(CMAKE_CXX_FLAGS "/MP ${CMAKE_CXX_FLAGS} /EHsc /await /std:c++latest") | 81 | set(CMAKE_CXX_FLAGS "/MP ${CMAKE_CXX_FLAGS} /EHsc /await") |
| 82 | set(CMAKE_CXX_STANDARD 17) | ||
| 83 | # Google Test needs to use shared version of runtime libraries | 83 | # Google Test needs to use shared version of runtime libraries |
| 84 | set(gtest_force_shared_crt ON CACHE STRING "" FORCE) | 84 | set(gtest_force_shared_crt ON CACHE STRING "" FORCE) |
| 85 | 85 | ||
| @@ -91,7 +91,8 @@ set(gtest_force_shared_crt ON CACHE STRING "" FORCE) | |||
| 91 | link_directories(${MINGW_LIBS_DIR}/lib | 91 | link_directories(${MINGW_LIBS_DIR}/lib |
| 92 | ${DEPENDENCIES_DIR}/lib) | 92 | ${DEPENDENCIES_DIR}/lib) |
| 93 | 93 | ||
| 94 | list(APPEND DEPLIBS bcrypt.lib d3d11.lib WS2_32.lib dxguid.lib dloadhelper.lib WindowsApp.lib) | 94 | list(APPEND DEPLIBS bcrypt.lib d3d11.lib WS2_32.lib dxguid.lib dloadhelper.lib WindowsApp.lib |
| 95 | Mfplat.lib Mfuuid.lib Strmiids.lib) | ||
| 95 | 96 | ||
| 96 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /WINMD:NO") | 97 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /WINMD:NO") |
| 97 | set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:msvcrt /DEBUG:FASTLINK /OPT:NOREF /OPT:NOICF") | 98 | 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() | |||
| 112 | 112 | ||
| 113 | macro(winstore_append_props target) | 113 | macro(winstore_append_props target) |
| 114 | # exclude debug dlls from packaging | 114 | # exclude debug dlls from packaging |
| 115 | set(DEBUG_DLLS zlibd.dll freetyped.dll sqlite3d.dll) | 115 | set(DEBUG_DLLS zlibd.dll) |
| 116 | foreach(_dll ${DEBUG_DLLS}) | 116 | foreach(_dll ${DEBUG_DLLS}) |
| 117 | if (DEBUG_DLLS_EXCLUDE) | 117 | if (DEBUG_DLLS_EXCLUDE) |
| 118 | list(APPEND DEBUG_DLLS_EXCLUDE "\;$(BuildRootPath)/dlls/${_dll}") | 118 | list(APPEND DEBUG_DLLS_EXCLUDE "\;$(BuildRootPath)/dlls/${_dll}") |
