Bug 1954903 - Allow to use system drm libs instead of bundled r=stransky,mjf

Introduce "--with-system-libdrm" option, allowing to build Firefox with
system drm library and to find system drm header files. Also unify all
drm includes to match both system and bundled paths.

Differential Revision: https://phabricator.services.mozilla.com/D242099
This commit is contained in:
Jan Grulich
2025-04-14 16:37:02 +00:00
parent db0912c6b2
commit 2a44277492
18 changed files with 78 additions and 23 deletions

View File

@@ -571,6 +571,19 @@ def write_mozbuild(
mb.write(' LOCAL_INCLUDES += [ "/third_party/gbm/gbm/" ]\n') mb.write(' LOCAL_INCLUDES += [ "/third_party/gbm/gbm/" ]\n')
except KeyError: except KeyError:
pass pass
try:
if (
relsrcdir
in write_mozbuild_variables["INCLUDE_SYSTEM_LIBDRM_HANDLING"]
):
mb.write('CXXFLAGS += CONFIG["MOZ_LIBDRM_CFLAGS"]\n')
mb.write('if not CONFIG["MOZ_SYSTEM_LIBDRM"]:\n')
mb.write(' LOCAL_INCLUDES += [ "/third_party/drm/drm/",\n')
mb.write(
' "/third_party/drm/drm/include/" ]\n'
)
except KeyError:
pass
try: try:
if ( if (
relsrcdir relsrcdir

View File

@@ -1261,6 +1261,12 @@ if CONFIG["MOZ_SYSTEM_GBM"]:
"gbm.h", "gbm.h",
] ]
if CONFIG["MOZ_SYSTEM_LIBDRM"]:
system_headers += [
"drm.h",
"xf86drm.h",
]
if CONFIG["MOZ_JACK"]: if CONFIG["MOZ_JACK"]:
system_headers += [ system_headers += [
"jack/jack.h", "jack/jack.h",

View File

@@ -18,7 +18,7 @@
#ifdef DRM_FORMAT_MOD_INVALID #ifdef DRM_FORMAT_MOD_INVALID
# undef DRM_FORMAT_MOD_INVALID # undef DRM_FORMAT_MOD_INVALID
#endif #endif
#include "drm_fourcc.h" #include <libdrm/drm_fourcc.h>
#ifdef MOZ_LOGGING #ifdef MOZ_LOGGING
# undef DMABUF_LOG # undef DMABUF_LOG

View File

@@ -34,7 +34,9 @@ if CONFIG['MOZ_WIDGET_GTK']:
CXXFLAGS += CONFIG['MOZ_GTK3_CFLAGS'] CXXFLAGS += CONFIG['MOZ_GTK3_CFLAGS']
if CONFIG['MOZ_ENABLE_VAAPI'] or CONFIG['MOZ_ENABLE_V4L2']: if CONFIG['MOZ_ENABLE_VAAPI'] or CONFIG['MOZ_ENABLE_V4L2']:
UNIFIED_SOURCES += ['../FFmpegVideoFramePool.cpp'] UNIFIED_SOURCES += ['../FFmpegVideoFramePool.cpp']
LOCAL_INCLUDES += ['/third_party/drm/drm/include/libdrm/'] CXXFLAGS += CONFIG['MOZ_DRM_CFLAGS']
if not CONFIG['MOZ_SYSTEM_LIBDRM']:
LOCAL_INCLUDES += ['/third_party/drm/drm/include/']
USE_LIBS += ['mozva'] USE_LIBS += ['mozva']
DEFINES['MOZ_USE_HWDECODE'] = 1 DEFINES['MOZ_USE_HWDECODE'] = 1

View File

@@ -34,7 +34,9 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]: if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]:
UNIFIED_SOURCES += ["../FFmpegVideoFramePool.cpp"] UNIFIED_SOURCES += ["../FFmpegVideoFramePool.cpp"]
LOCAL_INCLUDES += ["/third_party/drm/drm/include/libdrm/"] CXXFLAGS += CONFIG['MOZ_DRM_CFLAGS']
if not CONFIG['MOZ_SYSTEM_LIBDRM']:
LOCAL_INCLUDES += ['/third_party/drm/drm/include/']
USE_LIBS += ["mozva"] USE_LIBS += ["mozva"]
DEFINES["MOZ_USE_HWDECODE"] = 1 DEFINES["MOZ_USE_HWDECODE"] = 1

View File

@@ -34,7 +34,9 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]: if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]:
UNIFIED_SOURCES += ["../FFmpegVideoFramePool.cpp"] UNIFIED_SOURCES += ["../FFmpegVideoFramePool.cpp"]
LOCAL_INCLUDES += ["/third_party/drm/drm/include/libdrm/"] CXXFLAGS += CONFIG['MOZ_DRM_CFLAGS']
if not CONFIG['MOZ_SYSTEM_LIBDRM']:
LOCAL_INCLUDES += ['/third_party/drm/drm/include/']
USE_LIBS += ["mozva"] USE_LIBS += ["mozva"]
DEFINES["MOZ_USE_HWDECODE"] = 1 DEFINES["MOZ_USE_HWDECODE"] = 1

View File

@@ -34,7 +34,9 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]: if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]:
UNIFIED_SOURCES += ["../FFmpegVideoFramePool.cpp"] UNIFIED_SOURCES += ["../FFmpegVideoFramePool.cpp"]
LOCAL_INCLUDES += ["/third_party/drm/drm/include/libdrm/"] CXXFLAGS += CONFIG['MOZ_DRM_CFLAGS']
if not CONFIG['MOZ_SYSTEM_LIBDRM']:
LOCAL_INCLUDES += ['/third_party/drm/drm/include/']
USE_LIBS += ["mozva"] USE_LIBS += ["mozva"]
DEFINES["MOZ_USE_HWDECODE"] = 1 DEFINES["MOZ_USE_HWDECODE"] = 1

View File

@@ -46,7 +46,9 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]: if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]:
UNIFIED_SOURCES += ["../FFmpegVideoFramePool.cpp"] UNIFIED_SOURCES += ["../FFmpegVideoFramePool.cpp"]
LOCAL_INCLUDES += ["/third_party/drm/drm/include/libdrm/"] CXXFLAGS += CONFIG["MOZ_LIBDRM_CFLAGS"]
if not CONFIG["MOZ_SYSTEM_LIBDRM"]:
LOCAL_INCLUDES += ["/third_party/drm/drm/include/"]
USE_LIBS += ["mozva"] USE_LIBS += ["mozva"]
DEFINES["MOZ_USE_HWDECODE"] = 1 DEFINES["MOZ_USE_HWDECODE"] = 1
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows": if CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":

View File

@@ -86,7 +86,6 @@ if CONFIG["MOZ_WEBRTC_SIGNALING"]:
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
DIRS += [ DIRS += [
"/third_party/drm/",
"/third_party/drm/libdrm", "/third_party/drm/libdrm",
"/third_party/libepoxy/", "/third_party/libepoxy/",
"/third_party/pipewire/libpipewire", "/third_party/pipewire/libpipewire",

View File

@@ -21,6 +21,10 @@
"third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn", "third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn",
"third_party/libwebrtc/modules/portal/portal_gn" "third_party/libwebrtc/modules/portal/portal_gn"
], ],
"INCLUDE_SYSTEM_LIBDRM_HANDLING": [
"third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn",
"third_party/libwebrtc/modules/portal/portal_gn"
],
"INCLUDE_SYSTEM_DAV1D_HANDLING": [ "INCLUDE_SYSTEM_DAV1D_HANDLING": [
"third_party/libwebrtc/modules/video_coding/codecs/av1/dav1d_decoder_gn", "third_party/libwebrtc/modules/video_coding/codecs/av1/dav1d_decoder_gn",
"third_party/libwebrtc/modules/video_coding/codecs/av1/libaom_av1_encoder_gn" "third_party/libwebrtc/modules/video_coding/codecs/av1/libaom_av1_encoder_gn"

View File

@@ -37,7 +37,7 @@ typedef HRESULT (WINAPI *PFN_CREATE_DXGI_FACTORY)(REFIID riid, void **ppFactory)
#if CONFIG_LIBDRM #if CONFIG_LIBDRM
# include <va/va_drmcommon.h> # include <va/va_drmcommon.h>
# include <xf86drm.h> # include <xf86drm.h>
# include <drm_fourcc.h> # include <libdrm/drm_fourcc.h>
# ifndef DRM_FORMAT_MOD_INVALID # ifndef DRM_FORMAT_MOD_INVALID
# define DRM_FORMAT_MOD_INVALID ((1ULL << 56) - 1) # define DRM_FORMAT_MOD_INVALID ((1ULL << 56) - 1)
# endif # endif

View File

@@ -37,7 +37,7 @@
#include <stdarg.h> #include <stdarg.h>
#include <sys/types.h> #include <sys/types.h>
#include <stdint.h> #include <stdint.h>
#include <drm.h> #include <libdrm/drm.h>
#if defined(__cplusplus) #if defined(__cplusplus)
extern "C" { extern "C" {

View File

@@ -4,16 +4,13 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this # 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/. # file, You can obtain one at http://mozilla.org/MPL/2.0/.
SOURCES += [ if CONFIG["MOZ_SYSTEM_LIBDRM"]:
'mozdrm.cpp', OS_LIBS += CONFIG["MOZ_LIBDRM_LIBS"]
] else:
SOURCES += ['mozdrm.cpp']
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": LOCAL_INCLUDES += [
CXXFLAGS += CONFIG['MOZ_GTK3_CFLAGS'] '/third_party/drm/drm/',
'/third_party/drm/drm/include/',
LOCAL_INCLUDES += [
'/third_party/drm/',
'/third_party/drm/drm/include/libdrm/',
] ]
FINAL_LIBRARY = 'xul' FINAL_LIBRARY = 'xul'

View File

@@ -8,7 +8,7 @@
#include "mozilla/Types.h" #include "mozilla/Types.h"
#include "prlink.h" #include "prlink.h"
#include <drm/xf86drm.h> #include <xf86drm.h>
#define GET_FUNC(func, lib) \ #define GET_FUNC(func, lib) \
func##_fn = \ func##_fn = \

View File

@@ -325,6 +325,9 @@ if CONFIG["OS_ARCH"] == "OpenBSD":
if CONFIG["MOZ_ENABLE_DBUS"]: if CONFIG["MOZ_ENABLE_DBUS"]:
OS_LIBS += CONFIG["MOZ_DBUS_LIBS"] OS_LIBS += CONFIG["MOZ_DBUS_LIBS"]
if CONFIG["MOZ_SYSTEM_LIBDRM"]:
OS_LIBS += CONFIG["MOZ_LIBDRM_LIBS"]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk" and CONFIG["COMPILE_ENVIRONMENT"]: if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk" and CONFIG["COMPILE_ENVIRONMENT"]:
OS_LIBS += [l for l in CONFIG["MOZ_GTK3_LIBS"] if l not in ("-lgtk-3", "-lgdk-3")] OS_LIBS += [l for l in CONFIG["MOZ_GTK3_LIBS"] if l not in ("-lgtk-3", "-lgdk-3")]
OS_LIBS += CONFIG["MOZ_X11_LIBS"] OS_LIBS += CONFIG["MOZ_X11_LIBS"]

View File

@@ -696,6 +696,24 @@ with only_when(compile_environment):
set_config("MOZ_SYSTEM_GBM", True, when="--with-system-gbm") set_config("MOZ_SYSTEM_GBM", True, when="--with-system-gbm")
# System libdrm support
# =============================================================
with only_when(compile_environment):
system_lib_option(
"--with-system-libdrm",
nargs="?",
help="Use system libdrm",
when=use_pkg_config,
)
pipewire_headers = pkg_check_modules(
"MOZ_LIBDRM",
"libdrm",
when="--with-system-libdrm",
)
set_config("MOZ_SYSTEM_LIBDRM", True, when="--with-system-libdrm")
# GL Provider # GL Provider
# ============================================================== # ==============================================================
option("--with-gl-provider", nargs=1, help="Set GL provider backend type") option("--with-gl-provider", nargs=1, help="Set GL provider backend type")

View File

@@ -5,7 +5,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * 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/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include <drm/xf86drm.h> #include <xf86drm.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/types.h> #include <sys/types.h>

View File

@@ -160,8 +160,6 @@ LOCAL_INCLUDES += [
"/layout/xul", "/layout/xul",
"/other-licenses/atk-1.0", "/other-licenses/atk-1.0",
"/third_party/cups/include", "/third_party/cups/include",
"/third_party/drm/",
"/third_party/drm/drm/include/libdrm/",
"/widget", "/widget",
"/widget/headless", "/widget/headless",
"/widget/x11", "/widget/x11",
@@ -176,6 +174,13 @@ if not CONFIG["MOZ_SYSTEM_GBM"]:
"/third_party/gbm/gbm/", "/third_party/gbm/gbm/",
] ]
CXXFLAGS += CONFIG["MOZ_LIBDRM_CFLAGS"]
if not CONFIG["MOZ_SYSTEM_LIBDRM"]:
LOCAL_INCLUDES += [
"/third_party/drm/drm/",
"/third_party/drm/drm/include/",
]
DEFINES["CAIRO_GFX"] = True DEFINES["CAIRO_GFX"] = True
DEFINES["MOZ_APP_NAME"] = '"%s"' % CONFIG["MOZ_APP_NAME"] DEFINES["MOZ_APP_NAME"] = '"%s"' % CONFIG["MOZ_APP_NAME"]