CMakeLists.txt 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 OR OS_FREEBSD OR OS_OPENBSD)
  13. find_package(Python 3.8 REQUIRED Interpreter Development)
  14. else()
  15. find_package(Python 3.8...<3.12 REQUIRED Interpreter Development)
  16. endif()
  17. find_package(SWIG 4 REQUIRED)
  18. include(UseSWIG)
  19. set_source_files_properties(
  20. obspython.i
  21. PROPERTIES USE_TARGET_INCLUDE_DIRECTORIES TRUE SWIG_FLAGS $<$<PLATFORM_ID:Windows,Darwin>:-py3-stable-abi>
  22. )
  23. swig_add_library(obspython LANGUAGE python TYPE MODULE SOURCES obspython.i)
  24. add_library(OBS::python ALIAS obspython)
  25. file(
  26. GENERATE OUTPUT
  27. $<$<PLATFORM_ID:Windows>:$<CONFIG>/>obspython.h
  28. CONTENT "#pragma once\n\n#define PYTHON_LIB \"$<TARGET_LINKER_FILE_NAME:Python::Python>\"\n"
  29. )
  30. target_include_directories(
  31. obspython
  32. PRIVATE
  33. "$<$<PLATFORM_ID:Windows>:${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>>"
  34. "$<$<PLATFORM_ID:Darwin>:$<TARGET_PROPERTY:Python::Python,INTERFACE_INCLUDE_DIRECTORIES>>"
  35. )
  36. target_compile_options(
  37. obspython
  38. PRIVATE
  39. $<$<PLATFORM_ID:Windows>:/wd4100>
  40. $<$<PLATFORM_ID:Windows>:/wd4197>
  41. $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang,GNU>:-Wno-unused-parameter>
  42. $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-macro-redefined>
  43. $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-unreachable-code>
  44. )
  45. target_compile_definitions(
  46. obspython
  47. PRIVATE
  48. SWIG_TYPE_TABLE=obspython
  49. Py_ENABLE_SHARED=1
  50. SWIG_PYTHON_INTERPRETER_NO_DEBUG
  51. $<$<BOOL:${ENABLE_UI}>:ENABLE_UI>
  52. )
  53. target_link_libraries(
  54. obspython
  55. PRIVATE
  56. OBS::cstrcache
  57. OBS::libobs
  58. OBS::scripting
  59. $<$<BOOL:${ENABLE_UI}>:OBS::frontend-api>
  60. $<$<NOT:$<PLATFORM_ID:Darwin>>:Python::Python>
  61. )
  62. target_link_options(obspython PRIVATE $<$<PLATFORM_ID:Darwin>:LINKER:-undefined,dynamic_lookup>)
  63. if(MSVC OR XCODE)
  64. add_custom_command(
  65. TARGET obspython
  66. POST_BUILD
  67. COMMAND
  68. "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_BINARY_DIR}/obspython.py"
  69. "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/obspython.py"
  70. VERBATIM
  71. )
  72. endif()
  73. set_property(
  74. TARGET obspython
  75. APPEND
  76. PROPERTY
  77. SWIG_COMPILE_DEFINITIONS
  78. "SWIG_TYPE_TABLE=obspython"
  79. "Py_ENABLE_SHARED=1"
  80. "SWIG_PYTHON_INTERPRETER_NO_DEBUG"
  81. "$<$<BOOL:${ENABLE_UI}>:ENABLE_UI>"
  82. "$<$<PLATFORM_ID:Windows>:MS_NO_COREDLL>"
  83. )
  84. set_target_properties_obs(obspython PROPERTIES FOLDER scripting PREFIX "_" XCODE_ATTRIBUTE_STRIP_STYLE non-global)