From f31c1c124b41001d12995e3fa47f732f5552e3bc Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 4 Aug 2022 01:10:48 +0200 Subject: [PATCH] cmake: Update Xcode project generation on macOS * If a valid team id is provided, automatic code sign management is enabled * Different deployment targets for x86_64 and arm64 are enabled for Xcode-based builds * Codesign identity and code-sign style are set globally --- cmake/Modules/ObsDefaults_macOS.cmake | 60 ++++++++++++++++----------- cmake/Modules/ObsHelpers_macOS.cmake | 30 ++++---------- 2 files changed, 44 insertions(+), 46 deletions(-) diff --git a/cmake/Modules/ObsDefaults_macOS.cmake b/cmake/Modules/ObsDefaults_macOS.cmake index f8966b8f4..376413559 100644 --- a/cmake/Modules/ObsDefaults_macOS.cmake +++ b/cmake/Modules/ObsDefaults_macOS.cmake @@ -14,34 +14,36 @@ if(POLICY CMP0025) endif() # Build options -if(NOT DEFINED CMAKE_OSX_ARCHITECTURES OR CMAKE_OSX_ARCHITECTURES STREQUAL "") +if(NOT CMAKE_OSX_ARCHITECTURES) set(CMAKE_OSX_ARCHITECTURES "${CMAKE_HOST_SYSTEM_PROCESSOR}" CACHE STRING "OBS build architecture for macOS - x86_64 required at least" FORCE) endif() -set_property(CACHE CMAKE_OSX_ARCHITECTURES PROPERTY STRINGS x86_64 arm64 +set_property(CACHE CMAKE_OSX_ARCHITECTURES PROPERTY STRINGS arm64 x86_64 "x86_64;arm64") -if(NOT DEFINED CMAKE_OSX_DEPLOYMENT_TARGET OR CMAKE_OSX_DEPLOYMENT_TARGET - STREQUAL "") - if("${CMAKE_OSX_ARCHITECTURES}" MATCHES ".*arm64.*") +if(NOT CMAKE_OSX_DEPLOYMENT_TARGET) + set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET[arch=arm64] "11.0") + set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET[arch=x86_64] "10.15") + + if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") set(_MACOS_DEPLOYMENT_TARGET "11.0") else() - set(_MACOS_DEPLOYMENT_TARGET "10.13") + set(_MACOS_DEPLOYMENT_TARGET "10.15") endif() set(CMAKE_OSX_DEPLOYMENT_TARGET "${_MACOS_DEPLOYMENT_TARGET}" - CACHE STRING "OBS deployment target for macOS - 10.13+ required" FORCE) + CACHE STRING "OBS deployment target for macOS - 10.15+ required" FORCE) unset(_MACOS_DEPLOYMENT_TARGET) endif() -set_property(CACHE CMAKE_OSX_DEPLOYMENT_TARGET PROPERTY STRINGS 10.13 10.14 - 10.15 11.0 12.0) +set_property(CACHE CMAKE_OSX_DEPLOYMENT_TARGET PROPERTY STRINGS 10.15 11.0 12.0 + 13.0) if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX - "${CMAKE_BINARY_DIR}/rundir" + "${CMAKE_BINARY_DIR}/install" CACHE STRING "Directory to install OBS after building" FORCE) endif() @@ -69,13 +71,25 @@ if(NOT DEFINED ENV{SWIG_LIB} AND EXISTS "${CMAKE_PREFIX_PATH}/bin/swig") endif() macro(setup_obs_project) + set(CMAKE_XCODE_GENERATE_SCHEME ON) + # Set code signing options - if(NOT DEFINED OBS_BUNDLE_CODESIGN_IDENTITY OR OBS_BUNDLE_CODESIGN_IDENTITY - STREQUAL "") - set(OBS_BUNDLE_CODESIGN_IDENTITY - "-" - CACHE STRING "OBS code signing identity for macOS") + if(NOT OBS_BUNDLE_CODESIGN_TEAM) + set(OBS_BUNDLE_CODESIGN_TEAM + "" + CACHE STRING "OBS code signing team for macOS" FORCE) + if(NOT OBS_BUNDLE_CODESIGN_IDENTITY) + set(OBS_BUNDLE_CODESIGN_IDENTITY + "-" + CACHE STRING "OBS code signing identity for macOS" FORCE) + endif() + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY + "${OBS_BUNDLE_CODESIGN_IDENTITY}") + else() + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_STYLE "Automatic") + set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${OBS_BUNDLE_CODESIGN_TEAM}") endif() + set(OBS_CODESIGN_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/entitlements.plist" CACHE INTERNAL "Path to codesign entitlements plist") @@ -83,17 +97,13 @@ macro(setup_obs_project) ON CACHE BOOL "Enable linker code-signing on macOS (macOS 11+ required)") - # Xcode configuration - if(XCODE) - # Tell Xcode to pretend the linker signed binaries so that editing with - # install_name_tool preserves ad-hoc signatures. This option is supported by - # codesign on macOS 11 or higher. See CMake Issue 21854: - # https://gitlab.kitware.com/cmake/cmake/-/issues/21854 + # Tell Xcode to pretend the linker signed binaries so that editing with + # install_name_tool preserves ad-hoc signatures. This option is supported by + # codesign on macOS 11 or higher. See CMake Issue 21854: + # https://gitlab.kitware.com/cmake/cmake/-/issues/21854 - set(CMAKE_XCODE_GENERATE_SCHEME ON) - if(OBS_CODESIGN_LINKER) - set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS "-o linker-signed") - endif() + if(OBS_CODESIGN_LINKER) + set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS "-o linker-signed") endif() # Set default options for bundling on macOS diff --git a/cmake/Modules/ObsHelpers_macOS.cmake b/cmake/Modules/ObsHelpers_macOS.cmake index f279ef604..81e4ac6ed 100644 --- a/cmake/Modules/ObsHelpers_macOS.cmake +++ b/cmake/Modules/ObsHelpers_macOS.cmake @@ -4,8 +4,6 @@ function(setup_binary_target target) ${target} PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.obsproject.${target}" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY - "${OBS_BUNDLE_CODESIGN_IDENTITY}" XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/entitlements.plist") @@ -90,8 +88,6 @@ function(setup_plugin_target target) "${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/Plugin-Info.plist.in" XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.obsproject.${target}" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY - "${OBS_BUNDLE_CODESIGN_IDENTITY}" XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/entitlements.plist") @@ -107,8 +103,6 @@ function(setup_script_plugin_target target) ${target} PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.obsproject.${target}" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY - "${OBS_BUNDLE_CODESIGN_IDENTITY}" XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/entitlements.plist") @@ -151,8 +145,6 @@ function(setup_obs_app target) set_target_properties( ${target} PROPERTIES BUILD_WITH_INSTALL_RPATH OFF - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY - "${OBS_BUNDLE_CODESIGN_IDENTITY}" XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/entitlements.plist" XCODE_SCHEME_ENVIRONMENT "PYTHONDONTWRITEBYTECODE=1") @@ -201,12 +193,6 @@ function(setup_target_browser target) EXCLUDE_FROM_ALL) foreach(_SUFFIX IN ITEMS "_gpu" "_plugin" "_renderer" "") - if(TARGET obs-browser-page${_SUFFIX}) - add_executable(OBS::browser-helper${_SUFFIX} ALIAS - obs-browser-page${_SUFFIX}) - target_compile_features(obs-browser-page${_SUFFIX} PRIVATE cxx_std_17) - endif() - if(TARGET OBS::browser-helper${_SUFFIX}) add_dependencies(${target} OBS::browser-helper${_SUFFIX}) @@ -217,14 +203,16 @@ function(setup_target_browser target) COMPONENT obs_browser_dev EXCLUDE_FROM_ALL) - set(_COMMAND - "/usr/bin/codesign --force --sign \\\"${OBS_BUNDLE_CODESIGN_IDENTITY}\\\" $<$:--options linker-signed > \\\"\${CMAKE_INSTALL_PREFIX}/Frameworks/$.app\\\" > /dev/null" - ) + if(NOT XCODE) + set(_COMMAND + "/usr/bin/codesign --force --sign \\\"${OBS_BUNDLE_CODESIGN_IDENTITY}\\\" $<$:--options linker-signed > \\\"\${CMAKE_INSTALL_PREFIX}/Frameworks/$.app\\\" > /dev/null" + ) - install( - CODE "execute_process(COMMAND /bin/sh -c \"${_COMMAND}\")" - COMPONENT obs_browser_dev - EXCLUDE_FROM_ALL) + install( + CODE "execute_process(COMMAND /bin/sh -c \"${_COMMAND}\")" + COMPONENT obs_browser_dev + EXCLUDE_FROM_ALL) + endif() endif() endforeach()