CMakeLists.txt 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. cmake_minimum_required(VERSION 3.28...3.30)
  2. include(cmake/obs-version.cmake)
  3. if(OS_WINDOWS AND NOT OBS_PARENT_ARCHITECTURE STREQUAL CMAKE_VS_PLATFORM_NAME)
  4. include(cmake/os-windows.cmake)
  5. return()
  6. endif()
  7. find_package(SIMDe REQUIRED)
  8. find_package(Threads REQUIRED)
  9. find_package(FFmpeg 6.1 REQUIRED avformat avutil swscale swresample OPTIONAL_COMPONENTS avcodec)
  10. find_package(ZLIB REQUIRED)
  11. find_package(Uthash REQUIRED)
  12. find_package(jansson REQUIRED)
  13. if(NOT TARGET OBS::caption)
  14. add_subdirectory("${CMAKE_SOURCE_DIR}/deps/libcaption" "${CMAKE_BINARY_DIR}/deps/libcaption")
  15. endif()
  16. add_library(libobs SHARED)
  17. add_library(OBS::libobs ALIAS libobs)
  18. target_sources(
  19. libobs
  20. PRIVATE
  21. $<$<BOOL:${ENABLE_HEVC}>:obs-hevc.c>
  22. $<$<BOOL:${ENABLE_HEVC}>:obs-hevc.h>
  23. obs-audio-controls.c
  24. obs-audio-controls.h
  25. obs-audio.c
  26. obs-av1.c
  27. obs-av1.h
  28. obs-avc.c
  29. obs-avc.h
  30. obs-canvas.c
  31. obs-config.h
  32. obs-data.c
  33. obs-data.h
  34. obs-defs.h
  35. obs-display.c
  36. obs-encoder.c
  37. obs-encoder.h
  38. obs-ffmpeg-compat.h
  39. obs-hotkey-name-map.c
  40. obs-hotkey.c
  41. obs-hotkey.h
  42. obs-hotkeys.h
  43. obs-interaction.h
  44. obs-internal.h
  45. obs-missing-files.c
  46. obs-missing-files.h
  47. obs-module.c
  48. obs-module.h
  49. obs-nal.c
  50. obs-nal.h
  51. obs-output-delay.c
  52. obs-output.c
  53. obs-output.h
  54. obs-properties.c
  55. obs-properties.h
  56. obs-scene.c
  57. obs-scene.h
  58. obs-service.c
  59. obs-service.h
  60. obs-source-deinterlace.c
  61. obs-source-transition.c
  62. obs-source.c
  63. obs-source.h
  64. obs-video-gpu-encode.c
  65. obs-video.c
  66. obs-view.c
  67. obs.c
  68. obs.h
  69. obs.hpp
  70. )
  71. target_sources(
  72. libobs
  73. PRIVATE
  74. util/array-serializer.c
  75. util/array-serializer.h
  76. util/base.c
  77. util/base.h
  78. util/bitstream.c
  79. util/bitstream.h
  80. util/bmem.c
  81. util/bmem.h
  82. util/buffered-file-serializer.c
  83. util/buffered-file-serializer.h
  84. util/c99defs.h
  85. util/cf-lexer.c
  86. util/cf-lexer.h
  87. util/cf-parser.c
  88. util/cf-parser.h
  89. util/config-file.c
  90. util/config-file.h
  91. util/crc32.c
  92. util/crc32.h
  93. util/curl/curl-helper.h
  94. util/darray.h
  95. util/deque.h
  96. util/dstr.c
  97. util/dstr.h
  98. util/file-serializer.c
  99. util/file-serializer.h
  100. util/lexer.c
  101. util/lexer.h
  102. util/pipe.c
  103. util/pipe.h
  104. util/platform.c
  105. util/platform.h
  106. util/profiler.c
  107. util/profiler.h
  108. util/profiler.hpp
  109. util/serializer.h
  110. util/source-profiler.c
  111. util/source-profiler.h
  112. util/sse-intrin.h
  113. util/task.c
  114. util/task.h
  115. util/text-lookup.c
  116. util/text-lookup.h
  117. util/threading.h
  118. util/utf8.c
  119. util/utf8.h
  120. util/uthash.h
  121. util/util.hpp
  122. util/util_uint128.h
  123. util/util_uint64.h
  124. )
  125. target_sources(
  126. libobs
  127. PRIVATE
  128. callback/calldata.c
  129. callback/calldata.h
  130. callback/decl.c
  131. callback/decl.h
  132. callback/proc.c
  133. callback/proc.h
  134. callback/signal.c
  135. callback/signal.h
  136. )
  137. target_sources(
  138. libobs
  139. PRIVATE
  140. media-io/audio-io.c
  141. media-io/audio-io.h
  142. media-io/audio-math.h
  143. media-io/audio-resampler-ffmpeg.c
  144. media-io/audio-resampler.h
  145. media-io/format-conversion.c
  146. media-io/format-conversion.h
  147. media-io/frame-rate.h
  148. media-io/media-io-defs.h
  149. media-io/media-remux.c
  150. media-io/media-remux.h
  151. media-io/video-fourcc.c
  152. media-io/video-frame.c
  153. media-io/video-frame.h
  154. media-io/video-io.c
  155. media-io/video-io.h
  156. media-io/video-matrices.c
  157. media-io/video-scaler-ffmpeg.c
  158. media-io/video-scaler.h
  159. )
  160. target_sources(
  161. libobs
  162. PRIVATE
  163. graphics/axisang.c
  164. graphics/axisang.h
  165. graphics/bounds.c
  166. graphics/bounds.h
  167. graphics/device-exports.h
  168. graphics/effect-parser.c
  169. graphics/effect-parser.h
  170. graphics/effect.c
  171. graphics/effect.h
  172. graphics/graphics-ffmpeg.c
  173. graphics/graphics-imports.c
  174. graphics/graphics-internal.h
  175. graphics/graphics.c
  176. graphics/graphics.h
  177. graphics/half.h
  178. graphics/image-file.c
  179. graphics/image-file.h
  180. graphics/input.h
  181. graphics/libnsgif/libnsgif.c
  182. graphics/libnsgif/libnsgif.h
  183. graphics/math-defs.h
  184. graphics/math-extra.c
  185. graphics/math-extra.h
  186. graphics/matrix3.c
  187. graphics/matrix3.h
  188. graphics/matrix4.c
  189. graphics/matrix4.h
  190. graphics/plane.c
  191. graphics/plane.h
  192. graphics/quat.c
  193. graphics/quat.h
  194. graphics/shader-parser.c
  195. graphics/shader-parser.h
  196. graphics/srgb.h
  197. graphics/texture-render.c
  198. graphics/vec2.c
  199. graphics/vec2.h
  200. graphics/vec3.c
  201. graphics/vec3.h
  202. graphics/vec4.c
  203. graphics/vec4.h
  204. )
  205. # Temporarily disables deprecation warnings while obs_data_autoselect_* is deprecated.
  206. if(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
  207. set_source_files_properties(obs-data.c PROPERTIES COMPILE_OPTIONS "/wd4996")
  208. elseif(
  209. CMAKE_C_COMPILER_ID STREQUAL "GNU"
  210. OR CMAKE_C_COMPILER_ID STREQUAL "Clang"
  211. OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang"
  212. )
  213. set_source_files_properties(obs-data.c PROPERTIES COMPILE_OPTIONS "-Wno-deprecated-declarations")
  214. endif()
  215. target_compile_features(libobs PUBLIC cxx_std_17)
  216. target_compile_definitions(
  217. libobs
  218. PRIVATE IS_LIBOBS
  219. PUBLIC
  220. $<BUILD_INTERFACE:$<$<BOOL:${ENABLE_HEVC}>:ENABLE_HEVC>>
  221. $<BUILD_INTERFACE:$<$<BOOL:${ENABLE_FFMPEG_MUX_DEBUG}>:SHOW_SUBPROCESSES>>
  222. )
  223. target_link_libraries(
  224. libobs
  225. PRIVATE
  226. OBS::caption
  227. OBS::libobs-version
  228. FFmpeg::avcodec
  229. FFmpeg::avformat
  230. FFmpeg::avutil
  231. FFmpeg::swscale
  232. FFmpeg::swresample
  233. jansson::jansson
  234. Uthash::Uthash
  235. ZLIB::ZLIB
  236. PUBLIC SIMDe::SIMDe Threads::Threads
  237. )
  238. if(OS_WINDOWS)
  239. include(cmake/os-windows.cmake)
  240. elseif(OS_MACOS)
  241. include(cmake/os-macos.cmake)
  242. elseif(OS_LINUX)
  243. include(cmake/os-linux.cmake)
  244. elseif(OS_FREEBSD OR OS_OPENBSD)
  245. include(cmake/os-freebsd.cmake)
  246. endif()
  247. configure_file(obsconfig.h.in "${CMAKE_BINARY_DIR}/config/obsconfig.h" @ONLY)
  248. target_include_directories(
  249. libobs
  250. PUBLIC "$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/config>" "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
  251. )
  252. set(
  253. public_headers
  254. callback/calldata.h
  255. callback/decl.h
  256. callback/proc.h
  257. callback/signal.h
  258. graphics/axisang.h
  259. graphics/bounds.h
  260. graphics/effect-parser.h
  261. graphics/effect.h
  262. graphics/graphics.h
  263. graphics/image-file.h
  264. graphics/input.h
  265. graphics/libnsgif/libnsgif.h
  266. graphics/math-defs.h
  267. graphics/math-extra.h
  268. graphics/matrix3.h
  269. graphics/matrix4.h
  270. graphics/plane.h
  271. graphics/quat.h
  272. graphics/shader-parser.h
  273. graphics/srgb.h
  274. graphics/vec2.h
  275. graphics/vec3.h
  276. graphics/vec4.h
  277. media-io/audio-io.h
  278. media-io/audio-math.h
  279. media-io/audio-resampler.h
  280. media-io/format-conversion.h
  281. media-io/frame-rate.h
  282. media-io/media-io-defs.h
  283. media-io/media-remux.h
  284. media-io/video-frame.h
  285. media-io/video-io.h
  286. media-io/video-scaler.h
  287. obs-audio-controls.h
  288. obs-avc.h
  289. obs-config.h
  290. obs-data.h
  291. obs-defs.h
  292. obs-encoder.h
  293. obs-hotkey.h
  294. obs-hotkeys.h
  295. obs-interaction.h
  296. obs-missing-files.h
  297. obs-module.h
  298. obs-nal.h
  299. obs-nix-platform.h
  300. obs-output.h
  301. obs-properties.h
  302. obs-service.h
  303. obs-source.h
  304. obs.h
  305. obs.hpp
  306. util/array-serializer.h
  307. util/base.h
  308. util/bitstream.h
  309. util/bmem.h
  310. util/c99defs.h
  311. util/cf-lexer.h
  312. util/cf-parser.h
  313. util/config-file.h
  314. util/crc32.h
  315. util/darray.h
  316. util/deque.h
  317. util/dstr.h
  318. util/dstr.hpp
  319. util/file-serializer.h
  320. util/lexer.h
  321. util/pipe.h
  322. util/platform.h
  323. util/profiler.h
  324. util/profiler.hpp
  325. util/serializer.h
  326. util/sse-intrin.h
  327. util/task.h
  328. util/text-lookup.h
  329. util/threading-posix.h
  330. util/threading.h
  331. util/uthash.h
  332. util/util.hpp
  333. util/util_uint128.h
  334. util/util_uint64.h
  335. )
  336. if(OS_WINDOWS)
  337. list(
  338. APPEND
  339. public_headers
  340. util/threading-windows.h
  341. util/windows/ComPtr.hpp
  342. util/windows/CoTaskMemPtr.hpp
  343. util/windows/device-enum.h
  344. util/windows/HRError.hpp
  345. util/windows/win-registry.h
  346. util/windows/win-version.h
  347. util/windows/window-helpers.h
  348. util/windows/WinHandle.hpp
  349. )
  350. elseif(OS_MACOS)
  351. list(APPEND public_headers util/apple/cfstring-utils.h)
  352. endif()
  353. if(ENABLE_HEVC)
  354. list(APPEND public_headers obs-hevc.h)
  355. endif()
  356. set_property(TARGET libobs APPEND PROPERTY OBS_PUBLIC_HEADERS ${public_headers})
  357. set_target_properties_obs(
  358. libobs
  359. PROPERTIES FOLDER core
  360. VERSION 0
  361. SOVERSION "${OBS_VERSION_MAJOR}"
  362. )
  363. target_export(libobs)