mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-05-15 02:44:23 -04:00
Updates code for dependency management to use "vendor" information from the CMake preset file.
110 lines
3.9 KiB
CMake
110 lines
3.9 KiB
CMake
# OBS CMake Windows build dependencies module
|
|
|
|
include_guard(GLOBAL)
|
|
|
|
include(buildspec_common)
|
|
|
|
# _handle_qt_cross_compile: Check for and handle cross compiled Qt dependency
|
|
function(_handle_qt_cross_compile architecture)
|
|
set(options "")
|
|
set(oneValueArgs DIRECTORY)
|
|
set(multiValueArgs "")
|
|
cmake_parse_arguments(PARSE_ARGV 0 _HQCC "${options}" "${oneValueArgs}" "${multiValueArgs}")
|
|
|
|
_get_dependency_data(dependency_data)
|
|
|
|
string(JSON data GET ${dependency_data} qt6)
|
|
string(JSON version GET ${data} version)
|
|
|
|
set(qt_build_arch "")
|
|
set(qt_target_arch "")
|
|
set(host_arch "")
|
|
set(platform_name "")
|
|
set(config_has_buildabi FALSE)
|
|
set(qt_cross_compiled FALSE)
|
|
|
|
string(REPLACE "VERSION" "${version}" directory "${_HQCC_DIRECTORY}")
|
|
string(TOLOWER "${CMAKE_VS_PLATFORM_NAME}" platform_name)
|
|
string(REPLACE "ARCH" "${platform_name}" qt_arch_location "${directory}")
|
|
|
|
file(READ "${qt_arch_location}/mkspecs/qconfig.pri" qt_arch_config)
|
|
string(REGEX MATCH ".+QT_TARGET_BUILDABI = (.+)\n.+" config_has_buildabi "${qt_arch_config}")
|
|
|
|
if(config_has_buildabi)
|
|
string(
|
|
REGEX REPLACE
|
|
"host_build {\n[ \t]+QT_ARCH = (x86_64|arm64)\n.+[ \t]+QT_TARGET_ARCH = (x86_64|arm64)\n.+}.+"
|
|
"\\1;\\2"
|
|
host_build_tuple
|
|
"${qt_arch_config}"
|
|
)
|
|
list(GET host_build_tuple 0 qt_build_arch)
|
|
list(GET host_build_tuple 1 qt_target_arch)
|
|
set(qt_cross_compiled TRUE)
|
|
else()
|
|
string(REGEX REPLACE ".*QT_ARCH = (x86_64|arm64)\n.+" "\\1" build_arch "${qt_arch_config}")
|
|
set(qt_build_arch "${build_arch}")
|
|
set(qt_target_arch "${build_arch}")
|
|
endif()
|
|
|
|
if(NOT qt_build_arch MATCHES "x86_64|arm64" OR NOT qt_target_arch MATCHES "x86_64|arm64")
|
|
message(FATAL_ERROR "Unable to detect host or target architecture from Qt dependencies in '${qt_arch_location}'")
|
|
endif()
|
|
|
|
string(REPLACE "x86_64" "x64" qt_build_arch "${qt_build_arch}")
|
|
string(REPLACE "x86_64" "x64" qt_target_arch "${qt_target_arch}")
|
|
string(REPLACE "AMD64" "x64" architecture "${architecture}")
|
|
string(REPLACE "ARM64" "arm64" architecture "${architecture}")
|
|
|
|
if(NOT qt_cross_compiled)
|
|
if(architecture STREQUAL qt_target_arch OR (architecture STREQUAL arm64 AND qt_target_arch STREQUAL x64))
|
|
unset(QT_HOST_PATH CACHE)
|
|
unset(QT_REQUIRE_HOST_PATH_CHECK CACHE)
|
|
return()
|
|
endif()
|
|
|
|
set(QT_REQUIRE_HOST_PATH_CHECK TRUE CACHE STRING "Qt Host Tools Check Required" FORCE)
|
|
endif()
|
|
|
|
if(NOT DEFINED QT_HOST_PATH)
|
|
string(REPLACE "${qt_target_arch}" "${architecture}" host_tools_directory "${qt_arch_location}")
|
|
|
|
if(NOT IS_DIRECTORY "${host_tools_directory}")
|
|
message(
|
|
FATAL_ERROR
|
|
"Required Qt host tools for ${architecture} when building for ${qt_target_arch} not found in '${host_tools_directory}'"
|
|
)
|
|
endif()
|
|
|
|
set(QT_HOST_PATH "${host_tools_directory}" CACHE STRING "Qt Host Tools Path" FORCE)
|
|
endif()
|
|
endfunction()
|
|
|
|
# _check_dependencies_windows: Set up Windows slice for _check_dependencies
|
|
function(_check_dependencies_windows)
|
|
set(dependencies_dir "${CMAKE_CURRENT_SOURCE_DIR}/.deps")
|
|
set(prebuilt_filename "windows-deps-VERSION-ARCH-REVISION.zip")
|
|
set(prebuilt_destination "obs-deps-VERSION-ARCH")
|
|
set(qt6_filename "windows-deps-qt6-VERSION-ARCH-REVISION.zip")
|
|
set(qt6_destination "obs-deps-qt6-VERSION-ARCH")
|
|
set(cef_filename "cef_binary_VERSION_windows_ARCH_REVISION.zip")
|
|
set(cef_destination "cef_binary_VERSION_windows_ARCH")
|
|
|
|
if(CMAKE_VS_PLATFORM_NAME STREQUAL Win32)
|
|
set(arch x86)
|
|
set(dependencies_list prebuilt)
|
|
else()
|
|
string(TOLOWER "${CMAKE_VS_PLATFORM_NAME}" arch)
|
|
set(dependencies_list prebuilt qt6 cef)
|
|
endif()
|
|
set(platform windows-${arch})
|
|
|
|
_check_dependencies(${dependencies_list})
|
|
|
|
if(NOT CMAKE_VS_PLATFORM_NAME STREQUAL Win32)
|
|
_handle_qt_cross_compile(${CMAKE_HOST_SYSTEM_PROCESSOR} DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.deps/${qt6_destination}")
|
|
endif()
|
|
endfunction()
|
|
|
|
_check_dependencies_windows()
|