CMakeLists.txt 2.5 KB

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