From db0912c6b27e556168c6e6ba15256af7d7503af2 Mon Sep 17 00:00:00 2001 From: Jan Grulich Date: Mon, 14 Apr 2025 16:37:02 +0000 Subject: [PATCH] Bug 1954903 - Allow to use system gbm libs instead of bundled r=stransky,mjf Introduce "--with-system-gbm" option, allowing to build Firefox against system gbm library and to find system gbm header files. Also unify all gbm includes to match both system and bundled paths. Differential Revision: https://phabricator.services.mozilla.com/D242098 --- build/gn_processor.py | 7 +++++++ config/system-headers.mozbuild | 5 +++++ .../third_party_build/gn-configs/webrtc.json | 4 ++++ dom/webgpu/ExternalTextureDMABuf.cpp | 2 +- third_party/gbm/gbm/moz.build | 4 ++++ third_party/gbm/libgbm/moz.build | 13 +++++-------- third_party/gbm/libgbm/mozgbm.cpp | 2 +- third_party/gbm/moz.build | 4 ---- toolkit/moz.configure | 18 ++++++++++++++++++ widget/gtk/DMABufFormats.cpp | 2 +- widget/gtk/DMABufLibWrapper.h | 2 +- widget/gtk/DMABufSurface.cpp | 2 +- widget/gtk/moz.build | 10 +++++++++- widget/gtk/nsWaylandDisplay.h | 3 ++- 14 files changed, 59 insertions(+), 19 deletions(-) create mode 100644 third_party/gbm/gbm/moz.build delete mode 100644 third_party/gbm/moz.build diff --git a/build/gn_processor.py b/build/gn_processor.py index 423b5a4d9a1c..b2b2aaf76692 100644 --- a/build/gn_processor.py +++ b/build/gn_processor.py @@ -564,6 +564,13 @@ def write_mozbuild( mb.write(' CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]\n') except KeyError: pass + try: + if relsrcdir in write_mozbuild_variables["INCLUDE_SYSTEM_GBM_HANDLING"]: + mb.write('CXXFLAGS += CONFIG["MOZ_GBM_CFLAGS"]\n') + mb.write('if not CONFIG["MOZ_SYSTEM_GBM"]:\n') + mb.write(' LOCAL_INCLUDES += [ "/third_party/gbm/gbm/" ]\n') + except KeyError: + pass try: if ( relsrcdir diff --git a/config/system-headers.mozbuild b/config/system-headers.mozbuild index 36552782ceec..e11ddf6b97a9 100644 --- a/config/system-headers.mozbuild +++ b/config/system-headers.mozbuild @@ -1256,6 +1256,11 @@ if CONFIG["OS_TARGET"] == "Android": "vr/gvr/capi/include/gvr.h", ] +if CONFIG["MOZ_SYSTEM_GBM"]: + system_headers += [ + "gbm.h", + ] + if CONFIG["MOZ_JACK"]: system_headers += [ "jack/jack.h", diff --git a/dom/media/webrtc/third_party_build/gn-configs/webrtc.json b/dom/media/webrtc/third_party_build/gn-configs/webrtc.json index 2bb1004a6d3e..c9132a1ec759 100644 --- a/dom/media/webrtc/third_party_build/gn-configs/webrtc.json +++ b/dom/media/webrtc/third_party_build/gn-configs/webrtc.json @@ -17,6 +17,10 @@ "third_party/libwebrtc/modules/portal/portal_gn", "third_party/libwebrtc/modules/video_capture/video_capture_internal_impl_gn" ], + "INCLUDE_SYSTEM_GBM_HANDLING": [ + "third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn", + "third_party/libwebrtc/modules/portal/portal_gn" + ], "INCLUDE_SYSTEM_DAV1D_HANDLING": [ "third_party/libwebrtc/modules/video_coding/codecs/av1/dav1d_decoder_gn", "third_party/libwebrtc/modules/video_coding/codecs/av1/libaom_av1_encoder_gn" diff --git a/dom/webgpu/ExternalTextureDMABuf.cpp b/dom/webgpu/ExternalTextureDMABuf.cpp index c375968ee153..d5e16199c689 100644 --- a/dom/webgpu/ExternalTextureDMABuf.cpp +++ b/dom/webgpu/ExternalTextureDMABuf.cpp @@ -10,7 +10,7 @@ #include "mozilla/webgpu/WebGPUParent.h" #include "mozilla/widget/DMABufSurface.h" #include "mozilla/widget/DMABufLibWrapper.h" -#include "gbm/gbm.h" +#include namespace mozilla::webgpu { diff --git a/third_party/gbm/gbm/moz.build b/third_party/gbm/gbm/moz.build new file mode 100644 index 000000000000..ada6b2d8c966 --- /dev/null +++ b/third_party/gbm/gbm/moz.build @@ -0,0 +1,4 @@ +EXPORTS += [ + 'gbm.h', +] + diff --git a/third_party/gbm/libgbm/moz.build b/third_party/gbm/libgbm/moz.build index 0953d2f17a54..977c73bb479e 100644 --- a/third_party/gbm/libgbm/moz.build +++ b/third_party/gbm/libgbm/moz.build @@ -4,13 +4,10 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -SOURCES += [ - 'mozgbm.cpp', -] - -if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": - CXXFLAGS += CONFIG['MOZ_GTK3_CFLAGS'] - -LOCAL_INCLUDES += ['/third_party/gbm'] +if CONFIG["MOZ_SYSTEM_GBM"]: + OS_LIBS += CONFIG["MOZ_GBM_LIBS"] +else: + SOURCES += ['mozgbm.cpp'] + LOCAL_INCLUDES += ['/third_party/gbm/gbm'] FINAL_LIBRARY = 'xul' diff --git a/third_party/gbm/libgbm/mozgbm.cpp b/third_party/gbm/libgbm/mozgbm.cpp index bc024a11c0b7..14fbbf584d97 100644 --- a/third_party/gbm/libgbm/mozgbm.cpp +++ b/third_party/gbm/libgbm/mozgbm.cpp @@ -8,7 +8,7 @@ #include "mozilla/Types.h" #include "prlink.h" -#include +#include #define GET_FUNC(func, lib) \ func##_fn = \ diff --git a/third_party/gbm/moz.build b/third_party/gbm/moz.build deleted file mode 100644 index 3ba06f309d46..000000000000 --- a/third_party/gbm/moz.build +++ /dev/null @@ -1,4 +0,0 @@ -EXPORTS.gbm = [ - 'gbm/gbm.h', -] - diff --git a/toolkit/moz.configure b/toolkit/moz.configure index 22dcce01d244..8dd2ebe27ec2 100644 --- a/toolkit/moz.configure +++ b/toolkit/moz.configure @@ -678,6 +678,24 @@ def v4l2(target, toolkit_gtk): set_config("MOZ_ENABLE_V4L2", True, when=v4l2) set_define("MOZ_ENABLE_V4L2", True, when=v4l2) +# System gbm support (for screencast support using PipeWire) +# ============================================================= +with only_when(compile_environment): + system_lib_option( + "--with-system-gbm", + nargs="?", + help="Use system gbm", + when=use_pkg_config, + ) + + pipewire_headers = pkg_check_modules( + "MOZ_GBM", + "gbm", + when="--with-system-gbm", + ) + + set_config("MOZ_SYSTEM_GBM", True, when="--with-system-gbm") + # GL Provider # ============================================================== option("--with-gl-provider", nargs=1, help="Set GL provider backend type") diff --git a/widget/gtk/DMABufFormats.cpp b/widget/gtk/DMABufFormats.cpp index 3a87a94de8ca..8996901b4ccf 100644 --- a/widget/gtk/DMABufFormats.cpp +++ b/widget/gtk/DMABufFormats.cpp @@ -11,12 +11,12 @@ #include "DMABufLibWrapper.h" #include "DMABufFormats.h" -#include "gbm/gbm.h" #ifdef MOZ_WAYLAND # include "nsWaylandDisplay.h" # include "mozilla/widget/mozwayland.h" # include "mozilla/widget/linux-dmabuf-unstable-v1-client-protocol.h" #endif +#include #include "mozilla/gfx/Logging.h" // for gfxCriticalNote diff --git a/widget/gtk/DMABufLibWrapper.h b/widget/gtk/DMABufLibWrapper.h index 6c8befdfae55..14214662ba46 100644 --- a/widget/gtk/DMABufLibWrapper.h +++ b/widget/gtk/DMABufLibWrapper.h @@ -8,9 +8,9 @@ #ifndef __MOZ_DMABUF_LIB_WRAPPER_H__ #define __MOZ_DMABUF_LIB_WRAPPER_H__ -#include "gbm/gbm.h" #include "mozilla/StaticMutex.h" #include "mozilla/widget/DMABufFormats.h" +#include #include #undef LOGDMABUF diff --git a/widget/gtk/DMABufSurface.cpp b/widget/gtk/DMABufSurface.cpp index 2e5e871ce3c2..e21ea7dc054e 100644 --- a/widget/gtk/DMABufSurface.cpp +++ b/widget/gtk/DMABufSurface.cpp @@ -12,6 +12,7 @@ # include "nsWaylandDisplay.h" #endif +#include #include #include #include @@ -33,7 +34,6 @@ #endif #include -#include "gbm/gbm.h" #include "mozilla/widget/va_drmcommon.h" #include "mozilla/gfx/2D.h" #include "mozilla/gfx/FileHandleWrapper.h" diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build index c61079eed6e4..c000b8dbead4 100644 --- a/widget/gtk/moz.build +++ b/widget/gtk/moz.build @@ -20,7 +20,6 @@ with Files("*nsGtkKeyUtils*"): BUG_COMPONENT = ("Core", "DOM: UI Events & Focus Handling") DIRS += [ - "/third_party/gbm/", "/third_party/gbm/libgbm", ] @@ -168,6 +167,15 @@ LOCAL_INCLUDES += [ "/widget/x11", ] +CXXFLAGS += CONFIG["MOZ_GBM_CFLAGS"] +if not CONFIG["MOZ_SYSTEM_GBM"]: + LOCAL_INCLUDES += [ + "/third_party/gbm/gbm/", + ] + DIRS += [ + "/third_party/gbm/gbm/", + ] + DEFINES["CAIRO_GFX"] = True DEFINES["MOZ_APP_NAME"] = '"%s"' % CONFIG["MOZ_APP_NAME"] diff --git a/widget/gtk/nsWaylandDisplay.h b/widget/gtk/nsWaylandDisplay.h index 44597c33c715..b0f0ba5432f0 100644 --- a/widget/gtk/nsWaylandDisplay.h +++ b/widget/gtk/nsWaylandDisplay.h @@ -11,7 +11,6 @@ #include "DMABufLibWrapper.h" #include "mozilla/widget/mozwayland.h" -#include "gbm/gbm.h" #include "mozilla/widget/fractional-scale-v1-client-protocol.h" #include "mozilla/widget/idle-inhibit-unstable-v1-client-protocol.h" #include "mozilla/widget/kde-appmenu-client-protocol.h" @@ -24,6 +23,8 @@ #include "mozilla/widget/xdg-output-unstable-v1-client-protocol.h" #include "mozilla/widget/color-management-v1-client-protocol.h" +#include + namespace mozilla::widget { constexpr const int sColorTransfersNum =