CMakeLists.txt 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. cmake_minimum_required(VERSION 3.5)
  2. project(obs-plugintemplate VERSION 1.0.0)
  3. set(PLUGIN_AUTHOR "Your Name Here")
  4. set(MACOS_BUNDLEID "com.example.obs-plugintemplate")
  5. set(CMAKE_PREFIX_PATH "${QTDIR}")
  6. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  7. set(CMAKE_AUTOMOC ON)
  8. set(CMAKE_AUTOUIC ON)
  9. # In case you need C++
  10. set(CMAKE_CXX_STANDARD 11)
  11. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  12. if (WIN32 OR APPLE)
  13. include(external/FindLibObs.cmake)
  14. endif()
  15. find_package(LibObs REQUIRED)
  16. find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
  17. set(PLUGIN_SOURCES
  18. src/plugin-main.c)
  19. set(PLUGIN_HEADERS
  20. src/plugin-macros.h)
  21. configure_file(
  22. src/plugin-macros.h.in
  23. src/plugin-macros.h
  24. )
  25. configure_file(
  26. installer/installer-macOS.pkgproj.in
  27. installer/installer-macOS.pkgproj
  28. )
  29. configure_file(
  30. installer/installer-Windows.iss.in
  31. installer/installer-Windows.iss
  32. )
  33. # --- Platform-independent build settings ---
  34. add_library(${CMAKE_PROJECT_NAME} MODULE ${PLUGIN_SOURCES} ${PLUGIN_HEADERS})
  35. include_directories(
  36. "${LIBOBS_INCLUDE_DIR}/../UI/obs-frontend-api"
  37. ${Qt5Core_INCLUDES}
  38. ${Qt5Widgets_INCLUDES}
  39. )
  40. target_link_libraries(${CMAKE_PROJECT_NAME}
  41. libobs
  42. Qt5::Core
  43. Qt5::Widgets
  44. )
  45. # --- End of section ---
  46. # --- Windows-specific build settings and tasks ---
  47. if(WIN32)
  48. if(NOT DEFINED OBS_FRONTEND_LIB)
  49. set(OBS_FRONTEND_LIB "OBS_FRONTEND_LIB-NOTFOUND" CACHE FILEPATH "OBS frontend library")
  50. message(FATAL_ERROR "Could not find OBS Frontend API\'s library !")
  51. endif()
  52. # Enable Multicore Builds and disable FH4 (to not depend on VCRUNTIME140_1.DLL when building with VS2019)
  53. if (MSVC)
  54. add_definitions(/MP /d2FH4-)
  55. endif()
  56. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  57. set(ARCH_NAME "64bit")
  58. set(OBS_BUILDDIR_ARCH "build64")
  59. else()
  60. set(ARCH_NAME "32bit")
  61. set(OBS_BUILDDIR_ARCH "build32")
  62. endif()
  63. include_directories(
  64. "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/UI"
  65. )
  66. target_link_libraries(${CMAKE_PROJECT_NAME}
  67. "${OBS_FRONTEND_LIB}"
  68. )
  69. # --- Release package helper ---
  70. # The "release" folder has a structure similar OBS' one on Windows
  71. set(RELEASE_DIR "${PROJECT_SOURCE_DIR}/release")
  72. add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
  73. # If config is Release or RelWithDebInfo, package release files
  74. COMMAND if $<CONFIG:Release>==1 OR $<CONFIG:RelWithDebInfo>==1 (
  75. "${CMAKE_COMMAND}" -E make_directory
  76. "${RELEASE_DIR}/data/obs-plugins/${CMAKE_PROJECT_NAME}"
  77. "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}"
  78. )
  79. COMMAND if $<CONFIG:Release>==1 OR $<CONFIG:RelWithDebInfo>==1 (
  80. "${CMAKE_COMMAND}" -E copy_directory
  81. "${PROJECT_SOURCE_DIR}/data"
  82. "${RELEASE_DIR}/data/obs-plugins/${CMAKE_PROJECT_NAME}"
  83. )
  84. COMMAND if $<CONFIG:Release>==1 OR $<CONFIG:RelWithDebInfo>==1 (
  85. "${CMAKE_COMMAND}" -E copy
  86. "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"
  87. "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}"
  88. )
  89. # If config is RelWithDebInfo, copy the pdb file
  90. COMMAND if $<CONFIG:RelWithDebInfo>==1 (
  91. "${CMAKE_COMMAND}" -E copy
  92. "$<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}>"
  93. "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}"
  94. )
  95. # Copy to obs-studio dev environment for immediate testing
  96. COMMAND if $<CONFIG:Debug>==1 (
  97. "${CMAKE_COMMAND}" -E copy
  98. "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"
  99. "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$<CONFIG>/obs-plugins/${ARCH_NAME}"
  100. )
  101. COMMAND if $<CONFIG:Debug>==1 (
  102. "${CMAKE_COMMAND}" -E copy
  103. "$<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}>"
  104. "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$<CONFIG>/obs-plugins/${ARCH_NAME}"
  105. )
  106. COMMAND if $<CONFIG:Debug>==1 (
  107. "${CMAKE_COMMAND}" -E make_directory
  108. "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$<CONFIG>/data/obs-plugins/${CMAKE_PROJECT_NAME}"
  109. )
  110. COMMAND if $<CONFIG:Debug>==1 (
  111. "${CMAKE_COMMAND}" -E copy_directory
  112. "${PROJECT_SOURCE_DIR}/data"
  113. "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$<CONFIG>/data/obs-plugins/${CMAKE_PROJECT_NAME}"
  114. )
  115. )
  116. # --- End of sub-section ---
  117. endif()
  118. # --- End of section ---
  119. # --- Linux-specific build settings and tasks ---
  120. if(UNIX AND NOT APPLE)
  121. include(GNUInstallDirs)
  122. set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES PREFIX "")
  123. target_link_libraries(${CMAKE_PROJECT_NAME} obs-frontend-api)
  124. file(GLOB locale_files data/locale/*.ini)
  125. install(TARGETS ${CMAKE_PROJECT_NAME}
  126. LIBRARY DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/obs-plugins")
  127. install(FILES ${locale_files}
  128. DESTINATION "${CMAKE_INSTALL_FULL_DATAROOTDIR}/obs/obs-plugins/${CMAKE_PROJECT_NAME}/locale")
  129. endif()
  130. # --- End of section ---
  131. # -- OS X specific build settings and tasks --
  132. if(APPLE)
  133. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -fvisibility=default")
  134. set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES PREFIX "")
  135. target_link_libraries(${CMAKE_PROJECT_NAME} "${OBS_FRONTEND_LIB}")
  136. endif()
  137. # -- End of section --