CMakeLists.txt 8.5 KB
Newer Older
B
BtbN 已提交
1 2
project(libobs)

3 4
find_package(Threads REQUIRED)

J
jp9000 已提交
5
find_package(FFmpeg REQUIRED
6 7 8
	COMPONENTS avformat avutil swscale swresample
	OPTIONAL_COMPONENTS avcodec)
include_directories(${FFMPEG_INCLUDE_DIRS})
9

10 11 12
if (NOT "${FFMPEG_AVCODEC_LIBRARIES}" STREQUAL "")
	list(REMOVE_ITEM FFMPEG_LIBRARIES ${FFMPEG_AVCODEC_LIBRARIES})
endif()
B
BtbN 已提交
13

14 15 16 17 18 19
if(UNIX)
	find_package(DBus QUIET)
else()
	set(HAVE_DBUS "0")
endif()

B
BtbN 已提交
20 21
find_package(ImageMagick QUIET COMPONENTS MagickCore)

22
if(NOT ImageMagick_MagickCore_FOUND AND NOT FFMPEG_AVCODEC_FOUND)
B
BtbN 已提交
23 24 25
	message(FATAL_ERROR "Either MagickCore or Libavcodec is required, but both were not found")
endif()

26
option(LIBOBS_PREFER_IMAGEMAGICK "Prefer ImageMagick over ffmpeg for image loading" OFF)
B
BtbN 已提交
27

28
if(NOT FFMPEG_AVCODEC_FOUND OR (ImageMagick_MagickCore_FOUND AND LIBOBS_PREFER_IMAGEMAGICK))
B
BtbN 已提交
29 30 31 32 33 34 35
	message(STATUS "Using ImageMagick for image loading in libobs")

	set(libobs_image_loading_SOURCES
		graphics/graphics-magick.c)
	set(libobs_image_loading_LIBRARIES
		${ImageMagick_LIBRARIES})

36
	include_directories(${ImageMagick_INCLUDE_DIRS})
B
BtbN 已提交
37 38 39 40 41 42
else()
	message(STATUS "Using libavcodec for image loading in libobs")

	set(libobs_image_loading_SOURCES
		graphics/graphics-ffmpeg.c)
	set(libobs_image_loading_LIBRARIES
43
		${FFMPEG_AVCODEC_LIBRARIES})
B
BtbN 已提交
44
endif()
45

46 47 48 49
find_package(ZLIB REQUIRED)

include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})

B
BtbN 已提交
50 51
add_definitions(-DLIBOBS_EXPORTS)

B
BtbN 已提交
52 53
include_directories(${OBS_JANSSON_INCLUDE_DIRS})

B
BtbN 已提交
54 55
if(WIN32)
	set(libobs_PLATFORM_SOURCES
J
jp9000 已提交
56
		obs-win-crash-handler.c
B
BtbN 已提交
57
		obs-windows.c
J
jp9000 已提交
58
		util/threading-windows.c
J
jp9000 已提交
59
		util/pipe-windows.c
B
BtbN 已提交
60
		util/platform-windows.c)
61
	set(libobs_PLATFORM_HEADERS
62
		util/threading-windows.h
63 64 65 66 67
		util/windows/win-version.h
		util/windows/ComPtr.hpp
		util/windows/CoTaskMemPtr.hpp
		util/windows/HRError.hpp
		util/windows/WinHandle.hpp)
68 69 70 71 72 73
	set(libobs_PLATFORM_DEPS winmm)
	if(MSVC)
		set(libobs_PLATFORM_DEPS
		${libobs_PLATFORM_DEPS}
		w32-pthreads)
	endif()
B
BtbN 已提交
74 75 76
elseif(APPLE)
	set(libobs_PLATFORM_SOURCES
		obs-cocoa.c
J
jp9000 已提交
77
		util/threading-posix.c
J
jp9000 已提交
78
		util/pipe-posix.c
79
		util/platform-nix.c
B
BtbN 已提交
80
		util/platform-cocoa.m)
81 82
	set(libobs_PLATFORM_HEADERS
		util/threading-posix.h)
B
BtbN 已提交
83 84 85 86 87 88 89 90 91 92

	set_source_files_properties(${libobs_PLATFORM_SOURCES}
		PROPERTIES
			LANGUAGE C
			COMPILE_FLAGS "-fobjc-arc")

	find_library(COCOA Cocoa)
	mark_as_advanced(COCOA)
	include_directories(${COCOA})

P
Palana 已提交
93 94 95 96 97 98 99 100 101 102 103 104
	find_library(APPKIT AppKit)
	mark_as_advanced(APPKIT)
	include_directories(${APPKIT})

	find_library(IOKIT IOKit)
	mark_as_advanced(IOKIT)
	include_directories(${IOKIT})

	find_library(CARBON Carbon)
	mark_as_advanced(CARBON)
	include_directories(${CARBON})

B
BtbN 已提交
105
	set(libobs_PLATFORM_DEPS
P
Palana 已提交
106 107 108 109
		${COCOA}
		${APPKIT}
		${IOKIT}
		${CARBON})
B
BtbN 已提交
110 111 112
elseif(UNIX)
	set(libobs_PLATFORM_SOURCES
		obs-nix.c
J
jp9000 已提交
113
		util/threading-posix.c
J
jp9000 已提交
114
		util/pipe-posix.c
B
BtbN 已提交
115
		util/platform-nix.c)
116 117
	set(libobs_PLATFORM_HEADERS
		util/threading-posix.h)
118

119 120 121 122 123 124 125 126 127
	if(DBUS_FOUND)
		set(libobs_PLATFORM_SOURCES ${libobs_PLATFORM_SOURCES}
			util/platform-nix-dbus.c)
		include_directories(${DBUS_INCLUDE_DIRS})
		set(libobs_PLATFORM_DEPS
			${libobs_PLATFORM_DEPS}
			${DBUS_LIBRARIES})
	endif()

128 129 130 131 132 133 134 135
	if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
		# use the sysinfo compatibility library on bsd
		find_package(Libsysinfo REQUIRED)
		include_directories(${SYSINFO_INCLUDE_DIRS})
		set(libobs_PLATFORM_DEPS
			${libobs_PLATFORM_DEPS}
			${SYSINFO_LIBRARIES})
	endif()
B
BtbN 已提交
136 137 138 139 140
endif()

if(MSVC)
	set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /EHc-")
B
BtbN 已提交
141
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHc-")
B
BtbN 已提交
142 143
endif()

144
configure_file(
145 146
	"${CMAKE_CURRENT_SOURCE_DIR}/obsconfig.h.in"
	"${CMAKE_BINARY_DIR}/config/obsconfig.h")
147 148

set(libobs_config_HEADERS
149
	"${CMAKE_BINARY_DIR}/config/obsconfig.h"
150 151
	obs-config.h)

B
BtbN 已提交
152 153
set(libobs_callback_SOURCES
	callback/calldata.c
154
	callback/decl.c
B
BtbN 已提交
155 156 157 158
	callback/signal.c
	callback/proc.c)
set(libobs_callback_HEADERS
	callback/calldata.h
159
	callback/decl.h
B
BtbN 已提交
160 161 162 163
	callback/proc.h
	callback/signal.h)

set(libobs_graphics_SOURCES
B
BtbN 已提交
164
	${libobs_image_loading_SOURCES}
B
BtbN 已提交
165 166 167 168 169
	graphics/quat.c
	graphics/effect-parser.c
	graphics/axisang.c
	graphics/vec4.c
	graphics/vec2.c
170
	graphics/libnsgif/libnsgif.c
B
BtbN 已提交
171
	graphics/texture-render.c
172
	graphics/image-file.c
B
BtbN 已提交
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
	graphics/bounds.c
	graphics/matrix3.c
	graphics/matrix4.c
	graphics/vec3.c
	graphics/graphics.c
	graphics/shader-parser.c
	graphics/plane.c
	graphics/effect.c
	graphics/math-extra.c
	graphics/graphics-imports.c)
set(libobs_graphics_HEADERS
	graphics/plane.h
	graphics/quat.h
	graphics/input.h
	graphics/axisang.h
	graphics/shader-parser.h
	graphics/effect.h
	graphics/math-defs.h
	graphics/matrix4.h
	graphics/graphics.h
	graphics/graphics-internal.h
194
	graphics/libnsgif/libnsgif.h
195
	graphics/device-exports.h
196
	graphics/image-file.h
B
BtbN 已提交
197 198 199 200 201 202 203 204 205 206
	graphics/vec2.h
	graphics/vec4.h
	graphics/matrix3.h
	graphics/vec3.h
	graphics/math-extra.h
	graphics/bounds.h
	graphics/effect-parser.h)

set(libobs_mediaio_SOURCES
	media-io/video-io.c
207
	media-io/video-fourcc.c
208
	media-io/video-matrices.c
209 210
	media-io/audio-io.c
	media-io/video-frame.c
B
BtbN 已提交
211
	media-io/format-conversion.c
212
	media-io/audio-resampler-ffmpeg.c
P
Palana 已提交
213 214
	media-io/video-scaler-ffmpeg.c
	media-io/media-remux.c)
B
BtbN 已提交
215
set(libobs_mediaio_HEADERS
J
jp9000 已提交
216
	media-io/media-io-defs.h
B
BtbN 已提交
217
	media-io/video-io.h
218
	media-io/audio-io.h
219
	media-io/audio-math.h
220 221
	media-io/video-frame.h
	media-io/format-conversion.h
B
BtbN 已提交
222
	media-io/audio-resampler.h
P
Palana 已提交
223
	media-io/video-scaler.h
P
Palana 已提交
224 225
	media-io/media-remux.h
	media-io/frame-rate.h)
B
BtbN 已提交
226 227

set(libobs_util_SOURCES
228
	util/array-serializer.c
J
jp9000 已提交
229
	util/file-serializer.c
B
BtbN 已提交
230 231 232 233 234 235 236 237
	util/base.c
	util/platform.c
	util/cf-lexer.c
	util/bmem.c
	util/config-file.c
	util/lexer.c
	util/dstr.c
	util/utf8.c
238
	util/crc32.c
B
BtbN 已提交
239
	util/text-lookup.c
P
Palana 已提交
240 241
	util/cf-parser.c
	util/profiler.c)
B
BtbN 已提交
242
set(libobs_util_HEADERS
243
	util/array-serializer.h
J
jp9000 已提交
244
	util/file-serializer.h
B
BtbN 已提交
245
	util/utf8.h
246
	util/crc32.h
B
BtbN 已提交
247 248 249 250 251 252 253
	util/base.h
	util/text-lookup.h
	util/vc/vc_inttypes.h
	util/vc/vc_stdbool.h
	util/vc/vc_stdint.h
	util/bmem.h
	util/c99defs.h
254
	util/util_uint128.h
B
BtbN 已提交
255 256
	util/cf-parser.h
	util/threading.h
J
jp9000 已提交
257
	util/pipe.h
B
BtbN 已提交
258 259 260 261 262 263 264
	util/cf-lexer.h
	util/darray.h
	util/circlebuf.h
	util/dstr.h
	util/serializer.h
	util/config-file.h
	util/lexer.h
P
Palana 已提交
265 266 267
	util/platform.h
	util/profiler.h
	util/profiler.hpp)
B
BtbN 已提交
268 269 270

set(libobs_libobs_SOURCES
	${libobs_PLATFORM_SOURCES}
F
fryshorts 已提交
271
	obs-audio-controls.c
272
	obs-avc.c
B
BtbN 已提交
273
	obs-encoder.c
274
	obs-service.c
B
BtbN 已提交
275 276
	obs-source.c
	obs-output.c
277
	obs-output-delay.c
B
BtbN 已提交
278
	obs.c
279
	obs-properties.c
280
	obs-data.c
P
Palana 已提交
281 282
	obs-hotkey.c
	obs-hotkey-name-map.c
B
BtbN 已提交
283 284
	obs-module.c
	obs-display.c
J
jp9000 已提交
285
	obs-view.c
B
BtbN 已提交
286 287 288
	obs-scene.c
	obs-video.c)
set(libobs_libobs_HEADERS
289
	${libobs_PLATFORM_HEADERS}
F
fryshorts 已提交
290
	obs-audio-controls.h
B
BtbN 已提交
291
	obs-defs.h
292
	obs-avc.h
B
BtbN 已提交
293 294
	obs-encoder.h
	obs-service.h
J
jp9000 已提交
295
	obs-internal.h
B
BtbN 已提交
296
	obs.h
J
jp9000 已提交
297
	obs-ui.h
298
	obs-properties.h
299
	obs-data.h
K
kc5nra 已提交
300
	obs-interaction.h
P
Palana 已提交
301 302
	obs-hotkey.h
	obs-hotkeys.h
B
BtbN 已提交
303 304 305
	obs-module.h
	obs-scene.h
	obs-source.h
306
	obs-output.h
307 308
	obs-ffmpeg-compat.h
	obs.hpp)
B
BtbN 已提交
309 310 311 312 313 314 315 316 317

set(libobs_SOURCES
	${libobs_callback_SOURCES}
	${libobs_graphics_SOURCES}
	${libobs_mediaio_SOURCES}
	${libobs_util_SOURCES}
	${libobs_libobs_SOURCES})

set(libobs_HEADERS
318
	${libobs_config_HEADERS}
B
BtbN 已提交
319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335
	${libobs_callback_HEADERS}
	${libobs_graphics_HEADERS}
	${libobs_mediaio_HEADERS}
	${libobs_util_HEADERS}
	${libobs_libobs_HEADERS})

source_group("callback\\Source Files" FILES ${libobs_callback_SOURCES})
source_group("callback\\Header Files" FILES ${libobs_callback_HEADERS})
source_group("graphics\\Source Files" FILES ${libobs_graphics_SOURCES})
source_group("graphics\\Header Files" FILES ${libobs_graphics_HEADERS})
source_group("libobs\\Source Files" FILES ${libobs_libobs_SOURCES})
source_group("libobs\\Header Files" FILES ${libobs_libobs_HEADERS})
source_group("media-io\\Source Files" FILES ${libobs_mediaio_SOURCES})
source_group("media-io\\Header Files" FILES ${libobs_mediaio_HEADERS})
source_group("util\\Source Files" FILES ${libobs_util_SOURCES})
source_group("util\\Header Files" FILES ${libobs_util_HEADERS})

336

B
BtbN 已提交
337
add_library(libobs SHARED ${libobs_SOURCES} ${libobs_HEADERS})
338

B
BtbN 已提交
339 340 341 342
set_target_properties(libobs PROPERTIES
	OUTPUT_NAME obs
	VERSION "0"
	SOVERSION "0")
343 344 345
target_compile_definitions(libobs
	PUBLIC
		HAVE_OBSCONFIG_H)
346 347

if(NOT MSVC)
348 349 350 351 352
	target_compile_options(libobs
		PUBLIC
			-mmmx
			-msse
			-msse2)
353 354
endif()

355 356 357 358

target_compile_options(libobs
	PUBLIC
		"${THREADS_DEFINITIONS}")
359 360 361 362 363
target_include_directories(libobs
	PUBLIC
		"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
		"$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/config>"
		"$<INSTALL_INTERFACE:${OBS_INCLUDE_DESTINATION}>")
B
BtbN 已提交
364
target_link_libraries(libobs
365 366
	PRIVATE
		${libobs_PLATFORM_DEPS}
B
BtbN 已提交
367
		${libobs_image_loading_LIBRARIES}
B
BtbN 已提交
368
		${OBS_JANSSON_IMPORT}
369
		${FFMPEG_LIBRARIES}
370
		${ZLIB_LIBRARIES}
371 372
	PUBLIC
		${THREADS_LIBRARIES})
373 374

install_obs_core(libobs EXPORT LibObs)
375
install_obs_data(libobs data libobs)
376
install_obs_headers(${libobs_HEADERS})
377 378

obs_install_additional(libobs)