compilerconfig.cmake 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # OBS CMake macOS compiler configuration module
  2. include_guard(GLOBAL)
  3. option(ENABLE_COMPILER_TRACE "Enable clang time-trace" OFF)
  4. mark_as_advanced(ENABLE_COMPILER_TRACE)
  5. if(NOT XCODE)
  6. message(FATAL_ERROR "Building OBS Studio on macOS requires Xcode generator.")
  7. endif()
  8. include(ccache)
  9. include(compiler_common)
  10. add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-fopenmp-simd>")
  11. # Enable selection between arm64 and x86_64 targets
  12. if(NOT CMAKE_OSX_ARCHITECTURES)
  13. set(CMAKE_OSX_ARCHITECTURES arm64 CACHE STRING "Build architectures for macOS" FORCE)
  14. endif()
  15. set_property(CACHE CMAKE_OSX_ARCHITECTURES PROPERTY STRINGS arm64 x86_64)
  16. # Ensure recent enough Xcode and platform SDK
  17. set(_obs_macos_minimum_sdk 14.2) # Keep in sync with Xcode
  18. set(_obs_macos_minimum_xcode 15.1) # Keep in sync with SDK
  19. message(DEBUG "macOS SDK Path: ${CMAKE_OSX_SYSROOT}")
  20. string(REGEX MATCH ".+/MacOSX.platform/Developer/SDKs/MacOSX([0-9]+\\.[0-9])+\\.sdk$" _ ${CMAKE_OSX_SYSROOT})
  21. set(_obs_macos_current_sdk ${CMAKE_MATCH_1})
  22. message(DEBUG "macOS SDK version: ${_obs_macos_current_sdk}")
  23. if(_obs_macos_current_sdk VERSION_LESS _obs_macos_minimum_sdk)
  24. message(
  25. FATAL_ERROR
  26. "Your macOS SDK version (${_obs_macos_current_sdk}) is too low. "
  27. "The macOS ${_obs_macos_minimum_sdk} SDK (Xcode ${_obs_macos_minimum_xcode}) is required to build OBS."
  28. )
  29. endif()
  30. unset(_obs_macos_current_sdk)
  31. unset(_obs_macos_minimum_sdk)
  32. unset(_obs_macos_minimum_xcode)
  33. # Enable dSYM generator for release builds
  34. string(APPEND CMAKE_C_FLAGS_RELEASE " -g")
  35. string(APPEND CMAKE_CXX_FLAGS_RELEASE " -g")
  36. string(APPEND CMAKE_OBJC_FLAGS_RELEASE " -g")
  37. string(APPEND CMAKE_OBJCXX_FLAGS_RELEASE " -g")
  38. # Default ObjC compiler options used by Xcode:
  39. #
  40. # * -Wno-implicit-atomic-properties
  41. # * -Wno-objc-interface-ivars
  42. # * -Warc-repeated-use-of-weak
  43. # * -Wno-arc-maybe-repeated-use-of-weak
  44. # * -Wimplicit-retain-self
  45. # * -Wduplicate-method-match
  46. # * -Wshadow
  47. # * -Wfloat-conversion
  48. # * -Wobjc-literal-conversion
  49. # * -Wno-selector
  50. # * -Wno-strict-selector-match
  51. # * -Wundeclared-selector
  52. # * -Wdeprecated-implementations
  53. # * -Wprotocol
  54. # * -Werror=block-capture-autoreleasing
  55. # * -Wrange-loop-analysis
  56. # Default ObjC++ compiler options used by Xcode:
  57. #
  58. # * -Wno-non-virtual-dtor
  59. add_compile_definitions(
  60. $<$<NOT:$<COMPILE_LANGUAGE:Swift>>:$<$<CONFIG:DEBUG>:DEBUG>>
  61. $<$<NOT:$<COMPILE_LANGUAGE:Swift>>:$<$<CONFIG:DEBUG>:_DEBUG>>
  62. $<$<NOT:$<COMPILE_LANGUAGE:Swift>>:SIMDE_ENABLE_OPENMP>
  63. )
  64. if(ENABLE_COMPILER_TRACE)
  65. add_compile_options(
  66. $<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-ftime-trace>
  67. "$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xfrontend -debug-time-expression-type-checking>"
  68. "$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xfrontend -debug-time-function-bodies>"
  69. )
  70. add_link_options(LINKER:-print_statistics)
  71. endif()