CMakeLists.txt 5.3 KB

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