Browse Source

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
PatTheMav 3 years ago
parent
commit
f31c1c124b
2 changed files with 44 additions and 46 deletions
  1. 35 25
      cmake/Modules/ObsDefaults_macOS.cmake
  2. 9 21
      cmake/Modules/ObsHelpers_macOS.cmake

+ 35 - 25
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

+ 9 - 21
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}\\\" $<$<BOOL:${OBS_CODESIGN_LINKER}>:--options linker-signed > \\\"\${CMAKE_INSTALL_PREFIX}/Frameworks/$<TARGET_FILE_NAME:OBS::browser-helper${_SUFFIX}>.app\\\" > /dev/null"
-      )
+      if(NOT XCODE)
+        set(_COMMAND
+            "/usr/bin/codesign --force --sign \\\"${OBS_BUNDLE_CODESIGN_IDENTITY}\\\" $<$<BOOL:${OBS_CODESIGN_LINKER}>:--options linker-signed > \\\"\${CMAKE_INSTALL_PREFIX}/Frameworks/$<TARGET_FILE_NAME:OBS::browser-helper${_SUFFIX}>.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()