From b3d195f0188758a14875a5a2f270e4fd190a679f Mon Sep 17 00:00:00 2001 From: manuel Date: Tue, 17 Apr 2018 00:15:38 +0200 Subject: sync with upstream --- cmake/scripts/android/ArchSetup.cmake | 4 +- cmake/scripts/android/Install.cmake | 31 ++++++-- cmake/scripts/common/AddonHelpers.cmake | 33 ++++---- cmake/scripts/common/ArchSetup.cmake | 4 + cmake/scripts/common/HandleDepends.cmake | 3 - cmake/scripts/common/Macros.cmake | 111 +++++++++++++++++++-------- cmake/scripts/common/Uninstall.cmake | 36 +++++++++ cmake/scripts/freebsd/ArchSetup.cmake | 5 ++ cmake/scripts/ios/ArchSetup.cmake | 2 +- cmake/scripts/linux/ArchSetup.cmake | 28 ++++--- cmake/scripts/linux/ExtraTargets.cmake | 6 +- cmake/scripts/windows/ArchSetup.cmake | 14 +++- cmake/scripts/windows/tools/patch.cmake | 7 +- cmake/scripts/windowsstore/ArchSetup.cmake | 14 +++- cmake/scripts/windowsstore/Macros.cmake | 3 +- cmake/scripts/windowsstore/tools/patch.cmake | 7 +- 16 files changed, 225 insertions(+), 83 deletions(-) (limited to 'cmake/scripts') diff --git a/cmake/scripts/android/ArchSetup.cmake b/cmake/scripts/android/ArchSetup.cmake index 03056fa..69bb88d 100644 --- a/cmake/scripts/android/ArchSetup.cmake +++ b/cmake/scripts/android/ArchSetup.cmake @@ -1,7 +1,5 @@ if(NOT CMAKE_TOOLCHAIN_FILE) message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for android. See ${CMAKE_SOURCE_DIR}/cmake/README.md") -elseif(NOT SDK_PLATFORM) - message(FATAL_ERROR "Toolchain did not define SDK_PLATFORM. Possibly outdated depends.") endif() set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_LINUX -D_LINUX -DTARGET_ANDROID) @@ -34,7 +32,7 @@ else() endif() # Additional SYSTEM_DEFINES -list(APPEND SYSTEM_DEFINES -DHAS_ZEROCONF) +list(APPEND SYSTEM_DEFINES -DHAS_ZEROCONF -DHAS_LINUX_NETWORK) set(ENABLE_X11 OFF CACHE BOOL "" FORCE) set(ENABLE_AML OFF CACHE BOOL "" FORCE) diff --git a/cmake/scripts/android/Install.cmake b/cmake/scripts/android/Install.cmake index cc52d51..cc53607 100644 --- a/cmake/scripts/android/Install.cmake +++ b/cmake/scripts/android/Install.cmake @@ -53,29 +53,47 @@ endif() unset(patch) set(package_files strings.xml - activity_main.xml colors.xml searchable.xml AndroidManifest.xml build.gradle - src/Main.java src/Splash.java + src/Main.java src/XBMCBroadcastReceiver.java - src/XBMCImageContentProvider.java src/XBMCInputDeviceListener.java src/XBMCJsonRPC.java - src/XBMCMediaContentProvider.java + src/XBMCMainView.java src/XBMCMediaSession.java src/XBMCRecommendationBuilder.java src/XBMCSearchableActivity.java src/XBMCSettingsContentObserver.java src/XBMCProperties.java src/XBMCVideoView.java + src/XBMCFile.java + src/channels/SyncChannelJobService.java + src/channels/SyncProgramsJobService.java + src/channels/model/XBMCDatabase.java + src/channels/model/Subscription.java + src/channels/util/SharedPreferencesHelper.java + src/channels/util/TvUtil.java src/interfaces/XBMCAudioManagerOnAudioFocusChangeListener.java src/interfaces/XBMCSurfaceTextureOnFrameAvailableListener.java - src/interfaces/XBMCNsdManagerDiscoveryListener.java - src/interfaces/XBMCNsdManagerRegistrationListener.java src/interfaces/XBMCNsdManagerResolveListener.java + src/interfaces/XBMCNsdManagerRegistrationListener.java + src/interfaces/XBMCNsdManagerDiscoveryListener.java + src/interfaces/XBMCMediaDrmOnEventListener.java + src/model/TVEpisode.java + src/model/Movie.java + src/model/TVShow.java + src/model/File.java + src/model/Album.java + src/model/Song.java + src/model/MusicVideo.java + src/model/Media.java + src/content/XBMCFileContentProvider.java + src/content/XBMCMediaContentProvider.java + src/content/XBMCContentProvider.java + src/content/XBMCYTDLContentProvider.java ) foreach(file IN LISTS package_files) configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/xbmc/${file}.in @@ -154,7 +172,6 @@ foreach(target apk obb apk-unsigned apk-obb apk-obb-unsigned apk-noobb apk-clean DEPENDS_PATH=${DEPENDS_PATH} NDKROOT=${NDKROOT} SDKROOT=${SDKROOT} - SDK_PLATFORM=${SDK_PLATFORM} STRIP=${CMAKE_STRIP} AAPT=${AAPT_EXECUTABLE} DX=${DX_EXECUTABLE} diff --git a/cmake/scripts/common/AddonHelpers.cmake b/cmake/scripts/common/AddonHelpers.cmake index c11923e..5470940 100644 --- a/cmake/scripts/common/AddonHelpers.cmake +++ b/cmake/scripts/common/AddonHelpers.cmake @@ -6,15 +6,20 @@ # Sadly we cannot extend the 'package' target, as it is a builtin target, see # http://public.kitware.com/Bug/view.php?id=8438 # Thus, we have to add an 'addon-package' target. -add_custom_target(addon-package - COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target package) +get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(_isMultiConfig) + add_custom_target(addon-package DEPENDS PACKAGE) +else() + add_custom_target(addon-package + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target package) +endif() macro(add_cpack_workaround target version ext) if(NOT PACKAGE_DIR) set(PACKAGE_DIR "${CMAKE_INSTALL_PREFIX}/zips") endif() - add_custom_command(TARGET addon-package PRE_BUILD + add_custom_command(TARGET addon-package POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${PACKAGE_DIR} COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_PACKAGE_DIRECTORY}/addon-${target}-${version}.${ext} ${PACKAGE_DIR}/${target}-${version}.${ext}) endmacro() @@ -194,7 +199,7 @@ macro (build_addon target prefix libs) endif() string(CONFIGURE "${addon_file}" addon_file_conf @ONLY) - file(GENERATE OUTPUT ${PROJECT_SOURCE_DIR}/${target}/addon.xml CONTENT "${addon_file_conf}") + file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${target}/addon.xml CONTENT "${addon_file_conf}") if(${APP_NAME_UC}_BUILD_DIR) file(GENERATE OUTPUT ${${APP_NAME_UC}_BUILD_DIR}/addons/${target}/addon.xml CONTENT "${addon_file_conf}") endif() @@ -207,7 +212,7 @@ macro (build_addon target prefix libs) file(READ ${PROJECT_SOURCE_DIR}/${target}/resources/settings.xml.in settings_file) string(CONFIGURE "${settings_file}" settings_file_conf @ONLY) - file(GENERATE OUTPUT ${PROJECT_SOURCE_DIR}/${target}/resources/settings.xml CONTENT "${settings_file_conf}") + file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${target}/resources/settings.xml CONTENT "${settings_file_conf}") if(${APP_NAME_UC}_BUILD_DIR) file(GENERATE OUTPUT ${${APP_NAME_UC}_BUILD_DIR}/addons/${target}/resources/settings.xml CONTENT "${settings_file_conf}") endif() @@ -230,7 +235,7 @@ macro (build_addon target prefix libs) set(CPACK_COMPONENTS_IGNORE_GROUPS 1) list(APPEND CPACK_COMPONENTS_ALL ${target}-${${prefix}_VERSION}) # Pack files together to create an archive - install(DIRECTORY ${target} DESTINATION ./ + install(DIRECTORY ${target} ${CMAKE_CURRENT_BINARY_DIR}/${target} DESTINATION ./ COMPONENT ${target}-${${prefix}_VERSION} REGEX ".+\\.xml\\.in(clude)?$" EXCLUDE) if(WIN32) @@ -247,21 +252,15 @@ macro (build_addon target prefix libs) endif() endif() - # in case of a VC++ project the installation location contains a $(Configuration) VS variable - # we replace it with ${CMAKE_BUILD_TYPE} (which doesn't cover the case when the build configuration - # is changed within Visual Studio) - string(REPLACE "$(Configuration)" "${CMAKE_BUILD_TYPE}" LIBRARY_LOCATION "${LIBRARY_LOCATION}") - if(${prefix}_SOURCES) # install the generated DLL file install(PROGRAMS ${LIBRARY_LOCATION} DESTINATION ${target} COMPONENT ${target}-${${prefix}_VERSION}) - if(CMAKE_BUILD_TYPE MATCHES Debug) - # for debug builds also install the PDB file - install(FILES $ DESTINATION ${target} - COMPONENT ${target}-${${prefix}_VERSION}) - endif() + # for debug builds also install the PDB file + install(FILES $ DESTINATION ${target} + CONFIGURATIONS Debug RelWithDebInfo + COMPONENT ${target}-${${prefix}_VERSION}) endif() if(${prefix}_CUSTOM_BINARY) install(FILES ${LIBRARY_LOCATION} DESTINATION ${target} RENAME ${LIBRARY_FILENAME}) @@ -325,7 +324,7 @@ macro (build_addon target prefix libs) if (${prefix}_CUSTOM_BINARY) install(FILES ${LIBRARY_LOCATION} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target} RENAME ${LIBRARY_FILENAME}) endif() - install(DIRECTORY ${target} DESTINATION ${CMAKE_INSTALL_DATADIR}/addons + install(DIRECTORY ${target} ${CMAKE_CURRENT_BINARY_DIR}/${target} DESTINATION ${CMAKE_INSTALL_DATADIR}/addons REGEX ".+\\.xml\\.in(clude)?$" EXCLUDE) if(${prefix}_CUSTOM_DATA) install(DIRECTORY ${${prefix}_CUSTOM_DATA} DESTINATION ${CMAKE_INSTALL_DATADIR}/addons/${target}/resources) diff --git a/cmake/scripts/common/ArchSetup.cmake b/cmake/scripts/common/ArchSetup.cmake index 3b81533..c97929e 100644 --- a/cmake/scripts/common/ArchSetup.cmake +++ b/cmake/scripts/common/ArchSetup.cmake @@ -153,6 +153,10 @@ if(NOT DEFINED NEON OR NEON) endif() endif() +if(PLATFORM_DEFINES) + add_options(ALL_LANGUAGES ALL_BUILDS ${PLATFORM_DEFINES}) +endif() + if(CMAKE_BUILD_TYPE STREQUAL "Debug") add_options (ALL_LANGUAGES DEBUG "-g" "-D_DEBUG" "-Wall") endif() diff --git a/cmake/scripts/common/HandleDepends.cmake b/cmake/scripts/common/HandleDepends.cmake index 49e5ac8..fb110d6 100644 --- a/cmake/scripts/common/HandleDepends.cmake +++ b/cmake/scripts/common/HandleDepends.cmake @@ -54,9 +54,6 @@ function(add_addon_depends addon searchpath) if(EXISTS ${dir}/flags.txt) set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${dir}/flags.txt) file(STRINGS ${dir}/flags.txt extraflags) - - # replace some custom placeholders - string(REPLACE "@MINGW_TOOLCHAIN_FILE@" "${OUTPUT_DIR}/Toolchain_mingw32.cmake" extraflags "${extraflags}") string(REPLACE " " ";" extraflags ${extraflags}) message(STATUS "${id} extraflags: ${extraflags}") diff --git a/cmake/scripts/common/Macros.cmake b/cmake/scripts/common/Macros.cmake index d508f87..c21069d 100644 --- a/cmake/scripts/common/Macros.cmake +++ b/cmake/scripts/common/Macros.cmake @@ -338,15 +338,54 @@ macro(export_dep) mark_as_advanced(${depup}_LIBRARIES) endmacro() -# add a required dependency of main application +# split dependency specification to name and version # Arguments: -# dep_list name of find rule for dependency, used uppercased for variable prefix -# also accepts a list of multiple dependencies +# depspec dependency specification that can optionally include a required +# package version +# syntax: [package name], [package name]>=[version] (minimum version), +# or [package name]=[version] (exact version) +# name_outvar variable that should receive the package name +# version_outvar variable that should receive the package version part (>=[version]) # On return: -# dependency added to ${SYSTEM_INCLUDES}, ${DEPLIBS} and ${DEP_DEFINES} +# ${name_outvar} and ${version_outvar} in caller scope are set to respective values. +# ${version_outvar} may be unset if there is no specific version requested. +function(split_dependency_specification depspec name_outvar version_outvar) + if(${depspec} MATCHES "^([^>]*)(>?=[0-9.]+)$") + set(${name_outvar} ${CMAKE_MATCH_1} PARENT_SCOPE) + set(${version_outvar} ${CMAKE_MATCH_2} PARENT_SCOPE) + else() + set(${name_outvar} ${depspec} PARENT_SCOPE) + unset(${version_outvar} PARENT_SCOPE) + endif() +endfunction() + +# helper macro to split version info from req and call find_package +macro(find_package_with_ver package) + set(_find_arguments "${ARGN}") + if("${ARGV1}" MATCHES "^(>)?=([0-9.]+)$") + # We have a version spec, parse it + list(REMOVE_AT _find_arguments 0) + # ">" not present? -> exact match + if(NOT CMAKE_MATCH_1) + list(INSERT _find_arguments 0 "EXACT") + endif() + find_package(${package} ${CMAKE_MATCH_2} ${_find_arguments}) + else() + find_package(${package} ${_find_arguments}) + endif() + unset(_find_arguments) +endmacro() + +# add required 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: +# dependencies added to ${SYSTEM_INCLUDES}, ${DEPLIBS} and ${DEP_DEFINES} function(core_require_dep) - foreach(dep ${ARGN}) - find_package(${dep} REQUIRED) + 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 DEPLIBS ${${depup}_LIBRARIES}) @@ -355,15 +394,16 @@ function(core_require_dep) endforeach() endfunction() -# add a required dyloaded dependency of main application +# add required dyloaded dependencies of main application # Arguments: -# dep_list name of find rule for dependency, used uppercased for variable prefix -# also accepts a list of multiple dependencies +# 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(dep ${ARGN}) - find_package(${dep} REQUIRED) + 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}) @@ -385,20 +425,21 @@ macro(setup_enable_switch) set(${enable_switch} "AUTO" CACHE STRING "Enable ${depup} support?") endmacro() -# add an optional dependency of main application +# add optional dependencies of main application # Arguments: -# dep_list name of find rule for dependency, used uppercased for variable prefix -# also accepts a list of multiple dependencies +# 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}, ${DEPLIBS} and ${DEP_DEFINES} function(core_optional_dep) - foreach(dep ${ARGN}) + foreach(depspec ${ARGN}) set(_required False) + split_dependency_specification(${depspec} dep version) setup_enable_switch() if(${enable_switch} STREQUAL AUTO) - find_package(${dep}) + find_package_with_ver(${dep} ${version}) elseif(${${enable_switch}}) - find_package(${dep} REQUIRED) + find_package_with_ver(${dep} ${version} REQUIRED) set(_required True) endif() @@ -417,20 +458,21 @@ function(core_optional_dep) set(final_message ${final_message} PARENT_SCOPE) endfunction() -# add an optional dyloaded dependency of main application +# add optional dyloaded dependencies of main application # Arguments: -# dep_list name of find rule for dependency, used uppercased for variable prefix -# also accepts a list of multiple dependencies +# 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(dep ${ARGN}) + foreach(depspec ${ARGN}) set(_required False) - setup_enable_switch() + split_dependency_specification(${depspec} dep version) + setup_enable_switch() if(${enable_switch} STREQUAL AUTO) - find_package(${dep}) + find_package_with_ver(${dep} ${version}) elseif(${${enable_switch}}) - find_package(${dep} REQUIRED) + find_package_with_ver(${dep} ${version} REQUIRED) set(_required True) endif() @@ -592,6 +634,7 @@ function(core_find_git_rev stamp) else() find_package(Git) if(GIT_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/.git) + # get tree status i.e. clean working tree vs dirty (uncommited or unstashed changes, etc.) execute_process(COMMAND ${GIT_EXECUTABLE} update-index --ignore-submodules -q --refresh WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) execute_process(COMMAND ${GIT_EXECUTABLE} diff-files --ignore-submodules --quiet -- @@ -602,21 +645,21 @@ function(core_find_git_rev stamp) RESULT_VARIABLE status_code WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) endif() + # get HEAD commit SHA-1 + execute_process(COMMAND ${GIT_EXECUTABLE} log -n 1 --pretty=format:"%h" HEAD + OUTPUT_VARIABLE HASH + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) + string(REPLACE "\"" "" HASH ${HASH}) + if(status_code) - execute_process(COMMAND ${GIT_EXECUTABLE} log -n 1 --pretty=format:"%h-dirty" HEAD - OUTPUT_VARIABLE HASH - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) - string(SUBSTRING ${HASH} 1 13 HASH) - else() - execute_process(COMMAND ${GIT_EXECUTABLE} log -n 1 --pretty=format:"%h" HEAD - OUTPUT_VARIABLE HASH - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) - string(SUBSTRING ${HASH} 1 7 HASH) + string(CONCAT HASH ${HASH} "-dirty") endif() + + # get HEAD commit date execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:"%cd" --date=short HEAD OUTPUT_VARIABLE DATE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) - string(SUBSTRING ${DATE} 1 10 DATE) + string(REPLACE "\"" "" DATE ${DATE}) string(REPLACE "-" "" DATE ${DATE}) else() string(TIMESTAMP DATE "%Y%m%d" UTC) diff --git a/cmake/scripts/common/Uninstall.cmake b/cmake/scripts/common/Uninstall.cmake index 5660e19..5753857 100644 --- a/cmake/scripts/common/Uninstall.cmake +++ b/cmake/scripts/common/Uninstall.cmake @@ -1,9 +1,40 @@ +macro(remove_empty_dirs) + list(REMOVE_DUPLICATES DIRECTORIES) + unset(PDIRECTORIES) + foreach(dir IN LISTS DIRECTORIES) + if(EXISTS $ENV{DESTDIR}${dir}) + file(GLOB _res $ENV{DESTDIR}${dir}/*) + list(LENGTH _res _len) + if(_len EQUAL 0 AND EXISTS $ENV{DESTDIR}${dir}) + message(STATUS "Removing empty dir: ${dir}") + execute_process( + COMMAND ${CMAKE_COMMAND} -E remove_directory $ENV{DESTDIR}${dir} + OUTPUT_VARIABLE rm_out + RESULT_VARIABLE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Failed to remove directory: $ENV{DESTDIR}${dir}") + endif() + get_filename_component(_pdir $ENV{DESTDIR}${dir} DIRECTORY) + list(APPEND PDIRECTORIES ${_pdir}) + endif() + endif() + endforeach() + list(LENGTH PDIRECTORIES _plen) + if(_plen GREATER 0) + set(DIRECTORIES ${PDIRECTORIES}) + remove_empty_dirs() + endif() +endmacro() + # Uninstall target set(MANIFEST ${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt) if(EXISTS ${MANIFEST}) file(STRINGS ${MANIFEST} files) foreach(file IN LISTS files) if(EXISTS $ENV{DESTDIR}${file}) + get_filename_component(_dir $ENV{DESTDIR}${file} DIRECTORY) + list(APPEND DIRECTORIES $ENV{DESTDIR}${_dir}) message(STATUS "Uninstalling: ${file}") execute_process( COMMAND ${CMAKE_COMMAND} -E remove $ENV{DESTDIR}${file} @@ -17,6 +48,11 @@ if(EXISTS ${MANIFEST}) message(STATUS "File does not exist: $ENV{DESTDIR}${file}") endif() endforeach(file) + + # delete empty dirs + if(DIRECTORIES) + remove_empty_dirs() + endif() else() message(STATUS "Cannot find install manifest: '${MANIFEST}'") endif() diff --git a/cmake/scripts/freebsd/ArchSetup.cmake b/cmake/scripts/freebsd/ArchSetup.cmake index 8ee78fc..db11bf8 100644 --- a/cmake/scripts/freebsd/ArchSetup.cmake +++ b/cmake/scripts/freebsd/ArchSetup.cmake @@ -15,5 +15,10 @@ else() endif() endif() +# Disable ALSA by default +if(NOT ENABLE_ALSA) + option(ENABLE_ALSA "Enable alsa support?" OFF) +endif() + # Additional SYSTEM_DEFINES list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK) diff --git a/cmake/scripts/ios/ArchSetup.cmake b/cmake/scripts/ios/ArchSetup.cmake index 0808eb2..bec8a7c 100644 --- a/cmake/scripts/ios/ArchSetup.cmake +++ b/cmake/scripts/ios/ArchSetup.cmake @@ -39,7 +39,7 @@ list(APPEND DEPLIBS "-framework CoreFoundation" "-framework CoreVideo" set(ENABLE_DVDCSS OFF CACHE BOOL "" FORCE) set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE) -set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "6.0") +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) diff --git a/cmake/scripts/linux/ArchSetup.cmake b/cmake/scripts/linux/ArchSetup.cmake index ee69c09..fcee675 100644 --- a/cmake/scripts/linux/ArchSetup.cmake +++ b/cmake/scripts/linux/ArchSetup.cmake @@ -1,8 +1,5 @@ -set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_LINUX) -# temp until further cleanup is done -if(CORE_PLATFORM_NAME_LC STREQUAL rbpi) - list(APPEND ARCH_DEFINES -D_ARMEL -DTARGET_RASPBERRY_PI) -endif() +# 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(PLATFORM_DIR platform/linux) @@ -21,14 +18,17 @@ else() set(ARCH arm) set(NEON False) set(NEON_FLAGS "-mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfloat-abi=hard -mfpu=vfp") - elseif(CPU MATCHES "cortex-a7" OR CPU MATCHES "cortex-a53") + elseif(CPU MATCHES "cortex-a7") set(ARCH arm) set(NEON True) - set(NEON_FLAGS "-fPIC -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 -mvectorize-with-neon-quad") + set(NEON_FLAGS "-fPIC -mcpu=cortex-a7") + elseif(CPU MATCHES "cortex-a53") + set(ARCH arm) + set(NEON True) + set(NEON_FLAGS "-fPIC -mcpu=cortex-a53") elseif(CPU MATCHES arm) set(ARCH arm) set(NEON True) - set(NEON_FLAGS "-mfpu=neon -mvectorize-with-neon-quad") elseif(CPU MATCHES aarch64 OR CPU MATCHES arm64) set(ARCH aarch64) set(NEON True) @@ -37,6 +37,16 @@ else() endif() endif() +# temp until further cleanup is done +# add Raspberry Pi 2 and 3 specific flags +if(CORE_PLATFORM_NAME_LC STREQUAL rbpi) + if(CPU MATCHES "cortex-a7") + set(NEON_FLAGS "-fPIC -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 -mvectorize-with-neon-quad") + elseif(CPU MATCHES "cortex-a53") + set(NEON_FLAGS "-fPIC -mcpu=cortex-a53 -mfloat-abi=hard -mfpu=neon-fp-armv8 -mvectorize-with-neon-quad") + endif() +endif() + if((CMAKE_BUILD_TYPE STREQUAL Release OR CMAKE_BUILD_TYPE STREQUAL MinSizeRel) AND CMAKE_COMPILER_IS_GNUCXX) # Make sure we strip binaries in Release build @@ -84,7 +94,7 @@ set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE") check_symbol_exists("mkostemp" "stdlib.h" HAVE_MKOSTEMP) set(CMAKE_REQUIRED_DEFINITIONS "") if(HAVE_MKOSTEMP) - list(APPEND ARCH_DEFINES "-DHAVE_MKOSTEMP=1" "-D_GNU_SOURCE") + list(APPEND ARCH_DEFINES "-DHAVE_MKOSTEMP=1") endif() # Additional SYSTEM_DEFINES diff --git a/cmake/scripts/linux/ExtraTargets.cmake b/cmake/scripts/linux/ExtraTargets.cmake index 4753f73..37d196a 100644 --- a/cmake/scripts/linux/ExtraTargets.cmake +++ b/cmake/scripts/linux/ExtraTargets.cmake @@ -17,7 +17,9 @@ endif() if(CORE_PLATFORM_NAME_LC STREQUAL "wayland") # This cannot go into wayland.cmake since it requires the Wayland dependencies # to already be resolved - set(PROTOCOL_XMLS "${WAYLAND_PROTOCOLS_DIR}/unstable/xdg-shell/xdg-shell-unstable-v6.xml" + set(PROTOCOL_XMLS "${WAYLANDPP_PROTOCOLS_DIR}/presentation-time.xml" + "${WAYLANDPP_PROTOCOLS_DIR}/xdg-shell.xml" + "${WAYLAND_PROTOCOLS_DIR}/unstable/xdg-shell/xdg-shell-unstable-v6.xml" "${WAYLAND_PROTOCOLS_DIR}/unstable/idle-inhibit/idle-inhibit-unstable-v1.xml") add_custom_command(OUTPUT "${WAYLAND_EXTRA_PROTOCOL_GENERATED_DIR}/wayland-extra-protocols.hpp" "${WAYLAND_EXTRA_PROTOCOL_GENERATED_DIR}/wayland-extra-protocols.cpp" COMMAND "${WAYLANDPP_SCANNER}" ${PROTOCOL_XMLS} "${WAYLAND_EXTRA_PROTOCOL_GENERATED_DIR}/wayland-extra-protocols.hpp" "${WAYLAND_EXTRA_PROTOCOL_GENERATED_DIR}/wayland-extra-protocols.cpp" @@ -26,4 +28,4 @@ if(CORE_PLATFORM_NAME_LC STREQUAL "wayland") # Dummy target for dependencies add_custom_target(generate-wayland-extra-protocols DEPENDS wayland-extra-protocols.hpp) -endif() \ No newline at end of file +endif() diff --git a/cmake/scripts/windows/ArchSetup.cmake b/cmake/scripts/windows/ArchSetup.cmake index 8e4f61d..b3963a6 100644 --- a/cmake/scripts/windows/ArchSetup.cmake +++ b/cmake/scripts/windows/ArchSetup.cmake @@ -1,3 +1,12 @@ +# Minimum SDK version we support +set(VS_MINIMUM_SDK_VERSION 10.0.14393.0) + +if(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION VERSION_LESS VS_MINIMUM_SDK_VERSION) + message(FATAL_ERROR "Detected Windows SDK version is ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}.\n" + "Windows SDK ${VS_MINIMUM_SDK_VERSION} or higher is required.\n" + "INFO: Windows SDKs can be installed from the Visual Studio installer.") +endif() + # -------- Architecture settings --------- if(CMAKE_SIZEOF_VOID_P EQUAL 4) @@ -12,6 +21,7 @@ endif() # -------- Paths (mainly for find_package) --------- set(PLATFORM_DIR platform/win32) +set(APP_RENDER_SYSTEM dx11) set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/win32/WinMain.cpp) @@ -31,7 +41,7 @@ set(PYTHON_INCLUDE_DIR ${DEPENDENCIES_DIR}/include/python) add_options(CXX ALL_BUILDS "/wd\"4996\"") set(ARCH_DEFINES -D_WINDOWS -DTARGET_WINDOWS -DTARGET_WINDOWS_DESKTOP -D__SSE__ -D__SSE2__) -set(SYSTEM_DEFINES -DNOMINMAX -DHAS_DX -D__STDC_CONSTANT_MACROS +set(SYSTEM_DEFINES -DWIN32_LEAN_AND_MEAN -DNOMINMAX -DHAS_DX -D__STDC_CONSTANT_MACROS -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" @@ -43,7 +53,7 @@ if(${ARCH} STREQUAL win32) endif() # Additional SYSTEM_DEFINES -list(APPEND SYSTEM_DEFINES -DHAS_IRSERVERSUITE -DHAS_WIN32_NETWORK -DHAS_FILESYSTEM_SMB) +list(APPEND SYSTEM_DEFINES -DHAS_WIN32_NETWORK -DHAS_FILESYSTEM_SMB) # Make sure /FS is set for Visual Studio in order to prevent simultaneous access to pdb files. if(CMAKE_GENERATOR MATCHES "Visual Studio") diff --git a/cmake/scripts/windows/tools/patch.cmake b/cmake/scripts/windows/tools/patch.cmake index 0a342fa..b955b4c 100644 --- a/cmake/scripts/windows/tools/patch.cmake +++ b/cmake/scripts/windows/tools/patch.cmake @@ -2,7 +2,7 @@ find_program(PATCH_FOUND NAMES patch patch.exe) if(PATCH_FOUND) message(STATUS "patch utility found at ${PATCH_FOUND}") else() - set(PATCH_ARCHIVE_NAME "patch-2.5.9-7-bin-3") + set(PATCH_ARCHIVE_NAME "patch-2.7.6-bin") set(PATCH_ARCHIVE "${PATCH_ARCHIVE_NAME}.zip") set(PATCH_URL "${KODI_MIRROR}/build-deps/win32/${PATCH_ARCHIVE}") set(PATCH_DOWNLOAD ${BUILD_DIR}/download/${PATCH_ARCHIVE}) @@ -28,6 +28,11 @@ else() # copy patch.exe into the output directory file(INSTALL ${PATCH_BINARY_PATH} DESTINATION ${ADDON_DEPENDS_PATH}/bin) + # copy patch depends + file(GLOB PATCH_BINARIES ${PATCH_PATH}/bin/*.dll) + if(NOT "${PATCH_BINARIES}" STREQUAL "") + file(INSTALL ${PATCH_BINARIES} DESTINATION ${ADDON_DEPENDS_PATH}/bin) + endif() # make sure that cmake can find the copied patch.exe find_program(PATCH_FOUND NAMES patch patch.exe) diff --git a/cmake/scripts/windowsstore/ArchSetup.cmake b/cmake/scripts/windowsstore/ArchSetup.cmake index 6c6622c..a663bb9 100644 --- a/cmake/scripts/windowsstore/ArchSetup.cmake +++ b/cmake/scripts/windowsstore/ArchSetup.cmake @@ -1,3 +1,12 @@ +# Minimum SDK version we support +set(VS_MINIMUM_SDK_VERSION 10.0.14393.0) + +if(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION VERSION_LESS VS_MINIMUM_SDK_VERSION) + message(FATAL_ERROR "Detected Windows SDK version is ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}.\n" + "Windows SDK ${VS_MINIMUM_SDK_VERSION} or higher is required.\n" + "INFO: Windows SDKs can be installed from the Visual Studio installer.") +endif() + # -------- Architecture settings --------- check_symbol_exists(_X86_ "Windows.h" _X86_) @@ -24,6 +33,7 @@ unset(_ARM_) # -------- Paths (mainly for find_package) --------- set(PLATFORM_DIR platform/win32) +set(APP_RENDER_SYSTEM dx11) set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/win10/main.cpp) # Precompiled headers fail with per target output directory. (needs CMake 3.1) @@ -57,7 +67,7 @@ set(ARCH_DEFINES -D_WINDOWS -DTARGET_WINDOWS -DTARGET_WINDOWS_STORE -DXBMC_EXPOR if(NOT SDK_TARGET_ARCH STREQUAL arm) list(APPEND ARCH_DEFINES -D__SSE__ -D__SSE2__) endif() -set(SYSTEM_DEFINES -DNOMINMAX -DHAS_DX -D__STDC_CONSTANT_MACROS +set(SYSTEM_DEFINES -DWIN32_LEAN_AND_MEAN -DNOMINMAX -DHAS_DX -D__STDC_CONSTANT_MACROS -DFMT_HEADER_ONLY -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" @@ -65,7 +75,7 @@ set(SYSTEM_DEFINES -DNOMINMAX -DHAS_DX -D__STDC_CONSTANT_MACROS $<$:-DD3D_DEBUG_INFO>) # Additional SYSTEM_DEFINES -list(APPEND SYSTEM_DEFINES -DHAS_IRSERVERSUITE -DHAS_WIN10_NETWORK) +list(APPEND SYSTEM_DEFINES -DHAS_WIN10_NETWORK) # The /MP option enables /FS by default. set(CMAKE_CXX_FLAGS "/MP ${CMAKE_CXX_FLAGS} /ZW /EHsc /await") diff --git a/cmake/scripts/windowsstore/Macros.cmake b/cmake/scripts/windowsstore/Macros.cmake index 6e7d1d0..7240138 100644 --- a/cmake/scripts/windowsstore/Macros.cmake +++ b/cmake/scripts/windowsstore/Macros.cmake @@ -128,7 +128,8 @@ macro(winstore_append_props target) endforeach(_dll DEBUG_DLLS) add_deployment_content_group($(BuildRootPath)/dlls "" *.dll "${DEBUG_DLLS_EXCLUDE}") - add_deployment_content_group($(BuildRootPath)/system system **/* "$(BuildRootPath)/**/*.glsl") + add_deployment_content_group($(BuildRootPath)/system system **/* "$(BuildRootPath)/**/shaders/**") + add_deployment_content_group($(BuildRootPath)/system/shaders system/shaders **/*.fx "") add_deployment_content_group($(BuildRootPath)/media media **/* "") add_deployment_content_group($(BuildRootPath)/userdata userdata **/* "") add_deployment_content_group($(BuildRootPath)/addons addons **/* "") diff --git a/cmake/scripts/windowsstore/tools/patch.cmake b/cmake/scripts/windowsstore/tools/patch.cmake index 0a342fa..b955b4c 100644 --- a/cmake/scripts/windowsstore/tools/patch.cmake +++ b/cmake/scripts/windowsstore/tools/patch.cmake @@ -2,7 +2,7 @@ find_program(PATCH_FOUND NAMES patch patch.exe) if(PATCH_FOUND) message(STATUS "patch utility found at ${PATCH_FOUND}") else() - set(PATCH_ARCHIVE_NAME "patch-2.5.9-7-bin-3") + set(PATCH_ARCHIVE_NAME "patch-2.7.6-bin") set(PATCH_ARCHIVE "${PATCH_ARCHIVE_NAME}.zip") set(PATCH_URL "${KODI_MIRROR}/build-deps/win32/${PATCH_ARCHIVE}") set(PATCH_DOWNLOAD ${BUILD_DIR}/download/${PATCH_ARCHIVE}) @@ -28,6 +28,11 @@ else() # copy patch.exe into the output directory file(INSTALL ${PATCH_BINARY_PATH} DESTINATION ${ADDON_DEPENDS_PATH}/bin) + # copy patch depends + file(GLOB PATCH_BINARIES ${PATCH_PATH}/bin/*.dll) + if(NOT "${PATCH_BINARIES}" STREQUAL "") + file(INSTALL ${PATCH_BINARIES} DESTINATION ${ADDON_DEPENDS_PATH}/bin) + endif() # make sure that cmake can find the copied patch.exe find_program(PATCH_FOUND NAMES patch patch.exe) -- cgit v1.2.3