# -*- cmake -*- project(media_plugin_cef) include(Boost) include(00-Common) include(LLCommon) include(LLWindow) include(Linking) include(PluginAPI) include(CEFPlugin) include(GLIB) ### media_plugin_cef set(media_plugin_cef_SOURCE_FILES media_plugin_cef.cpp ) set(media_plugin_cef_HEADER_FILES volume_catcher.h ) # Select which VolumeCatcher implementation to use if (LINUX AND NOT (${LINUX_DISTRO} MATCHES freedesktop)) # Disable linux volume catcher due to issues dlopening with CEF 139 foreach( PULSE_FILE pulse/introspect.h pulse/context.h pulse/subscribe.h pulse/glib-mainloop.h ) find_path( PULSE_FILE_${PULSE_FILE}_FOUND ${PULSE_FILE} NO_CACHE) if( NOT PULSE_FILE_${PULSE_FILE}_FOUND ) message( "Looking for ${PULSE_FILE} ... not found") message( FATAL_ERROR "Pulse header not found" ) else() message( "Looking for ${PULSE_FILE} ... found") endif() endforeach() include(FindPipeWire) include_directories(SYSTEM ${PIPEWIRE_INCLUDE_DIRS} ${SPA_INCLUDE_DIRS}) message( "Building with Linux volume catcher for PipeWire and PulseAudio" ) list(APPEND media_plugin_cef_HEADER_FILES linux/volume_catcher_linux.h ) set(LINUX_VOLUME_CATCHER linux/volume_catcher_linux.cpp linux/volume_catcher_pulseaudio.cpp linux/volume_catcher_pipewire.cpp ) list(APPEND media_plugin_cef_SOURCE_FILES ${LINUX_VOLUME_CATCHER}) if (${LINUX_DISTRO} MATCHES arch AND (CMAKE_SYSTEM_PROCESSOR MATCHES x86_64) OR (${LINUX_DISTRO} MATCHES fedora)) if (${LINUX_DISTRO} MATCHES fedora) set(LIB_SUFFIX ${ADDRESS_SIZE}) endif () set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_RPATH};${INSTALL_PREFIX}/lib${LIB_SUFFIX}/cef) endif () elseif (WINDOWS) list(APPEND media_plugin_cef_SOURCE_FILES windows_volume_catcher.cpp) else() list(APPEND media_plugin_cef_SOURCE_FILES volume_catcher_null.cpp) endif () list(APPEND media_plugin_cef_SOURCE_FILES ${media_plugin_cef_HEADER_FILES}) add_library(media_plugin_cef SHARED ${media_plugin_cef_SOURCE_FILES} ) target_link_libraries(media_plugin_cef media_plugin_base ll::cef ll::glib_headers ) if (LINUX) target_link_libraries(${PROJECT_NAME} glib-2.0) endif () if (WINDOWS) set_target_properties( media_plugin_cef PROPERTIES LINK_FLAGS "/MANIFEST:NO /NODEFAULTLIB:LIBCMT /IGNORE:4099" ) elseif (DARWIN) find_library(CORESERVICES_LIBRARY CoreServices) find_library(AUDIOUNIT_LIBRARY AudioUnit) target_link_libraries(media_plugin_cef ${CORESERVICES_LIBRARY} # for Component Manager calls ${AUDIOUNIT_LIBRARY} # for AudioUnit calls ) # Don't prepend 'lib' to the executable name, and don't embed a full path in the library's install name set_target_properties( media_plugin_cef PROPERTIES PREFIX "" BUILD_WITH_INSTALL_RPATH 1 INSTALL_RPATH "@executable_path/../Frameworks" LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp" ) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "/opt/local/lib/libnghttp2.14.dylib" "@loader_path/libnghttp2.14.dylib" -change "/opt/local/lib/libaprutil-1.0.dylib" "@loader_path/libaprutil-1.0.dylib" -change "/opt/local/lib/libiconv.2.dylib" "@loader_path/libiconv.2.dylib" -change "/opt/local/lib/libapr-1.0.dylib" "@loader_path/libapr-1.0.dylib" -change "/opt/local/lib/libz.1.dylib" "@loader_path/libz.1.dylib" -change "/opt/local/libexec/boost/1.88/lib/libboost_context-mt.dylib" "@loader_path/libboost_context-mt.dylib" -change "/opt/local/libexec/boost/1.88/lib/libboost_fiber-mt.dylib" "@loader_path/libboost_fiber-mt.dylib" -change "/opt/local/libexec/boost/1.88/lib/libboost_filesystem-mt.dylib" "@loader_path/libboost_filesystem-mt.dylib" -change "/opt/local/libexec/boost/1.88/lib/libboost_process-mt.dylib" "@loader_path/libboost_process-mt.dylib" -change "/opt/local/libexec/boost/1.88/lib/libboost_program_options-mt.dylib" "@loader_path/libboost_program_options-mt.dylib" -change "/opt/local/libexec/boost/1.88/lib/libboost_thread-mt.dylib" "@loader_path/libboost_thread-mt.dylib" -change "/opt/local/libexec/boost/1.88/lib/libboost_url-mt.dylib" "@loader_path/libboost_url-mt.dylib" -change "/opt/local/libexec/boost/1.88/lib/libboost_regex-mt.dylib" "@loader_path/libboost_regex-mt.dylib" -change "/opt/local/libexec/boost/1.88/lib/libboost_system-mt.dylib" "@loader_path/libboost_system-mt.dylib" -change "/opt/local/lib/libexpat.1.dylib" "@loader_path/libexpat.1.dylib" "$" VERBATIM COMMENT "Fixing paths to CEF media plugin dependencies" ) elseif (LINUX) target_link_options(media_plugin_cef PRIVATE "LINKER:--build-id") endif () if (CMAKE_BUILD_TYPE MATCHES Release AND (CMAKE_CXX_COMPILER_ID STREQUAL Clang OR CMAKE_CXX_COMPILER_ID MATCHES GNU)) add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} lib${PROJECT_NAME}.so ) endif () if (INSTALL) if (DARWIN) set(_LIB SLPlugin.app/Contents/Frameworks) install( DIRECTORY "${ARCH_PREBUILT_DIRS_RELEASE}/Chromium Embedded Framework.framework" DESTINATION ../Frameworks ) install( DIRECTORY "${ARCH_PREBUILT_DIRS_RELEASE}/DullahanHelper.app" "${ARCH_PREBUILT_DIRS_RELEASE}/DullahanHelper (Alerts).app" "${ARCH_PREBUILT_DIRS_RELEASE}/DullahanHelper (GPU).app" "${ARCH_PREBUILT_DIRS_RELEASE}/DullahanHelper (Plugin).app" "${ARCH_PREBUILT_DIRS_RELEASE}/DullahanHelper (Renderer).app" DESTINATION ${_LIB} ) elseif (LINUX) if (${LINUX_DISTRO} MATCHES freedesktop) set(_LIB lib) elseif (${LINUX_DISTRO} MATCHES debian OR (${LINUX_DISTRO} MATCHES ubuntu)) set(_LIB lib/${ARCH}-linux-gnu/${VIEWER_BINARY_NAME}) elseif (${LINUX_DISTRO} MATCHES fedora OR (${LINUX_DISTRO} MATCHES opensuse-tumbleweed) OR (${LINUX_DISTRO} MATCHES gentoo)) set(_LIB lib${ADDRESS_SIZE}/${VIEWER_BINARY_NAME}) else () set(_LIB lib/${VIEWER_BINARY_NAME}) endif () if (${LINUX_DISTRO} MATCHES freedesktop) install( PROGRAMS ${AUTOBUILD_INSTALL_DIR}/bin/release/chrome-sandbox ${AUTOBUILD_INSTALL_DIR}/bin/release/dullahan_host DESTINATION libexec ) elseif (${LINUX_DISTRO} MATCHES arch) install( PROGRAMS ${AUTOBUILD_INSTALL_DIR}/bin/release/dullahan_host DESTINATION lib/${VIEWER_BINARY_NAME} ) if (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64) install( PROGRAMS ${AUTOBUILD_INSTALL_DIR}/bin/release/chrome-sandbox DESTINATION lib/${VIEWER_BINARY_NAME} ) endif () elseif (${LINUX_DISTRO} MATCHES fedora) install( PROGRAMS ${AUTOBUILD_INSTALL_DIR}/bin/release/dullahan_host DESTINATION libexec/${VIEWER_BINARY_NAME} ) else () install( PROGRAMS ${AUTOBUILD_INSTALL_DIR}/bin/release/chrome-sandbox ${AUTOBUILD_INSTALL_DIR}/bin/release/dullahan_host DESTINATION libexec/${VIEWER_BINARY_NAME} ) endif () if (NOT (${LINUX_DISTRO} MATCHES arch AND (CMAKE_SYSTEM_PROCESSOR MATCHES x86_64) OR (${LINUX_DISTRO} MATCHES fedora))) install( FILES ${ARCH_PREBUILT_DIRS_RELEASE}/libEGL.so ${ARCH_PREBUILT_DIRS_RELEASE}/libGLESv2.so ${ARCH_PREBUILT_DIRS_RELEASE}/libcef.so ${ARCH_PREBUILT_DIRS_RELEASE}/libvk_swiftshader.so ${ARCH_PREBUILT_DIRS_RELEASE}/libvulkan.so.1 ${ARCH_PREBUILT_DIRS_RELEASE}/v8_context_snapshot.bin ${ARCH_PREBUILT_DIRS_RELEASE}/vk_swiftshader_icd.json ${AUTOBUILD_INSTALL_DIR}/resources/chrome_100_percent.pak ${AUTOBUILD_INSTALL_DIR}/resources/chrome_200_percent.pak ${AUTOBUILD_INSTALL_DIR}/resources/icudtl.dat ${AUTOBUILD_INSTALL_DIR}/resources/resources.pak DESTINATION ${_LIB} ) install( DIRECTORY ${AUTOBUILD_INSTALL_DIR}/resources/locales DESTINATION ${_LIB} ) endif () elseif (WINDOWS) set(_LIB llplugin) install( PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}.dll ${AUTOBUILD_INSTALL_DIR}/bin/release/chrome_elf.dll ${AUTOBUILD_INSTALL_DIR}/bin/release/d3dcompiler_47.dll ${AUTOBUILD_INSTALL_DIR}/bin/release/dullahan_host.exe ${AUTOBUILD_INSTALL_DIR}/bin/release/libEGL.dll ${AUTOBUILD_INSTALL_DIR}/bin/release/libGLESv2.dll ${AUTOBUILD_INSTALL_DIR}/bin/release/libcef.dll ${AUTOBUILD_INSTALL_DIR}/bin/release/libvlc.dll ${AUTOBUILD_INSTALL_DIR}/bin/release/libvlccore.dll DESTINATION llplugin ) install( FILES ${AUTOBUILD_INSTALL_DIR}/resources/chrome_100_percent.pak ${AUTOBUILD_INSTALL_DIR}/resources/chrome_200_percent.pak ${AUTOBUILD_INSTALL_DIR}/resources/icudtl.dat ${AUTOBUILD_INSTALL_DIR}/resources/resources.pak ${AUTOBUILD_INSTALL_DIR}/bin/release/v8_context_snapshot.bin DESTINATION llplugin ) install( DIRECTORY ${AUTOBUILD_INSTALL_DIR}/resources/locales DESTINATION llplugin ) else () set(_LIB lib/${VIEWER_BINARY_NAME}) endif () if (NOT WINDOWS) install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB}) endif () endif ()