CMakeLists.txt 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. cmake_minimum_required(VERSION 3.22...3.25)
  2. legacy_check()
  3. if(POLICY CMP0078)
  4. cmake_policy(SET CMP0078 NEW)
  5. endif()
  6. if(POLICY CMP0086)
  7. cmake_policy(SET CMP0086 NEW)
  8. endif()
  9. if(POLICY CMP0094)
  10. cmake_policy(SET CMP0094 NEW)
  11. endif()
  12. if(OS_LINUX
  13. OR OS_FREEBSD
  14. OR OS_OPENBSD)
  15. find_package(Python 3.8 REQUIRED Interpreter Development)
  16. else()
  17. find_package(Python 3.8...<3.12 REQUIRED Interpreter Development)
  18. endif()
  19. find_package(SWIG 4 REQUIRED)
  20. include(UseSWIG)
  21. set_source_files_properties(obspython.i PROPERTIES USE_TARGET_INCLUDE_DIRECTORIES TRUE
  22. SWIG_FLAGS $<$<PLATFORM_ID:Windows,Darwin>:-py3-stable-abi>)
  23. swig_add_library(
  24. obspython
  25. LANGUAGE python
  26. TYPE MODULE
  27. SOURCES obspython.i)
  28. add_library(OBS::python ALIAS obspython)
  29. file(
  30. GENERATE
  31. OUTPUT $<$<PLATFORM_ID:Windows>:$<CONFIG>/>obspython.h
  32. CONTENT "#pragma once\n\n#define PYTHON_LIB \"$<TARGET_LINKER_FILE_NAME:Python::Python>\"\n")
  33. target_include_directories(
  34. obspython PRIVATE "$<$<PLATFORM_ID:Windows>:${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>>"
  35. "$<$<PLATFORM_ID:Darwin>:$<TARGET_PROPERTY:Python::Python,INTERFACE_INCLUDE_DIRECTORIES>>")
  36. target_compile_options(
  37. obspython
  38. PRIVATE $<$<PLATFORM_ID:Windows>:/wd4100>
  39. $<$<PLATFORM_ID:Windows>:/wd4197>
  40. $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang,GNU>:-Wno-unused-parameter>
  41. $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-macro-redefined>
  42. $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-unreachable-code>)
  43. target_compile_definitions(obspython PRIVATE SWIG_TYPE_TABLE=obspython Py_ENABLE_SHARED=1
  44. SWIG_PYTHON_INTERPRETER_NO_DEBUG $<$<BOOL:${ENABLE_UI}>:ENABLE_UI>)
  45. target_link_libraries(
  46. obspython PRIVATE OBS::cstrcache OBS::libobs OBS::scripting $<$<BOOL:${ENABLE_UI}>:OBS::frontend-api>
  47. $<$<NOT:$<PLATFORM_ID:Darwin>>:Python::Python>)
  48. target_link_options(obspython PRIVATE $<$<PLATFORM_ID:Darwin>:LINKER:-undefined,dynamic_lookup>)
  49. if(MSVC OR XCODE)
  50. add_custom_command(
  51. TARGET obspython
  52. POST_BUILD
  53. COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_BINARY_DIR}/obspython.py"
  54. "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/obspython.py"
  55. VERBATIM)
  56. endif()
  57. set_property(
  58. TARGET obspython
  59. APPEND
  60. PROPERTY SWIG_COMPILE_DEFINITIONS "SWIG_TYPE_TABLE=obspython" "Py_ENABLE_SHARED=1" "SWIG_PYTHON_INTERPRETER_NO_DEBUG"
  61. "$<$<BOOL:${ENABLE_UI}>:ENABLE_UI>" "$<$<PLATFORM_ID:Windows>:MS_NO_COREDLL>")
  62. # cmake-format: off
  63. set_target_properties_obs(obspython PROPERTIES FOLDER scripting PREFIX "_" XCODE_ATTRIBUTE_STRIP_STYLE non-global)
  64. # cmake-format: on