aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Fetzer <fetzer.ch@gmail.com>2016-07-23 19:44:00 +0200
committerChristian Fetzer <fetzer.ch@gmail.com>2016-07-27 23:17:35 +0200
commitc4dd3d7a488e984199c21d4229f3f9d5203b2cb8 (patch)
treefa6ee84c6b85185738877b2be53a8b230d0bfd53
parentbbfd454af1d2c2df932763727358bfa68010b7b8 (diff)
[cmake] Introduce ENABLE_STATIC_LIBS option
Add an option ENABLE_STATIC_LIBS that defines if the buildsystem creates one static library per subdirectory in xbmc/ or compiles everything into one big library. The option defaults to true, except for Visual Studio and Xcode, because these generators work much better with a single big library. The project structure in Visual Studio and Xcode is closer to the filesystem, which cannot be realized otherwise, because they show separate projects for each subdirectory. Several related changes are introduced in this commit: - dependency management had to be adapted to work in both cases - include directories are propagated through target_include_directories(... INTERFACE ...) - dvdnav and crossguid are made a project wide dependency, because they are widely used within the project.
-rw-r--r--project/cmake/CMakeLists.txt49
-rw-r--r--project/cmake/scripts/common/Macros.cmake74
-rw-r--r--project/cmake/scripts/windows/Macros.cmake26
-rw-r--r--xbmc/cores/AudioEngine/CMakeLists.txt3
-rw-r--r--xbmc/cores/VideoPlayer/CMakeLists.txt4
-rw-r--r--xbmc/cores/VideoPlayer/DVDDemuxers/CMakeLists.txt4
-rw-r--r--xbmc/cores/VideoPlayer/DVDInputStreams/CMakeLists.txt4
-rw-r--r--xbmc/cores/VideoPlayer/Process/CMakeLists.txt3
-rw-r--r--xbmc/cores/VideoPlayer/VideoRenderers/CMakeLists.txt3
-rw-r--r--xbmc/cores/omxplayer/CMakeLists.txt2
-rw-r--r--xbmc/filesystem/CMakeLists.txt17
-rw-r--r--xbmc/guilib/CMakeLists.txt30
-rw-r--r--xbmc/interfaces/json-rpc/CMakeLists.txt2
-rw-r--r--xbmc/interfaces/swig/CMakeLists.txt27
-rw-r--r--xbmc/network/upnp/CMakeLists.txt15
-rw-r--r--xbmc/platform/android/activity/CMakeLists.txt2
-rw-r--r--xbmc/rendering/dx/CMakeLists.txt4
-rw-r--r--xbmc/storage/CMakeLists.txt4
-rw-r--r--xbmc/threads/test/CMakeLists.txt2
-rw-r--r--xbmc/utils/CMakeLists.txt6
-rw-r--r--xbmc/video/CMakeLists.txt3
-rw-r--r--xbmc/video/videosync/CMakeLists.txt2
22 files changed, 120 insertions, 166 deletions
diff --git a/project/cmake/CMakeLists.txt b/project/cmake/CMakeLists.txt
index d74df68943..a5b896c238 100644
--- a/project/cmake/CMakeLists.txt
+++ b/project/cmake/CMakeLists.txt
@@ -57,6 +57,15 @@ if(CMAKE_SYSTEM_NAME STREQUAL Linux)
option(ENABLE_EVENTCLIENTS "Enable event clients support?" OFF)
endif()
+# Build static libraries per directory
+if(NOT CMAKE_GENERATOR MATCHES "Visual Studio" AND NOT CMAKE_GENERATOR STREQUAL Xcode)
+ set(STATIC_LIBS_DEFAULT ON)
+else()
+ set(STATIC_LIBS_DEFAULT OFF)
+endif()
+option(ENABLE_STATIC_LIBS "Build static libraries per directory" ${STATIC_LIBS_DEFAULT})
+unset(STATIC_LIBS_DEFAULT)
+
get_filename_component(CORE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/../.. ABSOLUTE)
set(CORE_BUILD_DIR build)
@@ -263,12 +272,6 @@ mark_as_advanced(test_sources)
add_subdirectory(${CORE_SOURCE_DIR}/lib/gtest ${CORE_BUILD_DIR}/gtest EXCLUDE_FROM_ALL)
set_target_properties(gtest PROPERTIES FOLDER "External Projects")
-# Subdirs
-core_add_subdirs_from_filelist(${PROJECT_SOURCE_DIR}/treedata/common/*.txt
- ${PROJECT_SOURCE_DIR}/treedata/${CORE_SYSTEM_NAME}/*.txt)
-core_add_optional_subdirs_from_filelist(${PROJECT_SOURCE_DIR}/treedata/optional/common/*.txt
- ${PROJECT_SOURCE_DIR}/treedata/optional/${CORE_SYSTEM_NAME}/*.txt)
-
# copy files to build tree
copy_files_from_filelist_to_buildtree(${PROJECT_SOURCE_DIR}/installdata/common/*.txt
${PROJECT_SOURCE_DIR}/installdata/${CORE_SYSTEM_NAME}/*.txt)
@@ -298,24 +301,43 @@ elseif(CORE_SYSTEM_NAME STREQUAL android)
${CORE_BUILD_DIR}/DllPaths_generated_android.h @ONLY)
endif()
+# main library (used for main binary and tests)
+add_library(lib${APP_NAME_LC} STATIC $<TARGET_OBJECTS:compileinfo>)
+set_target_properties(lib${APP_NAME_LC} PROPERTIES PREFIX "")
+add_dependencies(lib${APP_NAME_LC} libcpluff ffmpeg dvdnav crossguid)
+
# Codegen
add_subdirectory(${CORE_SOURCE_DIR}/xbmc/interfaces/swig build/swig)
# Other files (IDE)
set(OTHER_FILES README.md)
+# Subdirs
+core_add_subdirs_from_filelist(${PROJECT_SOURCE_DIR}/treedata/common/*.txt
+ ${PROJECT_SOURCE_DIR}/treedata/${CORE_SYSTEM_NAME}/*.txt)
+core_add_optional_subdirs_from_filelist(${PROJECT_SOURCE_DIR}/treedata/optional/common/*.txt
+ ${PROJECT_SOURCE_DIR}/treedata/optional/${CORE_SYSTEM_NAME}/*.txt)
+
+target_link_libraries(lib${APP_NAME_LC} PUBLIC ${core_DEPENDS} ${SYSTEM_LDFLAGS} ${DEPLIBS} ${CMAKE_DL_LIBS})
+set_target_properties(lib${APP_NAME_LC} PROPERTIES PROJECT_LABEL "xbmc")
+source_group_by_folder(lib${APP_NAME_LC} RELATIVE ${CORE_SOURCE_DIR}/xbmc)
+if(WIN32)
+ add_precompiled_header(lib${APP_NAME_LC} pch.h ${CORE_SOURCE_DIR}/xbmc/platform/win32/pch.cpp PCH_TARGET kodi)
+ set_language_cxx(lib${APP_NAME_LC})
+endif()
+
# main binary
if(NOT CORE_SYSTEM_NAME STREQUAL android)
- add_executable(${APP_NAME_LC} ${CORE_MAIN_SOURCE} $<TARGET_OBJECTS:compileinfo> "${RESOURCES}" ${OTHER_FILES})
+ add_executable(${APP_NAME_LC} ${CORE_MAIN_SOURCE} "${RESOURCES}" ${OTHER_FILES})
add_dependencies(${APP_NAME_LC} ${APP_NAME_LC}-libraries export-files pack-skins)
else()
- add_library(${APP_NAME_LC} SHARED ${CORE_MAIN_SOURCE} $<TARGET_OBJECTS:compileinfo> "${RESOURCES}" ${OTHER_FILES})
+ add_library(${APP_NAME_LC} SHARED ${CORE_MAIN_SOURCE} "${RESOURCES}" ${OTHER_FILES})
# The libraries depend on the main shared library for wrapping. Because of this we cannot build
# the libraries as a dependency. This requires to build the all target on android (and not only kodi).
add_dependencies(${APP_NAME_LC} export-files pack-skins)
endif()
whole_archive(_MAIN_LIBRARIES ${core_DEPENDS})
-target_link_libraries(${APP_NAME_LC} ${SYSTEM_LDFLAGS} ${_MAIN_LIBRARIES} ${DEPLIBS} ${CMAKE_DL_LIBS})
+target_link_libraries(${APP_NAME_LC} ${_MAIN_LIBRARIES} lib${APP_NAME_LC} ${SYSTEM_LDFLAGS} ${DEPLIBS} ${CMAKE_DL_LIBS})
unset(_MAIN_LIBRARIES)
if(WIN32)
@@ -330,11 +352,14 @@ endif()
# testing
copy_files_from_filelist_to_buildtree(${PROJECT_SOURCE_DIR}/installdata/test-reference-data.txt NO_INSTALL)
-add_executable(${APP_NAME_LC}-test EXCLUDE_FROM_ALL ${CORE_SOURCE_DIR}/xbmc/test/xbmc-test.cpp $<TARGET_OBJECTS:compileinfo>)
-whole_archive(_TEST_LIBRARIES ${core_DEPENDS} gtest ${test_archives})
-target_link_libraries(${APP_NAME_LC}-test ${SYSTEM_LDFLAGS} ${_TEST_LIBRARIES} ${DEPLIBS} ${CMAKE_DL_LIBS})
+add_executable(${APP_NAME_LC}-test EXCLUDE_FROM_ALL ${CORE_SOURCE_DIR}/xbmc/test/xbmc-test.cpp ${test_sources})
+whole_archive(_TEST_LIBRARIES ${core_DEPENDS} gtest)
+target_link_libraries(${APP_NAME_LC}-test PRIVATE ${SYSTEM_LDFLAGS} ${_TEST_LIBRARIES} lib${APP_NAME_LC} ${DEPLIBS} ${CMAKE_DL_LIBS})
unset(_TEST_LIBRARIES)
add_dependencies(${APP_NAME_LC}-test ${APP_NAME_LC}-libraries export-files)
+if(WIN32)
+ add_precompiled_header(${APP_NAME_LC}-test pch.h ${CORE_SOURCE_DIR}/xbmc/platform/win32/pch.cpp PCH_TARGET kodi)
+endif()
# make test and make check (cannot be executed when cross compiling)
if(NOT CMAKE_CROSSCOMPILING)
diff --git a/project/cmake/scripts/common/Macros.cmake b/project/cmake/scripts/common/Macros.cmake
index bc4556e1be..1527732594 100644
--- a/project/cmake/scripts/common/Macros.cmake
+++ b/project/cmake/scripts/common/Macros.cmake
@@ -51,66 +51,54 @@ function(source_group_by_folder target)
endif()
endfunction()
-# Add a library, optionally as a dependency of the main application
+# Add sources to main application
# Arguments:
# name name of the library to add
# Implicit arguments:
+# ENABLE_STATIC_LIBS Build static libraries per directory
# SOURCES the sources of the library
# HEADERS the headers of the library (only for IDE support)
# OTHERS other library related files (only for IDE support)
# On return:
# Library will be built, optionally added to ${core_DEPENDS}
+# Sets CORE_LIBRARY for calls for setting target specific options
function(core_add_library name)
- if(NOT SOURCES)
- message(STATUS "No sources added to ${name} skipping")
- return()
- endif()
-
- add_library(${name} STATIC ${SOURCES} ${HEADERS} ${OTHERS})
- set_target_properties(${name} PROPERTIES PREFIX "")
- set(core_DEPENDS ${name} ${core_DEPENDS} CACHE STRING "" FORCE)
- add_dependencies(${name} libcpluff ffmpeg)
-
- # Add precompiled headers to Kodi main libraries
- if(CORE_SYSTEM_NAME STREQUAL windows AND CMAKE_CURRENT_LIST_DIR MATCHES "^${CORE_SOURCE_DIR}/xbmc")
- add_precompiled_header(${name} pch.h ${CORE_SOURCE_DIR}/xbmc/platform/win32/pch.cpp
- PCH_TARGET kodi)
- set_language_cxx(${name})
- endif()
-
- # IDE support
- if(CMAKE_GENERATOR MATCHES "Xcode")
- file(RELATIVE_PATH parentfolder ${CORE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/..)
- set_target_properties(${name} PROPERTIES FOLDER "${parentfolder}")
- elseif(CMAKE_GENERATOR MATCHES "Visual Studio")
- file(RELATIVE_PATH foldername ${CORE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
- set_target_properties(${name} PROPERTIES FOLDER "${foldername}")
- source_group(" " REGULAR_EXPRESSION ".*")
+ if(ENABLE_STATIC_LIBS)
+ add_library(${name} STATIC ${SOURCES} ${HEADERS} ${OTHERS})
+ set_target_properties(${name} PROPERTIES PREFIX "")
+ set(core_DEPENDS ${name} ${core_DEPENDS} CACHE STRING "" FORCE)
+ add_dependencies(${name} libcpluff ffmpeg dvdnav crossguid)
+ set(CORE_LIBRARY ${name} PARENT_SCOPE)
+
+ # Add precompiled headers to Kodi main libraries
+ if(CORE_SYSTEM_NAME STREQUAL windows)
+ add_precompiled_header(${name} pch.h ${CORE_SOURCE_DIR}/xbmc/platform/win32/pch.cpp PCH_TARGET kodi)
+ set_language_cxx(${name})
+ endif()
+ else()
+ foreach(src IN LISTS SOURCES HEADERS OTHERS)
+ get_filename_component(src_path "${src}" ABSOLUTE)
+ list(APPEND FILES ${src_path})
+ endforeach()
+ target_sources(lib${APP_NAME_LC} PRIVATE ${FILES})
+ set(CORE_LIBRARY lib${APP_NAME_LC} PARENT_SCOPE)
endif()
endfunction()
# Add a test library, and add sources to list for gtest integration macros
function(core_add_test_library name)
- # Backup the old SOURCES variable, since we'll append SUPPORT_SOURCES to it
- set(TEST_ONLY_SOURCES ${SOURCES})
- add_library(${name} STATIC ${SOURCES} ${SUPPORTED_SOURCES} ${HEADERS} ${OTHERS})
- set_target_properties(${name} PROPERTIES PREFIX ""
- EXCLUDE_FROM_ALL 1)
-
- # Add precompiled headers to Kodi main libraries
- if(CORE_SYSTEM_NAME STREQUAL windows AND CMAKE_CURRENT_LIST_DIR MATCHES "^${CORE_SOURCE_DIR}/xbmc")
- add_precompiled_header(${name} pch.h ${CORE_SOURCE_DIR}/xbmc/win32/pch.cpp
- PCH_TARGET kodi)
+ if(ENABLE_STATIC_LIBS)
+ add_library(${name} STATIC ${SOURCES} ${SUPPORTED_SOURCES} ${HEADERS} ${OTHERS})
+ set_target_properties(${name} PROPERTIES PREFIX ""
+ EXCLUDE_FROM_ALL 1
+ FOLDER "Build Utilities/tests")
+ add_dependencies(${name} libcpluff ffmpeg dvdnav crossguid)
+ set(test_archives ${test_archives} ${name} CACHE STRING "" FORCE)
endif()
-
- add_dependencies(${name} libcpluff ffmpeg)
- foreach(src ${TEST_ONLY_SOURCES})
- # This will prepend CMAKE_CURRENT_SOURCE_DIR if the path is relative,
- # otherwise use the absolute path.
+ foreach(src IN LISTS SOURCES)
get_filename_component(src_path "${src}" ABSOLUTE)
set(test_sources "${src_path}" ${test_sources} CACHE STRING "" FORCE)
endforeach()
- set(test_archives ${test_archives} ${name} CACHE STRING "" FORCE)
endfunction()
# Add an addon callback library
@@ -400,7 +388,7 @@ function(core_add_subdirs_from_filelist files)
list(GET subdir 0 subdir_src)
list(GET subdir -1 subdir_dest)
if(VERBOSE)
- message(STATUS " core_add_subdirs_from_filelist - adding subdir: ${CORE_SOURCE_DIR}${subdir_src} -> ${CORE_BUILD_DIR}/${subdir_dest}")
+ message(STATUS " core_add_subdirs_from_filelist - adding subdir: ${CORE_SOURCE_DIR}/${subdir_src} -> ${CORE_BUILD_DIR}/${subdir_dest}")
endif()
add_subdirectory(${CORE_SOURCE_DIR}/${subdir_src} ${CORE_BUILD_DIR}/${subdir_dest})
endforeach()
diff --git a/project/cmake/scripts/windows/Macros.cmake b/project/cmake/scripts/windows/Macros.cmake
index 7943a45d40..a908ba7f29 100644
--- a/project/cmake/scripts/windows/Macros.cmake
+++ b/project/cmake/scripts/windows/Macros.cmake
@@ -65,32 +65,6 @@ function(add_precompiled_header target pch_header pch_source)
endif()
endfunction()
-# Adds an FX-compiled shader to a target
-# Creates a custom command that FX-compiles the given shader and adds the
-# generated header file to the given target.
-# Arguments:
-# target Target to add the FX-compiled shader to
-# hlsl HLSL shader input file
-# profile HLSL profile that specifies the shader model
-# entrypoint Shader entry point
-# On return:
-# FXC_FILE is set to the name of the generated header file.
-function(add_shader_dx target hlsl profile entrypoint)
- get_filename_component(file ${hlsl} NAME_WE)
- add_custom_command(OUTPUT ${file}.h
- COMMAND ${FXC} /Fh ${file}.h
- /E ${entrypoint}
- /T ${profile}
- /Vn ${file}
- /Qstrip_reflect
- ${hlsl}
- DEPENDS ${hlsl}
- COMMENT "FX compile ${hlsl}"
- VERBATIM)
- target_sources(${target} PRIVATE ${file}.h)
- target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
-endfunction()
-
# Copies the main dlls to the root of the buildtree
# On return:
# files added to ${install_data}, mirror in build tree
diff --git a/xbmc/cores/AudioEngine/CMakeLists.txt b/xbmc/cores/AudioEngine/CMakeLists.txt
index 19806cb3f0..b50fc4d840 100644
--- a/xbmc/cores/AudioEngine/CMakeLists.txt
+++ b/xbmc/cores/AudioEngine/CMakeLists.txt
@@ -129,6 +129,5 @@ if(CORE_SYSTEM_NAME STREQUAL freebsd)
list(APPEND HEADERS Sinks/AESinkOSS.h)
endif()
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
core_add_library(audioengine)
+target_include_directories(${CORE_LIBRARY} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/xbmc/cores/VideoPlayer/CMakeLists.txt b/xbmc/cores/VideoPlayer/CMakeLists.txt
index 743b68aa33..00d0232922 100644
--- a/xbmc/cores/VideoPlayer/CMakeLists.txt
+++ b/xbmc/cores/VideoPlayer/CMakeLists.txt
@@ -35,7 +35,3 @@ set(HEADERS DVDAudio.h
VideoPlayerVideo.h)
core_add_library(VideoPlayer)
-
-if(NOT CORE_SYSTEM_NAME STREQUAL windows)
- add_dependencies(VideoPlayer dvdnav)
-endif()
diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/CMakeLists.txt b/xbmc/cores/VideoPlayer/DVDDemuxers/CMakeLists.txt
index 82e42715ac..63776b1333 100644
--- a/xbmc/cores/VideoPlayer/DVDDemuxers/CMakeLists.txt
+++ b/xbmc/cores/VideoPlayer/DVDDemuxers/CMakeLists.txt
@@ -22,7 +22,3 @@ set(HEADERS DemuxMultiSource.h
DVDFactoryDemuxer.h)
core_add_library(dvddemuxers)
-
-if(NOT CORE_SYSTEM_NAME STREQUAL windows)
- add_dependencies(dvddemuxers dvdnav)
-endif()
diff --git a/xbmc/cores/VideoPlayer/DVDInputStreams/CMakeLists.txt b/xbmc/cores/VideoPlayer/DVDInputStreams/CMakeLists.txt
index 55916935f7..9385cb78f9 100644
--- a/xbmc/cores/VideoPlayer/DVDInputStreams/CMakeLists.txt
+++ b/xbmc/cores/VideoPlayer/DVDInputStreams/CMakeLists.txt
@@ -30,7 +30,3 @@ if(BLURAY_FOUND)
endif()
core_add_library(dvdinputstreams)
-
-if(NOT CORE_SYSTEM_NAME STREQUAL windows)
- add_dependencies(dvdinputstreams dvdnav)
-endif()
diff --git a/xbmc/cores/VideoPlayer/Process/CMakeLists.txt b/xbmc/cores/VideoPlayer/Process/CMakeLists.txt
index 2f44d55ff4..37d705c034 100644
--- a/xbmc/cores/VideoPlayer/Process/CMakeLists.txt
+++ b/xbmc/cores/VideoPlayer/Process/CMakeLists.txt
@@ -1,11 +1,10 @@
file(GLOB OVERRIDES_CPP overrides/${CORE_SYSTEM_NAME}/*.cpp)
file(GLOB OVERRIDES_H overrides/${CORE_SYSTEM_NAME}/*.h)
-
set(SOURCES ProcessInfo.cpp ${OVERRIDES_CPP})
set(HEADERS ProcessInfo.h ${OVERRIDES_H})
core_add_library(process)
if(OVERRIDES_CPP)
- target_compile_definitions(process PRIVATE -DPLATFORM_OVERRIDE)
+ target_compile_definitions(${CORE_LIBRARY} PRIVATE -DPLATFORM_OVERRIDE)
endif()
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/CMakeLists.txt b/xbmc/cores/VideoPlayer/VideoRenderers/CMakeLists.txt
index 4d50872d70..6617196e87 100644
--- a/xbmc/cores/VideoPlayer/VideoRenderers/CMakeLists.txt
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/CMakeLists.txt
@@ -50,7 +50,6 @@ if(ARCH MATCHES arm)
endif()
core_add_library(videorenderers)
-
if(CORE_SYSTEM_NAME STREQUAL windows)
- add_dependencies(videorenderers d3dx11effects)
+ add_dependencies(${CORE_LIBRARY} d3dx11effects)
endif()
diff --git a/xbmc/cores/omxplayer/CMakeLists.txt b/xbmc/cores/omxplayer/CMakeLists.txt
index be206c93b3..17cdfb2dfb 100644
--- a/xbmc/cores/omxplayer/CMakeLists.txt
+++ b/xbmc/cores/omxplayer/CMakeLists.txt
@@ -17,4 +17,4 @@ set(HEADERS OMXAudio.h
OMXVideoCodec.h)
core_add_library(omxplayer)
-add_definitions(-D__STDC_FORMAT_MACROS)
+target_compile_definitions(${CORE_LIBRARY} PRIVATE -D__STDC_FORMAT_MACROS)
diff --git a/xbmc/filesystem/CMakeLists.txt b/xbmc/filesystem/CMakeLists.txt
index 55bff42107..93b467223d 100644
--- a/xbmc/filesystem/CMakeLists.txt
+++ b/xbmc/filesystem/CMakeLists.txt
@@ -180,16 +180,7 @@ if(BLURAY_FOUND)
BlurayFile.h)
endif()
-include_directories(${CORE_SOURCE_DIR}/lib/libUPnP
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Core
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Platinum
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Devices/MediaConnect
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Devices/MediaRenderer
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Devices/MediaServer
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Extras
- ${CORE_SOURCE_DIR}/lib/libUPnP/Neptune/Source/System/Posix
- ${CORE_SOURCE_DIR}/lib/libUPnP/Neptune/Source/Core)
-
-add_definitions(-DNPT_CONFIG_ENABLE_LOGGING)
-
-core_add_library(filesystem)
+core_add_library(filesystem upnp)
+if(ENABLE_STATIC_LIBS)
+ target_link_libraries(filesystem PRIVATE upnp)
+endif()
diff --git a/xbmc/guilib/CMakeLists.txt b/xbmc/guilib/CMakeLists.txt
index 6ffa4e7de7..98589425e9 100644
--- a/xbmc/guilib/CMakeLists.txt
+++ b/xbmc/guilib/CMakeLists.txt
@@ -217,16 +217,28 @@ if(CORE_SYSTEM_NAME STREQUAL windows)
guishader_video.hlsl
guishader_video_control.hlsl)
foreach(shader ${SHADERS_VERTEX})
- add_shader_dx(guilib
- ${CORE_SOURCE_DIR}/system/shaders/${shader}
- vs_4_0_level_9_1
- VS)
+ get_filename_component(file ${shader} NAME_WE)
+ add_custom_command(OUTPUT ${file}.h
+ COMMAND ${FXC} /Fh ${file}.h /E VS /T vs_4_0_level_9_1 /Vn ${file} /Qstrip_reflect
+ ${CORE_SOURCE_DIR}/system/shaders/${shader}
+ DEPENDS ${CORE_SOURCE_DIR}/system/shaders/${shader}
+ COMMENT "FX compile vertex shader ${shader}"
+ VERBATIM)
+ list(APPEND SHADERS ${file}.h)
endforeach()
foreach(shader ${SHADERS_PIXEL})
- add_shader_dx(guilib
- ${CORE_SOURCE_DIR}/system/shaders/${shader}
- ps_4_0_level_9_1
- PS)
+ get_filename_component(file ${shader} NAME_WE)
+ add_custom_command(OUTPUT ${file}.h
+ COMMAND ${FXC} /Fh ${file}.h /E PS /T ps_4_0_level_9_1 /Vn ${file} /Qstrip_reflect
+ ${CORE_SOURCE_DIR}/system/shaders/${shader}
+ DEPENDS ${CORE_SOURCE_DIR}/system/shaders/${shader}
+ COMMENT "FX compile pixel shader ${shader}"
+ VERBATIM)
+ list(APPEND SHADERS ${file}.h)
endforeach()
- add_dependencies(guilib d3dx11effects)
+
+ add_custom_target(generate_shaders ALL DEPENDS ${SHADERS})
+ set_target_properties(generate_shaders PROPERTIES FOLDER "Build Utilities")
+ target_include_directories(${CORE_LIBRARY} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
+ add_dependencies(${CORE_LIBRARY} generate_shaders)
endif()
diff --git a/xbmc/interfaces/json-rpc/CMakeLists.txt b/xbmc/interfaces/json-rpc/CMakeLists.txt
index 83e77bdf81..6a0c3c18b6 100644
--- a/xbmc/interfaces/json-rpc/CMakeLists.txt
+++ b/xbmc/interfaces/json-rpc/CMakeLists.txt
@@ -44,4 +44,4 @@ set(HEADERS AddonsOperations.h
XBMCOperations.h)
core_add_library(jsonrpc_interface)
-add_dependencies(jsonrpc_interface generate_json_header)
+add_dependencies(${CORE_LIBRARY} generate_json_header)
diff --git a/xbmc/interfaces/swig/CMakeLists.txt b/xbmc/interfaces/swig/CMakeLists.txt
index e61f27622b..6e676159eb 100644
--- a/xbmc/interfaces/swig/CMakeLists.txt
+++ b/xbmc/interfaces/swig/CMakeLists.txt
@@ -1,4 +1,4 @@
-macro(generate_file file)
+function(generate_file file)
set(classpath ${GROOVY_DIR}/groovy-all-${GROOVY_VER}.jar
${GROOVY_DIR}/commons-lang-${COMMONS_VER}.jar
${CORE_SOURCE_DIR}/tools/codegenerator
@@ -10,14 +10,15 @@ macro(generate_file file)
set(devnull "nul")
endif()
- add_custom_command(OUTPUT ${file}.cpp
+ set(CPP_FILE ${file}.cpp)
+ add_custom_command(OUTPUT ${CPP_FILE}
COMMAND ${SWIG_EXECUTABLE}
ARGS -w401 -c++ -o ${file}.xml -xml -I${CORE_SOURCE_DIR}/xbmc -xmllang python ${CMAKE_CURRENT_SOURCE_DIR}/../swig/${file}
COMMAND ${Java_JAVA_EXECUTABLE}
ARGS -cp "${classpath}" groovy.ui.GroovyMain ${CORE_SOURCE_DIR}/tools/codegenerator/Generator.groovy ${file}.xml ${CMAKE_CURRENT_SOURCE_DIR}/../python/PythonSwig.cpp.template ${file}.cpp > ${devnull}
- IMPLICIT_DEPENDS CXX ${CMAKE_CURRENT_SOURCE_DIR}/../swig/${file})
- list(APPEND SOURCES ${file}.cpp)
-endmacro()
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../swig/${file})
+ set(SOURCES ${SOURCES} "${CPP_FILE}" PARENT_SCOPE)
+endfunction()
find_package(Java COMPONENTS Runtime REQUIRED)
find_package(SWIG REQUIRED)
@@ -34,13 +35,15 @@ set(GROOVY_DIR ${CORE_SOURCE_DIR}/tools/codegenerator/groovy)
set(GROOVY_VER 2.4.4)
set(COMMONS_VER 2.6)
-file(GLOB INTERFACE_FILES ${CORE_SOURCE_DIR}/xbmc/lib/legacy)
-
-set(SOURCES "")
-
-foreach(INPUT ${INPUTS})
+foreach(INPUT IN LISTS INPUTS)
generate_file(${INPUT})
+ list(APPEND GEN_SRCS ${CMAKE_CURRENT_BINARY_DIR}/${INPUT}.cpp)
endforeach()
-core_add_library(python_binding)
-add_dependencies(python_binding python_interface)
+add_library(python_binding STATIC ${SOURCES})
+set_target_properties(python_binding PROPERTIES POSITION_INDEPENDENT_CODE TRUE
+ FOLDER "Build Utilities")
+set(core_DEPENDS python_binding ${core_DEPENDS} CACHE STRING "" FORCE)
+if(WIN32)
+ add_precompiled_header(python_binding pch.h ${CORE_SOURCE_DIR}/xbmc/platform/win32/pch.cpp PCH_TARGET kodi)
+endif()
diff --git a/xbmc/network/upnp/CMakeLists.txt b/xbmc/network/upnp/CMakeLists.txt
index 6c8532610e..e558cfcf63 100644
--- a/xbmc/network/upnp/CMakeLists.txt
+++ b/xbmc/network/upnp/CMakeLists.txt
@@ -12,16 +12,7 @@ set(HEADERS UPnP.h
UPnPServer.h
UPnPSettings.h)
-include_directories(${CORE_SOURCE_DIR}/lib/libUPnP
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Core
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Platinum
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Devices/MediaConnect
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Devices/MediaRenderer
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Devices/MediaServer
- ${CORE_SOURCE_DIR}/lib/libUPnP/Platinum/Source/Extras
- ${CORE_SOURCE_DIR}/lib/libUPnP/Neptune/Source/System/Posix
- ${CORE_SOURCE_DIR}/lib/libUPnP/Neptune/Source/Core)
-
-add_definitions(-DNPT_CONFIG_ENABLE_LOGGING)
-
core_add_library(network_upnp)
+if(ENABLE_STATIC_LIBS)
+ target_link_libraries(network_upnp PRIVATE upnp)
+endif()
diff --git a/xbmc/platform/android/activity/CMakeLists.txt b/xbmc/platform/android/activity/CMakeLists.txt
index 7bd92d8b12..11fd016053 100644
--- a/xbmc/platform/android/activity/CMakeLists.txt
+++ b/xbmc/platform/android/activity/CMakeLists.txt
@@ -25,6 +25,6 @@ set(HEADERS AndroidExtra.h
XBMCApp.h)
core_add_library(platform_android_activity)
-target_include_directories(platform_android_activity
+target_include_directories(${CORE_LIBRARY}
PRIVATE ${NDKROOT}/sources/android/native_app_glue
${NDKROOT}/sources/android/cpufeatures)
diff --git a/xbmc/rendering/dx/CMakeLists.txt b/xbmc/rendering/dx/CMakeLists.txt
index 26d4ec8f23..38f5d5b2ef 100644
--- a/xbmc/rendering/dx/CMakeLists.txt
+++ b/xbmc/rendering/dx/CMakeLists.txt
@@ -5,7 +5,3 @@ set(HEADERS GUIWindowTestPatternDX.h
RenderSystemDX.h)
core_add_library(rendering_dx)
-
-if(CORE_SYSTEM_NAME STREQUAL windows)
- add_dependencies(rendering_dx d3dx11effects)
-endif()
diff --git a/xbmc/storage/CMakeLists.txt b/xbmc/storage/CMakeLists.txt
index cf35ac5812..29b1b5b622 100644
--- a/xbmc/storage/CMakeLists.txt
+++ b/xbmc/storage/CMakeLists.txt
@@ -12,7 +12,3 @@ set(HEADERS AutorunMediaJob.h
MediaManager.h)
core_add_library(storage)
-
-if(NOT CORE_SYSTEM_NAME STREQUAL windows)
- add_dependencies(storage dvdnav)
-endif()
diff --git a/xbmc/threads/test/CMakeLists.txt b/xbmc/threads/test/CMakeLists.txt
index 8c1fb36250..67bbe7686f 100644
--- a/xbmc/threads/test/CMakeLists.txt
+++ b/xbmc/threads/test/CMakeLists.txt
@@ -6,5 +6,3 @@ set(SOURCES TestEvent.cpp
set(HEADERS TestHelpers.h)
core_add_test_library(threads_test)
-target_include_directories(threads_test
- PRIVATE ${CORE_SOURCE_DIR}/lib/gtest/include)
diff --git a/xbmc/utils/CMakeLists.txt b/xbmc/utils/CMakeLists.txt
index 4aa8663254..c495885fde 100644
--- a/xbmc/utils/CMakeLists.txt
+++ b/xbmc/utils/CMakeLists.txt
@@ -8,7 +8,7 @@ set(SOURCES ActorProtocol.cpp
BitstreamConverter.cpp
BitstreamStats.cpp
BooleanLogic.cpp
- CharsetConverter.cpp
+ CharsetConverter.cpp
CharsetDetection.cpp
CPUInfo.cpp
Crc32.cpp
@@ -183,7 +183,3 @@ if(AML_FOUND)
endif()
core_add_library(utils)
-
-if(ENABLE_INTERNAL_CROSSGUID)
- add_dependencies(utils crossguid)
-endif()
diff --git a/xbmc/video/CMakeLists.txt b/xbmc/video/CMakeLists.txt
index 58990b62c3..9c81c0c2fc 100644
--- a/xbmc/video/CMakeLists.txt
+++ b/xbmc/video/CMakeLists.txt
@@ -29,7 +29,6 @@ set(HEADERS Bookmark.h
VideoThumbLoader.h)
core_add_library(video)
-
if(CORE_SYSTEM_NAME STREQUAL windows)
- add_dependencies(video d3dx11effects)
+ add_dependencies(${CORE_LIBRARY} d3dx11effects)
endif()
diff --git a/xbmc/video/videosync/CMakeLists.txt b/xbmc/video/videosync/CMakeLists.txt
index 0dcfab593a..f2a9448266 100644
--- a/xbmc/video/videosync/CMakeLists.txt
+++ b/xbmc/video/videosync/CMakeLists.txt
@@ -38,6 +38,6 @@ endif()
if(SOURCES AND HEADERS)
core_add_library(video_sync)
if(CORE_SYSTEM_NAME STREQUAL windows)
- add_dependencies(video_sync d3dx11effects)
+ add_dependencies(${CORE_LIBRARY} d3dx11effects)
endif()
endif()