CMakeLists.txt 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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
  26. $<$<PLATFORM_ID:Windows>:$<CONFIG>/>obspython.h
  27. CONTENT "#pragma once\n\n#define PYTHON_LIB \"$<TARGET_LINKER_FILE_NAME:Python::Python>\"\n"
  28. )
  29. target_include_directories(
  30. obspython
  31. PRIVATE
  32. "$<$<PLATFORM_ID:Windows>:${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>>"
  33. "$<$<PLATFORM_ID:Darwin>:$<TARGET_PROPERTY:Python::Python,INTERFACE_INCLUDE_DIRECTORIES>>"
  34. )
  35. target_compile_options(
  36. obspython
  37. PRIVATE
  38. $<$<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. )
  44. target_compile_definitions(
  45. obspython
  46. PRIVATE
  47. SWIG_TYPE_TABLE=obspython
  48. Py_ENABLE_SHARED=1
  49. SWIG_PYTHON_INTERPRETER_NO_DEBUG
  50. $<$<BOOL:${ENABLE_UI}>:ENABLE_UI>
  51. )
  52. target_link_libraries(
  53. obspython
  54. PRIVATE
  55. OBS::cstrcache
  56. OBS::libobs
  57. OBS::scripting
  58. $<$<BOOL:${ENABLE_UI}>:OBS::frontend-api>
  59. $<$<NOT:$<PLATFORM_ID:Darwin>>:Python::Python>
  60. )
  61. target_link_options(obspython PRIVATE $<$<PLATFORM_ID:Darwin>:LINKER:-undefined,dynamic_lookup>)
  62. if(MSVC OR XCODE)
  63. add_custom_command(
  64. TARGET obspython
  65. POST_BUILD
  66. COMMAND
  67. "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_BINARY_DIR}/obspython.py"
  68. "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/obspython.py"
  69. VERBATIM
  70. )
  71. endif()
  72. set_property(
  73. TARGET obspython
  74. APPEND
  75. PROPERTY
  76. SWIG_COMPILE_DEFINITIONS
  77. "SWIG_TYPE_TABLE=obspython"
  78. "Py_ENABLE_SHARED=1"
  79. "SWIG_PYTHON_INTERPRETER_NO_DEBUG"
  80. "$<$<BOOL:${ENABLE_UI}>:ENABLE_UI>"
  81. "$<$<PLATFORM_ID:Windows>:MS_NO_COREDLL>"
  82. )
  83. set_target_properties_obs(obspython PROPERTIES FOLDER scripting PREFIX "_" XCODE_ATTRIBUTE_STRIP_STYLE non-global)