summaryrefslogtreecommitdiffstats
path: root/project/cmake/scripts
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2017-06-04 16:57:49 +0200
committermanuel <manuel@mausz.at>2017-06-04 16:57:49 +0200
commitf44ecaa4f27e7538ddcad66d40e543bffa2d2d86 (patch)
treed8de60fc7e17edeb6f0921726c038ee54b281445 /project/cmake/scripts
parentae08c8b7221bc965ac40d70e53fc8fcddb050c46 (diff)
downloadkodi-pvr-build-f44ecaa4f27e7538ddcad66d40e543bffa2d2d86.tar.gz
kodi-pvr-build-f44ecaa4f27e7538ddcad66d40e543bffa2d2d86.tar.bz2
kodi-pvr-build-f44ecaa4f27e7538ddcad66d40e543bffa2d2d86.zip
sync with upstream
Diffstat (limited to 'project/cmake/scripts')
-rw-r--r--project/cmake/scripts/android/ArchSetup.cmake35
-rw-r--r--project/cmake/scripts/android/Install.cmake122
l---------project/cmake/scripts/android/Macros.cmake1
-rw-r--r--project/cmake/scripts/android/PathSetup.cmake33
-rw-r--r--project/cmake/scripts/common/AddOptions.cmake78
-rw-r--r--project/cmake/scripts/common/AddonHelpers.cmake268
-rw-r--r--project/cmake/scripts/common/ArchSetup.cmake155
-rw-r--r--project/cmake/scripts/common/CMakeHelpers.cmake54
-rw-r--r--project/cmake/scripts/common/CheckCommits.cmake75
-rw-r--r--project/cmake/scripts/common/CheckTargetPlatform.cmake67
-rw-r--r--project/cmake/scripts/common/GenerateVersionedFiles.cmake18
-rw-r--r--project/cmake/scripts/common/GeneratorSetup.cmake49
-rw-r--r--project/cmake/scripts/common/HandleDepends.cmake252
-rw-r--r--project/cmake/scripts/common/Macros.cmake622
-rw-r--r--project/cmake/scripts/common/PrepareEnv.cmake64
-rw-r--r--project/cmake/scripts/common/ProjectMacros.cmake89
-rw-r--r--project/cmake/scripts/common/Uninstall.cmake22
-rw-r--r--project/cmake/scripts/freebsd/ArchSetup.cmake16
l---------project/cmake/scripts/freebsd/Install.cmake1
l---------project/cmake/scripts/freebsd/Macros.cmake1
l---------project/cmake/scripts/freebsd/PathSetup.cmake1
-rw-r--r--project/cmake/scripts/ios/ArchSetup.cmake57
-rw-r--r--project/cmake/scripts/ios/Install.cmake85
l---------project/cmake/scripts/ios/Macros.cmake1
l---------project/cmake/scripts/ios/PathSetup.cmake1
-rw-r--r--project/cmake/scripts/linux/ArchSetup.cmake45
-rw-r--r--project/cmake/scripts/linux/CodeCoverage.cmake97
-rw-r--r--project/cmake/scripts/linux/ExtraTargets.cmake12
-rw-r--r--project/cmake/scripts/linux/Install.cmake367
-rw-r--r--project/cmake/scripts/linux/Macros.cmake95
-rw-r--r--project/cmake/scripts/linux/PathSetup.cmake39
-rw-r--r--project/cmake/scripts/osx/ArchSetup.cmake34
-rw-r--r--project/cmake/scripts/osx/ExtraTargets.cmake3
-rw-r--r--project/cmake/scripts/osx/Install.cmake40
-rw-r--r--project/cmake/scripts/osx/Macros.cmake118
-rw-r--r--project/cmake/scripts/osx/PathSetup.cmake32
-rw-r--r--project/cmake/scripts/rbpi/ArchSetup.cmake28
l---------project/cmake/scripts/rbpi/Install.cmake1
l---------project/cmake/scripts/rbpi/Macros.cmake1
l---------project/cmake/scripts/rbpi/PathSetup.cmake1
-rw-r--r--project/cmake/scripts/windows/ArchSetup.cmake89
-rw-r--r--project/cmake/scripts/windows/CFlagOverrides.cmake5
-rw-r--r--project/cmake/scripts/windows/CXXFlagOverrides.cmake5
-rw-r--r--project/cmake/scripts/windows/Install.cmake0
-rw-r--r--project/cmake/scripts/windows/Macros.cmake66
-rw-r--r--project/cmake/scripts/windows/PathSetup.cmake34
-rw-r--r--project/cmake/scripts/windows/tools/patch.cmake37
47 files changed, 0 insertions, 3316 deletions
diff --git a/project/cmake/scripts/android/ArchSetup.cmake b/project/cmake/scripts/android/ArchSetup.cmake
deleted file mode 100644
index 281f94f..0000000
--- a/project/cmake/scripts/android/ArchSetup.cmake
+++ /dev/null
@@ -1,35 +0,0 @@
1if(NOT CMAKE_TOOLCHAIN_FILE)
2 message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for android. See ${PROJECT_SOURCE_DIR}/README.md")
3elseif(NOT SDK_PLATFORM)
4 message(FATAL_ERROR "Toolchain did not define SDK_PLATFORM. Possibly outdated depends.")
5endif()
6
7set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_LINUX -D_LINUX -DTARGET_ANDROID)
8set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_FILE_DEFINED
9 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64)
10set(PLATFORM_DIR linux)
11if(WITH_ARCH)
12 set(ARCH ${WITH_ARCH})
13else()
14 if(CPU STREQUAL armeabi-v7a)
15 set(ARCH arm)
16 set(NEON True)
17 elseif(CPU STREQUAL arm64-v8a)
18 set(ARCH aarch64)
19 elseif(CPU STREQUAL i686)
20 set(ARCH i486-linux)
21 set(NEON False)
22 else()
23 message(SEND_ERROR "Unknown CPU: ${CPU}")
24 endif()
25endif()
26
27set(FFMPEG_OPTS --enable-cross-compile --cpu=cortex-a9 --arch=arm --target-os=linux --enable-neon
28 --disable-vdpau --cc=${CMAKE_C_COMPILER} --host-cc=${CMAKE_C_COMPILER}
29 --strip=${CMAKE_STRIP})
30set(ENABLE_SDL OFF CACHE BOOL "" FORCE)
31set(ENABLE_X11 OFF CACHE BOOL "" FORCE)
32set(ENABLE_AML OFF CACHE BOOL "" FORCE)
33set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE)
34
35list(APPEND DEPLIBS android log jnigraphics)
diff --git a/project/cmake/scripts/android/Install.cmake b/project/cmake/scripts/android/Install.cmake
deleted file mode 100644
index 025f194..0000000
--- a/project/cmake/scripts/android/Install.cmake
+++ /dev/null
@@ -1,122 +0,0 @@
1# Android packaging
2
3find_program(AAPT_EXECUTABLE aapt PATHS ${SDK_BUILDTOOLS_PATH})
4if(NOT AAPT_EXECUTABLE)
5 message(FATAL_ERROR "Could NOT find aapt executable")
6endif()
7find_program(DX_EXECUTABLE dx PATHS ${SDK_BUILDTOOLS_PATH})
8if(NOT DX_EXECUTABLE)
9 message(FATAL_ERROR "Could NOT find dx executable")
10endif()
11find_program(ZIPALIGN_EXECUTABLE zipalign PATHS ${SDK_BUILDTOOLS_PATH})
12if(NOT ZIPALIGN_EXECUTABLE)
13 message(FATAL_ERROR "Could NOT find zipalign executable")
14endif()
15
16# Configure files into packaging environment.
17configure_file(${CORE_SOURCE_DIR}/tools/android/packaging/Makefile.in
18 ${CMAKE_BINARY_DIR}/tools/android/packaging/Makefile @ONLY)
19configure_file(${CORE_SOURCE_DIR}/tools/android/packaging/apksign
20 ${CMAKE_BINARY_DIR}/tools/android/packaging/apksign COPYONLY)
21configure_file(${CORE_SOURCE_DIR}/tools/android/packaging/make_symbols.sh
22 ${CMAKE_BINARY_DIR}/tools/android/packaging/make_symbols.sh COPYONLY)
23file(WRITE ${CMAKE_BINARY_DIR}/tools/depends/Makefile.include
24 "$(PREFIX)/lib/${APP_NAME_LC}/lib${APP_NAME_LC}.so: ;\n")
25
26set(package_files strings.xml
27 activity_main.xml
28 AndroidManifest.xml
29 src/org/xbmc/kodi/XBMCOnAudioFocusChangeListener.java
30 src/org/xbmc/kodi/XBMCInputDeviceListener.java
31 src/org/xbmc/kodi/Main.java
32 src/org/xbmc/kodi/XBMCSettingsContentObserver.java
33 src/org/xbmc/kodi/XBMCOnFrameAvailableListener.java
34 src/org/xbmc/kodi/XBMCVideoView.java
35 src/org/xbmc/kodi/Splash.java
36 src/org/xbmc/kodi/XBMCBroadcastReceiver.java)
37foreach(file IN LISTS package_files)
38 configure_file(${CORE_SOURCE_DIR}/tools/android/packaging/xbmc/${file}.in
39 ${CMAKE_BINARY_DIR}/tools/android/packaging/xbmc/${file} @ONLY)
40endforeach()
41
42# Copy files to the location expected by the Android packaging scripts.
43add_custom_target(bundle
44 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CORE_SOURCE_DIR}/tools/android/packaging/media
45 ${CMAKE_BINARY_DIR}/tools/android/packaging/media
46 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CORE_SOURCE_DIR}/tools/android/packaging/xbmc/res
47 ${CMAKE_BINARY_DIR}/tools/android/packaging/xbmc/res
48 COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/lib/python2.7 ${libdir}/python2.7
49 COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/share/${APP_NAME_LC} ${datadir}/${APP_NAME_LC}
50 COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${APP_NAME_LC}>
51 ${libdir}/${APP_NAME_LC}/$<TARGET_FILE_NAME:${APP_NAME_LC}>)
52add_dependencies(bundle ${APP_NAME_LC})
53
54# This function is used to prepare a prefix expected by the Android packaging
55# scripts. It creates a bundle_files command that is added to the bundle target.
56function(add_bundle_file file destination relative)
57 if(NOT TARGET bundle_files)
58 file(REMOVE ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/BundleFiles.cmake)
59 add_custom_target(bundle_files COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/BundleFiles.cmake)
60 add_dependencies(bundle bundle_files)
61 endif()
62
63 string(REPLACE "${relative}/" "" outfile ${file})
64 get_filename_component(file ${file} REALPATH)
65 get_filename_component(outdir ${outfile} DIRECTORY)
66 file(APPEND ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/BundleFiles.cmake
67 "file(COPY \"${file}\" DESTINATION \"${destination}/${outdir}\")\n")
68 if(file MATCHES "\\.so\\..+$")
69 get_filename_component(srcfile "${file}" NAME)
70 string(REGEX REPLACE "\\.so\\..+$" "\.so" destfile ${srcfile})
71 file(APPEND ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/BundleFiles.cmake
72 "file(RENAME \"${destination}/${outdir}/${srcfile}\" \"${destination}/${outdir}/${destfile}\")\n")
73 endif()
74endfunction()
75
76# Copy files into prefix
77foreach(file IN LISTS XBT_FILES install_data)
78 string(REPLACE "${CMAKE_BINARY_DIR}/" "" file ${file})
79 add_bundle_file(${CMAKE_BINARY_DIR}/${file} ${datarootdir}/${APP_NAME_LC} ${CMAKE_BINARY_DIR})
80endforeach()
81
82foreach(library IN LISTS LIBRARY_FILES)
83 add_bundle_file(${library} ${libdir}/${APP_NAME_LC} ${CMAKE_BINARY_DIR})
84endforeach()
85
86foreach(lib IN LISTS required_dyload dyload_optional ITEMS Shairplay)
87 string(TOUPPER ${lib} lib_up)
88 set(lib_so ${${lib_up}_SONAME})
89 if(lib_so AND EXISTS ${DEPENDS_PATH}/lib/${lib_so})
90 add_bundle_file(${DEPENDS_PATH}/lib/${lib_so} ${libdir} "")
91 endif()
92endforeach()
93add_bundle_file(${SMBCLIENT_LIBRARY} ${libdir} "")
94
95# Main targets from Makefile.in
96if(CPU MATCHES i686)
97 set(CPU x86)
98 set(ARCH x86)
99endif()
100foreach(target apk obb apk-unsigned apk-obb apk-obb-unsigned apk-noobb apk-clean apk-sign)
101 add_custom_target(${target}
102 COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} ${CMAKE_MAKE_PROGRAM}
103 -C ${CMAKE_BINARY_DIR}/tools/android/packaging
104 CORE_SOURCE_DIR=${CORE_SOURCE_DIR}
105 CC=${CMAKE_C_COMPILER}
106 CPU=${CPU}
107 ARCH=${ARCH}
108 PREFIX=${prefix}
109 NDKROOT=${NDKROOT}
110 SDKROOT=${SDKROOT}
111 SDK_PLATFORM=${SDK_PLATFORM}
112 STRIP=${CMAKE_STRIP}
113 AAPT=${AAPT_EXECUTABLE}
114 DX=${DX_EXECUTABLE}
115 ZIPALIGN=${ZIPALIGN_EXECUTABLE}
116 ${target}
117 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tools/android/packaging
118 )
119 if(NOT target STREQUAL apk-clean)
120 add_dependencies(${target} bundle)
121 endif()
122endforeach()
diff --git a/project/cmake/scripts/android/Macros.cmake b/project/cmake/scripts/android/Macros.cmake
deleted file mode 120000
index 2fdbb25..0000000
--- a/project/cmake/scripts/android/Macros.cmake
+++ /dev/null
@@ -1 +0,0 @@
1../linux/Macros.cmake \ No newline at end of file
diff --git a/project/cmake/scripts/android/PathSetup.cmake b/project/cmake/scripts/android/PathSetup.cmake
deleted file mode 100644
index 69de883..0000000
--- a/project/cmake/scripts/android/PathSetup.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
1if(NOT prefix)
2 set(prefix ${CMAKE_BINARY_DIR}/install)
3endif()
4set(CMAKE_INSTALL_PREFIX ${prefix})
5if(NOT exec_prefix)
6 set(exec_prefix ${prefix})
7endif()
8if(NOT libdir)
9 set(libdir ${prefix}/lib)
10endif()
11if(NOT bindir)
12 set(bindir ${prefix}/bin)
13endif()
14if(NOT includedir)
15 set(includedir ${prefix}/include)
16endif()
17if(NOT datarootdir)
18 set(datarootdir ${prefix}/share)
19endif()
20if(NOT datadir)
21 set(datadir ${datarootdir})
22endif()
23
24list(APPEND final_message "-- PATH config --")
25list(APPEND final_message "Prefix: ${prefix}")
26list(APPEND final_message "Libdir: ${libdir}")
27list(APPEND final_message "Bindir: ${bindir}")
28list(APPEND final_message "Includedir: ${includedir}")
29list(APPEND final_message "Datarootdir: ${datarootdir}")
30list(APPEND final_message "Datadir: ${datadir}")
31
32set(PATH_DEFINES -DBIN_INSTALL_PATH=\"${libdir}/kodi\"
33 -DINSTALL_PATH=\"${datarootdir}/kodi\")
diff --git a/project/cmake/scripts/common/AddOptions.cmake b/project/cmake/scripts/common/AddOptions.cmake
deleted file mode 100644
index 96837c1..0000000
--- a/project/cmake/scripts/common/AddOptions.cmake
+++ /dev/null
@@ -1,78 +0,0 @@
1# - Add options without repeating them on the command line
2#
3# Synopsis:
4#
5# add_options (lang build opts)
6#
7# where:
8#
9# lang Name of the language whose compiler should receive the
10# options, e.g. CXX. If a comma-separated list is received
11# then the option is added for all those languages. Use the
12# special value ALL_LANGUAGES for these languages: CXX, C
13# and Fortran
14#
15# build Kind of build to which this options should apply,
16# such as DEBUG and RELEASE. This can also be a comma-
17# separated list. Use the special value ALL_BUILDS to apply
18# to all builds.
19#
20# opts List of options to add. Each should be quoted.
21#
22# Example:
23#
24# add_options (CXX RELEASE "-O3" "-DNDEBUG" "-Wall")
25
26function(add_options langs builds)
27 # special handling of empty language specification
28 if("${langs}" STREQUAL "ALL_LANGUAGES")
29 set(langs CXX C Fortran)
30 endif()
31 foreach(lang IN LISTS langs)
32 # prepend underscore if necessary
33 foreach(build IN LISTS builds)
34 if(NOT ("${build}" STREQUAL "ALL_BUILDS"))
35 set(_bld "_${build}")
36 string(TOUPPER "${_bld}" _bld)
37 else()
38 set(_bld "")
39 endif()
40 foreach(_opt IN LISTS ARGN)
41 set(_var "CMAKE_${lang}_FLAGS${_bld}")
42 #message(STATUS "Adding \"${_opt}\" to \${${_var}}")
43 # remove it first
44 string(REPLACE "${_opt}" "" _without "${${_var}}")
45 string(STRIP "${_without}" _without)
46 # we need to strip this one as well, so they are comparable
47 string(STRIP "${${_var}}" _stripped)
48 # if it wasn't there, then add it at the end
49 if("${_without}" STREQUAL "${_stripped}")
50 # don't add any extra spaces if no options yet are set
51 if(NOT ${_stripped} STREQUAL "")
52 set(${_var} "${_stripped} ${_opt}")
53 else()
54 set(${_var} "${_opt}")
55 endif()
56 set(${_var} "${${_var}}" PARENT_SCOPE)
57 endif()
58 endforeach()
59 endforeach()
60 endforeach()
61endfunction()
62
63# set varname to flag unless user has specified something that matches regex
64function(set_default_option varname flag regex)
65 if(NOT "$ENV{CXXFLAGS}" MATCHES "${regex}"
66 AND NOT "${CMAKE_CXX_FLAGS}" MATCHES "${regex}"
67 AND NOT "${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}}" MATCHES "${regex}")
68 set(${varname} ${flag} PARENT_SCOPE)
69 else()
70 set(${varname} PARENT_SCOPE)
71 endif()
72endfunction()
73
74# note: this must be called before project()
75macro(no_default_options)
76 # prevent the platform probe to set options
77 set(CMAKE_NOT_USING_CONFIG_FLAGS TRUE)
78endmacro()
diff --git a/project/cmake/scripts/common/AddonHelpers.cmake b/project/cmake/scripts/common/AddonHelpers.cmake
deleted file mode 100644
index 6680ed1..0000000
--- a/project/cmake/scripts/common/AddonHelpers.cmake
+++ /dev/null
@@ -1,268 +0,0 @@
1# Workaround for the fact that cpack's filenames are not customizable.
2# Each add-on is added as a separate component to facilitate zip/tgz packaging.
3# The filenames are always of the form basename-component, which is
4# incompatible with the addonid-version scheme we want. This hack renames
5# the files from the file names generated by the 'package' target.
6# Sadly we cannot extend the 'package' target, as it is a builtin target, see
7# http://public.kitware.com/Bug/view.php?id=8438
8# Thus, we have to add an 'addon-package' target.
9add_custom_target(addon-package
10 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target package)
11
12macro(add_cpack_workaround target version ext)
13 if(NOT PACKAGE_DIR)
14 set(PACKAGE_DIR "${CMAKE_INSTALL_PREFIX}/zips")
15 endif()
16
17 add_custom_command(TARGET addon-package PRE_BUILD
18 COMMAND ${CMAKE_COMMAND} -E make_directory ${PACKAGE_DIR}
19 COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_PACKAGE_DIRECTORY}/addon-${target}-${version}.${ext} ${PACKAGE_DIR}/${target}-${version}.${ext})
20endmacro()
21
22# Grab the version from a given add-on's addon.xml
23macro (addon_version dir prefix)
24 if(EXISTS ${PROJECT_SOURCE_DIR}/${dir}/addon.xml.in)
25 file(READ ${PROJECT_SOURCE_DIR}/${dir}/addon.xml.in ADDONXML)
26 else()
27 file(READ ${dir}/addon.xml ADDONXML)
28 endif()
29
30 string(REGEX MATCH "<addon[^>]*version.?=.?.[0-9\\.]+" VERSION_STRING ${ADDONXML})
31 string(REGEX REPLACE ".*version=.([0-9\\.]+).*" "\\1" ${prefix}_VERSION ${VERSION_STRING})
32 message(STATUS ${prefix}_VERSION=${${prefix}_VERSION})
33endmacro()
34
35# Build, link and optionally package an add-on
36macro (build_addon target prefix libs)
37 addon_version(${target} ${prefix})
38 if(${prefix}_SOURCES)
39 add_library(${target} ${${prefix}_SOURCES})
40 target_link_libraries(${target} ${${libs}})
41 set_target_properties(${target} PROPERTIES VERSION ${${prefix}_VERSION}
42 SOVERSION ${APP_VERSION_MAJOR}.${APP_VERSION_MINOR}
43 PREFIX "")
44 if(OS STREQUAL "android")
45 set_target_properties(${target} PROPERTIES PREFIX "lib")
46 endif()
47 elseif(${prefix}_CUSTOM_BINARY)
48 add_custom_target(${target} ALL)
49 endif()
50
51 # get the library's location
52 if(${prefix}_CUSTOM_BINARY)
53 list(GET ${prefix}_CUSTOM_BINARY 0 LIBRARY_LOCATION)
54 list(GET ${prefix}_CUSTOM_BINARY 1 LIBRARY_FILENAME)
55 else()
56 set(LIBRARY_LOCATION $<TARGET_FILE:${target}>)
57 # get the library's filename
58 if("${CORE_SYSTEM_NAME}" STREQUAL "android")
59 # for android we need the filename without any version numbers
60 set(LIBRARY_FILENAME $<TARGET_LINKER_FILE_NAME:${target}>)
61 else()
62 set(LIBRARY_FILENAME $<TARGET_FILE_NAME:${target}>)
63 endif()
64 endif()
65
66 # if there's an addon.xml.in we need to generate the addon.xml
67 if(EXISTS ${PROJECT_SOURCE_DIR}/${target}/addon.xml.in)
68 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/${target}/addon.xml.in)
69 set(PLATFORM ${CORE_SYSTEM_NAME})
70
71 file(READ ${PROJECT_SOURCE_DIR}/${target}/addon.xml.in addon_file)
72 string(CONFIGURE "${addon_file}" addon_file_conf @ONLY)
73 file(GENERATE OUTPUT ${PROJECT_SOURCE_DIR}/${target}/addon.xml CONTENT "${addon_file_conf}")
74 if(${APP_NAME_UC}_BUILD_DIR)
75 file(GENERATE OUTPUT ${${APP_NAME_UC}_BUILD_DIR}/addons/${target}/addon.xml CONTENT "${addon_file_conf}")
76 endif()
77 endif()
78
79 # if there's an settings.xml.in we need to generate the settings.xml
80 if(EXISTS ${PROJECT_SOURCE_DIR}/${target}/resources/settings.xml.in)
81 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/${target}/resources/settings.xml.in)
82 set(PLATFORM ${CORE_SYSTEM_NAME})
83
84 file(READ ${PROJECT_SOURCE_DIR}/${target}/resources/settings.xml.in settings_file)
85 string(CONFIGURE "${settings_file}" settings_file_conf @ONLY)
86 file(GENERATE OUTPUT ${PROJECT_SOURCE_DIR}/${target}/resources/settings.xml CONTENT "${settings_file_conf}")
87 if(${APP_NAME_UC}_BUILD_DIR)
88 file(GENERATE OUTPUT ${${APP_NAME_UC}_BUILD_DIR}/addons/${target}/resources/settings.xml CONTENT "${settings_file_conf}")
89 endif()
90 endif()
91
92 # set zip as default if addon-package is called without PACKAGE_XXX
93 set(CPACK_GENERATOR "ZIP")
94 set(ext "zip")
95 if(PACKAGE_ZIP OR PACKAGE_TGZ)
96 if(PACKAGE_TGZ)
97 set(CPACK_GENERATOR "TGZ")
98 set(ext "tar.gz")
99 endif()
100 set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF)
101 set(CPACK_PACKAGE_FILE_NAME addon)
102 if(CMAKE_BUILD_TYPE STREQUAL "Release")
103 set(CPACK_STRIP_FILES TRUE)
104 endif()
105 set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
106 set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
107 list(APPEND CPACK_COMPONENTS_ALL ${target}-${${prefix}_VERSION})
108 # Pack files together to create an archive
109 install(DIRECTORY ${target} DESTINATION ./ COMPONENT ${target}-${${prefix}_VERSION} PATTERN "xml.in" EXCLUDE)
110 if(WIN32)
111 if(NOT CPACK_PACKAGE_DIRECTORY)
112 # determine the temporary path
113 file(TO_CMAKE_PATH "$ENV{TEMP}" WIN32_TEMP_PATH)
114 string(LENGTH "${WIN32_TEMP_PATH}" WIN32_TEMP_PATH_LENGTH)
115 string(LENGTH "${PROJECT_BINARY_DIR}" PROJECT_BINARY_DIR_LENGTH)
116
117 # check if the temporary path is shorter than the default packaging directory path
118 if(WIN32_TEMP_PATH_LENGTH GREATER 0 AND WIN32_TEMP_PATH_LENGTH LESS PROJECT_BINARY_DIR_LENGTH)
119 # set the directory used by CPack for packaging to the temp directory
120 set(CPACK_PACKAGE_DIRECTORY ${WIN32_TEMP_PATH})
121 endif()
122 endif()
123
124 # in case of a VC++ project the installation location contains a $(Configuration) VS variable
125 # we replace it with ${CMAKE_BUILD_TYPE} (which doesn't cover the case when the build configuration
126 # is changed within Visual Studio)
127 string(REPLACE "$(Configuration)" "${CMAKE_BUILD_TYPE}" LIBRARY_LOCATION "${LIBRARY_LOCATION}")
128
129 if(${prefix}_SOURCES)
130 # install the generated DLL file
131 install(PROGRAMS ${LIBRARY_LOCATION} DESTINATION ${target}
132 COMPONENT ${target}-${${prefix}_VERSION})
133
134 if(CMAKE_BUILD_TYPE MATCHES Debug)
135 # for debug builds also install the PDB file
136 get_filename_component(LIBRARY_DIR ${LIBRARY_LOCATION} DIRECTORY)
137 install(FILES $<TARGET_PDB_FILE:${target}> DESTINATION ${target}
138 COMPONENT ${target}-${${prefix}_VERSION})
139 endif()
140 endif()
141 if (${prefix}_CUSTOM_BINARY)
142 list(GET ${prefix}_CUSTOM_BINARY 0 FROM_BINARY)
143 list(GET ${prefix}_CUSTOM_BINARY 1 TO_BINARY)
144 install(FILES ${FROM_BINARY} DESTINATION ${target} RENAME ${TO_BINARY})
145 endif()
146 if(${prefix}_CUSTOM_DATA)
147 install(DIRECTORY ${${prefix}_CUSTOM_DATA} DESTINATION ${target}/resources)
148 endif()
149 else()
150 if(NOT CPACK_PACKAGE_DIRECTORY)
151 set(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR})
152 endif()
153 if(${prefix}_SOURCES)
154 install(TARGETS ${target} DESTINATION ${target}
155 COMPONENT ${target}-${${prefix}_VERSION})
156 endif()
157 if (${prefix}_CUSTOM_BINARY)
158 list(GET ${prefix}_CUSTOM_BINARY 0 FROM_BINARY)
159 list(GET ${prefix}_CUSTOM_BINARY 1 TO_BINARY)
160 if(OS STREQUAL "android")
161 set(TO_BINARY "lib${TO_BINARY}")
162 endif()
163 install(FILES ${FROM_BINARY} DESTINATION ${target} RENAME ${TO_BINARY}
164 COMPONENT ${target}-${${prefix}_VERSION})
165 endif()
166 if(${prefix}_CUSTOM_DATA)
167 install(DIRECTORY ${${prefix}_CUSTOM_DATA} DESTINATION ${target}/resources)
168 endif()
169 endif()
170 add_cpack_workaround(${target} ${${prefix}_VERSION} ${ext})
171 else()
172 if(CORE_SYSTEM_NAME STREQUAL linux OR CORE_SYSTEM_NAME STREQUAL rbpi OR CORE_SYSTEM_NAME STREQUAL freebsd)
173 if(NOT OVERRIDE_PATHS)
174 if(CMAKE_INSTALL_PREFIX AND NOT CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND NOT CMAKE_INSTALL_PREFIX STREQUAL "${${APP_NAME_UC}_PREFIX}")
175 message(WARNING "CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} differs from ${APP_NAME} prefix, changing to ${${APP_NAME_UC}_PREFIX}. Please pass -DOVERRIDE_PATHS=1 to skip this check")
176 endif()
177 if(CMAKE_INSTALL_LIBDIR AND NOT CMAKE_INSTALL_LIBDIR STREQUAL "${${APP_NAME_UC}_LIB_DIR}")
178 message(WARNING "CMAKE_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR} differs from ${APP_NAME} libdir, changing to ${${APP_NAME_UC}_LIB_DIR}. Please pass -DOVERRIDE_PATHS=1 to skip this check")
179 endif()
180 if(CMAKE_INSTALL_DATADIR AND NOT CMAKE_INSTALL_DATADIR STREQUAL "${${APP_NAME_UC}_DATA_DIR}")
181 message(WARNING "CMAKE_INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR} differs from ${APP_NAME} datadir, changing to ${${APP_NAME_UC}_DATA_DIR}. Please pass -DOVERRIDE_PATHS=1 to skip this check")
182 endif()
183 set(CMAKE_INSTALL_PREFIX "${${APP_NAME_UC}_PREFIX}" CACHE PATH "${APP_NAME} install prefix" FORCE)
184 set(CMAKE_INSTALL_LIBDIR "${${APP_NAME_UC}_LIB_DIR}" CACHE PATH "${APP_NAME} install libdir" FORCE)
185 set(CMAKE_INSTALL_DATADIR "${${APP_NAME_UC}_DATA_DIR}" CACHE PATH "${APP_NAME} install datadir" FORCE)
186 else()
187 if(NOT CMAKE_INSTALL_LIBDIR)
188 set(CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}/lib/${APP_NAME_LC}")
189 endif()
190 if(NOT CMAKE_INSTALL_DATADIR)
191 set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_PREFIX}/share/${APP_NAME_LC}")
192 endif()
193 endif()
194 else()
195 set(CMAKE_INSTALL_LIBDIR "lib/${APP_NAME_LC}")
196 set(CMAKE_INSTALL_DATADIR "share/${APP_NAME_LC}")
197 endif()
198 if(${prefix}_SOURCES)
199 install(TARGETS ${target} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target})
200 endif()
201 if (${prefix}_CUSTOM_BINARY)
202 list(GET ${prefix}_CUSTOM_BINARY 0 FROM_BINARY)
203 list(GET ${prefix}_CUSTOM_BINARY 1 TO_BINARY)
204 if(OS STREQUAL "android")
205 set(TO_BINARY "lib${TO_BINARY}")
206 endif()
207 install(FILES ${FROM_BINARY} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target} RENAME ${TO_BINARY})
208 endif()
209 install(DIRECTORY ${target} DESTINATION ${CMAKE_INSTALL_DATADIR}/addons PATTERN "xml.in" EXCLUDE)
210 if(${prefix}_CUSTOM_DATA)
211 install(DIRECTORY ${${prefix}_CUSTOM_DATA} DESTINATION ${CMAKE_INSTALL_DATADIR}/addons/${target}/resources)
212 endif()
213 endif()
214 if(${APP_NAME_UC}_BUILD_DIR)
215 file(GLOB_RECURSE files ${CMAKE_CURRENT_SOURCE_DIR}/${target}/*)
216 if(${prefix}_CUSTOM_DATA)
217 add_custom_command(TARGET ${target} POST_BUILD
218 COMMAND ${CMAKE_COMMAND} -E copy_directory
219 ${${prefix}_CUSTOM_DATA}
220 ${${APP_NAME_UC}_BUILD_DIR}/addons/${target}/resources)
221 endif()
222 foreach(file ${files})
223 string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/${target}/" "" name "${file}")
224 # A good way to deal with () in filenames
225 if(NOT ${file} MATCHES xml.in)
226 configure_file(${file} ${${APP_NAME_UC}_BUILD_DIR}/addons/${target}/${name} COPYONLY)
227 endif()
228 endforeach()
229 add_custom_command(TARGET ${target} POST_BUILD
230 COMMAND ${CMAKE_COMMAND} -E copy
231 ${LIBRARY_LOCATION}
232 ${${APP_NAME_UC}_BUILD_DIR}/addons/${target}/${LIBRARY_FILENAME})
233 endif()
234endmacro()
235
236# finds a path to a given file (recursive)
237function (kodi_find_path var_name filename search_path strip_file)
238 file(GLOB_RECURSE PATH_TO_FILE ${search_path} ${filename})
239 if(strip_file)
240 string(REPLACE ${filename} "" PATH_TO_FILE ${PATH_TO_FILE})
241 endif()
242 set (${var_name} ${PATH_TO_FILE} PARENT_SCOPE)
243endfunction()
244
245# Cmake build options
246include(AddOptions)
247include(TestCXXAcceptsFlag)
248option(PACKAGE_ZIP "Package Zip file?" OFF)
249option(PACKAGE_TGZ "Package TGZ file?" OFF)
250option(BUILD_SHARED_LIBS "Build shared libs?" ON)
251
252# LTO support?
253CHECK_CXX_ACCEPTS_FLAG("-flto" HAVE_LTO)
254if(HAVE_LTO)
255 option(USE_LTO "use link time optimization" OFF)
256 if(USE_LTO)
257 add_options(ALL_LANGUAGES ALL_BUILDS "-flto")
258 endif()
259endif()
260
261# set this to try linking dependencies as static as possible
262if(ADDONS_PREFER_STATIC_LIBS)
263 set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
264endif()
265
266if(${APP_NAME_UC}_BUILD_DIR)
267 list(APPEND CMAKE_PREFIX_PATH ${${APP_NAME_UC}_BUILD_DIR}/build)
268endif()
diff --git a/project/cmake/scripts/common/ArchSetup.cmake b/project/cmake/scripts/common/ArchSetup.cmake
deleted file mode 100644
index 538fcaf..0000000
--- a/project/cmake/scripts/common/ArchSetup.cmake
+++ /dev/null
@@ -1,155 +0,0 @@
1# This script configures the build for a given architecture.
2# Flags and stringified arch is set up.
3# General compiler tests belongs here.
4#
5# On return, the following variables are set:
6# CMAKE_SYSTEM_NAME - a lowercased system name
7# CPU - the CPU on the target
8# ARCH - the system architecture
9# ARCH_DEFINES - list of compiler definitions for this architecture
10# SYSTEM_DEFINES - list of compiler definitions for this system
11# DEP_DEFINES - compiler definitions for system dependencies (e.g. LIRC)
12# + the results of compiler tests etc.
13
14include(CheckCXXSourceCompiles)
15include(CheckSymbolExists)
16include(CheckFunctionExists)
17include(CheckIncludeFile)
18
19# Macro to check if a given type exists in a given header
20# Arguments:
21# header the header to check
22# type the type to check for existence
23# var the compiler definition to set if type exists
24# On return:
25# If type was found, the definition is added to SYSTEM_DEFINES
26macro(check_type header type var)
27 check_cxx_source_compiles("#include <${header}>
28 int main()
29 {
30 ${type} s;
31 }" ${var})
32 if(${var})
33 list(APPEND SYSTEM_DEFINES -D${var}=1)
34 endif()
35endmacro()
36
37# Macro to check if a given builtin function exists
38# Arguments:
39# func the function to check
40# var the compiler definition to set if type exists
41# On return:
42# If type was found, the definition is added to SYSTEM_DEFINES
43macro(check_builtin func var)
44 check_cxx_source_compiles("
45 int main()
46 {
47 ${func};
48 }" ${var})
49 if(${var})
50 list(APPEND SYSTEM_DEFINES -D${var}=1)
51 endif()
52endmacro()
53
54
55# -------- Main script ---------
56message(STATUS "System type: ${CMAKE_SYSTEM_NAME}")
57if(NOT CORE_SYSTEM_NAME)
58 string(TOLOWER ${CMAKE_SYSTEM_NAME} CORE_SYSTEM_NAME)
59endif()
60
61if(WITH_CPU)
62 set(CPU ${WITH_CPU})
63elseif(NOT CMAKE_TOOLCHAIN_FILE)
64 set(CPU ${CMAKE_SYSTEM_PROCESSOR})
65endif()
66
67if(CMAKE_TOOLCHAIN_FILE)
68 if(NOT EXISTS "${CMAKE_TOOLCHAIN_FILE}")
69 message(FATAL_ERROR "Toolchain file ${CMAKE_TOOLCHAIN_FILE} does not exist.")
70 elseif(NOT DEPENDS_PATH OR NOT NATIVEPREFIX)
71 message(FATAL_ERROR "Toolchain did not define DEPENDS_PATH or NATIVEPREFIX. Possibly outdated depends.")
72 endif()
73endif()
74
75# While CMAKE_CROSSCOMPILING is set unconditionally if there's a toolchain file,
76# this variable is set if we can execute build artefacts on the host system (for example unit tests).
77if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL CMAKE_SYSTEM_PROCESSOR AND
78 CMAKE_HOST_SYSTEM_NAME STREQUAL CMAKE_SYSTEM_NAME)
79 set(CORE_HOST_IS_TARGET TRUE)
80else()
81 set(CORE_HOST_IS_TARGET FALSE)
82endif()
83
84# Main cpp
85set(CORE_MAIN_SOURCE ${CORE_SOURCE_DIR}/xbmc/platform/posix/main.cpp)
86
87# system specific arch setup
88if(NOT EXISTS ${PROJECT_SOURCE_DIR}/scripts/${CORE_SYSTEM_NAME}/ArchSetup.cmake)
89 message(FATAL_ERROR "Couldn't find configuration for '${CORE_SYSTEM_NAME}' "
90 "Either the platform is not (yet) supported "
91 "or a toolchain file has to be specified. "
92 "Consult ${CMAKE_SOURCE_DIR}/README.md for instructions. "
93 "Note: Specifying a toolchain requires a clean build directory!")
94endif()
95include(${PROJECT_SOURCE_DIR}/scripts/${CORE_SYSTEM_NAME}/ArchSetup.cmake)
96
97message(STATUS "Core system type: ${CORE_SYSTEM_NAME}")
98message(STATUS "Platform: ${PLATFORM}")
99message(STATUS "CPU: ${CPU}, ARCH: ${ARCH}")
100message(STATUS "Cross-Compiling: ${CMAKE_CROSSCOMPILING}")
101message(STATUS "Execute build artefacts on host: ${CORE_HOST_IS_TARGET}")
102
103check_type(string std::u16string HAVE_STD__U16_STRING)
104check_type(string std::u32string HAVE_STD__U32_STRING)
105check_type(string char16_t HAVE_CHAR16_T)
106check_type(string char32_t HAVE_CHAR32_T)
107check_type(stdint.h uint_least16_t HAVE_STDINT_H)
108check_symbol_exists(posix_fadvise fcntl.h HAVE_POSIX_FADVISE)
109check_symbol_exists(PRIdMAX inttypes.h HAVE_INTTYPES_H)
110check_builtin("long* temp=0; long ret=__sync_add_and_fetch(temp, 1)" HAS_BUILTIN_SYNC_ADD_AND_FETCH)
111check_builtin("long* temp=0; long ret=__sync_sub_and_fetch(temp, 1)" HAS_BUILTIN_SYNC_SUB_AND_FETCH)
112check_builtin("long* temp=0; long ret=__sync_val_compare_and_swap(temp, 1, 1)" HAS_BUILTIN_SYNC_VAL_COMPARE_AND_SWAP)
113check_include_file(sys/inotify.h HAVE_INOTIFY)
114if(HAVE_INOTIFY)
115 list(APPEND SYSTEM_DEFINES -DHAVE_INOTIFY=1)
116endif()
117if(HAVE_POSIX_FADVISE)
118 list(APPEND SYSTEM_DEFINES -DHAVE_POSIX_FADVISE=1)
119endif()
120check_function_exists(localtime_r HAVE_LOCALTIME_R)
121if(HAVE_LOCALTIME_R)
122 list(APPEND SYSTEM_DEFINES -DHAVE_LOCALTIME_R=1)
123endif()
124if(HAVE_INTTYPES_H)
125 list(APPEND SYSTEM_DEFINES -DHAVE_INTTYPES_H=1)
126endif()
127
128find_package(SSE)
129foreach(_sse SSE SSE2 SSE3 SSSE3 SSE4_1 SSE4_2 AVX AVX2)
130 if(${${_sse}_FOUND})
131 # enable SSE versions up to 4.1 by default, if available
132 if(NOT ${_sse} MATCHES "AVX" AND NOT ${_sse} STREQUAL "SSE4_2")
133 option(ENABLE_${_sse} "Enable ${_sse}" ON)
134 else()
135 option(ENABLE_${_sse} "Enable ${_sse}" OFF)
136 endif()
137 endif()
138 if(ENABLE_${_sse})
139 set(HAVE_${_sse} TRUE CACHE STRING "${_sse} enabled")
140 list(APPEND ARCH_DEFINES -DHAVE_${_sse}=1)
141 endif()
142endforeach()
143
144if(NOT DEFINED NEON OR NEON)
145 option(ENABLE_NEON "Enable NEON optimization" ${NEON})
146 if(ENABLE_NEON)
147 message(STATUS "NEON optimization enabled")
148 add_options(CXX ALL_BUILDS "-mfpu=neon -mvectorize-with-neon-quad")
149 endif()
150endif()
151
152if(CMAKE_BUILD_TYPE STREQUAL "Debug")
153 add_options (ALL_LANGUAGES DEBUG "-g" "-D_DEBUG" "-Wall")
154endif()
155
diff --git a/project/cmake/scripts/common/CMakeHelpers.cmake b/project/cmake/scripts/common/CMakeHelpers.cmake
deleted file mode 100644
index 995c38a..0000000
--- a/project/cmake/scripts/common/CMakeHelpers.cmake
+++ /dev/null
@@ -1,54 +0,0 @@
1# This file contains functions that support the debugging of the CMake files.
2
3# This file shouldn't be included per default in any CMake file. It should be
4# included and used only on demand. All functions are prefixed with "debug_".
5#
6# Usage:
7# include(scripts/common/CMakeHelpers.cmake)
8# debug_print_variables()
9
10# Print all CMake variables.
11macro(debug_print_variables)
12 get_cmake_property(_variableNames VARIABLES)
13 foreach(_variableName ${_variableNames})
14 message(STATUS "${_variableName} = ${${_variableName}}")
15 endforeach()
16endmacro()
17
18# Get all properties that CMake supports and convert them to a list.
19function(debug_get_properties VAR)
20 execute_process(COMMAND cmake --help-property-list
21 OUTPUT_VARIABLE _properties)
22 string(REGEX REPLACE ";" "\\\\;" _properties "${_properties}")
23 string(REGEX REPLACE "\n" ";" _properties "${_properties}")
24 list(REMOVE_DUPLICATES _properties)
25 list(REMOVE_ITEM _properties LOCATION)
26 set(${VAR} ${_properties} PARENT_SCOPE)
27endfunction()
28
29# List all properties.
30function(debug_list_properties)
31 debug_get_properties(_properties)
32 message("CMake properties = ${_properties}")
33endfunction()
34
35# Print all set properties of a specified target.
36function(debug_print_target_properties target)
37 if(NOT TARGET ${target})
38 message(FATAL_ERROR "There is no target named '${target}'")
39 endif()
40
41 debug_get_properties(_properties)
42
43 # Reading LOCATION property is deprecated and triggers a fatal error.
44 string(REGEX REPLACE ";LOCATION;|LOCATION" "" _properties "${_properties}")
45 string(REGEX REPLACE "<CONFIG>" "${CMAKE_BUILD_TYPE}" _properties
46 "${_properties}")
47 foreach(_property ${_properties})
48 get_property(_value TARGET ${target} PROPERTY ${_property} SET)
49 if(_value)
50 get_target_property(_value ${target} ${_property})
51 message("${target} ${_property} = ${_value}")
52 endif()
53 endforeach()
54endfunction()
diff --git a/project/cmake/scripts/common/CheckCommits.cmake b/project/cmake/scripts/common/CheckCommits.cmake
deleted file mode 100644
index 304e623..0000000
--- a/project/cmake/scripts/common/CheckCommits.cmake
+++ /dev/null
@@ -1,75 +0,0 @@
1find_package(Git REQUIRED)
2
3macro(sanity_check message)
4 if(status_code)
5 message(FATAL_ERROR "${message}")
6 endif()
7endmacro()
8
9# Check that there are no changes in working-tree
10execute_process(COMMAND ${GIT_EXECUTABLE} diff --quiet
11 RESULT_VARIABLE status_code)
12sanity_check("Cannot run with working tree changes. Commit, stash or drop them.")
13
14# Setup base of tests
15set(check_base $ENV{CHECK_BASE})
16if(NOT check_base)
17 set(check_base origin/master)
18endif()
19
20# Setup end of tests
21set(check_head $ENV{CHECK_HEAD})
22if(NOT check_head)
23 set(check_head HEAD)
24endif()
25
26# Setup target to build
27set(check_target $ENV{CHECK_TARGET})
28if(NOT check_target)
29 set(check_target check)
30endif()
31
32# Build threads
33set(build_threads $ENV{CHECK_THREADS})
34if(NOT build_threads)
35 if(UNIX)
36 execute_process(COMMAND nproc
37 OUTPUT_VARIABLE build_threads)
38 string(REGEX REPLACE "(\r?\n)+$" "" build_threads "${build_threads}")
39 endif()
40endif()
41
42# Record current HEAD
43execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
44 OUTPUT_VARIABLE current_branch)
45
46string(REGEX REPLACE "(\r?\n)+$" "" current_branch "${current_branch}")
47
48# Grab revision list
49execute_process(COMMAND ${GIT_EXECUTABLE} rev-list ${check_base}..${check_head} --reverse
50 OUTPUT_VARIABLE rev_list)
51
52string(REPLACE "\n" ";" rev_list ${rev_list})
53foreach(rev ${rev_list})
54 # Checkout
55 message("Testing revision ${rev}")
56 execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${rev}
57 RESULT_VARIABLE status_code)
58 sanity_check("Failed to checkout ${rev}")
59
60 # Build
61 if(build_threads GREATER 2)
62 execute_process(COMMAND ${CMAKE_COMMAND} "--build" "${CMAKE_BINARY_DIR}" "--target" "${check_target}" "--use-stderr" "--" "-j${build_threads}"
63 RESULT_VARIABLE status_code)
64 else()
65 execute_process(COMMAND ${CMAKE_COMMAND} "--build" "${CMAKE_BINARY_DIR}" "--target" "${check_target}" "--use-stderr"
66 RESULT_VARIABLE status_code)
67 endif()
68 if(status_code)
69 execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${current_branch})
70 endif()
71 sanity_check("Failed to build target for revision ${rev}")
72endforeach()
73
74message("Everything checks out fine")
75execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${current_branch})
diff --git a/project/cmake/scripts/common/CheckTargetPlatform.cmake b/project/cmake/scripts/common/CheckTargetPlatform.cmake
deleted file mode 100644
index 82ee668..0000000
--- a/project/cmake/scripts/common/CheckTargetPlatform.cmake
+++ /dev/null
@@ -1,67 +0,0 @@
1# handle target platforms
2function(check_target_platform dir target_platform build)
3 # param[in] dir path/directory of the addon/dependency
4 # param[in] target_platform target platform of the build
5 # param[out] build Result whether the addon/dependency should be built for the specified target platform
6
7 set(${build} FALSE)
8 # check if the given directory exists and contains a platforms.txt
9 if(EXISTS ${dir} AND EXISTS ${dir}/platforms.txt)
10 # get all the specified platforms
11 file(STRINGS ${dir}/platforms.txt platforms)
12
13 list( LENGTH platforms listlen )
14 if(${listlen} EQUAL 1)
15 string(REPLACE " " ";" platforms ${platforms})
16 endif()
17
18 # check if the addon/dependency should be built for the current platform
19 foreach(platform ${platforms})
20 if(${platform} STREQUAL "all" OR ${platform} STREQUAL ${target_platform})
21 set(${build} TRUE)
22 else()
23 # check if the platform is defined as "!<platform>"
24 string(SUBSTRING ${platform} 0 1 platform_first)
25 if(${platform_first} STREQUAL "!")
26 # extract the platform
27 string(LENGTH ${platform} platform_length)
28 math(EXPR platform_length "${platform_length} - 1")
29 string(SUBSTRING ${platform} 1 ${platform_length} platform)
30
31 # check if the current platform does not match the extracted platform
32 if(NOT ${platform} STREQUAL ${target_platform})
33 set(${build} TRUE)
34 endif()
35 endif()
36 endif()
37 endforeach()
38 else()
39 set(${build} TRUE)
40 endif()
41
42 # make the ${build} variable available to the calling script
43 set(${build} "${${build}}" PARENT_SCOPE)
44endfunction()
45
46function(check_install_permissions install_dir have_perms)
47 # param[in] install_dir directory to check for write permissions
48 # param[out] have_perms wether we have permissions to install to install_dir
49
50 set(testfile_lib ${install_dir}/lib/kodi/.cmake-inst-test)
51 set(testfile_share ${install_dir}/share/kodi/.cmake-inst-test)
52 get_filename_component(testdir_lib ${testfile_lib} DIRECTORY)
53 get_filename_component(testdir_share ${testfile_share} DIRECTORY)
54
55 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${testdir_lib})
56 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${testdir_share})
57 execute_process(COMMAND ${CMAKE_COMMAND} -E touch ${testfile_lib})
58 execute_process(COMMAND ${CMAKE_COMMAND} -E touch ${testfile_share})
59
60 if(EXISTS ${testfile_lib} AND EXISTS ${testfile_share})
61 set(${have_perms} True PARENT_SCOPE)
62 else()
63 message(STATUS "check_install_permissions ${install_dir}: failed to create files")
64 set(${have_perms} False PARENT_SCOPE)
65 endif()
66 file(REMOVE ${testfile_lib} ${testfile_share})
67endfunction()
diff --git a/project/cmake/scripts/common/GenerateVersionedFiles.cmake b/project/cmake/scripts/common/GenerateVersionedFiles.cmake
deleted file mode 100644
index e105b27..0000000
--- a/project/cmake/scripts/common/GenerateVersionedFiles.cmake
+++ /dev/null
@@ -1,18 +0,0 @@
1include(${CORE_SOURCE_DIR}/project/cmake/scripts/common/Macros.cmake)
2
3core_find_versions()
4file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/addons/xbmc.addon)
5file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/addons/kodi.guilib)
6
7# configure_file without dependency tracking
8# configure_file would register additional file dependencies that interfere
9# with the ones from add_custom_command (and the generation would happen twice)
10function(generate_versioned_file _SRC _DEST)
11 file(READ ${CORE_SOURCE_DIR}/${_SRC} file_content)
12 string(CONFIGURE "${file_content}" file_content @ONLY)
13 file(WRITE ${CMAKE_BINARY_DIR}/${_DEST} "${file_content}")
14endfunction()
15
16generate_versioned_file(addons/xbmc.addon/addon.xml.in addons/xbmc.addon/addon.xml)
17generate_versioned_file(addons/kodi.guilib/addon.xml.in addons/kodi.guilib/addon.xml)
18generate_versioned_file(xbmc/CompileInfo.cpp.in ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp)
diff --git a/project/cmake/scripts/common/GeneratorSetup.cmake b/project/cmake/scripts/common/GeneratorSetup.cmake
deleted file mode 100644
index 304b504..0000000
--- a/project/cmake/scripts/common/GeneratorSetup.cmake
+++ /dev/null
@@ -1,49 +0,0 @@
1# Configure single-/multiconfiguration generators and variables
2#
3# CORE_BUILD_CONFIG that is set to
4# - CMAKE_BUILD_TYPE for single configuration generators such as make, nmake
5# - a variable that expands on build time to the current configuration for
6# multi configuration generators such as VS or Xcode
7if(CMAKE_CONFIGURATION_TYPES)
8 if(CMAKE_BUILD_TYPE)
9 message(FATAL_ERROR "CMAKE_BUILD_TYPE must not be defined for multi-configuration generators")
10 endif()
11 set(CORE_BUILD_CONFIG ${CMAKE_CFG_INTDIR})
12 message(STATUS "Generator: Multi-configuration (${CMAKE_GENERATOR})")
13else()
14 if(CMAKE_BUILD_TYPE)
15 set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}
16 CACHE STRING "Choose build type (${CMAKE_BUILD_TYPES})" FORCE)
17 else()
18 # Set default
19 set(CMAKE_BUILD_TYPE Release
20 CACHE STRING "Choose build type (${CMAKE_BUILD_TYPES})" FORCE)
21 endif()
22 set(CORE_BUILD_CONFIG ${CMAKE_BUILD_TYPE})
23 message(STATUS "Generator: Single-configuration: ${CMAKE_BUILD_TYPE} (${CMAKE_GENERATOR})")
24endif()
25
26# Print CMake version
27message(STATUS "CMake Version: ${CMAKE_VERSION}")
28
29# Deal with CMake special cases
30if(CMAKE_VERSION VERSION_EQUAL 3.5.1)
31 message(WARNING "CMake 3.5.1 introduced a crash during configuration. "
32 "Please consider upgrading to 3.5.2 (cmake.org/Bug/view.php?id=16044)")
33endif()
34
35# Darwin needs CMake 3.4
36if(APPLE AND CMAKE_VERSION VERSION_LESS 3.4)
37 message(WARNING "Build on Darwin requires CMake 3.4 or later (tdb library support) "
38 "or the usage of the patched version in depends.")
39endif()
40
41# Windows needs CMake 3.6 (VS_STARTUP_PROJECT)
42if(WIN32 AND CMAKE_VERSION VERSION_LESS 3.6)
43 message(FATAL_ERROR "Build on Windows needs CMake 3.6 or later")
44endif()
45
46# Ninja needs CMake 3.2 due to ExternalProject BUILD_BYPRODUCTS usage
47if(CMAKE_GENERATOR STREQUAL Ninja AND CMAKE_VERSION VERSION_LESS 3.2)
48 message(FATAL_ERROR "Generator: Ninja requires CMake 3.2 or later")
49endif()
diff --git a/project/cmake/scripts/common/HandleDepends.cmake b/project/cmake/scripts/common/HandleDepends.cmake
deleted file mode 100644
index adc105b..0000000
--- a/project/cmake/scripts/common/HandleDepends.cmake
+++ /dev/null
@@ -1,252 +0,0 @@
1include(${CORE_SOURCE_DIR}/project/cmake/scripts/common/CheckTargetPlatform.cmake)
2
3# handle addon depends
4function(add_addon_depends addon searchpath)
5 # input: string addon string searchpath
6
7 set(OUTPUT_DIR ${ADDON_DEPENDS_PATH})
8 # look for platform-specific dependencies
9 file(GLOB_RECURSE cmake_input_files ${searchpath}/${CORE_SYSTEM_NAME}/*.txt)
10 file(GLOB_RECURSE cmake_input_files2 ${searchpath}/common/*.txt)
11 list(APPEND cmake_input_files ${cmake_input_files2})
12
13 foreach(file ${cmake_input_files})
14 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${file})
15 if(NOT (file MATCHES CMakeLists.txt OR
16 file MATCHES install.txt OR
17 file MATCHES noinstall.txt OR
18 file MATCHES flags.txt OR
19 file MATCHES deps.txt OR
20 file MATCHES "[a-z]+-deps[.]txt" OR
21 file MATCHES platforms.txt))
22 message(STATUS "Processing ${file}")
23 file(STRINGS ${file} def)
24 string(REPLACE " " ";" def ${def})
25 list(LENGTH def deflength)
26 get_filename_component(dir ${file} DIRECTORY)
27
28 # get the id of the dependency
29 if(NOT "${def}" STREQUAL "")
30 # read the id from the file
31 list(GET def 0 id)
32 else()
33 # read the id from the filename
34 get_filename_component(id ${file} NAME_WE)
35 endif()
36
37 # check if the dependency has a platforms.txt
38 set(platform_found FALSE)
39 check_target_platform(${dir} ${CORE_SYSTEM_NAME} platform_found)
40
41 if(${platform_found} AND NOT TARGET ${id})
42 # determine the download URL of the dependency
43 set(url "")
44 if(deflength GREATER 1)
45 list(GET def 1 url)
46 message(STATUS "${id} url: ${url}")
47 endif()
48
49 # check if there are any library specific flags that need to be passed on
50 if(EXISTS ${dir}/flags.txt)
51 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${dir}/flags.txt)
52 file(STRINGS ${dir}/flags.txt extraflags)
53
54 # replace some custom placeholders
55 string(REPLACE "@MINGW_TOOLCHAIN_FILE@" "${OUTPUT_DIR}/Toolchain_mingw32.cmake" extraflags "${extraflags}")
56 string(REPLACE " " ";" extraflags ${extraflags})
57
58 message(STATUS "${id} extraflags: ${extraflags}")
59 endif()
60
61 set(BUILD_ARGS -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
62 -DOUTPUT_DIR=${OUTPUT_DIR}
63 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
64 -DCMAKE_USER_MAKE_RULES_OVERRIDE=${CMAKE_USER_MAKE_RULES_OVERRIDE}
65 -DCMAKE_USER_MAKE_RULES_OVERRIDE_CXX=${CMAKE_USER_MAKE_RULES_OVERRIDE_CXX}
66 -DCMAKE_INSTALL_PREFIX=${OUTPUT_DIR}
67 -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME}
68 -DENABLE_STATIC=1
69 -DBUILD_SHARED_LIBS=0)
70 # if there are no make rules override files available take care of manually passing on ARCH_DEFINES
71 if(NOT CMAKE_USER_MAKE_RULES_OVERRIDE AND NOT CMAKE_USER_MAKE_RULES_OVERRIDE_CXX)
72 # make sure we create strings, not lists
73 set(TMP_C_FLAGS "${CMAKE_C_FLAGS} ${ARCH_DEFINES}")
74 set(TMP_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_DEFINES}")
75 list(APPEND BUILD_ARGS -DCMAKE_C_FLAGS=${TMP_C_FLAGS}
76 -DCMAKE_CXX_FLAGS=${TMP_CXX_FLAGS})
77 endif()
78
79 if(CMAKE_TOOLCHAIN_FILE)
80 list(APPEND BUILD_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE})
81 message("toolchain specified")
82 message(${BUILD_ARGS})
83 endif()
84
85 # prepare patchfile. ensure we have a clean file after reconfiguring
86 set(PATCH_FILE ${BUILD_DIR}/${id}/tmp/patch.cmake)
87 file(REMOVE ${PATCH_FILE})
88
89 # if there's a CMakeLists.txt use it to prepare the build
90 if(EXISTS ${dir}/CMakeLists.txt)
91 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${dir}/CMakeLists.txt)
92 file(APPEND ${PATCH_FILE}
93 "file(COPY ${dir}/CMakeLists.txt
94 DESTINATION ${BUILD_DIR}/${id}/src/${id})\n")
95 endif()
96
97 # check if we have patches to apply
98 file(GLOB patches ${dir}/*.patch)
99 list(SORT patches)
100 foreach(patch ${patches})
101 if(NOT PATCH_PROGRAM OR "${PATCH_PROGRAM}" STREQUAL "")
102 if(NOT PATCH_EXECUTABLE)
103 # find the path to the patch executable
104 find_program(PATCH_EXECUTABLE NAMES patch)
105
106 if(NOT PATCH_EXECUTABLE)
107 message(FATAL_ERROR "Missing patch command (we looked in ${CMAKE_PREFIX_PATH})")
108 endif()
109 endif()
110
111 set(PATCH_PROGRAM ${PATCH_EXECUTABLE})
112
113 # On Windows "patch.exe" can only handle CR-LF line-endings.
114 # Our patches have LF-only line endings - except when they
115 # have been checked out as part of a dependency hosted on Git
116 # and core.autocrlf=true.
117 if(WIN32)
118 file(READ ${patch} patch_content_hex HEX)
119 # Force handle LF-only line endings
120 if(NOT patch_content_hex MATCHES "0d0a")
121 set(PATCH_PROGRAM "\"${PATCH_PROGRAM}\" --binary")
122 endif()
123 endif()
124 endif()
125
126 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${patch})
127 file(APPEND ${PATCH_FILE}
128 "execute_process(COMMAND ${PATCH_PROGRAM} -p1 -i \"${patch}\")\n")
129 endforeach()
130
131
132 # if there's an install.txt use it to properly install the built files
133 set(INSTALL_COMMAND "")
134 if(EXISTS ${dir}/install.txt)
135 set(INSTALL_COMMAND INSTALL_COMMAND ${CMAKE_COMMAND}
136 -DINPUTDIR=${BUILD_DIR}/${id}/src/${id}-build/
137 -DINPUTFILE=${dir}/install.txt
138 -DDESTDIR=${OUTPUT_DIR}
139 -DENABLE_STATIC=1
140 "${extraflags}"
141 -P ${PROJECT_SOURCE_DIR}/install.cmake)
142 elseif(EXISTS ${dir}/noinstall.txt)
143 set(INSTALL_COMMAND INSTALL_COMMAND "")
144 endif()
145
146 # check if there's a platform-specific or generic deps.txt containing dependencies on other libraries
147 if(EXISTS ${dir}/${CORE_SYSTEM_NAME}-deps.txt)
148 file(STRINGS ${dir}/${CORE_SYSTEM_NAME}-deps.txt deps)
149 message(STATUS "${id} depends: ${deps}")
150 elseif(EXISTS ${dir}/deps.txt)
151 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${dir}/deps.txt)
152 file(STRINGS ${dir}/deps.txt deps)
153 message(STATUS "${id} depends: ${deps}")
154 else()
155 set(deps)
156 endif()
157
158 if(CROSS_AUTOCONF AND AUTOCONF_FILES)
159 foreach(afile ${AUTOCONF_FILES})
160 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${afile})
161 file(APPEND ${PATCH_FILE}
162 "message(STATUS \"AUTOCONF: copying ${afile} to ${BUILD_DIR}/${id}/src/${id}\")\n
163 file(COPY ${afile} DESTINATION ${BUILD_DIR}/${id}/src/${id})\n")
164 endforeach()
165 endif()
166
167 # if the patch file exists we need to set the PATCH_COMMAND
168 set(PATCH_COMMAND "")
169 if(EXISTS ${PATCH_FILE})
170 set(PATCH_COMMAND ${CMAKE_COMMAND} -P ${PATCH_FILE})
171 endif()
172
173 # prepare the setup of the call to externalproject_add()
174 set(EXTERNALPROJECT_SETUP PREFIX ${BUILD_DIR}/${id}
175 CMAKE_ARGS ${extraflags} ${BUILD_ARGS}
176 PATCH_COMMAND ${PATCH_COMMAND}
177 "${INSTALL_COMMAND}")
178
179 if(CMAKE_VERSION VERSION_GREATER 3.5.9)
180 list(APPEND EXTERNALPROJECT_SETUP GIT_SHALLOW 1)
181 endif()
182
183 # if there's an url defined we need to pass that to externalproject_add()
184 if(DEFINED url AND NOT "${url}" STREQUAL "")
185 # check if there's a third parameter in the file
186 if(deflength GREATER 2)
187 # the third parameter is considered as a revision of a git repository
188 list(GET def 2 revision)
189
190 externalproject_add(${id}
191 GIT_REPOSITORY ${url}
192 GIT_TAG ${revision}
193 "${EXTERNALPROJECT_SETUP}")
194
195 # For patchfiles to work, disable (users globally set) autocrlf=true
196 if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_GREATER 3.7)
197 message(AUTHOR_WARNING "Make use of GIT_CONFIG")
198 endif()
199 if(WIN32 AND patches)
200 externalproject_add_step(${id} gitconfig
201 COMMAND git config core.autocrlf false
202 COMMAND git rm -rf --cached .
203 COMMAND git reset --hard HEAD
204 COMMENT "Performing gitconfig step: Disabling autocrlf to enable patching for '${id}'"
205 DEPENDERS patch
206 WORKING_DIRECTORY <SOURCE_DIR>)
207 endif()
208 else()
209 set(CONFIGURE_COMMAND "")
210 if(NOT WIN32)
211 # manually specify the configure command to be able to pass in the custom PKG_CONFIG_PATH
212 set(CONFIGURE_COMMAND PKG_CONFIG_PATH=${OUTPUT_DIR}/lib/pkgconfig
213 ${CMAKE_COMMAND} -DCMAKE_LIBRARY_PATH=${OUTPUT_DIR}/lib ${extraflags} ${BUILD_ARGS}
214 ${BUILD_DIR}/${id}/src/${id}
215 -DPACKAGE_CONFIG_PATH=${OUTPUT_DIR}/lib/pkgconfig
216 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
217 -DOUTPUT_DIR=${OUTPUT_DIR}
218 -DCMAKE_PREFIX_PATH=${OUTPUT_DIR}
219 -DCMAKE_INSTALL_PREFIX=${OUTPUT_DIR}
220 -DCMAKE_EXE_LINKER_FLAGS=-L${OUTPUT_DIR}/lib
221 -DCMAKE_INCLUDE_PATH=${OUTPUT_DIR}/include)
222 endif()
223
224 externalproject_add(${id}
225 URL ${url}
226 DOWNLOAD_DIR ${BUILD_DIR}/download
227 CONFIGURE_COMMAND ${CONFIGURE_COMMAND}
228 "${EXTERNALPROJECT_SETUP}")
229 endif()
230 else()
231 externalproject_add(${id}
232 SOURCE_DIR ${dir}
233 "${EXTERNALPROJECT_SETUP}")
234 endif()
235
236 if(deps)
237 add_dependencies(${id} ${deps})
238 endif()
239 endif()
240
241 # if the dependency is available for the target platform add it to the list of the addon's dependencies
242 # (even if the target already exists as it still has to be built before the addon)
243 if(${platform_found})
244 list(APPEND ${addon}_DEPS ${id})
245 endif()
246 endif()
247 endforeach()
248
249 # make the ${addon}_DEPS variable available to the calling script
250 set(${addon}_DEPS "${${addon}_DEPS}" PARENT_SCOPE)
251endfunction()
252
diff --git a/project/cmake/scripts/common/Macros.cmake b/project/cmake/scripts/common/Macros.cmake
deleted file mode 100644
index cce3245..0000000
--- a/project/cmake/scripts/common/Macros.cmake
+++ /dev/null
@@ -1,622 +0,0 @@
1# This script holds the main functions used to construct the build system
2
3# include system specific macros
4include(${CORE_SOURCE_DIR}/project/cmake/scripts/${CORE_SYSTEM_NAME}/Macros.cmake)
5
6# IDEs: Group source files in target in folders (file system hierarchy)
7# Source: http://blog.audio-tk.com/2015/09/01/sorting-source-files-and-projects-in-folders-with-cmake-and-visual-studioxcode/
8# Arguments:
9# target The target that shall be grouped by folders.
10# Optional Arguments:
11# RELATIVE allows to specify a different reference folder.
12function(source_group_by_folder target)
13 if(NOT TARGET ${target})
14 message(FATAL_ERROR "There is no target named '${target}'")
15 endif()
16
17 set(SOURCE_GROUP_DELIMITER "/")
18
19 cmake_parse_arguments(arg "" "RELATIVE" "" ${ARGN})
20 if(arg_RELATIVE)
21 set(relative_dir ${arg_RELATIVE})
22 else()
23 set(relative_dir ${CMAKE_CURRENT_SOURCE_DIR})
24 endif()
25
26 get_property(files TARGET ${target} PROPERTY SOURCES)
27 if(files)
28 list(SORT files)
29
30 if(CMAKE_GENERATOR STREQUAL Xcode)
31 set_target_properties(${target} PROPERTIES SOURCES "${files}")
32 endif()
33 endif()
34 foreach(file ${files})
35 if(NOT IS_ABSOLUTE ${file})
36 set(file ${CMAKE_CURRENT_SOURCE_DIR}/${file})
37 endif()
38 file(RELATIVE_PATH relative_file ${relative_dir} ${file})
39 get_filename_component(dir "${relative_file}" DIRECTORY)
40 if(NOT dir STREQUAL "${last_dir}")
41 if(files)
42 source_group("${last_dir}" FILES ${files})
43 endif()
44 set(files "")
45 endif()
46 set(files ${files} ${file})
47 set(last_dir "${dir}")
48 endforeach(file)
49 if(files)
50 source_group("${last_dir}" FILES ${files})
51 endif()
52endfunction()
53
54# Add sources to main application
55# Arguments:
56# name name of the library to add
57# Implicit arguments:
58# ENABLE_STATIC_LIBS Build static libraries per directory
59# SOURCES the sources of the library
60# HEADERS the headers of the library (only for IDE support)
61# OTHERS other library related files (only for IDE support)
62# On return:
63# Library will be built, optionally added to ${core_DEPENDS}
64# Sets CORE_LIBRARY for calls for setting target specific options
65function(core_add_library name)
66 if(ENABLE_STATIC_LIBS)
67 add_library(${name} STATIC ${SOURCES} ${HEADERS} ${OTHERS})
68 set_target_properties(${name} PROPERTIES PREFIX "")
69 set(core_DEPENDS ${name} ${core_DEPENDS} CACHE STRING "" FORCE)
70 add_dependencies(${name} libcpluff ffmpeg dvdnav crossguid)
71 set(CORE_LIBRARY ${name} PARENT_SCOPE)
72
73 # Add precompiled headers to Kodi main libraries
74 if(CORE_SYSTEM_NAME STREQUAL windows)
75 add_precompiled_header(${name} pch.h ${CORE_SOURCE_DIR}/xbmc/platform/win32/pch.cpp PCH_TARGET kodi)
76 set_language_cxx(${name})
77 target_link_libraries(${name} PUBLIC effects11)
78 endif()
79 else()
80 foreach(src IN LISTS SOURCES HEADERS OTHERS)
81 get_filename_component(src_path "${src}" ABSOLUTE)
82 list(APPEND FILES ${src_path})
83 endforeach()
84 target_sources(lib${APP_NAME_LC} PRIVATE ${FILES})
85 set(CORE_LIBRARY lib${APP_NAME_LC} PARENT_SCOPE)
86 endif()
87endfunction()
88
89# Add a test library, and add sources to list for gtest integration macros
90function(core_add_test_library name)
91 if(ENABLE_STATIC_LIBS)
92 add_library(${name} STATIC ${SOURCES} ${SUPPORTED_SOURCES} ${HEADERS} ${OTHERS})
93 set_target_properties(${name} PROPERTIES PREFIX ""
94 EXCLUDE_FROM_ALL 1
95 FOLDER "Build Utilities/tests")
96 add_dependencies(${name} libcpluff ffmpeg dvdnav crossguid)
97 set(test_archives ${test_archives} ${name} CACHE STRING "" FORCE)
98 endif()
99 foreach(src IN LISTS SOURCES)
100 get_filename_component(src_path "${src}" ABSOLUTE)
101 set(test_sources "${src_path}" ${test_sources} CACHE STRING "" FORCE)
102 endforeach()
103endfunction()
104
105# Add an addon callback library
106# Arguments:
107# name name of the library to add
108# Implicit arguments:
109# SOURCES the sources of the library
110# HEADERS the headers of the library (only for IDE support)
111# OTHERS other library related files (only for IDE support)
112# On return:
113# Library target is defined and added to LIBRARY_FILES
114function(core_add_addon_library name)
115 get_filename_component(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} NAME)
116 list(APPEND SOURCES lib${name}.cpp)
117 core_add_shared_library(${name} OUTPUT_DIRECTORY addons/${DIRECTORY})
118 set_target_properties(${name} PROPERTIES FOLDER addons)
119 target_include_directories(${name} PRIVATE
120 ${CMAKE_CURRENT_SOURCE_DIR}
121 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi
122 ${CORE_SOURCE_DIR}/xbmc)
123endfunction()
124
125# Add an dl-loaded shared library
126# Arguments:
127# name name of the library to add
128# Optional arguments:
129# WRAPPED wrap this library on POSIX platforms to add VFS support for
130# libraries that would otherwise not support it.
131# OUTPUT_DIRECTORY where to create the library in the build dir
132# (default: system)
133# Implicit arguments:
134# SOURCES the sources of the library
135# HEADERS the headers of the library (only for IDE support)
136# OTHERS other library related files (only for IDE support)
137# On return:
138# Library target is defined and added to LIBRARY_FILES
139function(core_add_shared_library name)
140 cmake_parse_arguments(arg "WRAPPED" "OUTPUT_DIRECTORY" "" ${ARGN})
141 if(arg_OUTPUT_DIRECTORY)
142 set(OUTPUT_DIRECTORY ${arg_OUTPUT_DIRECTORY})
143 else()
144 if(NOT CORE_SYSTEM_NAME STREQUAL windows)
145 set(OUTPUT_DIRECTORY system)
146 endif()
147 endif()
148 if(CORE_SYSTEM_NAME STREQUAL windows)
149 set(OUTPUT_NAME lib${name})
150 else()
151 set(OUTPUT_NAME lib${name}-${ARCH})
152 endif()
153
154 if(NOT arg_WRAPPED OR CORE_SYSTEM_NAME STREQUAL windows)
155 add_library(${name} SHARED ${SOURCES} ${HEADERS} ${OTHERS})
156 set_target_properties(${name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${OUTPUT_DIRECTORY}
157 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${OUTPUT_DIRECTORY}
158 OUTPUT_NAME ${OUTPUT_NAME} PREFIX "")
159 foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
160 string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
161 set_target_properties(${name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${OUTPUT_DIRECTORY}
162 RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${OUTPUT_DIRECTORY})
163 endforeach()
164
165 set(LIBRARY_FILES ${LIBRARY_FILES} ${CMAKE_BINARY_DIR}/${OUTPUT_DIRECTORY}/${OUTPUT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX} CACHE STRING "" FORCE)
166 add_dependencies(${APP_NAME_LC}-libraries ${name})
167 else()
168 add_library(${name} STATIC ${SOURCES} ${HEADERS} ${OTHERS})
169 set_target_properties(${name} PROPERTIES POSITION_INDEPENDENT_CODE 1)
170 core_link_library(${name} ${OUTPUT_DIRECTORY}/lib${name})
171 endif()
172endfunction()
173
174# Sets the compile language for all C source files in a target to CXX.
175# Needs to be called from the CMakeLists.txt that defines the target.
176# Arguments:
177# target target
178function(set_language_cxx target)
179 get_property(sources TARGET ${target} PROPERTY SOURCES)
180 foreach(file IN LISTS sources)
181 if(file MATCHES "\.c$")
182 set_source_files_properties(${file} PROPERTIES LANGUAGE CXX)
183 endif()
184 endforeach()
185endfunction()
186
187# Add a data file to installation list with a mirror in build tree
188# Mirroring files in the buildtree allows to execute the app from there.
189# Arguments:
190# file full path to file to mirror
191# Optional Arguments:
192# NO_INSTALL: exclude file from installation target (only mirror)
193# DIRECTORY: directory where the file should be mirrored to
194# (default: preserve tree structure relative to CORE_SOURCE_DIR)
195# On return:
196# Files is mirrored to the build tree and added to ${install_data}
197# (if NO_INSTALL is not given).
198function(copy_file_to_buildtree file)
199 cmake_parse_arguments(arg "NO_INSTALL" "DIRECTORY" "" ${ARGN})
200 if(arg_DIRECTORY)
201 set(outdir ${arg_DIRECTORY})
202 get_filename_component(outfile ${file} NAME)
203 set(outfile ${outdir}/${outfile})
204 else()
205 string(REPLACE "${CORE_SOURCE_DIR}/" "" outfile ${file})
206 get_filename_component(outdir ${outfile} DIRECTORY)
207 endif()
208
209 if(NOT TARGET export-files)
210 file(REMOVE ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ExportFiles.cmake)
211 add_custom_target(export-files ALL COMMENT "Copying files into build tree"
212 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ExportFiles.cmake)
213 set_target_properties(export-files PROPERTIES FOLDER "Build Utilities")
214 file(APPEND ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ExportFiles.cmake "# Export files to build tree\n")
215 endif()
216
217 # Exclude autotools build artefacts and other blacklisted files in source tree.
218 if(file MATCHES "(Makefile|\.in|\.xbt|\.so|\.dylib|\.gitignore)$")
219 if(VERBOSE)
220 message(STATUS "copy_file_to_buildtree - ignoring file: ${file}")
221 endif()
222 return()
223 endif()
224
225 if(NOT file STREQUAL ${CMAKE_BINARY_DIR}/${outfile})
226 if(VERBOSE)
227 message(STATUS "copy_file_to_buildtree - copying file: ${file} -> ${CMAKE_BINARY_DIR}/${outfile}")
228 endif()
229 file(APPEND ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ExportFiles.cmake
230 "file(COPY \"${file}\" DESTINATION \"${CMAKE_BINARY_DIR}/${outdir}\")\n")
231 endif()
232
233 if(NOT arg_NO_INSTALL)
234 list(APPEND install_data ${outfile})
235 set(install_data ${install_data} PARENT_SCOPE)
236 endif()
237endfunction()
238
239# Add data files to installation list with a mirror in build tree.
240# reads list of files to install from a given list of text files.
241# Arguments:
242# pattern globbing pattern for text files to read
243# Optional Arguments:
244# NO_INSTALL: exclude files from installation target
245# Implicit arguments:
246# CORE_SOURCE_DIR - root of source tree
247# On return:
248# Files are mirrored to the build tree and added to ${install_data}
249# (if NO_INSTALL is not given).
250function(copy_files_from_filelist_to_buildtree pattern)
251 # copies files listed in text files to the buildtree
252 # Input: [glob pattern: filepattern]
253 cmake_parse_arguments(arg "NO_INSTALL" "" "" ${ARGN})
254 list(APPEND pattern ${ARGN})
255 list(SORT pattern)
256 if(VERBOSE)
257 message(STATUS "copy_files_from_filelist_to_buildtree - got pattern: ${pattern}")
258 endif()
259 foreach(pat ${pattern})
260 file(GLOB filenames ${pat})
261 foreach(filename ${filenames})
262 string(STRIP ${filename} filename)
263 core_file_read_filtered(fstrings ${filename})
264 foreach(dir ${fstrings})
265 string(REPLACE " " ";" dir ${dir})
266 list(GET dir 0 src)
267 list(LENGTH dir len)
268 if(len EQUAL 1)
269 set(dest)
270 else()
271 list(GET dir -1 dest)
272 endif()
273
274 # If the full path to an existing file is specified then add that single file.
275 # Don't recursively add all files with the given name.
276 if(EXISTS ${CORE_SOURCE_DIR}/${src} AND NOT IS_DIRECTORY ${CORE_SOURCE_DIR}/${src})
277 set(files ${src})
278 else()
279 file(GLOB_RECURSE files RELATIVE ${CORE_SOURCE_DIR} ${CORE_SOURCE_DIR}/${src})
280 endif()
281
282 foreach(file ${files})
283 if(arg_NO_INSTALL)
284 copy_file_to_buildtree(${CORE_SOURCE_DIR}/${file} DIRECTORY ${dest} NO_INSTALL)
285 else()
286 copy_file_to_buildtree(${CORE_SOURCE_DIR}/${file} DIRECTORY ${dest})
287 endif()
288 endforeach()
289 endforeach()
290 endforeach()
291 endforeach()
292 set(install_data ${install_data} PARENT_SCOPE)
293endfunction()
294
295# helper macro to set modified variables in parent scope
296macro(export_dep)
297 set(SYSTEM_INCLUDES ${SYSTEM_INCLUDES} PARENT_SCOPE)
298 set(DEPLIBS ${DEPLIBS} PARENT_SCOPE)
299 set(DEP_DEFINES ${DEP_DEFINES} PARENT_SCOPE)
300 set(${depup}_FOUND ${${depup}_FOUND} PARENT_SCOPE)
301 mark_as_advanced(${depup}_LIBRARIES)
302endmacro()
303
304# add a required dependency of main application
305# Arguments:
306# dep name of find rule for dependency, used uppercased for variable prefix
307# On return:
308# dependency added to ${SYSTEM_INCLUDES}, ${DEPLIBS} and ${DEP_DEFINES}
309function(core_require_dep dep)
310 find_package(${dep} REQUIRED)
311 string(TOUPPER ${dep} depup)
312 list(APPEND SYSTEM_INCLUDES ${${depup}_INCLUDE_DIRS})
313 list(APPEND DEPLIBS ${${depup}_LIBRARIES})
314 list(APPEND DEP_DEFINES ${${depup}_DEFINITIONS})
315 export_dep()
316endfunction()
317
318# add a required dyloaded dependency of main application
319# Arguments:
320# dep name of find rule for dependency, used uppercased for variable prefix
321# On return:
322# dependency added to ${SYSTEM_INCLUDES}, ${dep}_SONAME is set up
323function(core_require_dyload_dep dep)
324 find_package(${dep} REQUIRED)
325 string(TOUPPER ${dep} depup)
326 list(APPEND SYSTEM_INCLUDES ${${depup}_INCLUDE_DIRS})
327 list(APPEND DEP_DEFINES ${${depup}_DEFINITIONS})
328 find_soname(${depup} REQUIRED)
329 export_dep()
330 set(${depup}_SONAME ${${depup}_SONAME} PARENT_SCOPE)
331endfunction()
332
333# helper macro for optional deps
334macro(setup_enable_switch)
335 string(TOUPPER ${dep} depup)
336 if(ARGV1)
337 set(enable_switch ${ARGV1})
338 else()
339 set(enable_switch ENABLE_${depup})
340 endif()
341 # normal options are boolean, so we override set our ENABLE_FOO var to allow "auto" handling
342 set(${enable_switch} "AUTO" CACHE STRING "Enable ${depup} support?")
343endmacro()
344
345# add an optional dependency of main application
346# Arguments:
347# dep name of find rule for dependency, used uppercased for variable prefix
348# On return:
349# dependency optionally added to ${SYSTEM_INCLUDES}, ${DEPLIBS} and ${DEP_DEFINES}
350function(core_optional_dep dep)
351 setup_enable_switch()
352 if(${enable_switch} STREQUAL AUTO)
353 find_package(${dep})
354 elseif(${${enable_switch}})
355 find_package(${dep} REQUIRED)
356 endif()
357
358 if(${depup}_FOUND)
359 list(APPEND SYSTEM_INCLUDES ${${depup}_INCLUDE_DIRS})
360 list(APPEND DEPLIBS ${${depup}_LIBRARIES})
361 list(APPEND DEP_DEFINES ${${depup}_DEFINITIONS})
362 set(final_message ${final_message} "${depup} enabled: Yes" PARENT_SCOPE)
363 export_dep()
364 else()
365 set(final_message ${final_message} "${depup} enabled: No" PARENT_SCOPE)
366 endif()
367endfunction()
368
369# add an optional dyloaded dependency of main application
370# Arguments:
371# dep name of find rule for dependency, used uppercased for variable prefix
372# On return:
373# dependency optionally added to ${SYSTEM_INCLUDES}, ${DEP_DEFINES}, ${dep}_SONAME is set up
374function(core_optional_dyload_dep dep)
375 setup_enable_switch()
376 if(${enable_switch})
377 find_package(${dep})
378 if(${depup}_FOUND)
379 list(APPEND SYSTEM_INCLUDES ${${depup}_INCLUDE_DIRS})
380 find_soname(${depup} REQUIRED)
381 list(APPEND DEP_DEFINES ${${depup}_DEFINITIONS})
382 set(final_message ${final_message} "${depup} enabled: Yes" PARENT_SCOPE)
383 export_dep()
384 set(${depup}_SONAME ${${depup}_SONAME} PARENT_SCOPE)
385 endif()
386 endif()
387endfunction()
388
389function(core_file_read_filtered result filepattern)
390 # Reads STRINGS from text files
391 # with comments filtered out
392 # Result: [list: result]
393 # Input: [glob pattern: filepattern]
394 file(GLOB filenames ${filepattern})
395 list(SORT filenames)
396 foreach(filename ${filenames})
397 if(VERBOSE)
398 message(STATUS "core_file_read_filtered - filename: ${filename}")
399 endif()
400 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${filename})
401 file(STRINGS ${filename} fstrings REGEX "^[^#//]")
402 foreach(fstring ${fstrings})
403 string(REGEX REPLACE "^(.*)#(.*)" "\\1" fstring ${fstring})
404 string(REGEX REPLACE "[ \n\r\t]//.*" "" fstring ${fstring})
405 string(STRIP ${fstring} fstring)
406 list(APPEND filename_strings ${fstring})
407 endforeach()
408 endforeach()
409 set(${result} ${filename_strings} PARENT_SCOPE)
410endfunction()
411
412function(core_add_subdirs_from_filelist files)
413 # Adds subdirectories from a sorted list of files
414 # Input: [list: filenames] [bool: sort]
415 foreach(arg ${ARGN})
416 list(APPEND files ${arg})
417 endforeach()
418 list(SORT files)
419 if(VERBOSE)
420 message(STATUS "core_add_subdirs_from_filelist - got pattern: ${files}")
421 endif()
422 foreach(filename ${files})
423 string(STRIP ${filename} filename)
424 core_file_read_filtered(fstrings ${filename})
425 foreach(subdir ${fstrings})
426 string(REPLACE " " ";" subdir ${subdir})
427 list(GET subdir 0 subdir_src)
428 list(GET subdir -1 subdir_dest)
429 if(VERBOSE)
430 message(STATUS " core_add_subdirs_from_filelist - adding subdir: ${CORE_SOURCE_DIR}/${subdir_src} -> ${CORE_BUILD_DIR}/${subdir_dest}")
431 endif()
432 add_subdirectory(${CORE_SOURCE_DIR}/${subdir_src} ${CORE_BUILD_DIR}/${subdir_dest})
433 endforeach()
434 endforeach()
435endfunction()
436
437macro(core_add_optional_subdirs_from_filelist pattern)
438 # Adds subdirectories from text files
439 # if the option(s) in the 3rd field are enabled
440 # Input: [glob pattern: filepattern]
441 foreach(arg ${ARGN})
442 list(APPEND pattern ${arg})
443 endforeach()
444 foreach(elem ${pattern})
445 string(STRIP ${elem} elem)
446 list(APPEND filepattern ${elem})
447 endforeach()
448
449 file(GLOB filenames ${filepattern})
450 list(SORT filenames)
451 if(VERBOSE)
452 message(STATUS "core_add_optional_subdirs_from_filelist - got pattern: ${filenames}")
453 endif()
454
455 foreach(filename ${filenames})
456 if(VERBOSE)
457 message(STATUS "core_add_optional_subdirs_from_filelist - reading file: ${filename}")
458 endif()
459 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${filename})
460 file(STRINGS ${filename} fstrings REGEX "^[^#//]")
461 foreach(line ${fstrings})
462 string(REPLACE " " ";" line "${line}")
463 list(GET line 0 subdir_src)
464 list(GET line 1 subdir_dest)
465 list(GET line 3 opts)
466 foreach(opt ${opts})
467 if(ENABLE_${opt})
468 if(VERBOSE)
469 message(STATUS " core_add_optional_subdirs_from_filelist - adding subdir: ${CORE_SOURCE_DIR}/${subdir_src} -> ${CORE_BUILD_DIR}/${subdir_dest}")
470 endif()
471 add_subdirectory(${CORE_SOURCE_DIR}/${subdir_src} ${CORE_BUILD_DIR}/${subdir_dest})
472 else()
473 if(VERBOSE)
474 message(STATUS " core_add_optional_subdirs_from_filelist: OPTION ${opt} not enabled for ${subdir_src}, skipping subdir")
475 endif()
476 endif()
477 endforeach()
478 endforeach()
479 endforeach()
480endmacro()
481
482# Generates an RFC2822 timestamp
483#
484# The following variable is set:
485# RFC2822_TIMESTAMP
486function(rfc2822stamp)
487 execute_process(COMMAND date -R
488 OUTPUT_VARIABLE RESULT)
489 set(RFC2822_TIMESTAMP ${RESULT} PARENT_SCOPE)
490endfunction()
491
492# Generates an user stamp from git config info
493#
494# The following variable is set:
495# PACKAGE_MAINTAINER - user stamp in the form of "username <username@example.com>"
496# if no git tree is found, value is set to "nobody <nobody@example.com>"
497function(userstamp)
498 find_package(Git)
499 if(GIT_FOUND AND EXISTS ${CORE_SOURCE_DIR}/.git)
500 execute_process(COMMAND ${GIT_EXECUTABLE} config user.name
501 OUTPUT_VARIABLE username
502 WORKING_DIRECTORY ${CORE_SOURCE_DIR}
503 OUTPUT_STRIP_TRAILING_WHITESPACE)
504 execute_process(COMMAND ${GIT_EXECUTABLE} config user.email
505 OUTPUT_VARIABLE useremail
506 WORKING_DIRECTORY ${CORE_SOURCE_DIR}
507 OUTPUT_STRIP_TRAILING_WHITESPACE)
508 set(PACKAGE_MAINTAINER "${username} <${useremail}>" PARENT_SCOPE)
509 else()
510 set(PACKAGE_MAINTAINER "nobody <nobody@example.com>" PARENT_SCOPE)
511 endif()
512endfunction()
513
514# Parses git info and sets variables used to identify the build
515# Arguments:
516# stamp variable name to return
517# Optional Arguments:
518# FULL: generate git HEAD commit in the form of 'YYYYMMDD-hash'
519# if git tree is dirty, value is set in the form of 'YYYYMMDD-hash-dirty'
520# if no git tree is found, value is set in the form of 'YYYYMMDD-nogitfound'
521# if FULL is not given, stamp is generated following the same process as above
522# but without 'YYYYMMDD'
523# On return:
524# Variable is set with generated stamp to PARENT_SCOPE
525function(core_find_git_rev stamp)
526 # allow manual setting GIT_VERSION
527 if(GIT_VERSION)
528 set(${stamp} ${GIT_VERSION} PARENT_SCOPE)
529 else()
530 find_package(Git)
531 if(GIT_FOUND AND EXISTS ${CORE_SOURCE_DIR}/.git)
532 execute_process(COMMAND ${GIT_EXECUTABLE} diff-files --ignore-submodules --quiet --
533 RESULT_VARIABLE status_code
534 WORKING_DIRECTORY ${CORE_SOURCE_DIR})
535 if(NOT status_code)
536 execute_process(COMMAND ${GIT_EXECUTABLE} diff-index --ignore-submodules --quiet HEAD --
537 RESULT_VARIABLE status_code
538 WORKING_DIRECTORY ${CORE_SOURCE_DIR})
539 endif()
540 if(status_code)
541 execute_process(COMMAND ${GIT_EXECUTABLE} log -n 1 --pretty=format:"%h-dirty" HEAD
542 OUTPUT_VARIABLE HASH
543 WORKING_DIRECTORY ${CORE_SOURCE_DIR})
544 string(SUBSTRING ${HASH} 1 13 HASH)
545 else()
546 execute_process(COMMAND ${GIT_EXECUTABLE} log -n 1 --pretty=format:"%h" HEAD
547 OUTPUT_VARIABLE HASH
548 WORKING_DIRECTORY ${CORE_SOURCE_DIR})
549 string(SUBSTRING ${HASH} 1 7 HASH)
550 endif()
551 execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:"%cd" --date=short HEAD
552 OUTPUT_VARIABLE DATE
553 WORKING_DIRECTORY ${CORE_SOURCE_DIR})
554 string(SUBSTRING ${DATE} 1 10 DATE)
555 string(REPLACE "-" "" DATE ${DATE})
556 else()
557 string(TIMESTAMP DATE "%Y%m%d" UTC)
558 set(HASH "nogitfound")
559 endif()
560 cmake_parse_arguments(arg "FULL" "" "" ${ARGN})
561 if(arg_FULL)
562 set(${stamp} ${DATE}-${HASH} PARENT_SCOPE)
563 else()
564 set(${stamp} ${HASH} PARENT_SCOPE)
565 endif()
566 endif()
567endfunction()
568
569# Parses version.txt and libKODI_guilib.h and sets variables
570# used to construct dirs structure, file naming, API version, etc.
571#
572# The following variables are set from version.txt:
573# APP_NAME - app name
574# APP_NAME_LC - lowercased app name
575# APP_NAME_UC - uppercased app name
576# COMPANY_NAME - company name
577# APP_VERSION_MAJOR - the app version major
578# APP_VERSION_MINOR - the app version minor
579# APP_VERSION_TAG - the app version tag
580# APP_VERSION_TAG_LC - lowercased app version tag
581# APP_VERSION - the app version (${APP_VERSION_MAJOR}.${APP_VERSION_MINOR}-${APP_VERSION_TAG})
582# APP_ADDON_API - the addon API version in the form of 16.9.702
583# FILE_VERSION - file version in the form of 16,9,702,0 - Windows only
584#
585# The following variables are set from libKODI_guilib.h:
586# guilib_version - current ADDONGUI API version
587# guilib_version_min - minimal ADDONGUI API version
588macro(core_find_versions)
589 include(CMakeParseArguments)
590 core_file_read_filtered(version_list ${CORE_SOURCE_DIR}/version.txt)
591 string(REPLACE " " ";" version_list "${version_list}")
592 cmake_parse_arguments(APP "" "APP_NAME;COMPANY_NAME;WEBSITE;VERSION_MAJOR;VERSION_MINOR;VERSION_TAG;VERSION_CODE;ADDON_API" "" ${version_list})
593
594 set(APP_NAME ${APP_APP_NAME}) # inconsistency but APP_APP_NAME looks weird
595 string(TOLOWER ${APP_APP_NAME} APP_NAME_LC)
596 string(TOUPPER ${APP_APP_NAME} APP_NAME_UC)
597 set(COMPANY_NAME ${APP_COMPANY_NAME})
598 set(APP_VERSION ${APP_VERSION_MAJOR}.${APP_VERSION_MINOR})
599 if(APP_VERSION_TAG)
600 set(APP_VERSION ${APP_VERSION}-${APP_VERSION_TAG})
601 string(TOLOWER ${APP_VERSION_TAG} APP_VERSION_TAG_LC)
602 endif()
603 string(REPLACE "." "," FILE_VERSION ${APP_ADDON_API}.0)
604 file(STRINGS ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_guilib.h guilib_version REGEX "^.*GUILIB_API_VERSION (.*)$")
605 string(REGEX REPLACE ".*\"(.*)\"" "\\1" guilib_version ${guilib_version})
606 file(STRINGS ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_guilib.h guilib_version_min REGEX "^.*GUILIB_MIN_API_VERSION (.*)$")
607 string(REGEX REPLACE ".*\"(.*)\"" "\\1" guilib_version_min ${guilib_version_min})
608 # unset variables not used anywhere else
609 unset(version_list)
610 unset(APP_APP_NAME)
611
612 # bail if we can't parse version.txt
613 if(NOT DEFINED APP_VERSION_MAJOR OR NOT DEFINED APP_VERSION_MINOR)
614 message(FATAL_ERROR "Could not determine app version! Make sure that ${CORE_SOURCE_DIR}/version.txt exists")
615 endif()
616
617 # bail if we can't parse libKODI_guilib.h
618 if(NOT DEFINED guilib_version OR NOT DEFINED guilib_version_min)
619 message(FATAL_ERROR "Could not determine add-on API version! Make sure that ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_guilib.h exists")
620 endif()
621endmacro()
622
diff --git a/project/cmake/scripts/common/PrepareEnv.cmake b/project/cmake/scripts/common/PrepareEnv.cmake
deleted file mode 100644
index 51be739..0000000
--- a/project/cmake/scripts/common/PrepareEnv.cmake
+++ /dev/null
@@ -1,64 +0,0 @@
1# parse version.txt and libKODI_guilib.h to get the version and API info
2include(${CORE_SOURCE_DIR}/project/cmake/scripts/common/Macros.cmake)
3core_find_versions()
4
5# in case we need to download something, set KODI_MIRROR to the default if not alread set
6if(NOT DEFINED KODI_MIRROR)
7 set(KODI_MIRROR "http://mirrors.kodi.tv")
8endif()
9
10### copy all the addon binding header files to include/kodi
11# make sure include/kodi exists and is empty
12set(APP_LIB_DIR ${ADDON_DEPENDS_PATH}/lib/${APP_NAME_LC})
13if(NOT EXISTS "${APP_LIB_DIR}/")
14 file(MAKE_DIRECTORY ${APP_LIB_DIR})
15endif()
16
17set(APP_DATA_DIR ${ADDON_DEPENDS_PATH}/share/${APP_NAME_LC})
18if(NOT EXISTS "${APP_DATA_DIR}/")
19 file(MAKE_DIRECTORY ${APP_DATA_DIR})
20endif()
21
22set(APP_INCLUDE_DIR ${ADDON_DEPENDS_PATH}/include/${APP_NAME_LC})
23if(NOT EXISTS "${APP_INCLUDE_DIR}/")
24 file(MAKE_DIRECTORY ${APP_INCLUDE_DIR})
25endif()
26
27# make sure C++11 is always set
28if(NOT WIN32)
29 string(REGEX MATCH "-std=(gnu|c)\\+\\+11" cxx11flag "${CMAKE_CXX_FLAGS}")
30 if(NOT cxx11flag)
31 set(CXX11_SWITCH "-std=c++11")
32 endif()
33endif()
34
35# generate the proper KodiConfig.cmake file
36configure_file(${CORE_SOURCE_DIR}/project/cmake/KodiConfig.cmake.in ${APP_LIB_DIR}/KodiConfig.cmake @ONLY)
37
38# copy cmake helpers to lib/kodi
39file(COPY ${CORE_SOURCE_DIR}/project/cmake/scripts/common/AddonHelpers.cmake
40 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/AddOptions.cmake
41 DESTINATION ${APP_LIB_DIR})
42
43### copy all the addon binding header files to include/kodi
44# parse addon-bindings.mk to get the list of header files to copy
45core_file_read_filtered(bindings ${CORE_SOURCE_DIR}/xbmc/addons/addon-bindings.mk)
46foreach(binding ${bindings})
47 string(REPLACE " =" ";" binding "${binding}")
48 string(REPLACE "+=" ";" binding "${binding}")
49 list(GET binding 1 header)
50 # copy the header file to include/kodi
51 configure_file(${CORE_SOURCE_DIR}/${header} ${APP_INCLUDE_DIR} COPYONLY)
52endforeach()
53
54### processing additional tools required by the platform
55if(EXISTS ${CORE_SOURCE_DIR}/project/cmake/scripts/${CORE_SYSTEM_NAME}/tools/)
56 file(GLOB platform_tools ${CORE_SOURCE_DIR}/project/cmake/scripts/${CORE_SYSTEM_NAME}/tools/*.cmake)
57 foreach(platform_tool ${platform_tools})
58 get_filename_component(platform_tool_name ${platform_tool} NAME_WE)
59 message(STATUS "Processing ${CORE_SYSTEM_NAME} specific tool: ${platform_tool_name}")
60
61 # include the file
62 include(${platform_tool})
63 endforeach()
64endif()
diff --git a/project/cmake/scripts/common/ProjectMacros.cmake b/project/cmake/scripts/common/ProjectMacros.cmake
deleted file mode 100644
index e73ef90..0000000
--- a/project/cmake/scripts/common/ProjectMacros.cmake
+++ /dev/null
@@ -1,89 +0,0 @@
1# This script holds macros which are project specific
2
3# Pack a skin xbt file
4# Arguments:
5# input input directory to pack
6# output ouput xbt file
7# On return:
8# xbt is added to ${XBT_FILES}
9function(pack_xbt input output)
10 file(GLOB_RECURSE MEDIA_FILES ${input}/*)
11 get_filename_component(dir ${output} DIRECTORY)
12 add_custom_command(OUTPUT ${output}
13 COMMAND ${CMAKE_COMMAND} -E make_directory ${dir}
14 COMMAND TexturePacker::TexturePacker
15 ARGS -input ${input}
16 -output ${output}
17 -dupecheck
18 DEPENDS ${MEDIA_FILES})
19 list(APPEND XBT_FILES ${output})
20 set(XBT_FILES ${XBT_FILES} PARENT_SCOPE)
21endfunction()
22
23# Add a skin to installation list, mirroring it in build tree, packing textures
24# Arguments:
25# skin skin directory
26# On return:
27# xbt is added to ${XBT_FILES}, data added to ${install_data}, mirror in build tree
28function(copy_skin_to_buildtree skin)
29 file(GLOB_RECURSE FILES ${skin}/*)
30 file(GLOB_RECURSE MEDIA_FILES ${skin}/media/*)
31 list(REMOVE_ITEM FILES ${MEDIA_FILES})
32 foreach(file ${FILES})
33 copy_file_to_buildtree(${file})
34 endforeach()
35 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${dest}/media)
36 string(REPLACE "${CORE_SOURCE_DIR}/" "" dest ${skin})
37 pack_xbt(${skin}/media ${CMAKE_BINARY_DIR}/${dest}/media/Textures.xbt)
38
39 file(GLOB THEMES RELATIVE ${skin}/themes ${skin}/themes/*)
40 foreach(theme ${THEMES})
41 pack_xbt(${skin}/themes/${theme} ${CMAKE_BINARY_DIR}/${dest}/media/${theme}.xbt)
42 endforeach()
43
44 set(XBT_FILES ${XBT_FILES} PARENT_SCOPE)
45 set(install_data ${install_data} PARENT_SCOPE)
46endfunction()
47
48# Get GTest tests as CMake tests.
49# Copied from FindGTest.cmake
50# Thanks to Daniel Blezek <blezek@gmail.com> for the GTEST_ADD_TESTS code
51function(GTEST_ADD_TESTS executable extra_args)
52 if(NOT ARGN)
53 message(FATAL_ERROR "Missing ARGN: Read the documentation for GTEST_ADD_TESTS")
54 endif()
55 foreach(source ${ARGN})
56 # This assumes that every source file passed in exists. Consider using
57 # SUPPORT_SOURCES for source files which do not contain tests and might
58 # have to be generated.
59 file(READ "${source}" contents)
60 string(REGEX MATCHALL "TEST_?[F]?\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents})
61 foreach(hit ${found_tests})
62 string(REGEX REPLACE ".*\\( *([A-Za-z_0-9]+), *([A-Za-z_0-9]+) *\\).*" "\\1.\\2" test_name ${hit})
63 add_test(${test_name} ${executable} --gtest_filter=${test_name} ${extra_args})
64 endforeach()
65 # Groups parametrized tests under a single ctest entry
66 string(REGEX MATCHALL "INSTANTIATE_TEST_CASE_P\\(([^,]+), *([^,]+)" found_tests2 ${contents})
67 foreach(hit ${found_tests2})
68 string(SUBSTRING ${hit} 24 -1 test_name)
69 string(REPLACE "," ";" test_name "${test_name}")
70 list(GET test_name 0 filter_name)
71 list(GET test_name 1 test_prefix)
72 string(STRIP ${test_prefix} test_prefix)
73 add_test(${test_prefix}.${filter_name} ${executable} --gtest_filter=${filter_name}* ${extra_args})
74 endforeach()
75 endforeach()
76endfunction()
77
78function(whole_archive output)
79 if(CMAKE_CXX_COMPILER_ID STREQUAL GNU OR CMAKE_CXX_COMPILER_ID STREQUAL Clang)
80 set(${output} -Wl,--whole-archive ${ARGN} -Wl,--no-whole-archive PARENT_SCOPE)
81 elseif(CMAKE_CXX_COMPILER_ID STREQUAL AppleClang)
82 foreach(library ${ARGN})
83 list(APPEND ${output} -Wl,-force_load ${library})
84 set(${output} ${${output}} PARENT_SCOPE)
85 endforeach()
86 else()
87 set(${output} ${ARGN} PARENT_SCOPE)
88 endif()
89endfunction()
diff --git a/project/cmake/scripts/common/Uninstall.cmake b/project/cmake/scripts/common/Uninstall.cmake
deleted file mode 100644
index 5660e19..0000000
--- a/project/cmake/scripts/common/Uninstall.cmake
+++ /dev/null
@@ -1,22 +0,0 @@
1# Uninstall target
2set(MANIFEST ${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt)
3if(EXISTS ${MANIFEST})
4 file(STRINGS ${MANIFEST} files)
5 foreach(file IN LISTS files)
6 if(EXISTS $ENV{DESTDIR}${file})
7 message(STATUS "Uninstalling: ${file}")
8 execute_process(
9 COMMAND ${CMAKE_COMMAND} -E remove $ENV{DESTDIR}${file}
10 OUTPUT_VARIABLE rm_out
11 RESULT_VARIABLE rm_retval
12 )
13 if(NOT "${rm_retval}" STREQUAL 0)
14 message(FATAL_ERROR "Failed to remove file: $ENV{DESTDIR}${file}")
15 endif()
16 else()
17 message(STATUS "File does not exist: $ENV{DESTDIR}${file}")
18 endif()
19 endforeach(file)
20else()
21 message(STATUS "Cannot find install manifest: '${MANIFEST}'")
22endif()
diff --git a/project/cmake/scripts/freebsd/ArchSetup.cmake b/project/cmake/scripts/freebsd/ArchSetup.cmake
deleted file mode 100644
index 013205c..0000000
--- a/project/cmake/scripts/freebsd/ArchSetup.cmake
+++ /dev/null
@@ -1,16 +0,0 @@
1set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_FREEBSD)
2set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_FILE_DEFINED
3 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64)
4set(PLATFORM_DIR linux)
5set(SYSTEM_LDFLAGS -L/usr/local/lib)
6if(WITH_ARCH)
7 set(ARCH ${WITH_ARCH})
8else()
9 if(CMAKE_SYSTEM_PROCESSOR STREQUAL amd64)
10 set(ARCH x86_64-freebsd)
11 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i.86")
12 set(ARCH x86-freebsd)
13 else()
14 message(WARNING "unknown CPU: ${CPU}")
15 endif()
16endif()
diff --git a/project/cmake/scripts/freebsd/Install.cmake b/project/cmake/scripts/freebsd/Install.cmake
deleted file mode 120000
index 28ce012..0000000
--- a/project/cmake/scripts/freebsd/Install.cmake
+++ /dev/null
@@ -1 +0,0 @@
1../linux/Install.cmake \ No newline at end of file
diff --git a/project/cmake/scripts/freebsd/Macros.cmake b/project/cmake/scripts/freebsd/Macros.cmake
deleted file mode 120000
index 2fdbb25..0000000
--- a/project/cmake/scripts/freebsd/Macros.cmake
+++ /dev/null
@@ -1 +0,0 @@
1../linux/Macros.cmake \ No newline at end of file
diff --git a/project/cmake/scripts/freebsd/PathSetup.cmake b/project/cmake/scripts/freebsd/PathSetup.cmake
deleted file mode 120000
index 6786c1c..0000000
--- a/project/cmake/scripts/freebsd/PathSetup.cmake
+++ /dev/null
@@ -1 +0,0 @@
1../linux/PathSetup.cmake \ No newline at end of file
diff --git a/project/cmake/scripts/ios/ArchSetup.cmake b/project/cmake/scripts/ios/ArchSetup.cmake
deleted file mode 100644
index f3e8590..0000000
--- a/project/cmake/scripts/ios/ArchSetup.cmake
+++ /dev/null
@@ -1,57 +0,0 @@
1if(NOT CMAKE_TOOLCHAIN_FILE)
2 message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for ios. See ${PROJECT_SOURCE_DIR}/README.md")
3endif()
4
5set(CORE_MAIN_SOURCE ${CORE_SOURCE_DIR}/xbmc/platform/darwin/ios/XBMCApplication.m)
6
7set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_IOS)
8set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_DEFINED -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
9 -D__STDC_CONSTANT_MACROS)
10set(PLATFORM_DIR linux)
11set(CMAKE_SYSTEM_NAME Darwin)
12if(WITH_ARCH)
13 set(ARCH ${WITH_ARCH})
14else()
15 if(CPU STREQUAL armv7 OR CPU STREQUAL arm64)
16 set(CMAKE_OSX_ARCHITECTURES ${CPU})
17 set(ARCH arm-osx)
18 set(NEON False)
19 else()
20 message(SEND_ERROR "Unknown CPU: ${CPU}")
21 endif()
22endif()
23
24find_package(CXX11 REQUIRED)
25
26list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX})
27
28list(APPEND DEPLIBS "-framework CoreFoundation" "-framework CoreVideo"
29 "-framework CoreAudio" "-framework AudioToolbox"
30 "-framework QuartzCore" "-framework MediaPlayer"
31 "-framework CFNetwork" "-framework CoreGraphics"
32 "-framework Foundation" "-framework UIKit"
33 "-framework CoreMedia" "-framework AVFoundation"
34 "-framework VideoToolbox")
35
36set(ENABLE_DVDCSS OFF CACHE BOOL "" FORCE)
37set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE)
38
39set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "5.1")
40set(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2")
41
42set(CMAKE_XCODE_ATTRIBUTE_INLINES_ARE_PRIVATE_EXTERN OFF)
43set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN OFF)
44set(CMAKE_XCODE_ATTRIBUTE_COPY_PHASE_STRIP OFF)
45
46# Xcode strips dead code by default which breaks wrapping
47set(CMAKE_XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING OFF)
48
49# Unify output directories for iOS packaging scripts
50if(NOT CMAKE_GENERATOR MATCHES Xcode)
51 set(CORE_BUILD_CONFIG "${CORE_BUILD_CONFIG}-iphoneos")
52endif()
53set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CORE_BUILD_DIR}/${CORE_BUILD_CONFIG})
54foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
55 string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
56 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CORE_BUILD_DIR}/${CORE_BUILD_CONFIG})
57endforeach()
diff --git a/project/cmake/scripts/ios/Install.cmake b/project/cmake/scripts/ios/Install.cmake
deleted file mode 100644
index c49fcd5..0000000
--- a/project/cmake/scripts/ios/Install.cmake
+++ /dev/null
@@ -1,85 +0,0 @@
1# IOS packaging
2
3set(BUNDLE_RESOURCES ${CORE_SOURCE_DIR}/xbmc/platform/darwin/ios/Default-568h@2x.png
4 ${CORE_SOURCE_DIR}/xbmc/platform/darwin/ios/Default-667h@2x.png
5 ${CORE_SOURCE_DIR}/xbmc/platform/darwin/ios/Default-736h@3x.png
6 ${CORE_SOURCE_DIR}/xbmc/platform/darwin/ios/Default-Landscape-736h@3x.png
7 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29.png
8 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29@2x.png
9 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon40x40.png
10 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon40x40@2x.png
11 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon50x50.png
12 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon50x50@2x.png
13 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon57x57.png
14 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon57x57@2x.png
15 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon60x60.png
16 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon60x60@2x.png
17 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon72x72.png
18 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon72x72@2x.png
19 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon76x76.png
20 ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon76x76@2x.png)
21
22if(CMAKE_GENERATOR STREQUAL Xcode)
23 set(RESOURCE_LOCATION ${APP_NAME}.app)
24else()
25 set(RESOURCE_LOCATION ".")
26endif()
27
28target_sources(${APP_NAME_LC} PRIVATE ${BUNDLE_RESOURCES})
29foreach(file IN LISTS BUNDLE_RESOURCES)
30 set_source_files_properties(${file} PROPERTIES MACOSX_PACKAGE_LOCATION ${RESOURCE_LOCATION})
31endforeach()
32
33target_sources(${APP_NAME_LC} PRIVATE ${CORE_SOURCE_DIR}/xbmc/platform/darwin/ios/English.lproj/InfoPlist.strings)
34set_source_files_properties(${CORE_SOURCE_DIR}/xbmc/platform/darwin/ios/English.lproj/InfoPlist.strings PROPERTIES MACOSX_PACKAGE_LOCATION "${RESOURCE_LOCATION}/English.lproj")
35
36# Options for code signing propagated as env vars to Codesign.command via Xcode
37set(IOS_CODE_SIGN_IDENTITY "" CACHE STRING "Code Sign Identity")
38if(IOS_CODE_SIGN_IDENTITY)
39 set_target_properties(${APP_NAME_LC} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED TRUE
40 XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ${IOS_CODE_SIGN_IDENTITY})
41endif()
42
43add_custom_command(TARGET ${APP_NAME_LC} POST_BUILD
44 # TODO: Remove in sync with CopyRootFiles-ios expecting the ".bin" file
45 COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${APP_NAME_LC}>
46 $<TARGET_FILE_DIR:${APP_NAME_LC}>/${APP_NAME}.bin
47
48 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/DllPaths_generated.h
49 ${CMAKE_BINARY_DIR}/xbmc/DllPaths_generated.h
50 COMMAND "ACTION=build"
51 "TARGET_BUILD_DIR=$<TARGET_FILE_DIR:${APP_NAME_LC}>/.."
52 "TARGET_NAME=${APP_NAME}.app"
53 "APP_NAME=${APP_NAME}"
54 "PRODUCT_NAME=${APP_NAME}"
55 "WRAPPER_EXTENSION=app"
56 "SRCROOT=${CMAKE_BINARY_DIR}"
57 ${CORE_SOURCE_DIR}/tools/darwin/Support/CopyRootFiles-ios.command
58 COMMAND "XBMC_DEPENDS=${DEPENDS_PATH}"
59 "TARGET_BUILD_DIR=$<TARGET_FILE_DIR:${APP_NAME_LC}>/.."
60 "TARGET_NAME=${APP_NAME}.app"
61 "APP_NAME=${APP_NAME}"
62 "PRODUCT_NAME=${APP_NAME}"
63 "FULL_PRODUCT_NAME=${APP_NAME}.app"
64 "WRAPPER_EXTENSION=app"
65 "SRCROOT=${CMAKE_BINARY_DIR}"
66 ${CORE_SOURCE_DIR}/tools/darwin/Support/copyframeworks-ios.command
67 COMMAND "XBMC_DEPENDS_ROOT=${NATIVEPREFIX}/.."
68 "PLATFORM_NAME=${PLATFORM}"
69 "CODESIGNING_FOLDER_PATH=$<TARGET_FILE_DIR:${APP_NAME_LC}>"
70 "BUILT_PRODUCTS_DIR=$<TARGET_FILE_DIR:${APP_NAME_LC}>/.."
71 "WRAPPER_NAME=${APP_NAME}.app"
72 "APP_NAME=${APP_NAME}"
73 ${CORE_SOURCE_DIR}/tools/darwin/Support/Codesign.command
74)
75
76set(DEPENDS_ROOT_FOR_XCODE ${NATIVEPREFIX}/..)
77configure_file(${CORE_SOURCE_DIR}/tools/darwin/packaging/ios/mkdeb-ios.sh.in
78 ${CMAKE_BINARY_DIR}/tools/darwin/packaging/ios/mkdeb-ios.sh @ONLY)
79configure_file(${CORE_SOURCE_DIR}/tools/darwin/packaging/migrate_to_kodi_ios.sh.in
80 ${CMAKE_BINARY_DIR}/tools/darwin/packaging/migrate_to_kodi_ios.sh @ONLY)
81
82add_custom_target(deb
83 COMMAND sh ./mkdeb-ios.sh ${CORE_BUILD_CONFIG}
84 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tools/darwin/packaging/ios)
85add_dependencies(deb ${APP_NAME_LC})
diff --git a/project/cmake/scripts/ios/Macros.cmake b/project/cmake/scripts/ios/Macros.cmake
deleted file mode 120000
index 54c1b28..0000000
--- a/project/cmake/scripts/ios/Macros.cmake
+++ /dev/null
@@ -1 +0,0 @@
1../osx/Macros.cmake \ No newline at end of file
diff --git a/project/cmake/scripts/ios/PathSetup.cmake b/project/cmake/scripts/ios/PathSetup.cmake
deleted file mode 120000
index d7f25b2..0000000
--- a/project/cmake/scripts/ios/PathSetup.cmake
+++ /dev/null
@@ -1 +0,0 @@
1../osx/PathSetup.cmake \ No newline at end of file
diff --git a/project/cmake/scripts/linux/ArchSetup.cmake b/project/cmake/scripts/linux/ArchSetup.cmake
deleted file mode 100644
index bcd70df..0000000
--- a/project/cmake/scripts/linux/ArchSetup.cmake
+++ /dev/null
@@ -1,45 +0,0 @@
1set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_LINUX)
2set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_FILE_DEFINED
3 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64)
4set(PLATFORM_DIR linux)
5set(CMAKE_SYSTEM_NAME Linux)
6if(WITH_ARCH)
7 set(ARCH ${WITH_ARCH})
8else()
9 if(CPU STREQUAL x86_64)
10 set(ARCH x86_64-linux)
11 set(NEON False)
12 elseif(CPU MATCHES "i.86")
13 set(ARCH i486-linux)
14 set(NEON False)
15 add_options(CXX ALL_BUILDS "-msse")
16 elseif(CPU MATCHES arm)
17 set(ARCH arm)
18 set(NEON True)
19 elseif(CPU MATCHES aarch64 OR CPU MATCHES arm64)
20 set(ARCH aarch64)
21 set(NEON False)
22 else()
23 message(SEND_ERROR "Unknown CPU: ${CPU}")
24 endif()
25endif()
26
27# Make sure we strip binaries in Release build
28if(CMAKE_BUILD_TYPE STREQUAL Release AND CMAKE_COMPILER_IS_GNUCXX)
29 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
30endif()
31
32find_package(CXX11 REQUIRED)
33include(LDGOLD)
34
35# Code Coverage
36if(CMAKE_BUILD_TYPE STREQUAL Coverage)
37 set(COVERAGE_TEST_BINARY ${APP_NAME_LC}-test)
38 set(COVERAGE_SOURCE_DIR ${CORE_SOURCE_DIR})
39 set(COVERAGE_DEPENDS "\${APP_NAME_LC}" "\${APP_NAME_LC}-test")
40 set(COVERAGE_EXCLUDES */test/* lib/* */lib/*)
41endif()
42
43if(ENABLE_MIR)
44 set(ENABLE_VDPAU OFF CACHE BOOL "Disabling VDPAU since no Mir support" FORCE)
45endif()
diff --git a/project/cmake/scripts/linux/CodeCoverage.cmake b/project/cmake/scripts/linux/CodeCoverage.cmake
deleted file mode 100644
index efc2208..0000000
--- a/project/cmake/scripts/linux/CodeCoverage.cmake
+++ /dev/null
@@ -1,97 +0,0 @@
1# - CodeCoverage
2# Generate code coverage reports with LCOV and GCovr.
3#
4# Configuration:
5# COVERAGE_SOURCE_DIR - Source root directory (default ${CMAKE_SOURCE_DIR}).
6# COVERAGE_BINARY_DIR - Directory where the coverage reports (and intermediate files)
7# are generated to.
8# COVERAGE_EXCLUDES - List of exclude patterns (for example '*/tests/*').
9#
10# The following targets will be generated:
11# coverage - Builds an html report. Requires LCOV.
12# coverage_xml - Builds an xml report (in Cobertura format for Jenkins).
13# Requires Gcovr.
14#
15# Inspired by https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake
16
17# Comiler and linker setup
18set(CMAKE_C_FLAGS_COVERAGE "-g -O0 --coverage" CACHE STRING
19 "Flags used by the C compiler during coverage builds." FORCE)
20set(CMAKE_CXX_FLAGS_COVERAGE "-g -O0 --coverage" CACHE STRING
21 "Flags used by the C++ compiler during coverage builds." FORCE)
22set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "--coverage" CACHE STRING
23 "Flags used for linking binaries during coverage builds." FORCE)
24set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "--coverage" CACHE STRING
25 "Flags used by the shared libraries linker during coverage builds." FORCE)
26mark_as_advanced(
27 CMAKE_C_FLAGS_COVERAGE CMAKE_CXX_FLAGS_COVERAGE CMAKE_EXE_LINKER_FLAGS_COVERAGE
28 CMAKE_SHARED_LINKER_FLAGS_COVERAGE CMAKE_STATIC_LINKER_FLAGS_COVERAGE
29)
30
31find_program(LCOV_EXECUTABLE lcov)
32find_program(GENINFO_EXECUTABLE geninfo)
33find_program(GENHTML_EXECUTABLE genhtml)
34find_program(GCOVR_EXECUTABLE gcovr)
35mark_as_advanced(LCOV_EXECUTABLE GENINFO_EXECUTABLE GENHTML_EXECUTABLE GCOVR_EXECUTABLE)
36
37# Default options
38if(NOT COVERAGE_SOURCE_DIR)
39 set(COVERAGE_SOURCE_DIR ${CMAKE_SOURCE_DIR})
40endif()
41if(NOT COVERAGE_BINARY_DIR)
42 set(COVERAGE_BINARY_DIR ${CMAKE_BINARY_DIR}/coverage)
43endif()
44if(NOT COVERAGE_EXCLUDES)
45 set(COVERAGE_EXCLUDES)
46endif()
47
48# Allow variables in COVERAGE_DEPENDS that are not evaluated before this file is included.
49string(CONFIGURE "${COVERAGE_DEPENDS}" COVERAGE_DEPENDS)
50
51# Add coverage target that generates an HTML report using LCOV
52if(LCOV_EXECUTABLE AND GENINFO_EXECUTABLE AND GENHTML_EXECUTABLE)
53 file(MAKE_DIRECTORY ${COVERAGE_BINARY_DIR})
54 add_custom_target(coverage
55 COMMAND ${CMAKE_COMMAND} -E make_directory ${COVERAGE_BINARY_DIR}
56 COMMAND ${LCOV_EXECUTABLE} -z -q -d ${CMAKE_BINARY_DIR}
57 COMMAND ${LCOV_EXECUTABLE} -c -q -i -d ${CMAKE_BINARY_DIR} -b ${COVERAGE_SOURCE_DIR}
58 -o ${COVERAGE_BINARY_DIR}/${PROJECT_NAME}.coverage_base.info
59 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target test || true
60 COMMAND ${LCOV_EXECUTABLE} -c -q -d ${CMAKE_BINARY_DIR} -b ${COVERAGE_SOURCE_DIR}
61 -o ${COVERAGE_BINARY_DIR}/${PROJECT_NAME}.coverage_test.info
62 COMMAND ${LCOV_EXECUTABLE} -a ${COVERAGE_BINARY_DIR}/${PROJECT_NAME}.coverage_base.info
63 -a ${COVERAGE_BINARY_DIR}/${PROJECT_NAME}.coverage_test.info
64 -o ${COVERAGE_BINARY_DIR}/${PROJECT_NAME}.coverage.info -q
65 COMMAND ${LCOV_EXECUTABLE} -q -r ${COVERAGE_BINARY_DIR}/${PROJECT_NAME}.coverage.info
66 /usr/include/* ${CMAKE_BINARY_DIR}/* ${COVERAGE_EXCLUDES}
67 -o ${COVERAGE_BINARY_DIR}/${PROJECT_NAME}.coverage.info
68 COMMAND ${GENHTML_EXECUTABLE} ${COVERAGE_BINARY_DIR}/${PROJECT_NAME}.coverage.info
69 -o ${COVERAGE_BINARY_DIR}/html -s --legend --highlight --demangle-cpp
70 COMMAND ${CMAKE_COMMAND} -E echo "Coverage report: file://${COVERAGE_BINARY_DIR}/html/index.html"
71 WORKING_DIRECTORY ${COVERAGE_BINARY_DIR}
72 VERBATIM
73 DEPENDS ${COVERAGE_DEPENDS}
74 COMMENT "Generate code coverage html report"
75 )
76else()
77 message(WARNING "Target coverage not available (lcov, geninfo and genhtml needed).")
78endif()
79
80# Add coverage target that generates an XML report using Gcovr
81if(GCOVR_EXECUTABLE)
82 file(MAKE_DIRECTORY ${COVERAGE_BINARY_DIR})
83 string(REGEX REPLACE "([^;]+)" "--exclude=\"\\1\"" _gcovr_excludes "${COVERAGE_EXCLUDES}")
84 string(REPLACE "*" ".*" _gcovr_excludes "${_gcovr_excludes}")
85 add_custom_target(coverage_xml
86 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target test || true
87 COMMAND ${GCOVR_EXECUTABLE} -x -r ${COVERAGE_SOURCE_DIR} -o ${COVERAGE_BINARY_DIR}/coverage.xml
88 --object-directory ${CMAKE_BINARY_DIR} ${_gcovr_excludes} ${CMAKE_BINARY_DIR}
89 COMMAND ${CMAKE_COMMAND} -E echo "Coverage report: file://${COVERAGE_BINARY_DIR}/coverage.xml"
90 WORKING_DIRECTORY ${COVERAGE_BINARY_DIR}
91 DEPENDS ${COVERAGE_DEPENDS}
92 COMMENT "Generate code coverage xml report"
93 )
94 unset(_gcovr_excludes)
95else()
96 message(WARNING "Target coverage_xml not available (gcovr needed).")
97endif()
diff --git a/project/cmake/scripts/linux/ExtraTargets.cmake b/project/cmake/scripts/linux/ExtraTargets.cmake
deleted file mode 100644
index 2bb5f6f..0000000
--- a/project/cmake/scripts/linux/ExtraTargets.cmake
+++ /dev/null
@@ -1,12 +0,0 @@
1# xrandr
2if(ENABLE_X11 AND X_FOUND AND XRANDR_FOUND)
3 find_package(X QUIET)
4 find_package(XRandR QUIET)
5 add_executable(${APP_NAME_LC}-xrandr ${CORE_SOURCE_DIR}/xbmc-xrandr.c)
6 target_link_libraries(${APP_NAME_LC}-xrandr ${SYSTEM_LDFLAGS} ${X_LIBRARIES} m ${XRANDR_LIBRARIES})
7endif()
8
9# WiiRemote
10if(ENABLE_EVENTCLIENTS)
11 add_subdirectory(${CORE_SOURCE_DIR}/tools/EventClients/Clients/WiiRemote build/WiiRemote)
12endif()
diff --git a/project/cmake/scripts/linux/Install.cmake b/project/cmake/scripts/linux/Install.cmake
deleted file mode 100644
index 43e2e5e..0000000
--- a/project/cmake/scripts/linux/Install.cmake
+++ /dev/null
@@ -1,367 +0,0 @@
1if(X_FOUND)
2 set(USE_X11 1)
3else()
4 set(USE_X11 0)
5endif()
6if(OPENGL_FOUND)
7 set(USE_OPENGL 1)
8else()
9 set(USE_OPENGL 0)
10endif()
11if(OPENGLES_FOUND)
12 set(USE_OPENGLES 1)
13else()
14 set(USE_OPENGLES 0)
15endif()
16
17# CMake config
18set(APP_PREFIX ${prefix})
19set(APP_LIB_DIR ${libdir}/${APP_NAME_LC})
20set(APP_DATA_DIR ${datarootdir}/${APP_NAME_LC})
21set(APP_INCLUDE_DIR ${includedir}/${APP_NAME_LC})
22set(CXX11_SWITCH "-std=c++11")
23
24# Set XBMC_STANDALONE_SH_PULSE so we can insert PulseAudio block into kodi-standalone
25if(EXISTS ${CORE_SOURCE_DIR}/tools/Linux/kodi-standalone.sh.pulse)
26 if(ENABLE_PULSEAUDIO AND PULSEAUDIO_FOUND)
27 file(READ "${CORE_SOURCE_DIR}/tools/Linux/kodi-standalone.sh.pulse" pulse_content)
28 set(XBMC_STANDALONE_SH_PULSE ${pulse_content})
29 endif()
30endif()
31
32# Configure startup scripts
33configure_file(${CORE_SOURCE_DIR}/tools/Linux/kodi.sh.in
34 ${CORE_BUILD_DIR}/scripts/${APP_NAME_LC} @ONLY)
35configure_file(${CORE_SOURCE_DIR}/tools/Linux/kodi-standalone.sh.in
36 ${CORE_BUILD_DIR}/scripts/${APP_NAME_LC}-standalone @ONLY)
37
38# Configure cmake files
39configure_file(${PROJECT_SOURCE_DIR}/KodiConfig.cmake.in
40 ${CORE_BUILD_DIR}/scripts/${APP_NAME}Config.cmake @ONLY)
41
42# Configure xsession entry
43configure_file(${CORE_SOURCE_DIR}/tools/Linux/kodi-xsession.desktop.in
44 ${CORE_BUILD_DIR}/${APP_NAME_LC}.desktop @ONLY)
45
46# Install app
47install(TARGETS ${APP_NAME_LC}
48 DESTINATION ${libdir}/${APP_NAME_LC}
49 COMPONENT kodi-bin)
50if(ENABLE_X11 AND XRANDR_FOUND)
51 install(TARGETS ${APP_NAME_LC}-xrandr
52 DESTINATION ${libdir}/${APP_NAME_LC}
53 COMPONENT kodi-bin)
54endif()
55
56# Install scripts
57install(PROGRAMS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/scripts/${APP_NAME_LC}
58 ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/scripts/${APP_NAME_LC}-standalone
59 DESTINATION ${bindir}
60 COMPONENT kodi-bin)
61
62# Install libraries
63foreach(library ${LIBRARY_FILES})
64 get_filename_component(dir ${library} DIRECTORY)
65 string(REPLACE "${CMAKE_BINARY_DIR}/" "" dir ${dir})
66 install(PROGRAMS ${library}
67 DESTINATION ${libdir}/${APP_NAME_LC}/${dir}
68 COMPONENT kodi-bin)
69endforeach()
70
71# Install add-ons, fonts, icons, keyboard maps, keymaps, etc
72# (addons, media, system, userdata folders in share/kodi/)
73foreach(file ${install_data})
74 get_filename_component(dir ${file} DIRECTORY)
75 install(FILES ${CMAKE_BINARY_DIR}/${file}
76 DESTINATION ${datarootdir}/${APP_NAME_LC}/${dir}
77 COMPONENT kodi)
78endforeach()
79
80# Install xsession entry
81install(FILES ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/${APP_NAME_LC}.desktop
82 DESTINATION ${datarootdir}/xsessions
83 COMPONENT kodi)
84
85# Install desktop entry
86install(FILES ${CORE_SOURCE_DIR}/tools/Linux/kodi.desktop
87 DESTINATION ${datarootdir}/applications
88 COMPONENT kodi)
89
90# Install icons
91install(FILES ${CORE_SOURCE_DIR}/tools/Linux/packaging/media/icon16x16.png
92 RENAME ${APP_NAME_LC}.png
93 DESTINATION ${datarootdir}/icons/hicolor/16x16/apps
94 COMPONENT kodi)
95install(FILES ${CORE_SOURCE_DIR}/tools/Linux/packaging/media/icon22x22.png
96 RENAME ${APP_NAME_LC}.png
97 DESTINATION ${datarootdir}/icons/hicolor/22x22/apps
98 COMPONENT kodi)
99install(FILES ${CORE_SOURCE_DIR}/tools/Linux/packaging/media/icon24x24.png
100 RENAME ${APP_NAME_LC}.png
101 DESTINATION ${datarootdir}/icons/hicolor/24x24/apps
102 COMPONENT kodi)
103install(FILES ${CORE_SOURCE_DIR}/tools/Linux/packaging/media/icon32x32.png
104 RENAME ${APP_NAME_LC}.png
105 DESTINATION ${datarootdir}/icons/hicolor/32x32/apps
106 COMPONENT kodi)
107install(FILES ${CORE_SOURCE_DIR}/tools/Linux/packaging/media/icon48x48.png
108 RENAME ${APP_NAME_LC}.png
109 DESTINATION ${datarootdir}/icons/hicolor/48x48/apps
110 COMPONENT kodi)
111install(FILES ${CORE_SOURCE_DIR}/tools/Linux/packaging/media/icon64x64.png
112 RENAME ${APP_NAME_LC}.png
113 DESTINATION ${datarootdir}/icons/hicolor/64x64/apps
114 COMPONENT kodi)
115install(FILES ${CORE_SOURCE_DIR}/tools/Linux/packaging/media/icon128x128.png
116 RENAME ${APP_NAME_LC}.png
117 DESTINATION ${datarootdir}/icons/hicolor/128x128/apps
118 COMPONENT kodi)
119install(FILES ${CORE_SOURCE_DIR}/tools/Linux/packaging/media/icon256x256.png
120 RENAME ${APP_NAME_LC}.png
121 DESTINATION ${datarootdir}/icons/hicolor/256x256/apps
122 COMPONENT kodi)
123install(CODE "execute_process(COMMAND gtk-update-icon-cache -f -q -t
124 $ENV{DESTDIR}${datarootdir}/icons/hicolor ERROR_QUIET)"
125 COMPONENT kodi)
126
127# Install docs
128install(FILES ${CORE_SOURCE_DIR}/copying.txt
129 ${CORE_SOURCE_DIR}/LICENSE.GPL
130 ${CORE_SOURCE_DIR}/version.txt
131 ${CORE_SOURCE_DIR}/docs/README.linux
132 DESTINATION ${datarootdir}/doc/${APP_NAME_LC}
133 COMPONENT kodi)
134
135install(FILES ${CORE_SOURCE_DIR}/privacy-policy.txt
136 DESTINATION ${datarootdir}/${APP_NAME_LC}
137 COMPONENT kodi)
138
139# Install kodi-tools-texturepacker
140if(NOT WITH_TEXTUREPACKER)
141 install(PROGRAMS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/texturepacker/TexturePacker
142 DESTINATION ${bindir}
143 COMPONENT kodi-tools-texturepacker)
144endif()
145
146# Install kodi-addon-dev headers
147install(FILES ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_vfs_types.h
148 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_vfs_utils.hpp
149 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h
150 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_audioengine.h
151 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_guilib.h
152 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h
153 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_peripheral.h
154 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h
155 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_codec.h
156 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h
157 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_game.h
158 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_cpp_dll.h
159 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_dll.h
160 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_types.h
161 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_codec_types.h
162 ${CORE_SOURCE_DIR}/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h
163 ${CORE_SOURCE_DIR}/xbmc/filesystem/IFileTypes.h
164 ${CORE_SOURCE_DIR}/xbmc/input/XBMC_vkeys.h
165 DESTINATION ${includedir}/${APP_NAME_LC}
166 COMPONENT kodi-addon-dev)
167
168# Install kodi-addon-dev add-on bindings
169install(FILES ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/scripts/${APP_NAME}Config.cmake
170 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/AddonHelpers.cmake
171 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/AddOptions.cmake
172 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/ArchSetup.cmake
173 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/CheckCommits.cmake
174 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/CheckTargetPlatform.cmake
175 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/GenerateVersionedFiles.cmake
176 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/GeneratorSetup.cmake
177 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/HandleDepends.cmake
178 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/Macros.cmake
179 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/PrepareEnv.cmake
180 ${CORE_SOURCE_DIR}/project/cmake/scripts/common/ProjectMacros.cmake
181 ${CORE_SOURCE_DIR}/project/cmake/scripts/linux/PathSetup.cmake
182 DESTINATION ${datarootdir}/${APP_NAME_LC}/cmake
183 COMPONENT kodi-addon-dev)
184
185# Install kodi-audio-dev
186install(FILES ${CORE_SOURCE_DIR}/xbmc/cores/AudioEngine/Utils/AEChannelData.h
187 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_adsp_dll.h
188 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_adsp_types.h
189 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audiodec_dll.h
190 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audiodec_types.h
191 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_audioenc_dll.h
192 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_audioenc_types.h
193 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audioengine_types.h
194 DESTINATION ${includedir}/${APP_NAME_LC}
195 COMPONENT kodi-audio-dev)
196
197if(ENABLE_EVENTCLIENTS)
198 # Install kodi-eventclients-common BT python files
199 install(PROGRAMS ${CORE_SOURCE_DIR}/tools/EventClients/lib/python/bt/__init__.py
200 ${CORE_SOURCE_DIR}/tools/EventClients/lib/python/bt/bt.py
201 ${CORE_SOURCE_DIR}/tools/EventClients/lib/python/bt/hid.py
202 DESTINATION lib/python2.7/dist-packages/${APP_NAME_LC}/bt
203 COMPONENT kodi-eventclients-common)
204
205 # Install kodi-eventclients-common PS3 python files
206 install(PROGRAMS ${CORE_SOURCE_DIR}/tools/EventClients/lib/python/ps3/__init__.py
207 ${CORE_SOURCE_DIR}/tools/EventClients/lib/python/ps3/keymaps.py
208 ${CORE_SOURCE_DIR}/tools/EventClients/lib/python/ps3/sixaxis.py
209 ${CORE_SOURCE_DIR}/tools/EventClients/lib/python/ps3/sixpair.py
210 ${CORE_SOURCE_DIR}/tools/EventClients/lib/python/ps3/sixwatch.py
211 DESTINATION lib/python2.7/dist-packages/${APP_NAME_LC}/ps3
212 COMPONENT kodi-eventclients-common)
213
214 # Install kodi-eventclients-common python files
215 file(WRITE ${CMAKE_BINARY_DIR}/packages/deb/defs.py ICON_PATH="usr/share/pixmaps/${APP_NAME_LC}/")
216 install(PROGRAMS ${CMAKE_BINARY_DIR}/packages/deb/defs.py
217 ${CORE_SOURCE_DIR}/tools/EventClients/lib/python/__init__.py
218 "${CORE_SOURCE_DIR}/tools/EventClients/Clients/PS3 BD Remote/ps3_remote.py"
219 ${CORE_SOURCE_DIR}/tools/EventClients/lib/python/xbmcclient.py
220 ${CORE_SOURCE_DIR}/tools/EventClients/lib/python/zeroconf.py
221 DESTINATION lib/python2.7/dist-packages/${APP_NAME_LC}
222 COMPONENT kodi-eventclients-common)
223
224 # Install kodi-eventclients-common icons
225 install(FILES ${CORE_SOURCE_DIR}/tools/EventClients/icons/bluetooth.png
226 ${CORE_SOURCE_DIR}/tools/EventClients/icons/phone.png
227 ${CORE_SOURCE_DIR}/tools/EventClients/icons/mail.png
228 ${CORE_SOURCE_DIR}/tools/EventClients/icons/mouse.png
229 DESTINATION ${datarootdir}/pixmaps/${APP_NAME_LC}
230 COMPONENT kodi-eventclients-common)
231
232 # Install kodi-eventclients-dev headers
233 install(FILES ${CORE_SOURCE_DIR}/tools/EventClients/lib/c++/xbmcclient.h
234 DESTINATION ${includedir}/${APP_NAME_LC}
235 COMPONENT kodi-eventclients-dev)
236
237 # Install kodi-eventclients-dev C# examples
238 install(FILES "${CORE_SOURCE_DIR}/tools/EventClients/examples/c#/XBMCDemoClient1.cs"
239 DESTINATION "${docdir}/${APP_NAME_LC}-eventclients-dev/examples/C#"
240 COMPONENT kodi-eventclients-dev)
241
242 # Install kodi-eventclients-dev C++ examples
243 install(FILES ${CORE_SOURCE_DIR}/tools/EventClients/examples/c++/example_notification.cpp
244 ${CORE_SOURCE_DIR}/tools/EventClients/examples/c++/example_log.cpp
245 ${CORE_SOURCE_DIR}/tools/EventClients/examples/c++/example_button1.cpp
246 ${CORE_SOURCE_DIR}/tools/EventClients/examples/c++/example_mouse.cpp
247 ${CORE_SOURCE_DIR}/tools/EventClients/examples/c++/example_button2.cpp
248 DESTINATION ${docdir}/${APP_NAME_LC}-eventclients-dev/examples/C++
249 COMPONENT kodi-eventclients-dev)
250
251 # Install kodi-eventclients-dev java examples
252 install(FILES ${CORE_SOURCE_DIR}/tools/EventClients/examples/java/XBMCDemoClient1.java
253 DESTINATION ${docdir}/${APP_NAME_LC}-eventclients-dev/examples/java
254 COMPONENT kodi-eventclients-dev)
255
256 # Install kodi-eventclients-dev python examples
257 install(PROGRAMS ${CORE_SOURCE_DIR}/tools/EventClients/examples/python/example_mouse.py
258 ${CORE_SOURCE_DIR}/tools/EventClients/examples/python/example_button1.py
259 ${CORE_SOURCE_DIR}/tools/EventClients/examples/python/example_notification.py
260 ${CORE_SOURCE_DIR}/tools/EventClients/examples/python/example_action.py
261 ${CORE_SOURCE_DIR}/tools/EventClients/examples/python/example_button2.py
262 ${CORE_SOURCE_DIR}/tools/EventClients/examples/python/example_simple.py
263 DESTINATION ${docdir}/${APP_NAME_LC}-eventclients-dev/examples/python
264 COMPONENT kodi-eventclients-dev)
265
266 # Install kodi-eventclients-ps3
267 install(PROGRAMS "${CORE_SOURCE_DIR}/tools/EventClients/Clients/PS3 BD Remote/ps3_remote.py"
268 RENAME ${APP_NAME_LC}-ps3remote
269 DESTINATION ${bindir}
270 COMPONENT kodi-eventclients-ps3)
271
272 # Install kodi-eventclients-wiiremote
273 install(PROGRAMS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/WiiRemote/${APP_NAME_LC}-wiiremote
274 DESTINATION ${bindir}
275 COMPONENT kodi-eventclients-wiiremote)
276
277 # Install kodi-eventclients-xbmc-send
278 install(PROGRAMS "${CORE_SOURCE_DIR}/tools/EventClients/Clients/Kodi Send/kodi-send.py"
279 RENAME ${APP_NAME_LC}-send
280 DESTINATION ${bindir}
281 COMPONENT kodi-eventclients-xbmc-send)
282endif()
283
284# Install kodi-inputstream-dev
285install(FILES ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h
286 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h
287 DESTINATION ${includedir}/${APP_NAME_LC}
288 COMPONENT kodi-inputstream-dev)
289
290# Install kodi-pvr-dev
291install(FILES ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h
292 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h
293 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h
294 DESTINATION ${includedir}/${APP_NAME_LC}
295 COMPONENT kodi-pvr-dev)
296
297# Install kodi-screensaver-dev
298install(FILES ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_scr_dll.h
299 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_scr_types.h
300 DESTINATION ${includedir}/${APP_NAME_LC}
301 COMPONENT kodi-screensaver-dev)
302
303# Install kodi-visualization-dev
304install(FILES ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_vis_dll.h
305 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_vis_types.h
306 DESTINATION ${includedir}/${APP_NAME_LC}
307 COMPONENT kodi-visualization-dev)
308
309# Install kodi-peripheral-dev
310install(FILES ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_callbacks.h
311 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_dll.h
312 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_types.h
313 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_utils.hpp
314 DESTINATION ${includedir}/${APP_NAME_LC}
315 COMPONENT kodi-peripheral-dev)
316
317# Install kodi-game-dev
318install(FILES ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_callbacks.h
319 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_dll.h
320 ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_types.h
321 DESTINATION ${includedir}/${APP_NAME_LC}
322 COMPONENT kodi-game-dev)
323
324
325# Install XBT skin files
326foreach(texture ${XBT_FILES})
327 string(REPLACE "${CMAKE_BINARY_DIR}/" "" dir ${texture})
328 get_filename_component(dir ${dir} DIRECTORY)
329 install(FILES ${texture}
330 DESTINATION ${datarootdir}/${APP_NAME_LC}/${dir}
331 COMPONENT kodi)
332endforeach()
333
334# Install extra stuff if it exists
335if(EXISTS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/extra-installs)
336 install(CODE "file(STRINGS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/extra-installs dirs)
337 foreach(dir \${dirs})
338 file(GLOB_RECURSE FILES RELATIVE ${CMAKE_BINARY_DIR} \${dir}/*)
339 foreach(file \${FILES})
340 get_filename_component(dir \${file} DIRECTORY)
341 file(INSTALL \${file} DESTINATION ${datarootdir}/${APP_NAME_LC}/\${dir})
342 endforeach()
343 endforeach()")
344endif()
345
346if(NOT "$ENV{DESTDIR}" STREQUAL "")
347 set(DESTDIR ${CMAKE_BINARY_DIR}/$ENV{DESTDIR})
348endif()
349foreach(subdir ${build_dirs})
350 if(NOT subdir MATCHES kodi-platform)
351 string(REPLACE " " ";" subdir ${subdir})
352 list(GET subdir 0 id)
353 install(CODE "execute_process(COMMAND ${CMAKE_MAKE_PROGRAM} -C ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/${id}/src/${id}-build install DESTDIR=${DESTDIR})")
354 endif()
355endforeach()
356
357# generate packages? yes please, if everything checks out
358if(CPACK_GENERATOR)
359 if(CPACK_GENERATOR STREQUAL DEB AND CORE_SYSTEM_NAME STREQUAL linux)
360 if(CMAKE_BUILD_TYPE STREQUAL Debug)
361 message(STATUS "DEB Generator: Build type is set to 'Debug'. Packaged binaries will be unstripped.")
362 endif()
363 include(${PROJECT_SOURCE_DIR}/cpack/CPackConfigDEB.cmake)
364 else()
365 message(FATAL_ERROR "DEB Generator: Can't configure CPack to generate Debian packages on non-linux systems.")
366 endif()
367endif()
diff --git a/project/cmake/scripts/linux/Macros.cmake b/project/cmake/scripts/linux/Macros.cmake
deleted file mode 100644
index 72e9d5c..0000000
--- a/project/cmake/scripts/linux/Macros.cmake
+++ /dev/null
@@ -1,95 +0,0 @@
1function(core_link_library lib wraplib)
2 set(export -Wl,--unresolved-symbols=ignore-all
3 `cat ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/cores/dll-loader/exports/wrapper.def`
4 ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/cores/dll-loader/exports/CMakeFiles/wrapper.dir/wrapper.c.o)
5 set(check_arg "")
6 if(TARGET ${lib})
7 set(target ${lib})
8 set(link_lib $<TARGET_FILE:${lib}>)
9 set(check_arg ${ARGV2})
10 set(data_arg ${ARGV3})
11 else()
12 set(target ${ARGV2})
13 set(link_lib ${lib})
14 set(check_arg ${ARGV3})
15 set(data_arg ${ARGV4})
16 endif()
17
18 # wrapper has to be adapted in order to support coverage.
19 if(CMAKE_BUILD_TYPE STREQUAL Coverage)
20 set(export "")
21 endif()
22
23 if(check_arg STREQUAL export)
24 set(export ${export}
25 -Wl,--version-script=${ARGV3})
26 elseif(check_arg STREQUAL extras)
27 foreach(arg ${data_arg})
28 list(APPEND export ${arg})
29 endforeach()
30 elseif(check_arg STREQUAL archives)
31 set(extra_libs ${data_arg})
32 endif()
33
34 string(REGEX REPLACE "[ ]+" ";" _flags ${CMAKE_SHARED_LINKER_FLAGS})
35 get_filename_component(dir ${wraplib} DIRECTORY)
36 add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/${wraplib}-${ARCH}${CMAKE_SHARED_MODULE_SUFFIX}
37 COMMAND ${CMAKE_COMMAND} -E make_directory ${dir}
38 COMMAND ${CMAKE_C_COMPILER}
39 ARGS ${_flags} -Wl,--whole-archive
40 "${link_lib}" ${extra_libs}
41 -Wl,--no-whole-archive -lm
42 -Wl,-soname,${wraplib}-${ARCH}${CMAKE_SHARED_MODULE_SUFFIX}
43 -shared -o ${CMAKE_BINARY_DIR}/${wraplib}-${ARCH}${CMAKE_SHARED_MODULE_SUFFIX}
44 ${export}
45 DEPENDS ${target} wrapper.def wrapper)
46
47 get_filename_component(libname ${wraplib} NAME_WE)
48 add_custom_target(wrap_${libname} ALL DEPENDS ${CMAKE_BINARY_DIR}/${wraplib}-${ARCH}${CMAKE_SHARED_MODULE_SUFFIX})
49 set_target_properties(wrap_${libname} PROPERTIES FOLDER lib/wrapped)
50 add_dependencies(${APP_NAME_LC}-libraries wrap_${libname})
51
52 set(LIBRARY_FILES ${LIBRARY_FILES} ${CMAKE_BINARY_DIR}/${wraplib}-${ARCH}${CMAKE_SHARED_MODULE_SUFFIX} CACHE STRING "" FORCE)
53endfunction()
54
55function(find_soname lib)
56 cmake_parse_arguments(arg "REQUIRED" "" "" ${ARGN})
57
58 string(TOLOWER ${lib} liblow)
59 if(${lib}_LDFLAGS)
60 set(link_lib "${${lib}_LDFLAGS}")
61 else()
62 if(IS_ABSOLUTE "${${lib}_LIBRARIES}")
63 set(link_lib "${${lib}_LIBRARIES}")
64 else()
65 set(link_lib -l${${lib}_LIBRARIES})
66 endif()
67 endif()
68 execute_process(COMMAND ${CMAKE_C_COMPILER} -nostdlib -o /dev/null -Wl,-M ${link_lib}
69 COMMAND grep LOAD.*${liblow}
70 ERROR_QUIET
71 OUTPUT_VARIABLE ${lib}_FILENAME)
72 string(REPLACE "LOAD " "" ${lib}_FILENAME "${${lib}_FILENAME}")
73 string(STRIP "${${lib}_FILENAME}" ${lib}_FILENAME)
74 if(NOT ${lib}_FILENAME)
75 execute_process(COMMAND ${CMAKE_C_COMPILER} -nostdlib -o /dev/null -Wl,-t ${link_lib}
76 OUTPUT_QUIET
77 ERROR_VARIABLE _TMP_FILENAME)
78 string(REGEX MATCH ".*lib${liblow}.so" ${lib}_FILENAME ${_TMP_FILENAME})
79 endif()
80 if(${lib}_FILENAME)
81 execute_process(COMMAND objdump -p ${${lib}_FILENAME}
82 COMMAND grep SONAME.*${liblow}
83 ERROR_QUIET
84 OUTPUT_VARIABLE ${lib}_SONAME)
85 string(REPLACE "SONAME " "" ${lib}_SONAME ${${lib}_SONAME})
86 string(STRIP ${${lib}_SONAME} ${lib}_SONAME)
87 if(VERBOSE)
88 message(STATUS "${lib} soname: ${${lib}_SONAME}")
89 endif()
90 set(${lib}_SONAME ${${lib}_SONAME} PARENT_SCOPE)
91 endif()
92 if(arg_REQUIRED AND NOT ${lib}_SONAME)
93 message(FATAL_ERROR "Could not find dynamically loadable library ${lib}")
94 endif()
95endfunction()
diff --git a/project/cmake/scripts/linux/PathSetup.cmake b/project/cmake/scripts/linux/PathSetup.cmake
deleted file mode 100644
index f69711e..0000000
--- a/project/cmake/scripts/linux/PathSetup.cmake
+++ /dev/null
@@ -1,39 +0,0 @@
1include(GNUInstallDirs)
2
3if(NOT prefix)
4 set(prefix ${CMAKE_INSTALL_PREFIX})
5else()
6 set(CMAKE_INSTALL_PREFIX ${prefix})
7endif()
8if(NOT exec_prefix)
9 set(exec_prefix ${prefix})
10endif()
11if(NOT libdir)
12 set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
13endif()
14if(NOT bindir)
15 set(bindir ${CMAKE_INSTALL_FULL_BINDIR})
16endif()
17if(NOT includedir)
18 set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
19endif()
20if(NOT datarootdir)
21 set(datarootdir ${CMAKE_INSTALL_FULL_DATAROOTDIR})
22endif()
23if(NOT datadir)
24 set(datadir ${CMAKE_INSTALL_FULL_DATADIR})
25endif()
26if(NOT docdir)
27 set(docdir ${CMAKE_INSTALL_FULL_DOCDIR})
28endif()
29
30list(APPEND final_message "-- PATH config --")
31list(APPEND final_message "Prefix: ${prefix}")
32list(APPEND final_message "Libdir: ${libdir}")
33list(APPEND final_message "Bindir: ${bindir}")
34list(APPEND final_message "Includedir: ${includedir}")
35list(APPEND final_message "Datarootdir: ${datarootdir}")
36list(APPEND final_message "Datadir: ${datadir}")
37
38set(PATH_DEFINES -DBIN_INSTALL_PATH=\"${libdir}/kodi\"
39 -DINSTALL_PATH=\"${datarootdir}/kodi\")
diff --git a/project/cmake/scripts/osx/ArchSetup.cmake b/project/cmake/scripts/osx/ArchSetup.cmake
deleted file mode 100644
index 3047863..0000000
--- a/project/cmake/scripts/osx/ArchSetup.cmake
+++ /dev/null
@@ -1,34 +0,0 @@
1if(NOT CMAKE_TOOLCHAIN_FILE)
2 message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for osx. See ${PROJECT_SOURCE_DIR}/README.md")
3endif()
4
5set(CORE_MAIN_SOURCE ${CORE_SOURCE_DIR}/xbmc/platform/posix/main.cpp
6 ${CORE_SOURCE_DIR}/xbmc/platform/darwin/osx/SDLMain.mm
7 ${CORE_SOURCE_DIR}/xbmc/platform/darwin/osx/SDLMain.h)
8
9set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX)
10set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_DEFINED -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
11 -D__STDC_CONSTANT_MACROS)
12set(PLATFORM_DIR linux)
13set(CMAKE_SYSTEM_NAME Darwin)
14if(WITH_ARCH)
15 set(ARCH ${WITH_ARCH})
16else()
17 if(CPU STREQUAL x86_64 OR CPU STREQUAL i386)
18 set(ARCH x86-osx)
19 set(NEON False)
20 else()
21 message(SEND_ERROR "Unknown CPU: ${CPU}")
22 endif()
23endif()
24
25find_package(CXX11 REQUIRED)
26
27list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX})
28
29list(APPEND DEPLIBS "-framework DiskArbitration" "-framework IOKit"
30 "-framework IOSurface" "-framework SystemConfiguration"
31 "-framework ApplicationServices" "-framework AppKit"
32 "-framework CoreAudio" "-framework AudioToolbox"
33 "-framework CoreGraphics" "-framework CoreMedia"
34 "-framework VideoToolbox")
diff --git a/project/cmake/scripts/osx/ExtraTargets.cmake b/project/cmake/scripts/osx/ExtraTargets.cmake
deleted file mode 100644
index ed9c089..0000000
--- a/project/cmake/scripts/osx/ExtraTargets.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
1# XBMCHelper
2add_subdirectory(${CORE_SOURCE_DIR}/tools/EventClients/Clients/OSXRemote build/XBMCHelper)
3add_dependencies(${APP_NAME_LC} XBMCHelper)
diff --git a/project/cmake/scripts/osx/Install.cmake b/project/cmake/scripts/osx/Install.cmake
deleted file mode 100644
index 3924ccf..0000000
--- a/project/cmake/scripts/osx/Install.cmake
+++ /dev/null
@@ -1,40 +0,0 @@
1# OSX packaging
2
3set(PACKAGE_OUTPUT_DIR ${CMAKE_BINARY_DIR}/build/${CORE_BUILD_CONFIG})
4
5configure_file(${CORE_SOURCE_DIR}/xbmc/platform/darwin/osx/Info.plist.in
6 ${CMAKE_BINARY_DIR}/xbmc/platform/darwin/osx/Info.plist @ONLY)
7execute_process(COMMAND perl -p -i -e "s/r####/${APP_SCMID}/" ${CMAKE_BINARY_DIR}/xbmc/platform/darwin/osx/Info.plist)
8
9add_custom_target(bundle
10 COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${APP_NAME_LC}> ${PACKAGE_OUTPUT_DIR}/${APP_NAME}
11 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/DllPaths_generated.h
12 ${CMAKE_BINARY_DIR}/xbmc/DllPaths_generated.h
13 COMMAND "ACTION=build"
14 "TARGET_BUILD_DIR=${PACKAGE_OUTPUT_DIR}"
15 "TARGET_NAME=${APP_NAME}.app"
16 "APP_NAME=${APP_NAME}"
17 "SRCROOT=${CMAKE_BINARY_DIR}"
18 ${CORE_SOURCE_DIR}/tools/darwin/Support/CopyRootFiles-osx.command
19 COMMAND "XBMC_DEPENDS=${DEPENDS_PATH}"
20 "TARGET_BUILD_DIR=${PACKAGE_OUTPUT_DIR}"
21 "TARGET_NAME=${APP_NAME}.app"
22 "APP_NAME=${APP_NAME}"
23 "FULL_PRODUCT_NAME=${APP_NAME}.app"
24 "SRCROOT=${CMAKE_BINARY_DIR}"
25 ${CORE_SOURCE_DIR}/tools/darwin/Support/copyframeworks-osx.command)
26set_target_properties(bundle PROPERTIES FOLDER "Build Utilities")
27add_dependencies(bundle ${APP_NAME_LC})
28
29configure_file(${CORE_SOURCE_DIR}/tools/darwin/packaging/osx/mkdmg-osx.sh.in
30 ${CMAKE_BINARY_DIR}/tools/darwin/packaging/osx/mkdmg-osx.sh @ONLY)
31
32add_custom_target(dmg
33 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CORE_SOURCE_DIR}/tools/darwin/packaging/osx/
34 ${CMAKE_BINARY_DIR}/tools/darwin/packaging/osx/
35 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CORE_SOURCE_DIR}/tools/darwin/packaging/media/osx/
36 ${CMAKE_BINARY_DIR}/tools/darwin/packaging/media/osx/
37 COMMAND ./mkdmg-osx.sh ${CORE_BUILD_CONFIG}
38 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tools/darwin/packaging/osx)
39set_target_properties(dmg PROPERTIES FOLDER "Build Utilities")
40add_dependencies(dmg bundle)
diff --git a/project/cmake/scripts/osx/Macros.cmake b/project/cmake/scripts/osx/Macros.cmake
deleted file mode 100644
index 52f87d1..0000000
--- a/project/cmake/scripts/osx/Macros.cmake
+++ /dev/null
@@ -1,118 +0,0 @@
1function(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 -read_only_relocs suppress
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 ios AND CMAKE_GENERATOR STREQUAL Xcode)
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)
64endfunction()
65
66function(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)
118endfunction()
diff --git a/project/cmake/scripts/osx/PathSetup.cmake b/project/cmake/scripts/osx/PathSetup.cmake
deleted file mode 100644
index 071dfd4..0000000
--- a/project/cmake/scripts/osx/PathSetup.cmake
+++ /dev/null
@@ -1,32 +0,0 @@
1if(NOT prefix)
2 set(prefix ${DEPENDS_PATH})
3endif()
4if(NOT exec_prefix)
5 set(exec_prefix ${prefix})
6endif()
7if(NOT libdir)
8 set(libdir ${prefix}/lib)
9endif()
10if(NOT bindir)
11 set(bindir ${prefix}/bin)
12endif()
13if(NOT includedir)
14 set(includedir ${prefix}/include)
15endif()
16if(NOT datarootdir)
17 set(datarootdir ${prefix}/share)
18endif()
19if(NOT datadir)
20 set(datadir ${datarootdir})
21endif()
22
23list(APPEND final_message "-- PATH config --")
24list(APPEND final_message "Prefix: ${prefix}")
25list(APPEND final_message "Libdir: ${libdir}")
26list(APPEND final_message "Bindir: ${bindir}")
27list(APPEND final_message "Includedir: ${includedir}")
28list(APPEND final_message "Datarootdir: ${datarootdir}")
29list(APPEND final_message "Datadir: ${datadir}")
30
31set(PATH_DEFINES -DBIN_INSTALL_PATH=\"${libdir}/kodi\"
32 -DINSTALL_PATH=\"${datarootdir}/kodi\")
diff --git a/project/cmake/scripts/rbpi/ArchSetup.cmake b/project/cmake/scripts/rbpi/ArchSetup.cmake
deleted file mode 100644
index fa1f9f4..0000000
--- a/project/cmake/scripts/rbpi/ArchSetup.cmake
+++ /dev/null
@@ -1,28 +0,0 @@
1set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_ARMEL -DTARGET_RASPBERRY_PI
2 -DHAS_OMXPLAYER -DHAVE_OMXLIB)
3set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_FILE_DEFINED
4 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64)
5set(PLATFORM_DIR linux)
6
7string(REGEX REPLACE "[ ]+" ";" SYSTEM_LDFLAGS $ENV{LDFLAGS})
8set(CMAKE_SYSTEM_NAME Linux)
9
10if(WITH_ARCH)
11 set(ARCH ${WITH_ARCH})
12else()
13 if(CPU STREQUAL arm1176jzf-s)
14 set(ARCH arm-linux-gnueabihf)
15 set(NEON False)
16 elseif(CPU MATCHES "cortex-a7" OR CPU MATCHES "cortex-a53")
17 set(ARCH arm-linux-gnueabihf)
18 set(NEON True)
19 else()
20 message(SEND_ERROR "Unknown CPU: ${CPU}")
21 endif()
22endif()
23
24find_package(CXX11 REQUIRED)
25
26set(MMAL_FOUND 1 CACHE INTERNAL "MMAL")
27set(OMX_FOUND 1 CACHE INTERNAL "OMX")
28set(OMXLIB_FOUND 1 CACHE INTERNAL "OMX")
diff --git a/project/cmake/scripts/rbpi/Install.cmake b/project/cmake/scripts/rbpi/Install.cmake
deleted file mode 120000
index 28ce012..0000000
--- a/project/cmake/scripts/rbpi/Install.cmake
+++ /dev/null
@@ -1 +0,0 @@
1../linux/Install.cmake \ No newline at end of file
diff --git a/project/cmake/scripts/rbpi/Macros.cmake b/project/cmake/scripts/rbpi/Macros.cmake
deleted file mode 120000
index 2fdbb25..0000000
--- a/project/cmake/scripts/rbpi/Macros.cmake
+++ /dev/null
@@ -1 +0,0 @@
1../linux/Macros.cmake \ No newline at end of file
diff --git a/project/cmake/scripts/rbpi/PathSetup.cmake b/project/cmake/scripts/rbpi/PathSetup.cmake
deleted file mode 120000
index 6786c1c..0000000
--- a/project/cmake/scripts/rbpi/PathSetup.cmake
+++ /dev/null
@@ -1 +0,0 @@
1../linux/PathSetup.cmake \ No newline at end of file
diff --git a/project/cmake/scripts/windows/ArchSetup.cmake b/project/cmake/scripts/windows/ArchSetup.cmake
deleted file mode 100644
index 431b641..0000000
--- a/project/cmake/scripts/windows/ArchSetup.cmake
+++ /dev/null
@@ -1,89 +0,0 @@
1# -------- Architecture settings ---------
2
3set(ARCH win32)
4
5
6# -------- Paths (mainly for find_package) ---------
7
8set(PLATFORM_DIR platform/win32)
9
10# Precompiled headers fail with per target output directory. (needs CMake 3.1)
11set(PRECOMPILEDHEADER_DIR ${PROJECT_BINARY_DIR}/${CORE_BUILD_CONFIG}/objs)
12
13set(CMAKE_SYSTEM_NAME Windows)
14list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${PROJECT_SOURCE_DIR}/../../lib/win32)
15list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${PROJECT_SOURCE_DIR}/../../lib/win32/ffmpeg)
16list(APPEND CMAKE_SYSTEM_LIBRARY_PATH ${PROJECT_SOURCE_DIR}/../../lib/win32/ffmpeg/bin)
17list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${PROJECT_SOURCE_DIR}/../BuildDependencies)
18
19set(PYTHON_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/../BuildDependencies/include/python)
20
21
22# -------- Compiler options ---------
23
24add_options(CXX ALL_BUILDS "/wd\"4996\"")
25set(ARCH_DEFINES -D_WINDOWS -DTARGET_WINDOWS)
26set(SYSTEM_DEFINES -DNOMINMAX -D_USE_32BIT_TIME_T -DHAS_DX -D__STDC_CONSTANT_MACROS
27 -DTAGLIB_STATIC -DNPT_CONFIG_ENABLE_LOGGING
28 -DPLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi"
29 -DPLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi"
30 $<$<CONFIG:Debug>:-DD3D_DEBUG_INFO -D_ITERATOR_DEBUG_LEVEL=0>)
31
32# Make sure /FS is set for Visual Studio in order to prevent simultanious access to pdb files.
33if(CMAKE_GENERATOR MATCHES "Visual Studio")
34 set(CMAKE_CXX_FLAGS "/MP /FS ${CMAKE_CXX_FLAGS}")
35endif()
36
37# Google Test needs to use shared version of runtime libraries
38set(gtest_force_shared_crt ON CACHE STRING "" FORCE)
39
40
41# -------- Linker options ---------
42
43set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
44
45# For #pragma comment(lib X)
46# TODO: It would certainly be better to handle these libraries via CMake modules.
47link_directories(${PROJECT_SOURCE_DIR}/../../lib/win32/ffmpeg/bin
48 ${PROJECT_SOURCE_DIR}/../BuildDependencies/lib)
49
50# Additional libraries
51list(APPEND DEPLIBS d3d11.lib DInput8.lib DSound.lib winmm.lib Mpr.lib Iphlpapi.lib
52 PowrProf.lib setupapi.lib dwmapi.lib yajl.lib dxguid.lib DelayImp.lib)
53
54# NODEFAULTLIB option
55set(_nodefaultlibs_RELEASE libcmt)
56set(_nodefaultlibs_DEBUG libcmt msvcrt)
57foreach(_lib ${_nodefaultlibs_RELEASE})
58 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:\"${_lib}\"")
59endforeach()
60foreach(_lib ${_nodefaultlibs_DEBUG})
61 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:\"${_lib}\"")
62endforeach()
63
64# DELAYLOAD option
65set(_delayloadlibs zlib.dll libmysql.dll libxslt.dll dnssd.dll dwmapi.dll ssh.dll sqlite3.dll
66 avcodec-57.dll avfilter-6.dll avformat-57.dll avutil-55.dll
67 postproc-54.dll swresample-2.dll swscale-4.dll d3dcompiler_47.dll)
68foreach(_lib ${_delayloadlibs})
69 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DELAYLOAD:\"${_lib}\"")
70endforeach()
71
72# Make the Release version create a PDB
73set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
74# Minimize the size or the resulting DLLs
75set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF")
76
77
78# -------- Visual Studio options ---------
79
80if(CMAKE_GENERATOR MATCHES "Visual Studio")
81 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
82
83 # Generate a batch file that opens Visual Studio with the necessary env variables set.
84 file(WRITE ${CMAKE_BINARY_DIR}/kodi-sln.bat
85 "@echo off\n"
86 "set KODI_HOME=%~dp0\n"
87 "set PATH=%~dp0\\system\n"
88 "start %~dp0\\${PROJECT_NAME}.sln")
89endif()
diff --git a/project/cmake/scripts/windows/CFlagOverrides.cmake b/project/cmake/scripts/windows/CFlagOverrides.cmake
deleted file mode 100644
index 3158e75..0000000
--- a/project/cmake/scripts/windows/CFlagOverrides.cmake
+++ /dev/null
@@ -1,5 +0,0 @@
1if(MSVC)
2 set(CMAKE_C_FLAGS_INIT "/MP /DWIN32 /D_WINDOWS /W3 /Zi /arch:SSE2")
3 set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Ob0 /Od /RTC1 /D_ITERATOR_DEBUG_LEVEL=0")
4 set(CMAKE_C_FLAGS_RELEASE_INIT "/MD /Ox /Ob2 /Oi /Ot /Oy /GL /DNDEBUG")
5endif()
diff --git a/project/cmake/scripts/windows/CXXFlagOverrides.cmake b/project/cmake/scripts/windows/CXXFlagOverrides.cmake
deleted file mode 100644
index 0b52dc6..0000000
--- a/project/cmake/scripts/windows/CXXFlagOverrides.cmake
+++ /dev/null
@@ -1,5 +0,0 @@
1if(MSVC)
2 set(CMAKE_CXX_FLAGS_INIT "/MP /DWIN32 /D_WINDOWS /W3 /GR /Zi /EHsc /arch:SSE2")
3 set(CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Ob0 /Od /RTC1 /D_ITERATOR_DEBUG_LEVEL=0")
4 set(CMAKE_CXX_FLAGS_RELEASE_INIT "/MD /Ox /Ob2 /Oi /Ot /Oy /GL /DNDEBUG")
5endif()
diff --git a/project/cmake/scripts/windows/Install.cmake b/project/cmake/scripts/windows/Install.cmake
deleted file mode 100644
index e69de29..0000000
--- a/project/cmake/scripts/windows/Install.cmake
+++ /dev/null
diff --git a/project/cmake/scripts/windows/Macros.cmake b/project/cmake/scripts/windows/Macros.cmake
deleted file mode 100644
index 2d3500d..0000000
--- a/project/cmake/scripts/windows/Macros.cmake
+++ /dev/null
@@ -1,66 +0,0 @@
1function(core_link_library lib wraplib)
2 message(AUTHOR_WARNING "core_link_library is not compatible with windows.")
3endfunction()
4
5function(find_soname lib)
6 # Windows uses hardcoded dlls in xbmc/DllPaths_win32.h.
7 # Therefore the output of this function is unused.
8endfunction()
9
10# Add precompiled header to target
11# Arguments:
12# target existing target that will be set up to compile with a precompiled header
13# pch_header the precompiled header file
14# pch_source the precompiled header source file
15# Optional Arguments:
16# PCH_TARGET build precompiled header as separate target with the given name
17# so that the same precompiled header can be used for multiple libraries
18# EXCLUDE_SOURCES if not all target sources shall use the precompiled header,
19# the relevant files can be listed here
20# On return:
21# Compiles the pch_source into a precompiled header and adds the header to
22# the given target
23function(add_precompiled_header target pch_header pch_source)
24 cmake_parse_arguments(PCH "" "PCH_TARGET" "EXCLUDE_SOURCES" ${ARGN})
25
26 if(PCH_PCH_TARGET)
27 set(pch_binary ${PRECOMPILEDHEADER_DIR}/${PCH_PCH_TARGET}.pch)
28 else()
29 set(pch_binary ${PRECOMPILEDHEADER_DIR}/${target}.pch)
30 endif()
31
32 # Set compile options and dependency for sources
33 get_target_property(sources ${target} SOURCES)
34 list(REMOVE_ITEM sources ${pch_source})
35 foreach(exclude_source IN LISTS PCH_EXCLUDE_SOURCES)
36 list(REMOVE_ITEM sources ${exclude_source})
37 endforeach()
38 set_source_files_properties(${sources}
39 PROPERTIES COMPILE_FLAGS "/Yu\"${pch_header}\" /Fp\"${pch_binary}\" /FI\"${pch_header}\""
40 OBJECT_DEPENDS "${pch_binary}")
41
42 # Set compile options for precompiled header
43 if(NOT PCH_PCH_TARGET OR NOT TARGET ${PCH_PCH_TARGET}_pch)
44 set_source_files_properties(${pch_source}
45 PROPERTIES COMPILE_FLAGS "/Yc\"${pch_header}\" /Fp\"${pch_binary}\""
46 OBJECT_OUTPUTS "${pch_binary}")
47 endif()
48
49 # Compile precompiled header
50 if(PCH_PCH_TARGET)
51 # As own target for usage in multiple libraries
52 if(NOT TARGET ${PCH_PCH_TARGET}_pch)
53 add_library(${PCH_PCH_TARGET}_pch STATIC ${pch_source})
54 set_target_properties(${PCH_PCH_TARGET}_pch PROPERTIES COMPILE_PDB_NAME vc140
55 COMPILE_PDB_OUTPUT_DIRECTORY ${PRECOMPILEDHEADER_DIR}
56 FOLDER "Build Utilities")
57 endif()
58 # From VS2012 onwards, precompiled headers have to be linked against (LNK2011).
59 target_link_libraries(${target} PUBLIC ${PCH_PCH_TARGET}_pch)
60 set_target_properties(${target} PROPERTIES COMPILE_PDB_NAME vc140
61 COMPILE_PDB_OUTPUT_DIRECTORY ${PRECOMPILEDHEADER_DIR})
62 else()
63 # As part of the target
64 target_sources(${target} PRIVATE ${pch_source})
65 endif()
66endfunction()
diff --git a/project/cmake/scripts/windows/PathSetup.cmake b/project/cmake/scripts/windows/PathSetup.cmake
deleted file mode 100644
index 8550616..0000000
--- a/project/cmake/scripts/windows/PathSetup.cmake
+++ /dev/null
@@ -1,34 +0,0 @@
1if(NOT prefix)
2 set(prefix ${CMAKE_INSTALL_PREFIX})
3else()
4 set(CMAKE_INSTALL_PREFIX ${prefix})
5endif()
6if(NOT exec_prefix)
7 set(exec_prefix ${prefix})
8endif()
9if(NOT libdir)
10 set(libdir ${prefix}/lib)
11endif()
12if(NOT bindir)
13 set(bindir ${prefix}/bin)
14endif()
15if(NOT includedir)
16 set(includedir ${prefix}/include)
17endif()
18if(NOT datarootdir)
19 set(datarootdir ${prefix}/share)
20endif()
21if(NOT datadir)
22 set(datadir ${datarootdir})
23endif()
24
25list(APPEND final_message "-- PATH config --")
26list(APPEND final_message "Prefix: ${prefix}")
27list(APPEND final_message "Libdir: ${libdir}")
28list(APPEND final_message "Bindir: ${bindir}")
29list(APPEND final_message "Includedir: ${includedir}")
30list(APPEND final_message "Datarootdir: ${datarootdir}")
31list(APPEND final_message "Datadir: ${datadir}")
32
33set(PATH_DEFINES -DBIN_INSTALL_PATH=\"${libdir}/kodi\"
34 -DINSTALL_PATH=\"${datarootdir}/kodi\")
diff --git a/project/cmake/scripts/windows/tools/patch.cmake b/project/cmake/scripts/windows/tools/patch.cmake
deleted file mode 100644
index 0ef2952..0000000
--- a/project/cmake/scripts/windows/tools/patch.cmake
+++ /dev/null
@@ -1,37 +0,0 @@
1find_program(PATCH_FOUND NAMES patch patch.exe)
2if(PATCH_FOUND)
3 message(STATUS "patch utility found at ${PATCH_FOUND}")
4else()
5 set(PATCH_ARCHIVE_NAME "patch-2.5.9-7-bin-1")
6 set(PATCH_ARCHIVE "${PATCH_ARCHIVE_NAME}.zip")
7 set(PATCH_URL "${KODI_MIRROR}/build-deps/win32/${PATCH_ARCHIVE}")
8 set(PATCH_DOWNLOAD ${BUILD_DIR}/download/${PATCH_ARCHIVE})
9
10 # download the archive containing patch.exe
11 message(STATUS "Downloading patch utility from ${PATCH_URL}...")
12 file(DOWNLOAD "${PATCH_URL}" "${PATCH_DOWNLOAD}" STATUS PATCH_DL_STATUS LOG PATCH_LOG SHOW_PROGRESS)
13 list(GET PATCH_DL_STATUS 0 PATCH_RETCODE)
14 if(NOT PATCH_RETCODE EQUAL 0)
15 message(FATAL_ERROR "ERROR downloading ${PATCH_URL} - status: ${PATCH_DL_STATUS} log: ${PATCH_LOG}")
16 endif()
17
18 # extract the archive containing patch.exe
19 execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzvf ${PATCH_DOWNLOAD}
20 WORKING_DIRECTORY ${BUILD_DIR})
21
22 # make sure the extraction worked and that patch.exe is there
23 set(PATCH_PATH ${BUILD_DIR}/${PATCH_ARCHIVE_NAME})
24 set(PATCH_BINARY_PATH ${PATCH_PATH}/bin/patch.exe)
25 if(NOT EXISTS ${PATCH_PATH} OR NOT EXISTS ${PATCH_BINARY_PATH})
26 message(FATAL_ERROR "ERROR extracting patch utility from ${PATCH_PATH}")
27 endif()
28
29 # copy patch.exe into the output directory
30 file(INSTALL ${PATCH_BINARY_PATH} DESTINATION ${ADDON_DEPENDS_PATH}/bin)
31
32 # make sure that cmake can find the copied patch.exe
33 find_program(PATCH_FOUND NAMES patch patch.exe)
34 if(NOT PATCH_FOUND)
35 message(FATAL_ERROR "ERROR installing patch utility from ${PATCH_BINARY_PATH} to ${ADDON_DEPENDS_PATH}/bin")
36 endif()
37endif()