mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 21:13:04 +02:00
6366f6ab59
SIMDE was introduced for aarch64 support, however, the library itself supports non-SIMD fallback, which allows us provide support to other platforms without code changes. There is another world beyond x86. So we can simply enable SIMDE for processors without SSE2 support. Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
506 lines
12 KiB
CMake
506 lines
12 KiB
CMake
project(libobs)
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
find_package(FFmpeg REQUIRED
|
|
COMPONENTS avformat avutil swscale swresample
|
|
OPTIONAL_COMPONENTS avcodec)
|
|
include_directories(${FFMPEG_INCLUDE_DIRS})
|
|
|
|
if (NOT "${FFMPEG_AVCODEC_LIBRARIES}" STREQUAL "")
|
|
list(REMOVE_ITEM FFMPEG_LIBRARIES ${FFMPEG_AVCODEC_LIBRARIES})
|
|
endif()
|
|
|
|
if(UNIX)
|
|
if (NOT APPLE)
|
|
find_package(X11_XCB REQUIRED)
|
|
find_package(XCB OPTIONAL_COMPONENTS XINPUT)
|
|
if (XCB_XINPUT_FOUND)
|
|
set(USE_XINPUT "1")
|
|
else()
|
|
set(USE_XINPUT "0")
|
|
endif()
|
|
find_package(PulseAudio)
|
|
if (NOT "${PULSEAUDIO_LIBRARY}" STREQUAL "")
|
|
message(STATUS "Found PulseAudio - Audio Monitor enabled")
|
|
set(HAVE_PULSEAUDIO "1")
|
|
else()
|
|
set(HAVE_PULSEAUDIO "0")
|
|
endif()
|
|
else()
|
|
set(HAVE_PULSEAUDIO "0")
|
|
set(USE_XINPUT "0")
|
|
endif()
|
|
find_package(DBus QUIET)
|
|
else()
|
|
set(HAVE_DBUS "0")
|
|
set(HAVE_PULSEAUDIO "0")
|
|
set(USE_XINPUT "0")
|
|
endif()
|
|
|
|
find_package(ImageMagick QUIET COMPONENTS MagickCore)
|
|
|
|
if(NOT ImageMagick_MagickCore_FOUND AND NOT FFMPEG_AVCODEC_FOUND)
|
|
message(FATAL_ERROR "Either MagickCore or Libavcodec is required, but neither were found.")
|
|
elseif(NOT ImageMagick_MagickCore_FOUND AND LIBOBS_PREFER_IMAGEMAGICK)
|
|
message(FATAL_ERROR "ImageMagick support was requested, but was not found.")
|
|
endif()
|
|
|
|
option(LIBOBS_PREFER_IMAGEMAGICK "Prefer ImageMagick over ffmpeg for image loading" OFF)
|
|
|
|
if(NOT FFMPEG_AVCODEC_FOUND OR (ImageMagick_MagickCore_FOUND AND LIBOBS_PREFER_IMAGEMAGICK))
|
|
message(STATUS "Using ImageMagick for image loading in libobs")
|
|
|
|
if(${ImageMagick_VERSION_STRING} LESS 7)
|
|
set(LIBOBS_IMAGEMAGICK_DIR_STYLE LIBOBS_IMAGEMAGICK_DIR_STYLE_6L)
|
|
elseif(${ImageMagick_VERSION_STRING} GREATER_EQUAL 7)
|
|
set(LIBOBS_IMAGEMAGICK_DIR_STYLE LIBOBS_IMAGEMAGICK_DIR_STYLE_7GE)
|
|
endif()
|
|
|
|
set(libobs_image_loading_SOURCES
|
|
graphics/graphics-magick.c)
|
|
set(libobs_image_loading_LIBRARIES
|
|
${ImageMagick_LIBRARIES})
|
|
|
|
include_directories(${ImageMagick_INCLUDE_DIRS})
|
|
else()
|
|
message(STATUS "Using libavcodec for image loading in libobs")
|
|
|
|
set(libobs_image_loading_SOURCES
|
|
graphics/graphics-ffmpeg.c)
|
|
set(libobs_image_loading_LIBRARIES
|
|
${FFMPEG_AVCODEC_LIBRARIES})
|
|
endif()
|
|
|
|
find_package(ZLIB REQUIRED)
|
|
|
|
include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
|
|
|
|
add_definitions(-DLIBOBS_EXPORTS)
|
|
|
|
include_directories(${OBS_JANSSON_INCLUDE_DIRS})
|
|
|
|
if(WIN32)
|
|
set(libobs_PLATFORM_SOURCES
|
|
obs-win-crash-handler.c
|
|
obs-windows.c
|
|
util/threading-windows.c
|
|
util/pipe-windows.c
|
|
util/platform-windows.c)
|
|
set(libobs_PLATFORM_HEADERS
|
|
util/threading-windows.h
|
|
util/windows/win-registry.h
|
|
util/windows/win-version.h
|
|
util/windows/ComPtr.hpp
|
|
util/windows/CoTaskMemPtr.hpp
|
|
util/windows/HRError.hpp
|
|
util/windows/WinHandle.hpp)
|
|
set(libobs_audio_monitoring_SOURCES
|
|
audio-monitoring/win32/wasapi-output.c
|
|
audio-monitoring/win32/wasapi-enum-devices.c
|
|
)
|
|
set(libobs_audio_monitoring_HEADERS
|
|
audio-monitoring/win32/wasapi-output.h
|
|
)
|
|
set(libobs_PLATFORM_DEPS winmm psapi)
|
|
if(MSVC)
|
|
set(libobs_PLATFORM_DEPS
|
|
${libobs_PLATFORM_DEPS}
|
|
w32-pthreads)
|
|
endif()
|
|
elseif(APPLE)
|
|
set(libobs_PLATFORM_SOURCES
|
|
obs-cocoa.m
|
|
util/threading-posix.c
|
|
util/pipe-posix.c
|
|
util/platform-nix.c
|
|
util/platform-cocoa.m)
|
|
set(libobs_PLATFORM_HEADERS
|
|
util/threading-posix.h
|
|
util/apple/cfstring-utils.h)
|
|
set(libobs_audio_monitoring_SOURCES
|
|
audio-monitoring/osx/coreaudio-enum-devices.c
|
|
audio-monitoring/osx/coreaudio-output.c
|
|
)
|
|
set(libobs_audio_monitoring_HEADERS
|
|
audio-monitoring/osx/mac-helpers.h
|
|
)
|
|
|
|
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})
|
|
|
|
find_library(COREAUDIO CoreAudio)
|
|
mark_as_advanced(COREAUDIO)
|
|
include_directories(${COREAUDIO})
|
|
|
|
find_library(AUDIOTOOLBOX AudioToolbox)
|
|
mark_as_advanced(AUDIOTOOLBOX)
|
|
include_directories(${AUDIOTOOLBOX})
|
|
|
|
find_library(AUDIOUNIT AudioUnit)
|
|
mark_as_advanced(AUDIOUNIT)
|
|
include_directories(${AUDIOUNIT})
|
|
|
|
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})
|
|
|
|
set(libobs_PLATFORM_DEPS
|
|
${COCOA}
|
|
${COREAUDIO}
|
|
${AUDIOUNIT}
|
|
${AUDIOTOOLBOX}
|
|
${APPKIT}
|
|
${IOKIT}
|
|
${CARBON})
|
|
elseif(UNIX)
|
|
set(libobs_PLATFORM_SOURCES
|
|
obs-nix.c
|
|
util/threading-posix.c
|
|
util/pipe-posix.c
|
|
util/platform-nix.c)
|
|
|
|
if(NEEDS_SIMDE)
|
|
set(libobs_PLATFORM_HEADERS
|
|
util/simde/check.h
|
|
util/simde/hedley.h
|
|
util/simde/mmx.h
|
|
util/simde/simde-arch.h
|
|
util/simde/simde-common.h
|
|
util/simde/sse.h
|
|
util/simde/sse2.h
|
|
util/threading-posix.h)
|
|
else()
|
|
set(libobs_PLATFORM_HEADERS
|
|
util/threading-posix.h)
|
|
endif()
|
|
|
|
if(HAVE_PULSEAUDIO)
|
|
set(libobs_audio_monitoring_HEADERS
|
|
audio-monitoring/pulse/pulseaudio-wrapper.h)
|
|
|
|
set(libobs_audio_monitoring_SOURCES
|
|
audio-monitoring/pulse/pulseaudio-wrapper.c
|
|
audio-monitoring/pulse/pulseaudio-enum-devices.c
|
|
audio-monitoring/pulse/pulseaudio-output.c)
|
|
else()
|
|
set(libobs_audio_monitoring_SOURCES
|
|
audio-monitoring/null/null-audio-monitoring.c)
|
|
endif()
|
|
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()
|
|
|
|
include_directories(
|
|
${X11_XCB_INCLUDE_DIRS})
|
|
add_definitions(
|
|
${X11_XCB_DEFINITIONS})
|
|
set(libobs_PLATFORM_DEPS
|
|
${libobs_PLATFORM_DEPS}
|
|
${X11_XCB_LIBRARIES})
|
|
|
|
if(USE_XINPUT)
|
|
include_directories(
|
|
${XCB_XINPUT_INCLUDE_DIR})
|
|
add_definitions(
|
|
${XCB_DEFINITIONS})
|
|
set(libobs_PLATFORM_DEPS
|
|
${XCB_XINPUT_LIBRARY}
|
|
${libobs_PLATFORM_DEPS})
|
|
endif()
|
|
|
|
if(HAVE_PULSEAUDIO)
|
|
set(libobs_PLATFORM_DEPS
|
|
${libobs_PLATFORM_DEPS}
|
|
${PULSEAUDIO_LIBRARY})
|
|
endif()
|
|
|
|
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()
|
|
endif()
|
|
|
|
if(MSVC)
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /EHc-")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHc-")
|
|
endif()
|
|
|
|
configure_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/obsconfig.h.in"
|
|
"${CMAKE_BINARY_DIR}/config/obsconfig.h")
|
|
|
|
set(libobs_config_HEADERS
|
|
"${CMAKE_BINARY_DIR}/config/obsconfig.h"
|
|
obs-config.h)
|
|
|
|
set(libobs_callback_SOURCES
|
|
callback/calldata.c
|
|
callback/decl.c
|
|
callback/signal.c
|
|
callback/proc.c)
|
|
set(libobs_callback_HEADERS
|
|
callback/calldata.h
|
|
callback/decl.h
|
|
callback/proc.h
|
|
callback/signal.h)
|
|
|
|
set(libobs_graphics_SOURCES
|
|
${libobs_image_loading_SOURCES}
|
|
graphics/quat.c
|
|
graphics/effect-parser.c
|
|
graphics/axisang.c
|
|
graphics/vec4.c
|
|
graphics/vec2.c
|
|
graphics/libnsgif/libnsgif.c
|
|
graphics/texture-render.c
|
|
graphics/image-file.c
|
|
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/half.h
|
|
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
|
|
graphics/libnsgif/libnsgif.h
|
|
graphics/device-exports.h
|
|
graphics/image-file.h
|
|
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
|
|
media-io/video-fourcc.c
|
|
media-io/video-matrices.c
|
|
media-io/audio-io.c
|
|
media-io/video-frame.c
|
|
media-io/format-conversion.c
|
|
media-io/audio-resampler-ffmpeg.c
|
|
media-io/video-scaler-ffmpeg.c
|
|
media-io/media-remux.c)
|
|
set(libobs_mediaio_HEADERS
|
|
media-io/media-io-defs.h
|
|
media-io/video-io.h
|
|
media-io/audio-io.h
|
|
media-io/audio-math.h
|
|
media-io/video-frame.h
|
|
media-io/format-conversion.h
|
|
media-io/audio-resampler.h
|
|
media-io/video-scaler.h
|
|
media-io/media-remux.h
|
|
media-io/frame-rate.h)
|
|
|
|
set(libobs_util_SOURCES
|
|
util/array-serializer.c
|
|
util/file-serializer.c
|
|
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
|
|
util/crc32.c
|
|
util/text-lookup.c
|
|
util/cf-parser.c
|
|
util/profiler.c)
|
|
set(libobs_util_HEADERS
|
|
util/sse-intrin.h
|
|
util/array-serializer.h
|
|
util/file-serializer.h
|
|
util/utf8.h
|
|
util/crc32.h
|
|
util/base.h
|
|
util/text-lookup.h
|
|
util/bmem.h
|
|
util/c99defs.h
|
|
util/util_uint128.h
|
|
util/cf-parser.h
|
|
util/threading.h
|
|
util/pipe.h
|
|
util/cf-lexer.h
|
|
util/darray.h
|
|
util/circlebuf.h
|
|
util/dstr.h
|
|
util/serializer.h
|
|
util/config-file.h
|
|
util/lexer.h
|
|
util/platform.h
|
|
util/profiler.h
|
|
util/profiler.hpp)
|
|
|
|
set(libobs_libobs_SOURCES
|
|
${libobs_PLATFORM_SOURCES}
|
|
obs-audio-controls.c
|
|
obs-avc.c
|
|
obs-encoder.c
|
|
obs-service.c
|
|
obs-source.c
|
|
obs-source-deinterlace.c
|
|
obs-source-transition.c
|
|
obs-output.c
|
|
obs-output-delay.c
|
|
obs.c
|
|
obs-properties.c
|
|
obs-data.c
|
|
obs-hotkey.c
|
|
obs-hotkey-name-map.c
|
|
obs-module.c
|
|
obs-display.c
|
|
obs-view.c
|
|
obs-scene.c
|
|
obs-audio.c
|
|
obs-video-gpu-encode.c
|
|
obs-video.c)
|
|
set(libobs_libobs_HEADERS
|
|
${libobs_PLATFORM_HEADERS}
|
|
obs-audio-controls.h
|
|
obs-defs.h
|
|
obs-avc.h
|
|
obs-encoder.h
|
|
obs-service.h
|
|
obs-internal.h
|
|
obs.h
|
|
obs-ui.h
|
|
obs-properties.h
|
|
obs-data.h
|
|
obs-interaction.h
|
|
obs-hotkey.h
|
|
obs-hotkeys.h
|
|
obs-module.h
|
|
obs-scene.h
|
|
obs-source.h
|
|
obs-output.h
|
|
obs-ffmpeg-compat.h
|
|
obs.hpp)
|
|
|
|
set(libobs_SOURCES
|
|
${libobs_callback_SOURCES}
|
|
${libobs_graphics_SOURCES}
|
|
${libobs_mediaio_SOURCES}
|
|
${libobs_util_SOURCES}
|
|
${libobs_libobs_SOURCES}
|
|
${libobs_audio_monitoring_SOURCES}
|
|
)
|
|
|
|
set(libobs_HEADERS
|
|
${libobs_config_HEADERS}
|
|
${libobs_callback_HEADERS}
|
|
${libobs_graphics_HEADERS}
|
|
${libobs_mediaio_HEADERS}
|
|
${libobs_util_HEADERS}
|
|
${libobs_libobs_HEADERS}
|
|
${libobs_audio_monitoring_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})
|
|
source_group("audio-monitoring\\Source Files" FILES ${libobs_audio_monitoring_SOURCES})
|
|
source_group("audio-monitoring\\Header Files" FILES ${libobs_audio_monitoring_HEADERS})
|
|
|
|
if(BUILD_CAPTIONS)
|
|
include_directories(${CMAKE_SOURCE_DIR}/deps/libcaption)
|
|
set(libobs_PLATFORM_DEPS
|
|
${libobs_PLATFORM_DEPS}
|
|
caption)
|
|
endif()
|
|
|
|
add_library(libobs SHARED ${libobs_SOURCES} ${libobs_HEADERS})
|
|
if(UNIX AND NOT APPLE)
|
|
set(DEST_DIR "${CMAKE_INSTALL_PREFIX}")
|
|
foreach(LIB "obs" "rt")
|
|
set(PRIVATE_LIBS "${PRIVATE_LIBS} -l${LIB}")
|
|
endforeach()
|
|
CONFIGURE_FILE("libobs.pc.in" "libobs.pc" @ONLY)
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libobs.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
|
endif()
|
|
|
|
set_target_properties(libobs PROPERTIES
|
|
OUTPUT_NAME obs
|
|
VERSION "0"
|
|
SOVERSION "0")
|
|
target_compile_definitions(libobs
|
|
PUBLIC
|
|
HAVE_OBSCONFIG_H)
|
|
|
|
target_compile_options(libobs
|
|
PUBLIC
|
|
${ARCH_SIMD_FLAGS})
|
|
|
|
target_compile_options(libobs
|
|
PUBLIC
|
|
"${THREADS_DEFINITIONS}")
|
|
target_include_directories(libobs
|
|
PUBLIC
|
|
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
|
|
"$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/config>"
|
|
"$<INSTALL_INTERFACE:${OBS_INCLUDE_DESTINATION}>")
|
|
target_link_libraries(libobs
|
|
PRIVATE
|
|
${libobs_PLATFORM_DEPS}
|
|
${libobs_image_loading_LIBRARIES}
|
|
${OBS_JANSSON_IMPORT}
|
|
${FFMPEG_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
PUBLIC
|
|
${THREADS_LIBRARIES})
|
|
|
|
install_obs_core(libobs EXPORT LibObs)
|
|
install_obs_data(libobs data libobs)
|
|
install_obs_headers(${libobs_HEADERS})
|
|
|
|
obs_install_additional(libobs)
|