diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2024-03-18 19:35:52 +0100 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2024-04-18 05:00:57 +0200 |
commit | d5bf42f75b0ae35b7f02bb9211787ae1d44a98ba (patch) | |
tree | 3aa389137752dbe2bbaa7446e4ef0e2e1b8c55a5 /cmake | |
parent | bf2ed624091d0239bce91a84df59b7afc843298a (diff) |
Add preliminary support for Qt for visionOS
Qt already runs on Vision Pro as "Designed for iPad", using Qt
for iOS. This change enables building Qt for visionOS directly,
which opens the door to visionOS specific APIs and use-cases
such as volumes and immersive spaces.
The platform removes some APIs we depend on, notably UIScreen,
so some code paths have been disabled or mocked to get something
up and running.
As our current window management approach on UIKit platforms
depends on UIWindow and UIScreen there is currently no way to
bring up QWindows. This will improve once we refactor our
window management to use window scenes.
To configure for visionOS, pass -platform macx-visionos-clang,
and optionally add -sdk xrsimulator to build for the simulator.
Change-Id: I4eda55fc3fd06e12d30a188928487cf68940ee07
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtAutoDetectHelpers.cmake | 13 | ||||
-rw-r--r-- | cmake/QtBaseGlobalTargets.cmake | 4 | ||||
-rw-r--r-- | cmake/QtBuildPathsHelpers.cmake | 2 | ||||
-rw-r--r-- | cmake/QtConfig.cmake.in | 2 | ||||
-rw-r--r-- | cmake/QtPlatformSupport.cmake | 3 | ||||
-rw-r--r-- | cmake/QtPublicAppleHelpers.cmake | 22 | ||||
-rw-r--r-- | cmake/QtWrapperScriptHelpers.cmake | 2 | ||||
-rw-r--r-- | cmake/visionos/Info.plist.app.in | 42 | ||||
-rw-r--r-- | cmake/visionos/PrivacyInfo.xcprivacy | 14 |
9 files changed, 96 insertions, 8 deletions
diff --git a/cmake/QtAutoDetectHelpers.cmake b/cmake/QtAutoDetectHelpers.cmake index 9120e3cf62..ad0764b804 100644 --- a/cmake/QtAutoDetectHelpers.cmake +++ b/cmake/QtAutoDetectHelpers.cmake @@ -184,6 +184,8 @@ function(qt_auto_detect_apple) if("${QT_QMAKE_TARGET_MKSPEC}" STREQUAL "macx-ios-clang") set(CMAKE_SYSTEM_NAME "iOS" CACHE STRING "") + elseif("${QT_QMAKE_TARGET_MKSPEC}" STREQUAL "macx-visionos-clang") + set(CMAKE_SYSTEM_NAME "visionOS" CACHE STRING "") endif() if(CMAKE_SYSTEM_NAME STREQUAL iOS) @@ -226,13 +228,14 @@ function(qt_auto_detect_apple) endif() endif() - # For non simulator_and_device builds, we need to explicitly set the SYSROOT aka the sdk - # value. - if(QT_APPLE_SDK) - set(CMAKE_OSX_SYSROOT "${QT_APPLE_SDK}" CACHE STRING "") - endif() set(CMAKE_OSX_ARCHITECTURES "${osx_architectures}" CACHE STRING "") + endif() + + if(QT_APPLE_SDK) + set(CMAKE_OSX_SYSROOT "${QT_APPLE_SDK}" CACHE STRING "") + endif() + if(CMAKE_SYSTEM_NAME STREQUAL iOS OR CMAKE_SYSTEM_NAME STREQUAL visionOS) if(NOT DEFINED BUILD_SHARED_LIBS) qt_internal_ensure_static_qt_config() endif() diff --git a/cmake/QtBaseGlobalTargets.cmake b/cmake/QtBaseGlobalTargets.cmake index e561701def..1e604559ed 100644 --- a/cmake/QtBaseGlobalTargets.cmake +++ b/cmake/QtBaseGlobalTargets.cmake @@ -321,6 +321,7 @@ qt_copy_or_install(DIRECTORY cmake/ PATTERN "3rdparty" EXCLUDE PATTERN "macos" EXCLUDE PATTERN "ios" EXCLUDE + PATTERN "visionos" EXCLUDE PATTERN "platforms" EXCLUDE PATTERN "QtBuildInternals" EXCLUDE ) @@ -335,6 +336,7 @@ if(QT_WILL_INSTALL) PATTERN "3rdparty" EXCLUDE PATTERN "macos" EXCLUDE PATTERN "ios" EXCLUDE + PATTERN "visionos" EXCLUDE PATTERN "platforms" EXCLUDE PATTERN "QtBuildInternals" EXCLUDE ) @@ -345,6 +347,8 @@ if(APPLE) set(platform_shortname "macos") elseif(IOS) set(platform_shortname "ios") + elseif(VISIONOS) + set(platform_shortname "visionos") endif() # Info.plist diff --git a/cmake/QtBuildPathsHelpers.cmake b/cmake/QtBuildPathsHelpers.cmake index ad4b7a1365..6431fa1937 100644 --- a/cmake/QtBuildPathsHelpers.cmake +++ b/cmake/QtBuildPathsHelpers.cmake @@ -214,6 +214,8 @@ macro(qt_internal_set_qt_apple_support_files_path) set(__qt_internal_cmake_apple_support_files_path "${QT_CMAKE_DIR}/macos") elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS") set(__qt_internal_cmake_apple_support_files_path "${QT_CMAKE_DIR}/ios") + elseif(CMAKE_SYSTEM_NAME STREQUAL "visionOS") + set(__qt_internal_cmake_apple_support_files_path "${QT_CMAKE_DIR}/visionos") endif() endif() endmacro() diff --git a/cmake/QtConfig.cmake.in b/cmake/QtConfig.cmake.in index c2a5d381d9..b5a21e391d 100644 --- a/cmake/QtConfig.cmake.in +++ b/cmake/QtConfig.cmake.in @@ -44,6 +44,8 @@ if(APPLE) set(__qt_internal_cmake_apple_support_files_path "${_qt_import_prefix}/macos") elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS") set(__qt_internal_cmake_apple_support_files_path "${_qt_import_prefix}/ios") + elseif(CMAKE_SYSTEM_NAME STREQUAL "visionOS") + set(__qt_internal_cmake_apple_support_files_path "${_qt_import_prefix}/visionos") endif() endif() diff --git a/cmake/QtPlatformSupport.cmake b/cmake/QtPlatformSupport.cmake index e20a5e153d..9f8498e42c 100644 --- a/cmake/QtPlatformSupport.cmake +++ b/cmake/QtPlatformSupport.cmake @@ -32,7 +32,8 @@ qt_set01(BSD APPLE OR OPENBSD OR FREEBSD OR NETBSD) qt_set01(IOS APPLE AND CMAKE_SYSTEM_NAME STREQUAL "iOS") qt_set01(TVOS APPLE AND CMAKE_SYSTEM_NAME STREQUAL "tvOS") qt_set01(WATCHOS APPLE AND CMAKE_SYSTEM_NAME STREQUAL "watchOS") -qt_set01(UIKIT APPLE AND (IOS OR TVOS OR WATCHOS)) +qt_set01(VISIONOS APPLE AND CMAKE_SYSTEM_NAME STREQUAL "visionOS") +qt_set01(UIKIT APPLE AND (IOS OR TVOS OR WATCHOS OR VISIONOS)) qt_set01(MACOS APPLE AND NOT UIKIT) qt_set01(GCC CMAKE_CXX_COMPILER_ID STREQUAL "GNU") diff --git a/cmake/QtPublicAppleHelpers.cmake b/cmake/QtPublicAppleHelpers.cmake index 294412d2e7..5f7a7719b5 100644 --- a/cmake/QtPublicAppleHelpers.cmake +++ b/cmake/QtPublicAppleHelpers.cmake @@ -681,6 +681,12 @@ function(_qt_internal_export_apple_sdk_and_xcode_version_requirements out_var) QT_SUPPORTED_MAX_IOS_SDK_VERSION QT_SUPPORTED_MIN_IOS_XCODE_VERSION ) + elseif(VISIONOS) + set(vars_to_assign + QT_SUPPORTED_MIN_VISIONOS_SDK_VERSION + QT_SUPPORTED_MAX_VISIONOS_SDK_VERSION + QT_SUPPORTED_MIN_VISIONOS_XCODE_VERSION + ) else() set(vars_to_assign QT_SUPPORTED_MIN_MACOS_SDK_VERSION @@ -707,6 +713,8 @@ function(_qt_internal_get_apple_sdk_version out_var) if(APPLE) if(CMAKE_SYSTEM_NAME STREQUAL iOS) set(sdk_name "iphoneos") + elseif(CMAKE_SYSTEM_NAME STREQUAL visionOS) + set(sdk_name "xros") else() # Default to macOS set(sdk_name "macosx") @@ -804,6 +812,10 @@ function(_qt_internal_check_apple_sdk_and_xcode_versions) set(min_sdk_version "${QT_SUPPORTED_MIN_IOS_SDK_VERSION}") set(max_sdk_version "${QT_SUPPORTED_MAX_IOS_SDK_VERSION}") set(min_xcode_version "${QT_SUPPORTED_MIN_IOS_XCODE_VERSION}") + elseif(VISIONOS) + set(min_sdk_version "${QT_SUPPORTED_MIN_VISIONOS_SDK_VERSION}") + set(max_sdk_version "${QT_SUPPORTED_MAX_VISIONOS_SDK_VERSION}") + set(min_xcode_version "${QT_SUPPORTED_MIN_VISIONOS_XCODE_VERSION}") else() set(min_sdk_version "${QT_SUPPORTED_MIN_MACOS_SDK_VERSION}") set(max_sdk_version "${QT_SUPPORTED_MAX_MACOS_SDK_VERSION}") @@ -885,7 +897,7 @@ function(_qt_internal_check_apple_sdk_and_xcode_versions) endfunction() function(_qt_internal_finalize_apple_app target) - # Shared between macOS and iOS apps + # Shared between macOS and UIKit apps _qt_internal_copy_info_plist("${target}") _qt_internal_set_apple_localizations("${target}") @@ -905,6 +917,14 @@ function(_qt_internal_finalize_apple_app target) _qt_internal_set_placeholder_apple_bundle_version("${target}") endfunction() +function(_qt_internal_finalize_uikit_app target) + if(CMAKE_SYSTEM_NAME STREQUAL iOS) + _qt_internal_finalize_ios_app("${target}") + else() + _qt_internal_finalize_apple_app("${target}") + endif() +endfunction() + function(_qt_internal_finalize_ios_app target) # Must be called before we generate the Info.plist _qt_internal_handle_ios_launch_screen("${target}") diff --git a/cmake/QtWrapperScriptHelpers.cmake b/cmake/QtWrapperScriptHelpers.cmake index 9ba8e4017b..8eb4416e6d 100644 --- a/cmake/QtWrapperScriptHelpers.cmake +++ b/cmake/QtWrapperScriptHelpers.cmake @@ -22,7 +22,7 @@ function(qt_internal_create_wrapper_scripts) set(extra_qt_cmake_code "") if(generate_unix) - if(IOS) + if(UIKIT) set(extra_qt_cmake_code [=[ # Specify Xcode as the default generator by assigning it to the CMAKE_GENERATOR env var. # An explicit -G or -D CMAKE_GENERATOR given on the command line will still take precedence. diff --git a/cmake/visionos/Info.plist.app.in b/cmake/visionos/Info.plist.app.in new file mode 100644 index 0000000000..7aa4698649 --- /dev/null +++ b/cmake/visionos/Info.plist.app.in @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + + <key>CFBundlePackageType</key> + <string>APPL</string> + + <key>CFBundleName</key> + <string>${MACOSX_BUNDLE_BUNDLE_NAME}</string> + + <key>CFBundleDisplayName</key> + <string>${QT_INTERNAL_DOLLAR_VAR}{PRODUCT_NAME}</string> + + <key>CFBundleIdentifier</key> + <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string> + + <key>CFBundleExecutable</key> + <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string> + + <key>CFBundleVersion</key> + <string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string> + + <key>CFBundleShortVersionString</key> + <string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string> + + <key>CFBundleIconFile</key> + <string>${MACOSX_BUNDLE_ICON_FILE}</string> + + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleAllowMixedLocalizations</key> + <true/> + + <key>CFBundleSupportedPlatforms</key> + <array> + <string>XROS</string> + </array> +</dict> +</plist> diff --git a/cmake/visionos/PrivacyInfo.xcprivacy b/cmake/visionos/PrivacyInfo.xcprivacy new file mode 100644 index 0000000000..d75908da05 --- /dev/null +++ b/cmake/visionos/PrivacyInfo.xcprivacy @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>NSPrivacyTracking</key> + <false/> + <key>NSPrivacyCollectedDataTypes</key> + <array/> + <key>NSPrivacyTrackingDomains</key> + <array/> + <key>NSPrivacyAccessedAPITypes</key> + <array/> +</dict> +</plist> |