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')
except KeyError:
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:
if (
relsrcdir

View File

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

View File

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

View File

@@ -34,7 +34,9 @@ if CONFIG['MOZ_WIDGET_GTK']:
CXXFLAGS += CONFIG['MOZ_GTK3_CFLAGS']
if CONFIG['MOZ_ENABLE_VAAPI'] or CONFIG['MOZ_ENABLE_V4L2']:
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']
DEFINES['MOZ_USE_HWDECODE'] = 1

View File

@@ -34,7 +34,9 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]:
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"]
DEFINES["MOZ_USE_HWDECODE"] = 1

View File

@@ -34,7 +34,9 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]:
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"]
DEFINES["MOZ_USE_HWDECODE"] = 1

View File

@@ -34,7 +34,9 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]:
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"]
DEFINES["MOZ_USE_HWDECODE"] = 1

View File

@@ -46,7 +46,9 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]:
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"]
DEFINES["MOZ_USE_HWDECODE"] = 1
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":

View File

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

View File

@@ -21,6 +21,10 @@
"third_party/libwebrtc/modules/desktop_capture/desktop_capture_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": [
"third_party/libwebrtc/modules/video_coding/codecs/av1/dav1d_decoder_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
# include <va/va_drmcommon.h>
# include <xf86drm.h>
# include <drm_fourcc.h>
# include <libdrm/drm_fourcc.h>
# ifndef DRM_FORMAT_MOD_INVALID
# define DRM_FORMAT_MOD_INVALID ((1ULL << 56) - 1)
# endif

View File

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

View File

@@ -4,16 +4,13 @@
# 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 += [
'mozdrm.cpp',
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
CXXFLAGS += CONFIG['MOZ_GTK3_CFLAGS']
LOCAL_INCLUDES += [
'/third_party/drm/',
'/third_party/drm/drm/include/libdrm/',
if CONFIG["MOZ_SYSTEM_LIBDRM"]:
OS_LIBS += CONFIG["MOZ_LIBDRM_LIBS"]
else:
SOURCES += ['mozdrm.cpp']
LOCAL_INCLUDES += [
'/third_party/drm/drm/',
'/third_party/drm/drm/include/',
]
FINAL_LIBRARY = 'xul'

View File

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

View File

@@ -325,6 +325,9 @@ if CONFIG["OS_ARCH"] == "OpenBSD":
if CONFIG["MOZ_ENABLE_DBUS"]:
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"]:
OS_LIBS += [l for l in CONFIG["MOZ_GTK3_LIBS"] if l not in ("-lgtk-3", "-lgdk-3")]
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")
# 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
# ==============================================================
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
* 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/types.h>

View File

@@ -160,8 +160,6 @@ LOCAL_INCLUDES += [
"/layout/xul",
"/other-licenses/atk-1.0",
"/third_party/cups/include",
"/third_party/drm/",
"/third_party/drm/drm/include/libdrm/",
"/widget",
"/widget/headless",
"/widget/x11",
@@ -176,6 +174,13 @@ if not CONFIG["MOZ_SYSTEM_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["MOZ_APP_NAME"] = '"%s"' % CONFIG["MOZ_APP_NAME"]