diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/gbm/libgbm | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/gbm/libgbm')
-rw-r--r-- | third_party/gbm/libgbm/moz.build | 16 | ||||
-rw-r--r-- | third_party/gbm/libgbm/mozgbm.cpp | 66 |
2 files changed, 82 insertions, 0 deletions
diff --git a/third_party/gbm/libgbm/moz.build b/third_party/gbm/libgbm/moz.build new file mode 100644 index 0000000000..0953d2f17a --- /dev/null +++ b/third_party/gbm/libgbm/moz.build @@ -0,0 +1,16 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# 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'] + +FINAL_LIBRARY = 'xul' diff --git a/third_party/gbm/libgbm/mozgbm.cpp b/third_party/gbm/libgbm/mozgbm.cpp new file mode 100644 index 0000000000..bc024a11c0 --- /dev/null +++ b/third_party/gbm/libgbm/mozgbm.cpp @@ -0,0 +1,66 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:expandtab:shiftwidth=4:tabstop=4: + */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * 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 "mozilla/Types.h" +#include "prlink.h" + +#include <gbm/gbm.h> + +#define GET_FUNC(func, lib) \ + func##_fn = \ + (decltype(func##_fn))PR_FindFunctionSymbol(lib, #func) \ + +#define IS_FUNC_LOADED(func) \ + (func != nullptr) \ + +static struct gbm_device * (*gbm_create_device_fn)(int fd); +static void (*gbm_device_destroy_fn)(struct gbm_device* gbm); + +bool IsGBMLibraryLoaded() { + static bool isLoaded = + (IS_FUNC_LOADED(gbm_create_device_fn) && + IS_FUNC_LOADED(gbm_device_destroy_fn)); + + return isLoaded; +} + +bool LoadGBMLibrary() { + static PRLibrary* gbmLib = nullptr; + static bool gbmInitialized = false; + + //TODO Thread safe + if (!gbmInitialized) { + gbmInitialized = true; + gbmLib = PR_LoadLibrary("libgbm.so.1"); + if (!gbmLib) { + return false; + } + + GET_FUNC(gbm_create_device, gbmLib); + GET_FUNC(gbm_device_destroy, gbmLib); + } + + return IsGBMLibraryLoaded(); +} + +struct gbm_device * +gbm_create_device(int fd) +{ + if (!LoadGBMLibrary()) { + return nullptr; + } + return gbm_create_device_fn(fd); +} + +void +gbm_device_destroy(struct gbm_device* gbm) +{ + if (!LoadGBMLibrary()) { + return; + } + return gbm_device_destroy_fn(gbm); +} |