Compare commits
2 Commits
dfed922410
...
00ecd51ce3
Author | SHA1 | Date | |
---|---|---|---|
00ecd51ce3 | |||
1b61b6800d |
@ -11,7 +11,7 @@
|
|||||||
%global pypi_name PyQt6_WebEngine
|
%global pypi_name PyQt6_WebEngine
|
||||||
|
|
||||||
Name: python-pyqt6-webengine
|
Name: python-pyqt6-webengine
|
||||||
Version: 6.8.0
|
Version: 6.8.2
|
||||||
Release: %autorelease
|
Release: %autorelease
|
||||||
Summary: Python bindings for Qt6WebEngine
|
Summary: Python bindings for Qt6WebEngine
|
||||||
License: GPL-3.0-only
|
License: GPL-3.0-only
|
||||||
@ -100,6 +100,9 @@ done
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu feb 6 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- Update to 6.8.2
|
||||||
|
|
||||||
* Fri Jan 3 2025 Raven <raven@sysadmins.ws> - 6.8.0-1
|
* Fri Jan 3 2025 Raven <raven@sysadmins.ws> - 6.8.0-1
|
||||||
- Update to 6.8.0
|
- Update to 6.8.0
|
||||||
|
|
||||||
|
@ -6,12 +6,12 @@
|
|||||||
|
|
||||||
Summary: PyQt6 is Python bindings for Qt6
|
Summary: PyQt6 is Python bindings for Qt6
|
||||||
Name: python-pyqt6
|
Name: python-pyqt6
|
||||||
Version: 6.8.0
|
Version: 6.8.1
|
||||||
Release: 1%{?snap:^%{snap}}%{?dist}
|
Release: 1%{?snap:^%{snap}}%{?dist}
|
||||||
|
|
||||||
License: gpl-3.0-only
|
License: gpl-3.0-only
|
||||||
Url: http://www.riverbankcomputing.com/software/pyqt/
|
Url: http://www.riverbankcomputing.com/software/pyqt/
|
||||||
Source0: https://pypi.python.org/packages/source/P/PyQt6/PyQt6-%{version}%{?snap:.%{snap}}.tar.gz
|
Source0: https://pypi.python.org/packages/source/P/PyQt6/pyqt6-%{version}%{?snap:.%{snap}}.tar.gz
|
||||||
Source1: macros.pyqt6
|
Source1: macros.pyqt6
|
||||||
|
|
||||||
BuildRequires: make
|
BuildRequires: make
|
||||||
@ -115,7 +115,7 @@ BuildArch: noarch
|
|||||||
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup -n PyQt6-%{version}%{?snap:.%{snap}} -p1
|
%autosetup -n pyqt6-%{version}%{?snap:.%{snap}} -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%enable_devtoolset14
|
%enable_devtoolset14
|
||||||
@ -243,6 +243,9 @@ sed -i \
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Feb 6 2025 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
|
- Update to 6.8.1
|
||||||
|
|
||||||
* Fri Jan 3 2025 Raven <raven@sysadmins.ws> - 6.8.0-1
|
* Fri Jan 3 2025 Raven <raven@sysadmins.ws> - 6.8.0-1
|
||||||
- Update to 6.8.0
|
- Update to 6.8.0
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Qt3D QML bindings and C++ APIs
|
Summary: Qt6 - Qt3D QML bindings and C++ APIs
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
%global examples 1
|
%global examples 1
|
||||||
@ -220,6 +220,9 @@ popd
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Qt 5 Compatibility Libraries
|
Summary: Qt6 - Qt 5 Compatibility Libraries
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -118,6 +118,9 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ BuildRequires: pkgconfig(libsystemd)
|
|||||||
|
|
||||||
Name: qt6-qtbase
|
Name: qt6-qtbase
|
||||||
Summary: Qt6 - QtBase components
|
Summary: Qt6 - QtBase components
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -109,6 +109,14 @@ Patch100: qtbase-use-qgnomeplatform-as-default-platform-theme-on-gnome.patch
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
## upstream patches
|
## upstream patches
|
||||||
|
Patch150: qtbase-extract-emoji-data-from-unicode-files.patch
|
||||||
|
Patch151: qtbase-introduce-emoji-segmenter-to-3rdparty-code.patch
|
||||||
|
Patch152: qtbase-use-emoji-segmenter-to-apply-emoji-fonts-automatically.patch
|
||||||
|
Patch153: qtbase-fix-regression-when-looking-up-fallback-fonts.patch
|
||||||
|
Patch154: qtbase-skip-ad-hoc-handling-of-variation-selector-in-font-merging.patch
|
||||||
|
Patch155: qtbase-fontconfig-dont-register-hardcoded-fonts-as-color-fonts.patch
|
||||||
|
Patch156: qtbase-request-actual-font-family-request-in-final-color-font-fail-safe.patch
|
||||||
|
Patch157: qtbase-fontconfig-fix-detection-of-color-fonts.patch
|
||||||
|
|
||||||
|
|
||||||
# Do not check any files in %%{_qt6_plugindir}/platformthemes/ for requires.
|
# Do not check any files in %%{_qt6_plugindir}/platformthemes/ for requires.
|
||||||
@ -326,6 +334,10 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||||||
Recommends: qt6-qtwayland%{?_isa}
|
Recommends: qt6-qtwayland%{?_isa}
|
||||||
Recommends: qt6-qttranslations
|
Recommends: qt6-qttranslations
|
||||||
Recommends: mesa-dri-drivers%{?_isa}
|
Recommends: mesa-dri-drivers%{?_isa}
|
||||||
|
Obsoletes: adwaita-qt6 <= 1.4.2
|
||||||
|
Obsoletes: libadwaita-qt6 <= 1.4.2
|
||||||
|
Obsoletes: qgnomeplatform-qt6 <= 0.9.3
|
||||||
|
Provides: qgnomeplatform-qt6 = %{version}-%{release}
|
||||||
# for Source6: 10-qt6-check-opengl2.sh:
|
# for Source6: 10-qt6-check-opengl2.sh:
|
||||||
# glxinfo
|
# glxinfo
|
||||||
Requires: glx-utils
|
Requires: glx-utils
|
||||||
@ -884,6 +896,12 @@ make check -k ||:
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
|
* Tue Jan 21 2025 Raven <raven@sysadmins.ws> - 6.8.1-2
|
||||||
|
- Import patches from Fedora
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
19179
base/qt6/qt6-qtbase/qtbase-extract-emoji-data-from-unicode-files.patch
Normal file
19179
base/qt6/qt6-qtbase/qtbase-extract-emoji-data-from-unicode-files.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,96 @@
|
|||||||
|
From 486bbc7a5bc4483ecc2a6b8927543725e3d38722 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||||
|
Date: Tue, 26 Nov 2024 14:39:44 +0100
|
||||||
|
Subject: Fix regression when looking up fallback fonts
|
||||||
|
|
||||||
|
This amends 16850709306589a2433c0038605d365a6b6bedad.
|
||||||
|
|
||||||
|
In that change, the final pass for looking up fallback
|
||||||
|
fonts was turned into a lambda so that we could run it
|
||||||
|
an additional time at the very end. However, when making
|
||||||
|
a lambda from the code, some of the logic was accidentally
|
||||||
|
changed.
|
||||||
|
|
||||||
|
Specifically, for multi engines the original code would pass
|
||||||
|
Script_Common instead of the requested script to the match()
|
||||||
|
function, but it would still pass the actual script to
|
||||||
|
loadEngine() as well as store it in the key. In the changed
|
||||||
|
code, Script_Common would be used for all of these when multi
|
||||||
|
was true.
|
||||||
|
|
||||||
|
This change was not intentional and it caused us to fail to
|
||||||
|
load certain fallback fonts, for instance the Bengali font
|
||||||
|
on Windows.
|
||||||
|
|
||||||
|
Fixes: QTBUG-131632
|
||||||
|
Change-Id: Id215ee4dc2851e846be27a3a25a31cad57b8f67d
|
||||||
|
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
|
||||||
|
|
||||||
|
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
|
||||||
|
index 96c2337e..0c2a4b66 100644
|
||||||
|
--- a/src/gui/text/qfontdatabase.cpp
|
||||||
|
+++ b/src/gui/text/qfontdatabase.cpp
|
||||||
|
@@ -2734,17 +2734,23 @@ QFontEngine *QFontDatabasePrivate::findFont(const QFontDef &req,
|
||||||
|
if (script > QChar::Script_Common)
|
||||||
|
fallbacks += QString(); // Find the first font matching the specified script.
|
||||||
|
|
||||||
|
- auto findMatchingFallback = [&](int xscript) {
|
||||||
|
+ auto findMatchingFallback = [&fallbacks,
|
||||||
|
+ &index,
|
||||||
|
+ &multi,
|
||||||
|
+ &fontCache,
|
||||||
|
+ &blackListed,
|
||||||
|
+ &request](int lookupScript, int cacheScript) {
|
||||||
|
+ QFontEngine *engine = nullptr;
|
||||||
|
for (int i = 0; !engine && i < fallbacks.size(); i++) {
|
||||||
|
QFontDef def = request;
|
||||||
|
|
||||||
|
def.families = QStringList(fallbacks.at(i));
|
||||||
|
- QFontCache::Key key(def, xscript, multi ? 1 : 0);
|
||||||
|
+ QFontCache::Key key(def, cacheScript, multi ? 1 : 0);
|
||||||
|
engine = fontCache->findEngine(key);
|
||||||
|
if (!engine) {
|
||||||
|
QtFontDesc desc;
|
||||||
|
do {
|
||||||
|
- index = match(xscript,
|
||||||
|
+ index = match(lookupScript,
|
||||||
|
def,
|
||||||
|
def.families.constFirst(),
|
||||||
|
""_L1,
|
||||||
|
@@ -2755,7 +2761,12 @@ QFontEngine *QFontDatabasePrivate::findFont(const QFontDef &req,
|
||||||
|
QFontDef loadDef = def;
|
||||||
|
if (loadDef.families.isEmpty())
|
||||||
|
loadDef.families = QStringList(desc.family->name);
|
||||||
|
- engine = loadEngine(xscript, loadDef, desc.family, desc.foundry, desc.style, desc.size);
|
||||||
|
+ engine = loadEngine(cacheScript,
|
||||||
|
+ loadDef,
|
||||||
|
+ desc.family,
|
||||||
|
+ desc.foundry,
|
||||||
|
+ desc.style,
|
||||||
|
+ desc.size);
|
||||||
|
if (engine)
|
||||||
|
initFontDef(desc, loadDef, &engine->fontDef, multi);
|
||||||
|
else
|
||||||
|
@@ -2764,15 +2775,20 @@ QFontEngine *QFontDatabasePrivate::findFont(const QFontDef &req,
|
||||||
|
} while (index >= 0 && !engine);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ return engine;
|
||||||
|
};
|
||||||
|
|
||||||
|
- findMatchingFallback(multi && script != QFontDatabasePrivate::Script_Emoji ? QChar::Script_Common: script);
|
||||||
|
+ engine = findMatchingFallback(multi && script != QFontDatabasePrivate::Script_Emoji
|
||||||
|
+ ? QChar::Script_Common
|
||||||
|
+ : script,
|
||||||
|
+ script);
|
||||||
|
|
||||||
|
// If we are looking for a color font and there are no color fonts on the system,
|
||||||
|
// we will end up here, for one final pass. This is a rare occurrence so we accept
|
||||||
|
// and extra pass on the fallbacks for this.
|
||||||
|
if (!engine && script == QFontDatabasePrivate::Script_Emoji)
|
||||||
|
- findMatchingFallback(QChar::Script_Common);
|
||||||
|
+ engine = findMatchingFallback(QChar::Script_Common, script);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!engine)
|
@ -0,0 +1,34 @@
|
|||||||
|
From 83864f8682da73a062a3ca32b928377dfc333021 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||||
|
Date: Wed, 15 Jan 2025 14:52:55 +0100
|
||||||
|
Subject: [PATCH] FontConfig: Don't register hardcoded fonts as color fonts
|
||||||
|
|
||||||
|
This amends 16850709306589a2433c0038605d365a6b6bedad. The patch
|
||||||
|
aimed to pass false for the color font parameter, but got it in
|
||||||
|
the wrong position, so it passed false for the pixel size instead.
|
||||||
|
|
||||||
|
The registerFont() function is a real mess, and it should be cleaned
|
||||||
|
up, but this at least fixes the immediate bug.
|
||||||
|
|
||||||
|
Pick-to: 6.9
|
||||||
|
Task-number: QTBUG-132821
|
||||||
|
Change-Id: Id54989960aa5f86d3c79423d004530bb6a4fa475
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/gui/text/unix/qfontconfigdatabase.cpp b/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
index 7866e341..790316a6 100644
|
||||||
|
--- a/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
+++ b/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
@@ -622,9 +622,9 @@ void QFontconfigDatabase::populateFontDatabase()
|
||||||
|
|
||||||
|
while (f->qtname) {
|
||||||
|
QString familyQtName = QString::fromLatin1(f->qtname);
|
||||||
|
- registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleNormal,QFont::Unstretched,true,true,false,0,f->fixed,ws,nullptr);
|
||||||
|
- registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleItalic,QFont::Unstretched,true,true,false,0,f->fixed,ws,nullptr);
|
||||||
|
- registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleOblique,QFont::Unstretched,true,true,false,0,f->fixed,ws,nullptr);
|
||||||
|
+ registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleNormal,QFont::Unstretched,true,true,0,f->fixed,false,ws,nullptr);
|
||||||
|
+ registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleItalic,QFont::Unstretched,true,true,0,f->fixed,false,ws,nullptr);
|
||||||
|
+ registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleOblique,QFont::Unstretched,true,true,0,f->fixed,false,ws,nullptr);
|
||||||
|
++f;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,43 @@
|
|||||||
|
From 2c309f71705449607592bb4588bcc56223da897b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||||
|
Date: Wed, 15 Jan 2025 15:39:16 +0100
|
||||||
|
Subject: [PATCH] FontConfig: Fix detection of color fonts
|
||||||
|
|
||||||
|
There were two mistakes in the code that intended to detect
|
||||||
|
if a specific font was a color font in the FontConfig database.
|
||||||
|
|
||||||
|
1. The "int n" parameter in FcPatternGet*() is not an array size,
|
||||||
|
but an index, so it should be 0 and not 1.
|
||||||
|
|
||||||
|
2. We need to add FC_COLOR to the list of properties in our pattern
|
||||||
|
when populating the database, otherwise we will just fail to match
|
||||||
|
it and none of the system fonts will be listed as color.
|
||||||
|
|
||||||
|
Pick-to: 6.9
|
||||||
|
Fixes: QTBUG-132377
|
||||||
|
Change-Id: Ib3c112e8a354abacd05679c62283a1f1abfb40ee
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/gui/text/unix/qfontconfigdatabase.cpp b/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
index de6618f..20794ed 100644
|
||||||
|
--- a/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
+++ b/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
@@ -478,7 +478,7 @@
|
||||||
|
|
||||||
|
FcBool colorFont = false;
|
||||||
|
#ifdef FC_COLOR
|
||||||
|
- FcPatternGetBool(pattern, FC_COLOR, 1, &colorFont);
|
||||||
|
+ FcPatternGetBool(pattern, FC_COLOR, 0, &colorFont);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Note: stretch should really be an int but registerFont incorrectly uses an enum
|
||||||
|
@@ -577,6 +577,9 @@
|
||||||
|
#if FC_VERSION >= 20297
|
||||||
|
FC_CAPABILITY,
|
||||||
|
#endif
|
||||||
|
+#if defined(FC_COLOR)
|
||||||
|
+ FC_COLOR,
|
||||||
|
+#endif
|
||||||
|
(const char *)nullptr
|
||||||
|
};
|
||||||
|
const char **p = properties;
|
@ -0,0 +1,568 @@
|
|||||||
|
From aa7d479be0df3e118580e87f30e061445dfb37e3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||||
|
Date: Fri, 2 Feb 2024 15:45:20 +0100
|
||||||
|
Subject: Introduce emoji-segmenter to 3rdparty code
|
||||||
|
|
||||||
|
This is a parser for emoji sequences developed by Google
|
||||||
|
which is used in multiple other projects for parsing
|
||||||
|
sequences of characters to see if they should be represented
|
||||||
|
as color emojis or as monochrome text.
|
||||||
|
|
||||||
|
[ChangeLog][Third-Party Code] Added the emoji-segmenter to
|
||||||
|
third party code, for supporting complex emoji sequences.
|
||||||
|
This can be configured using the -emojisegmenter option.
|
||||||
|
|
||||||
|
Task-number: QTBUG-111801
|
||||||
|
Change-Id: I7f87b0751415024d29f074d133850027f0003e29
|
||||||
|
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
||||||
|
|
||||||
|
diff --git a/config_help.txt b/config_help.txt
|
||||||
|
index deb38c9c2f..09aebf2e65 100644
|
||||||
|
--- a/config_help.txt
|
||||||
|
+++ b/config_help.txt
|
||||||
|
@@ -298,6 +298,7 @@ Gui, printing, widget options:
|
||||||
|
|
||||||
|
-cups ................ Enable CUPS support [auto] (Unix only)
|
||||||
|
|
||||||
|
+ -emojisegmenter ...... Enable complex emoji sequences [yes]
|
||||||
|
-fontconfig .......... Enable Fontconfig support [auto] (Unix only)
|
||||||
|
-freetype ............ Select used FreeType [system/qt/no]
|
||||||
|
-harfbuzz ............ Select used HarfBuzz-NG [system/qt/no]
|
||||||
|
diff --git a/src/3rdparty/emoji-segmenter/CONTRIBUTING.md b/src/3rdparty/emoji-segmenter/CONTRIBUTING.md
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..db177d4ac7
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/3rdparty/emoji-segmenter/CONTRIBUTING.md
|
||||||
|
@@ -0,0 +1,28 @@
|
||||||
|
+# How to Contribute
|
||||||
|
+
|
||||||
|
+We'd love to accept your patches and contributions to this project. There are
|
||||||
|
+just a few small guidelines you need to follow.
|
||||||
|
+
|
||||||
|
+## Contributor License Agreement
|
||||||
|
+
|
||||||
|
+Contributions to this project must be accompanied by a Contributor License
|
||||||
|
+Agreement. You (or your employer) retain the copyright to your contribution;
|
||||||
|
+this simply gives us permission to use and redistribute your contributions as
|
||||||
|
+part of the project. Head over to <https://cla.developers.google.com/> to see
|
||||||
|
+your current agreements on file or to sign a new one.
|
||||||
|
+
|
||||||
|
+You generally only need to submit a CLA once, so if you've already submitted one
|
||||||
|
+(even if it was for a different project), you probably don't need to do it
|
||||||
|
+again.
|
||||||
|
+
|
||||||
|
+## Code reviews
|
||||||
|
+
|
||||||
|
+All submissions, including submissions by project members, require review. We
|
||||||
|
+use GitHub pull requests for this purpose. Consult
|
||||||
|
+[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
|
||||||
|
+information on using pull requests.
|
||||||
|
+
|
||||||
|
+## Community Guidelines
|
||||||
|
+
|
||||||
|
+This project follows
|
||||||
|
+[Google's Open Source Community Guidelines](https://opensource.google.com/conduct/).
|
||||||
|
diff --git a/src/3rdparty/emoji-segmenter/NEWS b/src/3rdparty/emoji-segmenter/NEWS
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..3fd07f1ce2
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/3rdparty/emoji-segmenter/NEWS
|
||||||
|
@@ -0,0 +1,28 @@
|
||||||
|
+Overview of changes leading to 0.4.0
|
||||||
|
+Friday, November 15, 2024
|
||||||
|
+====================================
|
||||||
|
+
|
||||||
|
+* Add `make size` targe to
|
||||||
|
+ determine binary size.
|
||||||
|
+* Set has_vs for
|
||||||
|
+ emoji_keycap_sequence
|
||||||
|
+
|
||||||
|
+Overview of changes leading to 0.3.0
|
||||||
|
+Tuesday, September 5, 2024
|
||||||
|
+====================================
|
||||||
|
+
|
||||||
|
+* Add segmentation for variation
|
||||||
|
+ selector pairs, VS15 and VS16,
|
||||||
|
+ needed for font-variant-emoji.
|
||||||
|
+
|
||||||
|
+Overview of changes leading to 0.2.0
|
||||||
|
+Tuesday, Februar 20, 2024
|
||||||
|
+====================================
|
||||||
|
+
|
||||||
|
+* Change Ragel mode to -F1
|
||||||
|
+
|
||||||
|
+Overview of changes leading to 0.1.0
|
||||||
|
+Tuesday, January 29, 2019
|
||||||
|
+====================================
|
||||||
|
+
|
||||||
|
+* Initial release
|
||||||
|
diff --git a/src/3rdparty/emoji-segmenter/README.md b/src/3rdparty/emoji-segmenter/README.md
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..571a1a4515
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/3rdparty/emoji-segmenter/README.md
|
||||||
|
@@ -0,0 +1,103 @@
|
||||||
|
+Emoji Segmenter
|
||||||
|
+===
|
||||||
|
+
|
||||||
|
+This repository contains a Ragel grammar and generated C code for segmenting
|
||||||
|
+runs of text into text-presentation and emoji-presentation runs. It is currently
|
||||||
|
+used in projects such as Chromium and Pango for deciding which preferred
|
||||||
|
+presentation, color or text, a run of text should have.
|
||||||
|
+
|
||||||
|
+The goal is to stay very close to the grammar definitions in [Unicode Technical
|
||||||
|
+Standard #51](http://www.unicode.org/reports/tr51/).
|
||||||
|
+
|
||||||
|
+API
|
||||||
|
+===
|
||||||
|
+
|
||||||
|
+By including the `emoji_presentation_scanner.c` file, you will be able to call
|
||||||
|
+the following API
|
||||||
|
+
|
||||||
|
+```
|
||||||
|
+scan_emoji_presentation (emoji_text_iter_t p,
|
||||||
|
+ const emoji_text_iter_t pe,
|
||||||
|
+ bool* is_emoji,
|
||||||
|
+ bool* has_vs)
|
||||||
|
+```
|
||||||
|
+
|
||||||
|
+This API call will scan `emoji_text_iter_t p` for the next grammar-token and
|
||||||
|
+return an iterator that points to the end of the next token. An end iterator
|
||||||
|
+needs be specified as `pe` so that the scanner can compare against this and
|
||||||
|
+knows where to stop. In the reference parameter `is_emoji` it returns whether
|
||||||
|
+this token has emoji-presentation text-presentation, `has_vs` is set to true
|
||||||
|
+if the token contains a variation selector.
|
||||||
|
+
|
||||||
|
+A grammar token is either a combination of an emoji plus variation selector 15
|
||||||
|
+for text presentation, an emoji presentation sequence (emoji + VS16), an emoji
|
||||||
|
+presentation emoji or emoji sequence, or a single text presentation character.
|
||||||
|
+
|
||||||
|
+`emoji_text_iter_t` is an iterator type over a buffer of the character classes
|
||||||
|
+that are defined at the beginning of the the Ragel file, e.g. `EMOJI`,
|
||||||
|
+`EMOJI_TEXT_PRESENTATION`, `REGIONAL_INDICATOR`, `KEYCAP_BASE`, etc.
|
||||||
|
+
|
||||||
|
+By typedef'ing `emoji_text_iter_t` to your own iterator type, you can implement
|
||||||
|
+an adapter class that iterates over an input text buffer in any encoding, and on
|
||||||
|
+dereferencing returns the correct Ragel class by implementing something similar
|
||||||
|
+to the following Unicode character class to Ragel class mapping, example taken
|
||||||
|
+from Chromium:
|
||||||
|
+
|
||||||
|
+```
|
||||||
|
+char EmojiSegmentationCategory(UChar32 codepoint) {
|
||||||
|
+ // Specific ones first.
|
||||||
|
+ if (codepoint == kCombiningEnclosingKeycapCharacter)
|
||||||
|
+ return COMBINING_ENCLOSING_KEYCAP;
|
||||||
|
+ if (codepoint == kCombiningEnclosingCircleBackslashCharacter)
|
||||||
|
+ return COMBINING_ENCLOSING_CIRCLE_BACKSLASH;
|
||||||
|
+ if (codepoint == kZeroWidthJoinerCharacter)
|
||||||
|
+ return ZWJ;
|
||||||
|
+ if (codepoint == kVariationSelector15Character)
|
||||||
|
+ return VS15;
|
||||||
|
+ if (codepoint == kVariationSelector16Character)
|
||||||
|
+ return VS16;
|
||||||
|
+ if (codepoint == 0x1F3F4)
|
||||||
|
+ return TAG_BASE;
|
||||||
|
+ if ((codepoint >= 0xE0030 && codepoint <= 0xE0039) ||
|
||||||
|
+ (codepoint >= 0xE0061 && codepoint <= 0xE007A))
|
||||||
|
+ return TAG_SEQUENCE;
|
||||||
|
+ if (codepoint == 0xE007F)
|
||||||
|
+ return TAG_TERM;
|
||||||
|
+ if (Character::IsEmojiModifierBase(codepoint))
|
||||||
|
+ return EMOJI_MODIFIER_BASE;
|
||||||
|
+ if (Character::IsModifier(codepoint))
|
||||||
|
+ return EMOJI_MODIFIER;
|
||||||
|
+ if (Character::IsRegionalIndicator(codepoint))
|
||||||
|
+ return REGIONAL_INDICATOR;
|
||||||
|
+ if (Character::IsEmojiKeycapBase(codepoint))
|
||||||
|
+ return KEYCAP_BASE;
|
||||||
|
+
|
||||||
|
+ if (Character::IsEmojiEmojiDefault(codepoint))
|
||||||
|
+ return EMOJI_EMOJI_PRESENTATION;
|
||||||
|
+ if (Character::IsEmojiTextDefault(codepoint))
|
||||||
|
+ return EMOJI_TEXT_PRESENTATION;
|
||||||
|
+ if (Character::IsEmoji(codepoint))
|
||||||
|
+ return EMOJI;
|
||||||
|
+
|
||||||
|
+ // Ragel state machine will interpret unknown category as "any".
|
||||||
|
+ return kMaxEmojiScannerCategory;
|
||||||
|
+}
|
||||||
|
+```
|
||||||
|
+
|
||||||
|
+Update/Build requisites
|
||||||
|
+===
|
||||||
|
+
|
||||||
|
+You need to have ragel installed if you want to modify the grammar and generate a new C file as output.
|
||||||
|
+
|
||||||
|
+`apt-get install ragel`
|
||||||
|
+
|
||||||
|
+then run
|
||||||
|
+
|
||||||
|
+`make`
|
||||||
|
+
|
||||||
|
+to update the `emoji_presentation_scanner.c` and `emoji_presentation_scanner_vs.c` output C source file.
|
||||||
|
+
|
||||||
|
+Contributing
|
||||||
|
+===
|
||||||
|
+
|
||||||
|
+See the CONTRIBUTING.md file for how to contribute.
|
||||||
|
diff --git a/src/3rdparty/emoji-segmenter/REUSE.toml b/src/3rdparty/emoji-segmenter/REUSE.toml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..53d2dc47c7
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/3rdparty/emoji-segmenter/REUSE.toml
|
||||||
|
@@ -0,0 +1,7 @@
|
||||||
|
+version = 1
|
||||||
|
+
|
||||||
|
+[[annotations]]
|
||||||
|
+path = ["**"]
|
||||||
|
+precedence = "closest"
|
||||||
|
+SPDX-FileCopyrightText = "Copyright 2019 Google LLC"
|
||||||
|
+SPDX-License-Identifier = "Apache-2.0"
|
||||||
|
diff --git a/src/3rdparty/emoji-segmenter/emoji_presentation_scanner.c b/src/3rdparty/emoji-segmenter/emoji_presentation_scanner.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..00b7700a9a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/3rdparty/emoji-segmenter/emoji_presentation_scanner.c
|
||||||
|
@@ -0,0 +1,251 @@
|
||||||
|
+
|
||||||
|
+#line 1 "emoji_presentation_scanner.rl"
|
||||||
|
+/* Copyright 2019 Google LLC
|
||||||
|
+ *
|
||||||
|
+ * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+ * you may not use this file except in compliance with the License.
|
||||||
|
+ * You may obtain a copy of the License at
|
||||||
|
+ *
|
||||||
|
+ * https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+ *
|
||||||
|
+ * Unless required by applicable law or agreed to in writing, software
|
||||||
|
+ * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+ * See the License for the specific language governing permissions and
|
||||||
|
+ * limitations under the License.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include <stdbool.h>
|
||||||
|
+
|
||||||
|
+#ifndef EMOJI_LINKAGE
|
||||||
|
+#define EMOJI_LINKAGE static
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#line 23 "emoji_presentation_scanner.c"
|
||||||
|
+static const unsigned char _emoji_presentation_trans_keys[] = {
|
||||||
|
+ 0u, 13u, 14u, 15u, 0u, 13u, 9u, 12u, 10u, 12u, 10u, 10u, 4u, 12u, 4u, 12u,
|
||||||
|
+ 6u, 6u, 9u, 12u, 8u, 8u, 8u, 10u, 9u, 14u, 0
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const char _emoji_presentation_key_spans[] = {
|
||||||
|
+ 14, 2, 14, 4, 3, 1, 9, 9,
|
||||||
|
+ 1, 4, 1, 3, 6
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const char _emoji_presentation_index_offsets[] = {
|
||||||
|
+ 0, 15, 18, 33, 38, 42, 44, 54,
|
||||||
|
+ 64, 66, 71, 73, 77
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const char _emoji_presentation_indicies[] = {
|
||||||
|
+ 1, 1, 1, 2, 0, 0, 0, 1,
|
||||||
|
+ 0, 0, 0, 0, 0, 1, 0, 4,
|
||||||
|
+ 5, 3, 6, 6, 7, 8, 9, 9,
|
||||||
|
+ 10, 11, 9, 9, 9, 9, 9, 12,
|
||||||
|
+ 9, 5, 13, 14, 15, 0, 13, 16,
|
||||||
|
+ 17, 16, 13, 0, 17, 16, 16, 16,
|
||||||
|
+ 16, 16, 13, 16, 17, 16, 17, 16,
|
||||||
|
+ 16, 16, 16, 5, 13, 14, 15, 16,
|
||||||
|
+ 5, 18, 5, 13, 19, 20, 18, 14,
|
||||||
|
+ 21, 23, 22, 13, 22, 5, 13, 14,
|
||||||
|
+ 15, 16, 4, 16, 0
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const char _emoji_presentation_trans_targs[] = {
|
||||||
|
+ 2, 4, 6, 2, 1, 2, 3, 3,
|
||||||
|
+ 7, 2, 8, 9, 12, 0, 2, 5,
|
||||||
|
+ 2, 5, 2, 10, 11, 2, 2, 2
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const char _emoji_presentation_trans_actions[] = {
|
||||||
|
+ 1, 2, 2, 3, 0, 4, 7, 2,
|
||||||
|
+ 2, 8, 0, 7, 2, 0, 9, 10,
|
||||||
|
+ 11, 2, 12, 0, 10, 13, 14, 15
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const char _emoji_presentation_to_state_actions[] = {
|
||||||
|
+ 0, 0, 5, 0, 0, 0, 0, 0,
|
||||||
|
+ 0, 0, 0, 0, 0
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const char _emoji_presentation_from_state_actions[] = {
|
||||||
|
+ 0, 0, 6, 0, 0, 0, 0, 0,
|
||||||
|
+ 0, 0, 0, 0, 0
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const char _emoji_presentation_eof_trans[] = {
|
||||||
|
+ 1, 4, 0, 1, 17, 1, 17, 17,
|
||||||
|
+ 19, 19, 22, 23, 17
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const int emoji_presentation_start = 2;
|
||||||
|
+
|
||||||
|
+static const int emoji_presentation_en_text_and_emoji_run = 2;
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#line 26 "emoji_presentation_scanner.rl"
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#line 100 "emoji_presentation_scanner.rl"
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+EMOJI_LINKAGE emoji_text_iter_t
|
||||||
|
+scan_emoji_presentation (emoji_text_iter_t p,
|
||||||
|
+ const emoji_text_iter_t pe,
|
||||||
|
+ bool* is_emoji,
|
||||||
|
+ bool* has_vs)
|
||||||
|
+{
|
||||||
|
+ emoji_text_iter_t ts;
|
||||||
|
+ emoji_text_iter_t te;
|
||||||
|
+ const emoji_text_iter_t eof = pe;
|
||||||
|
+
|
||||||
|
+ (void)ts;
|
||||||
|
+
|
||||||
|
+ unsigned act;
|
||||||
|
+ int cs;
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#line 100 "emoji_presentation_scanner.c"
|
||||||
|
+ {
|
||||||
|
+ cs = emoji_presentation_start;
|
||||||
|
+ ts = 0;
|
||||||
|
+ te = 0;
|
||||||
|
+ act = 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+#line 106 "emoji_presentation_scanner.c"
|
||||||
|
+ {
|
||||||
|
+ int _slen;
|
||||||
|
+ int _trans;
|
||||||
|
+ const unsigned char *_keys;
|
||||||
|
+ const char *_inds;
|
||||||
|
+ if ( p == pe )
|
||||||
|
+ goto _test_eof;
|
||||||
|
+_resume:
|
||||||
|
+ switch ( _emoji_presentation_from_state_actions[cs] ) {
|
||||||
|
+ case 6:
|
||||||
|
+#line 1 "NONE"
|
||||||
|
+ {ts = p;}
|
||||||
|
+ break;
|
||||||
|
+#line 118 "emoji_presentation_scanner.c"
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ _keys = _emoji_presentation_trans_keys + (cs<<1);
|
||||||
|
+ _inds = _emoji_presentation_indicies + _emoji_presentation_index_offsets[cs];
|
||||||
|
+
|
||||||
|
+ _slen = _emoji_presentation_key_spans[cs];
|
||||||
|
+ _trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
|
||||||
|
+ (*p) <= _keys[1] ?
|
||||||
|
+ (*p) - _keys[0] : _slen ];
|
||||||
|
+
|
||||||
|
+_eof_trans:
|
||||||
|
+ cs = _emoji_presentation_trans_targs[_trans];
|
||||||
|
+
|
||||||
|
+ if ( _emoji_presentation_trans_actions[_trans] == 0 )
|
||||||
|
+ goto _again;
|
||||||
|
+
|
||||||
|
+ switch ( _emoji_presentation_trans_actions[_trans] ) {
|
||||||
|
+ case 9:
|
||||||
|
+#line 94 "emoji_presentation_scanner.rl"
|
||||||
|
+ {te = p+1;{ *is_emoji = false; *has_vs = true; return te; }}
|
||||||
|
+ break;
|
||||||
|
+ case 15:
|
||||||
|
+#line 95 "emoji_presentation_scanner.rl"
|
||||||
|
+ {te = p+1;{ *is_emoji = true; *has_vs = true; return te; }}
|
||||||
|
+ break;
|
||||||
|
+ case 4:
|
||||||
|
+#line 96 "emoji_presentation_scanner.rl"
|
||||||
|
+ {te = p+1;{ *is_emoji = true; *has_vs = false; return te; }}
|
||||||
|
+ break;
|
||||||
|
+ case 8:
|
||||||
|
+#line 97 "emoji_presentation_scanner.rl"
|
||||||
|
+ {te = p+1;{ *is_emoji = false; *has_vs = false; return te; }}
|
||||||
|
+ break;
|
||||||
|
+ case 13:
|
||||||
|
+#line 94 "emoji_presentation_scanner.rl"
|
||||||
|
+ {te = p;p--;{ *is_emoji = false; *has_vs = true; return te; }}
|
||||||
|
+ break;
|
||||||
|
+ case 14:
|
||||||
|
+#line 95 "emoji_presentation_scanner.rl"
|
||||||
|
+ {te = p;p--;{ *is_emoji = true; *has_vs = true; return te; }}
|
||||||
|
+ break;
|
||||||
|
+ case 11:
|
||||||
|
+#line 96 "emoji_presentation_scanner.rl"
|
||||||
|
+ {te = p;p--;{ *is_emoji = true; *has_vs = false; return te; }}
|
||||||
|
+ break;
|
||||||
|
+ case 12:
|
||||||
|
+#line 97 "emoji_presentation_scanner.rl"
|
||||||
|
+ {te = p;p--;{ *is_emoji = false; *has_vs = false; return te; }}
|
||||||
|
+ break;
|
||||||
|
+ case 3:
|
||||||
|
+#line 96 "emoji_presentation_scanner.rl"
|
||||||
|
+ {{p = ((te))-1;}{ *is_emoji = true; *has_vs = false; return te; }}
|
||||||
|
+ break;
|
||||||
|
+ case 1:
|
||||||
|
+#line 1 "NONE"
|
||||||
|
+ { switch( act ) {
|
||||||
|
+ case 2:
|
||||||
|
+ {{p = ((te))-1;} *is_emoji = true; *has_vs = true; return te; }
|
||||||
|
+ break;
|
||||||
|
+ case 3:
|
||||||
|
+ {{p = ((te))-1;} *is_emoji = true; *has_vs = false; return te; }
|
||||||
|
+ break;
|
||||||
|
+ case 4:
|
||||||
|
+ {{p = ((te))-1;} *is_emoji = false; *has_vs = false; return te; }
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ case 10:
|
||||||
|
+#line 1 "NONE"
|
||||||
|
+ {te = p+1;}
|
||||||
|
+#line 95 "emoji_presentation_scanner.rl"
|
||||||
|
+ {act = 2;}
|
||||||
|
+ break;
|
||||||
|
+ case 2:
|
||||||
|
+#line 1 "NONE"
|
||||||
|
+ {te = p+1;}
|
||||||
|
+#line 96 "emoji_presentation_scanner.rl"
|
||||||
|
+ {act = 3;}
|
||||||
|
+ break;
|
||||||
|
+ case 7:
|
||||||
|
+#line 1 "NONE"
|
||||||
|
+ {te = p+1;}
|
||||||
|
+#line 97 "emoji_presentation_scanner.rl"
|
||||||
|
+ {act = 4;}
|
||||||
|
+ break;
|
||||||
|
+#line 188 "emoji_presentation_scanner.c"
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+_again:
|
||||||
|
+ switch ( _emoji_presentation_to_state_actions[cs] ) {
|
||||||
|
+ case 5:
|
||||||
|
+#line 1 "NONE"
|
||||||
|
+ {ts = 0;}
|
||||||
|
+ break;
|
||||||
|
+#line 195 "emoji_presentation_scanner.c"
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if ( ++p != pe )
|
||||||
|
+ goto _resume;
|
||||||
|
+ _test_eof: {}
|
||||||
|
+ if ( p == eof )
|
||||||
|
+ {
|
||||||
|
+ if ( _emoji_presentation_eof_trans[cs] > 0 ) {
|
||||||
|
+ _trans = _emoji_presentation_eof_trans[cs] - 1;
|
||||||
|
+ goto _eof_trans;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+#line 118 "emoji_presentation_scanner.rl"
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ /* Should not be reached. */
|
||||||
|
+ *is_emoji = false;
|
||||||
|
+ *has_vs = false;
|
||||||
|
+ return p;
|
||||||
|
+}
|
||||||
|
diff --git a/src/3rdparty/emoji-segmenter/patch/0001-Compile-with-warnings-are-errors.patch b/src/3rdparty/emoji-segmenter/patch/0001-Compile-with-warnings-are-errors.patch
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..0cc1868ca7
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/3rdparty/emoji-segmenter/patch/0001-Compile-with-warnings-are-errors.patch
|
||||||
|
@@ -0,0 +1,26 @@
|
||||||
|
+From 4ced1426e27320e00b0dd28693df5d95c648d230 Mon Sep 17 00:00:00 2001
|
||||||
|
+From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||||
|
+Date: Thu, 14 Nov 2024 09:42:11 +0100
|
||||||
|
+Subject: [PATCH] Compile with warnings-are-errors
|
||||||
|
+
|
||||||
|
+Change-Id: Icea8febefc90f3f047143e5b76ff511145c0dcae
|
||||||
|
+---
|
||||||
|
+ src/3rdparty/emoji-segmenter/emoji_presentation_scanner.c | 2 ++
|
||||||
|
+ 1 file changed, 2 insertions(+)
|
||||||
|
+
|
||||||
|
+diff --git a/src/3rdparty/emoji-segmenter/emoji_presentation_scanner.c b/src/3rdparty/emoji-segmenter/emoji_presentation_scanner.c
|
||||||
|
+index 56e2e78033..ce7e01846c 100644
|
||||||
|
+--- a/src/3rdparty/emoji-segmenter/emoji_presentation_scanner.c
|
||||||
|
++++ b/src/3rdparty/emoji-segmenter/emoji_presentation_scanner.c
|
||||||
|
+@@ -101,6 +101,8 @@ scan_emoji_presentation (emoji_text_iter_t p,
|
||||||
|
+ emoji_text_iter_t te;
|
||||||
|
+ const emoji_text_iter_t eof = pe;
|
||||||
|
+
|
||||||
|
++ (void)ts;
|
||||||
|
++
|
||||||
|
+ unsigned act;
|
||||||
|
+ int cs;
|
||||||
|
+
|
||||||
|
+--
|
||||||
|
+2.40.0.windows.1
|
||||||
|
+
|
||||||
|
diff --git a/src/3rdparty/emoji-segmenter/qt_attribution.json b/src/3rdparty/emoji-segmenter/qt_attribution.json
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..64083381d4
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/3rdparty/emoji-segmenter/qt_attribution.json
|
||||||
|
@@ -0,0 +1,16 @@
|
||||||
|
+{
|
||||||
|
+ "Id": "emoji-segmenter",
|
||||||
|
+ "Name": "Emoji Segmenter",
|
||||||
|
+ "QDocModule": "qtgui",
|
||||||
|
+ "QtUsage": "Used in QtGui for parsing complex emoji sequences. Can be configured using the -emojisegmenter option.",
|
||||||
|
+ "SecurityCritical": true,
|
||||||
|
+
|
||||||
|
+ "Description": "A parser for emoji sequences.",
|
||||||
|
+ "Homepage": "https://github.com/google/emoji-segmenter",
|
||||||
|
+ "Version": "0.4.0",
|
||||||
|
+ "DownloadLocation": "https://github.com/google/emoji-segmenter/releases/tag/0.4.0",
|
||||||
|
+
|
||||||
|
+ "License": "Apache License 2.0",
|
||||||
|
+ "LicenseId": "Apache-2.0",
|
||||||
|
+ "Copyright": "Copyright 2019 Google LLC"
|
||||||
|
+}
|
||||||
|
diff --git a/src/gui/configure.cmake b/src/gui/configure.cmake
|
||||||
|
index b7c1e8e00c..7889445976 100644
|
||||||
|
--- a/src/gui/configure.cmake
|
||||||
|
+++ b/src/gui/configure.cmake
|
||||||
|
@@ -699,6 +699,12 @@ qt_feature("direct2d1_1" PRIVATE
|
||||||
|
LABEL "Direct 2D 1.1"
|
||||||
|
CONDITION QT_FEATURE_direct2d AND TEST_d2d1_1
|
||||||
|
)
|
||||||
|
+qt_feature("emojisegmenter" PUBLIC PRIVATE
|
||||||
|
+ SECTION "Fonts"
|
||||||
|
+ LABEL "Emoji Segmenter"
|
||||||
|
+ PURPOSE "Supports parsing complex emoji sequences for better font resolution."
|
||||||
|
+)
|
||||||
|
+qt_feature_definition("emojisegmenter" "QT_NO_EMOJISEGMENTER" NEGATE VALUE "1")
|
||||||
|
qt_feature("evdev" PRIVATE
|
||||||
|
LABEL "evdev"
|
||||||
|
CONDITION QT_FEATURE_thread AND TEST_evdev
|
||||||
|
@@ -1299,6 +1305,7 @@ qt_feature("wayland" PUBLIC
|
||||||
|
|
||||||
|
qt_configure_add_summary_section(NAME "Qt Gui")
|
||||||
|
qt_configure_add_summary_entry(ARGS "accessibility")
|
||||||
|
+qt_configure_add_summary_entry(ARGS "emojisegmenter")
|
||||||
|
qt_configure_add_summary_entry(ARGS "freetype")
|
||||||
|
qt_configure_add_summary_entry(ARGS "system-freetype")
|
||||||
|
qt_configure_add_summary_entry(ARGS "harfbuzz")
|
||||||
|
diff --git a/src/gui/qt_cmdline.cmake b/src/gui/qt_cmdline.cmake
|
||||||
|
index 446618ebc4..5465b2c63e 100644
|
||||||
|
--- a/src/gui/qt_cmdline.cmake
|
||||||
|
+++ b/src/gui/qt_cmdline.cmake
|
||||||
|
@@ -10,6 +10,7 @@ qt_commandline_option(eglfs TYPE boolean)
|
||||||
|
qt_commandline_option(evdev TYPE boolean)
|
||||||
|
qt_commandline_option(fontconfig TYPE boolean)
|
||||||
|
qt_commandline_option(freetype TYPE enum VALUES no qt system)
|
||||||
|
+qt_commandline_option(emojisegmenter TYPE boolean)
|
||||||
|
qt_commandline_option(gbm TYPE boolean)
|
||||||
|
qt_commandline_option(gif TYPE boolean)
|
||||||
|
qt_commandline_option(harfbuzz TYPE enum VALUES no qt system)
|
@ -0,0 +1,45 @@
|
|||||||
|
From 0acbd22508cb793461c01979d89c529f86a24bc3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||||
|
Date: Wed, 15 Jan 2025 15:12:41 +0100
|
||||||
|
Subject: [PATCH] Request actual font family request in final color font fail safe
|
||||||
|
|
||||||
|
When we're trying to resolve a font for color emojis, we will
|
||||||
|
prefer any color font over the selected font (since a normal
|
||||||
|
font may have monochrome glyphs for emoji characters and that's
|
||||||
|
not what we are after).
|
||||||
|
|
||||||
|
If there are no color fonts on the system at all, we need to do
|
||||||
|
a final match where we ignore whether the font is in color or
|
||||||
|
not and just return it anyway.
|
||||||
|
|
||||||
|
In this final pass we would find the first best match among the
|
||||||
|
fallbacks (typically the first one), but never actually check
|
||||||
|
the font that was requested in the first place. This was a
|
||||||
|
mistake. Unless it does not exist, we should just return the
|
||||||
|
requested font family.
|
||||||
|
|
||||||
|
Pick-to: 6.9
|
||||||
|
Task-number: QTBUG-132377
|
||||||
|
Change-Id: Ie53a6bd665ebdaaca92bf0c33fabf5195e1aa5fe
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
|
||||||
|
index 0c2a4b66..03f29009 100644
|
||||||
|
--- a/src/gui/text/qfontdatabase.cpp
|
||||||
|
+++ b/src/gui/text/qfontdatabase.cpp
|
||||||
|
@@ -2787,8 +2787,14 @@ QFontEngine *QFontDatabasePrivate::findFont(const QFontDef &req,
|
||||||
|
// If we are looking for a color font and there are no color fonts on the system,
|
||||||
|
// we will end up here, for one final pass. This is a rare occurrence so we accept
|
||||||
|
// and extra pass on the fallbacks for this.
|
||||||
|
- if (!engine && script == QFontDatabasePrivate::Script_Emoji)
|
||||||
|
+ if (!engine && script == QFontDatabasePrivate::Script_Emoji) {
|
||||||
|
engine = findMatchingFallback(QChar::Script_Common, script);
|
||||||
|
+
|
||||||
|
+ // Since we no longer require color fonts, we need to retry to check if the
|
||||||
|
+ // actual requested font is available as a non-color font.
|
||||||
|
+ if (!requestFamily.isEmpty())
|
||||||
|
+ fallbacks.prepend(requestFamily);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!engine)
|
@ -0,0 +1,55 @@
|
|||||||
|
From cb2633468413d8c2a9e28d4c4a10b25e90dd3116 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||||
|
Date: Mon, 25 Nov 2024 16:05:09 +0100
|
||||||
|
Subject: Skip ad hoc handling of variation selector in font merging
|
||||||
|
|
||||||
|
Since we now support emoji parsing, there is no longer any need
|
||||||
|
for this ad hoc processing of VS-16. The exception is if Qt is
|
||||||
|
built without the emoji segmenter, in which case we should keep
|
||||||
|
it for consistency with previous versions.
|
||||||
|
|
||||||
|
Task-number: QTBUG-111801
|
||||||
|
Change-Id: I3e243b9610fe55dda26eba63ac849e6afa22a185
|
||||||
|
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
||||||
|
|
||||||
|
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp
|
||||||
|
index 02595b40c5..6be6a5aca2 100644
|
||||||
|
--- a/src/gui/text/qfontengine.cpp
|
||||||
|
+++ b/src/gui/text/qfontengine.cpp
|
||||||
|
@@ -1997,8 +1997,11 @@ int QFontEngineMulti::stringToCMap(const QChar *str, int len,
|
||||||
|
int glyph_pos = 0;
|
||||||
|
QStringIterator it(str, str + len);
|
||||||
|
|
||||||
|
- int lastFallback = -1;
|
||||||
|
+#if defined(QT_NO_EMOJISEGMENTER)
|
||||||
|
char32_t previousUcs4 = 0;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ int lastFallback = -1;
|
||||||
|
while (it.hasNext()) {
|
||||||
|
const char32_t ucs4 = it.peekNext();
|
||||||
|
|
||||||
|
@@ -2057,6 +2060,7 @@ int QFontEngineMulti::stringToCMap(const QChar *str, int len,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+#if defined(QT_NO_EMOJISEGMENTER)
|
||||||
|
// For variant-selectors, they are modifiers to the previous character. If we
|
||||||
|
// end up with different font selections for the selector and the character it
|
||||||
|
// modifies, we try applying the selector font to the preceding character as well
|
||||||
|
@@ -2095,11 +2099,15 @@ int QFontEngineMulti::stringToCMap(const QChar *str, int len,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
it.advance();
|
||||||
|
++glyph_pos;
|
||||||
|
+
|
||||||
|
+#if defined(QT_NO_EMOJISEGMENTER)
|
||||||
|
previousUcs4 = ucs4;
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
*nglyphs = glyph_pos;
|
File diff suppressed because it is too large
Load Diff
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Charts component
|
Summary: Qt6 - Charts component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -102,6 +102,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - CoAP component
|
Summary: Qt6 - CoAP component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -85,6 +85,9 @@ Requires: %{name}-devel%{?_isa} = %{version}-%{release}
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Connectivity components
|
Summary: Qt6 - Connectivity components
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
# See LICENSE.GPL3, respectively, for exception details
|
# See LICENSE.GPL3, respectively, for exception details
|
||||||
@ -123,6 +123,9 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -15,8 +15,8 @@
|
|||||||
|
|
||||||
Summary: Qt6 - QtDeclarative component
|
Summary: Qt6 - QtDeclarative component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 2%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
Url: http://www.qt.io
|
Url: http://www.qt.io
|
||||||
@ -413,6 +413,9 @@ make check -k -C tests ||:
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Sat Dec 21 2024 Raven <raven@sysadmins.ws> - 6.8.1-2
|
* Sat Dec 21 2024 Raven <raven@sysadmins.ws> - 6.8.1-2
|
||||||
- drop QmlAssetDownloader
|
- drop QmlAssetDownloader
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
%global qt_module qtgraphs
|
%global qt_module qtgraphs
|
||||||
|
|
||||||
Name: qt6-qtgraphs
|
Name: qt6-qtgraphs
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
%global examples 1
|
%global examples 1
|
||||||
@ -113,6 +113,9 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
%global examples 1
|
%global examples 1
|
||||||
|
|
||||||
Name: qt6-qthttpserver
|
Name: qt6-qthttpserver
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Library to facilitate the creation of an http server with Qt
|
Summary: Library to facilitate the creation of an http server with Qt
|
||||||
|
|
||||||
@ -93,6 +93,9 @@ to the usage of %{name}.
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - QtImageFormats component
|
Summary: Qt6 - QtImageFormats component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -87,6 +87,9 @@ rm -rv src/3rdparty
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - LanguageServer component
|
Summary: Qt6 - LanguageServer component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -78,10 +78,13 @@ Requires: qt6-qtbase-devel%{?_isa}
|
|||||||
%{_qt6_libdir}/qt6/metatypes/qt6*_metatypes.json
|
%{_qt6_libdir}/qt6/metatypes/qt6*_metatypes.json
|
||||||
%{_qt6_libdir}/qt6/modules/JsonRpcPrivate.json
|
%{_qt6_libdir}/qt6/modules/JsonRpcPrivate.json
|
||||||
%{_qt6_libdir}/qt6/modules/LanguageServerPrivate.json
|
%{_qt6_libdir}/qt6/modules/LanguageServerPrivate.json
|
||||||
%{_qt6_libdir}/qt6/sbom/qtlanguageserver-6.8.1.spdx
|
%{_qt6_libdir}/qt6/sbom/qtlanguageserver-%{version}.spdx
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Location Libraries
|
Summary: Qt6 - Location Libraries
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
# Rest of the licenses are for Qt code in src/location and src/plugins
|
# Rest of the licenses are for Qt code in src/location and src/plugins
|
||||||
@ -126,6 +126,9 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Lottie Animation
|
Summary: Qt6 - Lottie Animation
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -80,6 +80,9 @@ Requires: qt6-qtbase-devel%{?_isa}
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
%global qt_module qtmqtt
|
%global qt_module qtmqtt
|
||||||
|
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Qt6 - Mqtt module
|
Summary: Qt6 - Mqtt module
|
||||||
|
|
||||||
@ -70,6 +70,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||||||
%{_qt6_examplesdir}
|
%{_qt6_examplesdir}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
%global qt_module qtmultimedia
|
%global qt_module qtmultimedia
|
||||||
|
|
||||||
%global gst 0.10
|
|
||||||
%if 0%{?fedora} || 0%{?rhel} > 7
|
|
||||||
%global gst 1.0
|
%global gst 1.0
|
||||||
%endif
|
|
||||||
|
|
||||||
%bcond_without ffmpeg
|
%bcond_without ffmpeg
|
||||||
|
|
||||||
@ -16,7 +13,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Multimedia support
|
Summary: Qt6 - Multimedia support
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -51,9 +48,7 @@ BuildRequires: qt6-qtdeclarative-devel >= %{version}
|
|||||||
BuildRequires: qt6-qtshadertools-devel >= %{version}
|
BuildRequires: qt6-qtshadertools-devel >= %{version}
|
||||||
BuildRequires: qt6-qtquick3d-devel >= %{version}
|
BuildRequires: qt6-qtquick3d-devel >= %{version}
|
||||||
BuildRequires: pkgconfig(alsa)
|
BuildRequires: pkgconfig(alsa)
|
||||||
%if "%{?gst}" == "0.10"
|
|
||||||
BuildRequires: pkgconfig(gstreamer-interfaces-0.10)
|
|
||||||
%endif
|
|
||||||
BuildRequires: pkgconfig(gstreamer-%{gst})
|
BuildRequires: pkgconfig(gstreamer-%{gst})
|
||||||
BuildRequires: pkgconfig(gstreamer-app-%{gst})
|
BuildRequires: pkgconfig(gstreamer-app-%{gst})
|
||||||
BuildRequires: pkgconfig(gstreamer-audio-%{gst})
|
BuildRequires: pkgconfig(gstreamer-audio-%{gst})
|
||||||
@ -73,6 +68,7 @@ BuildRequires: libavformat-free-devel
|
|||||||
BuildRequires: libswscale-free-devel
|
BuildRequires: libswscale-free-devel
|
||||||
BuildRequires: libswresample-free-devel
|
BuildRequires: libswresample-free-devel
|
||||||
%endif
|
%endif
|
||||||
|
BuildRequires: pkgconfig(libpipewire-0.3)
|
||||||
BuildRequires: pkgconfig(libva) pkgconfig(libva-drm)
|
BuildRequires: pkgconfig(libva) pkgconfig(libva-drm)
|
||||||
%endif
|
%endif
|
||||||
BuildRequires: pkgconfig(xrandr)
|
BuildRequires: pkgconfig(xrandr)
|
||||||
@ -81,6 +77,7 @@ BuildRequires: pkgconfig(xkbcommon)
|
|||||||
BuildRequires: pkgconfig(openssl)
|
BuildRequires: pkgconfig(openssl)
|
||||||
# workaround missing dep
|
# workaround missing dep
|
||||||
# /usr/include/gstreamer-1.0/gst/gl/wayland/gstgldisplay_wayland.h:26:10: fatal error: wayland-client.h: No such file or directory
|
# /usr/include/gstreamer-1.0/gst/gl/wayland/gstgldisplay_wayland.h:26:10: fatal error: wayland-client.h: No such file or directory
|
||||||
|
BuildRequires: wayland-devel
|
||||||
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -119,7 +116,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%cmake_qt6 \
|
%cmake_qt6 \
|
||||||
|
-DQT_FEATURE_alsa=ON \
|
||||||
-DQT_BUILD_EXAMPLES:BOOL=%{?examples:ON}%{!?examples:OFF} \
|
-DQT_BUILD_EXAMPLES:BOOL=%{?examples:ON}%{!?examples:OFF} \
|
||||||
|
-DQT_INSTALL_EXAMPLES_SOURCES=%{?examples:ON}%{!?examples:OFF} \
|
||||||
-DINPUT_gstreamer:BOOL=TRUE \
|
-DINPUT_gstreamer:BOOL=TRUE \
|
||||||
-DINPUT_ffmpeg:BOOL=TRUE
|
-DINPUT_ffmpeg:BOOL=TRUE
|
||||||
|
|
||||||
@ -217,6 +216,12 @@ popd
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
|
* Tue Jan 21 2025 Raven <raven@sysadmins.ws> - 6.8.1-2
|
||||||
|
- rebuild (ffmpeg)
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - NetworkAuth component
|
Summary: Qt6 - NetworkAuth component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -110,6 +110,9 @@ popd
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - OPC UA component
|
Summary: Qt6 - OPC UA component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -102,6 +102,9 @@ Requires: %{name}-devel%{?_isa} = %{version}-%{release}
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Positioning component
|
Summary: Qt6 - Positioning component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -149,6 +149,9 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Quick3D Libraries and utilities
|
Summary: Qt6 - Quick3D Libraries and utilities
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -271,6 +271,9 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - QuickTimeline plugin
|
Summary: Qt6 - QuickTimeline plugin
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -96,6 +96,9 @@ Requires: qt6-qtdeclarative-devel%{?_isa}
|
|||||||
%{_qt6_libdir}/pkgconfig/*.pc
|
%{_qt6_libdir}/pkgconfig/*.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Qt Remote Objects
|
Summary: Qt6 - Qt Remote Objects
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -111,6 +111,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - ScXml component
|
Summary: Qt6 - ScXml component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -120,6 +120,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Sensors component
|
Summary: Qt6 - Sensors component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
|
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
|
||||||
@ -130,6 +130,9 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - SerialBus component
|
Summary: Qt6 - SerialBus component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -107,6 +107,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - SerialPort component
|
Summary: Qt6 - SerialPort component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
|
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
|
||||||
@ -110,6 +110,9 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Qt Shader Tools module builds on the SPIR-V Open Source Ecosystem
|
Summary: Qt6 - Qt Shader Tools module builds on the SPIR-V Open Source Ecosystem
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -109,10 +109,13 @@ popd
|
|||||||
%dir %{_qt6_libdir}/cmake/Qt6ShaderToolsTools/
|
%dir %{_qt6_libdir}/cmake/Qt6ShaderToolsTools/
|
||||||
%{_qt6_libdir}/cmake/Qt6ShaderToolsTools/*.cmake
|
%{_qt6_libdir}/cmake/Qt6ShaderToolsTools/*.cmake
|
||||||
%{_qt6_libdir}/qt6/metatypes/qt6*_metatypes.json
|
%{_qt6_libdir}/qt6/metatypes/qt6*_metatypes.json
|
||||||
%{_qt6_libdir}/qt6/sbom/qtshadertools-6.8.1.spdx
|
%{_qt6_libdir}/qt6/sbom/qtshadertools-*.spdx
|
||||||
%{_qt6_libdir}/pkgconfig/Qt6ShaderTools.pc
|
%{_qt6_libdir}/pkgconfig/Qt6ShaderTools.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Speech component
|
Summary: Qt6 - Speech component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
# Code can be either LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only
|
# Code can be either LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only
|
||||||
@ -148,6 +148,9 @@ popd
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Support for rendering and displaying SVG
|
Summary: Qt6 - Support for rendering and displaying SVG
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -120,6 +120,9 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - QtTool components
|
Summary: Qt6 - QtTool components
|
||||||
Name: qt6-qttools
|
Name: qt6-qttools
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -366,6 +366,9 @@ popd
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - QtTranslations module
|
Summary: Qt6 - QtTranslations module
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -89,6 +89,7 @@ Provides: %{_qt6}-zh_TW = %{version}-%{release}
|
|||||||
%files
|
%files
|
||||||
%license LICENSES/*
|
%license LICENSES/*
|
||||||
%{_qt6_datadir}/translations/catalogs.json
|
%{_qt6_datadir}/translations/catalogs.json
|
||||||
|
%{_qt6_libdir}/qt6/sbom/%{qt_module}-*.spdx
|
||||||
%lang(ar) %{_qt6_translationdir}/*_ar.qm
|
%lang(ar) %{_qt6_translationdir}/*_ar.qm
|
||||||
%lang(bg) %{_qt6_translationdir}/*_bg.qm
|
%lang(bg) %{_qt6_translationdir}/*_bg.qm
|
||||||
%lang(ca) %{_qt6_translationdir}/*_ca.qm
|
%lang(ca) %{_qt6_translationdir}/*_ca.qm
|
||||||
@ -127,6 +128,9 @@ Provides: %{_qt6}-zh_TW = %{version}-%{release}
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - VirtualKeyboard component
|
Summary: Qt6 - VirtualKeyboard component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -129,6 +129,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Wayland platform support and QtCompositor module
|
Summary: Qt6 - Wayland platform support and QtCompositor module
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
Url: http://www.qt.io
|
Url: http://www.qt.io
|
||||||
@ -23,12 +23,13 @@ Source0: https://download.qt.io/development_releases/qt/%{majmin}/%{qt_version}/
|
|||||||
Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submodules/%{qt_module}-everywhere-src-%{version}.tar.xz
|
Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submodules/%{qt_module}-everywhere-src-%{version}.tar.xz
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# Upstream patches
|
|
||||||
|
|
||||||
# Upstreamable patches
|
# Upstreamable patches
|
||||||
|
|
||||||
Patch0: qtwayland-use-adwaita-decorations-by-default.patch
|
Patch0: qtwayland-use-adwaita-decorations-by-default.patch
|
||||||
|
|
||||||
|
# Upstream patches
|
||||||
|
Patch1: qtwayland-update-wayland-xml-to-version-1.23.0.patch
|
||||||
|
Patch3: qtwayland-adwaita-improve-border-painting.patch
|
||||||
|
|
||||||
|
|
||||||
# filter qml provides
|
# filter qml provides
|
||||||
%global __provides_exclude_from ^%{_qt6_archdatadir}/qml/.*\\.so$
|
%global __provides_exclude_from ^%{_qt6_archdatadir}/qml/.*\\.so$
|
||||||
@ -200,6 +201,12 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
|
* Tue Jan 21 2025 Raven <raven@sysadmins.ws> - 6.8.1-2
|
||||||
|
- Import patches from Fedora
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -0,0 +1,74 @@
|
|||||||
|
From 1304ba3997951a93939b04b9ad1df1e0a0c146eb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Grulich <jgrulich@redhat.com>
|
||||||
|
Date: Tue, 19 Nov 2024 19:15:08 +0100
|
||||||
|
Subject: [PATCH] Adwaita decorations: improve border painting
|
||||||
|
|
||||||
|
This is a backport of two changes pushed to QAdwaitaDecorations upstream
|
||||||
|
that further improve painting of border around the application window.
|
||||||
|
Using the 0.5px adjustment makes the border to look better as the line
|
||||||
|
better aligns. Also the separator between window and title doesn't need
|
||||||
|
to be painted separately. Co-authored with Lorenzo Bertini.
|
||||||
|
|
||||||
|
Pick-to: 6.8
|
||||||
|
Change-Id: Ib841073884dee58e599a173c259547416d2ed8ce
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/plugins/decorations/adwaita/qwaylandadwaitadecoration.cpp b/src/plugins/decorations/adwaita/qwaylandadwaitadecoration.cpp
|
||||||
|
index 2d3575b..c32ab4a 100644
|
||||||
|
--- a/src/plugins/decorations/adwaita/qwaylandadwaitadecoration.cpp
|
||||||
|
+++ b/src/plugins/decorations/adwaita/qwaylandadwaitadecoration.cpp
|
||||||
|
@@ -46,7 +46,6 @@
|
||||||
|
static constexpr int ceShadowsWidth = 10;
|
||||||
|
static constexpr int ceTitlebarHeight = 38;
|
||||||
|
static constexpr int ceWindowBorderWidth = 1;
|
||||||
|
-static constexpr qreal ceTitlebarSeperatorWidth = 0.5;
|
||||||
|
|
||||||
|
static QMap<QWaylandAdwaitaDecoration::ButtonIcon, QString> buttonMap = {
|
||||||
|
{ QWaylandAdwaitaDecoration::CloseIcon, "window-close-symbolic"_L1 },
|
||||||
|
@@ -129,36 +128,29 @@
|
||||||
|
/*
|
||||||
|
* Titlebar and window border
|
||||||
|
*/
|
||||||
|
- const int titleBarWidth = surfaceRect.width() - margins().left() - margins().right();
|
||||||
|
QPainterPath path;
|
||||||
|
+ const QPointF topLeft = { margins(ShadowsOnly).left() + 0.5,
|
||||||
|
+ margins(ShadowsOnly).top() - 0.5 };
|
||||||
|
+ const int titleBarWidth = surfaceRect.width() - margins(ShadowsOnly).left()
|
||||||
|
+ - margins(ShadowsOnly).right() - 0.5;
|
||||||
|
+ const int borderRectHeight =
|
||||||
|
+ surfaceRect.height() - margins().top() - margins().bottom() + 0.5;
|
||||||
|
|
||||||
|
// Maximized or tiled won't have rounded corners
|
||||||
|
if (waylandWindow()->windowStates() & Qt::WindowMaximized
|
||||||
|
|| waylandWindow()->toplevelWindowTilingStates() != QWaylandWindow::WindowNoState)
|
||||||
|
- path.addRect(margins().left(), margins().bottom(), titleBarWidth, margins().top());
|
||||||
|
+ path.addRect(QRectF(topLeft, QSizeF(titleBarWidth, margins().top())));
|
||||||
|
else
|
||||||
|
- path.addRoundedRect(margins().left(), margins().bottom(), titleBarWidth,
|
||||||
|
- margins().top() + ceCornerRadius, ceCornerRadius, ceCornerRadius);
|
||||||
|
+ path.addRoundedRect(QRectF(topLeft, QSizeF(titleBarWidth, margins().top() + ceCornerRadius)),
|
||||||
|
+ ceCornerRadius, ceCornerRadius);
|
||||||
|
|
||||||
|
p.save();
|
||||||
|
p.setPen(color(Border));
|
||||||
|
p.fillPath(path.simplified(), color(Background));
|
||||||
|
p.drawPath(path);
|
||||||
|
- p.drawRect(margins().left(), margins().top(), titleBarWidth, surfaceRect.height() - margins().top() - margins().bottom());
|
||||||
|
+ p.drawRect(QRectF(topLeft.x(), margins().top(), titleBarWidth, borderRectHeight));
|
||||||
|
p.restore();
|
||||||
|
|
||||||
|
-
|
||||||
|
- /*
|
||||||
|
- * Titlebar separator
|
||||||
|
- */
|
||||||
|
- p.save();
|
||||||
|
- p.setPen(color(Border));
|
||||||
|
- p.drawLine(QLineF(margins().left(), margins().top() - ceTitlebarSeperatorWidth,
|
||||||
|
- surfaceRect.width() - margins().right(),
|
||||||
|
- margins().top() - ceTitlebarSeperatorWidth));
|
||||||
|
- p.restore();
|
||||||
|
-
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* Window title
|
||||||
|
*/
|
@ -0,0 +1,491 @@
|
|||||||
|
From c2f61bc47baacf2e6a44c6c3c4e4cbf0abfa4095 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Liang Qi <liang.qi@qt.io>
|
||||||
|
Date: Wed, 3 Jul 2024 15:06:09 +0200
|
||||||
|
Subject: Update wayland.xml to version 1.23.0
|
||||||
|
|
||||||
|
This updates only the protocol definition, implementations
|
||||||
|
will need additional commits to opt into using them.
|
||||||
|
|
||||||
|
Change-Id: I5999e6dd75dfff7d904981fb1545d58c8b38ceb0
|
||||||
|
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||||
|
---
|
||||||
|
src/3rdparty/protocol/wayland.xml | 215 +++++++++++++++++++++++++++-----------
|
||||||
|
1 file changed, 156 insertions(+), 59 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/3rdparty/protocol/wayland/wayland.xml b/src/3rdparty/protocol/wayland/wayland.xml
|
||||||
|
index 10e039d6e..9418c62f3 100644
|
||||||
|
--- a/src/3rdparty/protocol/wayland/wayland.xml
|
||||||
|
+++ b/src/3rdparty/protocol/wayland/wayland.xml
|
||||||
|
@@ -46,7 +46,7 @@
|
||||||
|
compositor after the callback is fired and as such the client must not
|
||||||
|
attempt to use it after that point.
|
||||||
|
|
||||||
|
- The callback_data passed in the callback is the event serial.
|
||||||
|
+ The callback_data passed in the callback is undefined and should be ignored.
|
||||||
|
</description>
|
||||||
|
<arg name="callback" type="new_id" interface="wl_callback"
|
||||||
|
summary="callback object for the sync request"/>
|
||||||
|
@@ -212,7 +212,7 @@
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
- <interface name="wl_shm_pool" version="1">
|
||||||
|
+ <interface name="wl_shm_pool" version="2">
|
||||||
|
<description summary="a shared memory pool">
|
||||||
|
The wl_shm_pool object encapsulates a piece of memory shared
|
||||||
|
between the compositor and client. Through the wl_shm_pool
|
||||||
|
@@ -262,17 +262,17 @@
|
||||||
|
created, but using the new size. This request can only be
|
||||||
|
used to make the pool bigger.
|
||||||
|
|
||||||
|
- This request only changes the amount of bytes that are mmapped
|
||||||
|
- by the server and does not touch the file corresponding to the
|
||||||
|
- file descriptor passed at creation time. It is the client's
|
||||||
|
- responsibility to ensure that the file is at least as big as
|
||||||
|
- the new pool size.
|
||||||
|
+ This request only changes the amount of bytes that are mmapped
|
||||||
|
+ by the server and does not touch the file corresponding to the
|
||||||
|
+ file descriptor passed at creation time. It is the client's
|
||||||
|
+ responsibility to ensure that the file is at least as big as
|
||||||
|
+ the new pool size.
|
||||||
|
</description>
|
||||||
|
<arg name="size" type="int" summary="new size of the pool, in bytes"/>
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
- <interface name="wl_shm" version="1">
|
||||||
|
+ <interface name="wl_shm" version="2">
|
||||||
|
<description summary="shared memory support">
|
||||||
|
A singleton global object that provides support for shared
|
||||||
|
memory.
|
||||||
|
@@ -419,6 +419,21 @@
|
||||||
|
<entry name="xbgr16161616" value="0x38344258" summary="[63:0] x:B:G:R 16:16:16:16 little endian"/>
|
||||||
|
<entry name="argb16161616" value="0x38345241" summary="[63:0] A:R:G:B 16:16:16:16 little endian"/>
|
||||||
|
<entry name="abgr16161616" value="0x38344241" summary="[63:0] A:B:G:R 16:16:16:16 little endian"/>
|
||||||
|
+ <entry name="c1" value="0x20203143" summary="[7:0] C0:C1:C2:C3:C4:C5:C6:C7 1:1:1:1:1:1:1:1 eight pixels/byte"/>
|
||||||
|
+ <entry name="c2" value="0x20203243" summary="[7:0] C0:C1:C2:C3 2:2:2:2 four pixels/byte"/>
|
||||||
|
+ <entry name="c4" value="0x20203443" summary="[7:0] C0:C1 4:4 two pixels/byte"/>
|
||||||
|
+ <entry name="d1" value="0x20203144" summary="[7:0] D0:D1:D2:D3:D4:D5:D6:D7 1:1:1:1:1:1:1:1 eight pixels/byte"/>
|
||||||
|
+ <entry name="d2" value="0x20203244" summary="[7:0] D0:D1:D2:D3 2:2:2:2 four pixels/byte"/>
|
||||||
|
+ <entry name="d4" value="0x20203444" summary="[7:0] D0:D1 4:4 two pixels/byte"/>
|
||||||
|
+ <entry name="d8" value="0x20203844" summary="[7:0] D"/>
|
||||||
|
+ <entry name="r1" value="0x20203152" summary="[7:0] R0:R1:R2:R3:R4:R5:R6:R7 1:1:1:1:1:1:1:1 eight pixels/byte"/>
|
||||||
|
+ <entry name="r2" value="0x20203252" summary="[7:0] R0:R1:R2:R3 2:2:2:2 four pixels/byte"/>
|
||||||
|
+ <entry name="r4" value="0x20203452" summary="[7:0] R0:R1 4:4 two pixels/byte"/>
|
||||||
|
+ <entry name="r10" value="0x20303152" summary="[15:0] x:R 6:10 little endian"/>
|
||||||
|
+ <entry name="r12" value="0x20323152" summary="[15:0] x:R 4:12 little endian"/>
|
||||||
|
+ <entry name="avuy8888" value="0x59555641" summary="[31:0] A:Cr:Cb:Y 8:8:8:8 little endian"/>
|
||||||
|
+ <entry name="xvuy8888" value="0x59555658" summary="[31:0] X:Cr:Cb:Y 8:8:8:8 little endian"/>
|
||||||
|
+ <entry name="p030" value="0x30333050" summary="2x2 subsampled Cr:Cb plane 10 bits per channel packed"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="create_pool">
|
||||||
|
@@ -442,6 +457,17 @@
|
||||||
|
</description>
|
||||||
|
<arg name="format" type="uint" enum="format" summary="buffer pixel format"/>
|
||||||
|
</event>
|
||||||
|
+
|
||||||
|
+ <!-- Version 2 additions -->
|
||||||
|
+
|
||||||
|
+ <request name="release" type="destructor" since="2">
|
||||||
|
+ <description summary="release the shm object">
|
||||||
|
+ Using this request a client can tell the server that it is not going to
|
||||||
|
+ use the shm object anymore.
|
||||||
|
+
|
||||||
|
+ Objects created via this interface remain unaffected.
|
||||||
|
+ </description>
|
||||||
|
+ </request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="wl_buffer" version="1">
|
||||||
|
@@ -453,9 +479,11 @@
|
||||||
|
client provides and updates the contents is defined by the buffer factory
|
||||||
|
interface.
|
||||||
|
|
||||||
|
- If the buffer uses a format that has an alpha channel, the alpha channel
|
||||||
|
- is assumed to be premultiplied in the color channels unless otherwise
|
||||||
|
- specified.
|
||||||
|
+ Color channels are assumed to be electrical rather than optical (in other
|
||||||
|
+ words, encoded with a transfer function) unless otherwise specified. If
|
||||||
|
+ the buffer uses a format that has an alpha channel, the alpha channel is
|
||||||
|
+ assumed to be premultiplied into the electrical color channel values
|
||||||
|
+ (after transfer function encoding) unless otherwise specified.
|
||||||
|
|
||||||
|
Note, because wl_buffer objects are created from multiple independent
|
||||||
|
factory interfaces, the wl_buffer interface is frozen at version 1.
|
||||||
|
@@ -847,6 +875,7 @@
|
||||||
|
|
||||||
|
<enum name="error">
|
||||||
|
<entry name="role" value="0" summary="given wl_surface has another role"/>
|
||||||
|
+ <entry name="used_source" value="1" summary="source has already been used"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="start_drag">
|
||||||
|
@@ -868,7 +897,7 @@
|
||||||
|
The icon surface is an optional (can be NULL) surface that
|
||||||
|
provides an icon to be moved around with the cursor. Initially,
|
||||||
|
the top-left corner of the icon surface is placed at the cursor
|
||||||
|
- hotspot, but subsequent wl_surface.attach request can move the
|
||||||
|
+ hotspot, but subsequent wl_surface.offset requests can move the
|
||||||
|
relative position. Attach requests must be confirmed with
|
||||||
|
wl_surface.commit as usual. The icon surface is given the role of
|
||||||
|
a drag-and-drop icon. If the icon surface already has another role,
|
||||||
|
@@ -876,6 +905,10 @@
|
||||||
|
|
||||||
|
The input region is ignored for wl_surfaces with the role of a
|
||||||
|
drag-and-drop icon.
|
||||||
|
+
|
||||||
|
+ The given source may not be used in any further set_selection or
|
||||||
|
+ start_drag requests. Attempting to reuse a previously-used source
|
||||||
|
+ may send a used_source error.
|
||||||
|
</description>
|
||||||
|
<arg name="source" type="object" interface="wl_data_source" allow-null="true" summary="data source for the eventual transfer"/>
|
||||||
|
<arg name="origin" type="object" interface="wl_surface" summary="surface where the drag originates"/>
|
||||||
|
@@ -889,6 +922,10 @@
|
||||||
|
to the data from the source on behalf of the client.
|
||||||
|
|
||||||
|
To unset the selection, set the source to NULL.
|
||||||
|
+
|
||||||
|
+ The given source may not be used in any further set_selection or
|
||||||
|
+ start_drag requests. Attempting to reuse a previously-used source
|
||||||
|
+ may send a used_source error.
|
||||||
|
</description>
|
||||||
|
<arg name="source" type="object" interface="wl_data_source" allow-null="true" summary="data source for the selection"/>
|
||||||
|
<arg name="serial" type="uint" summary="serial number of the event that triggered this request"/>
|
||||||
|
@@ -1411,7 +1448,7 @@
|
||||||
|
<entry name="invalid_size" value="2" summary="buffer size is invalid"/>
|
||||||
|
<entry name="invalid_offset" value="3" summary="buffer offset is invalid"/>
|
||||||
|
<entry name="defunct_role_object" value="4"
|
||||||
|
- summary="surface was destroyed before its role object"/>
|
||||||
|
+ summary="surface was destroyed before its role object"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
@@ -1440,9 +1477,9 @@
|
||||||
|
|
||||||
|
When the bound wl_surface version is 5 or higher, passing any
|
||||||
|
non-zero x or y is a protocol violation, and will result in an
|
||||||
|
- 'invalid_offset' error being raised. The x and y arguments are ignored
|
||||||
|
- and do not change the pending state. To achieve equivalent semantics,
|
||||||
|
- use wl_surface.offset.
|
||||||
|
+ 'invalid_offset' error being raised. The x and y arguments are ignored
|
||||||
|
+ and do not change the pending state. To achieve equivalent semantics,
|
||||||
|
+ use wl_surface.offset.
|
||||||
|
|
||||||
|
Surface contents are double-buffered state, see wl_surface.commit.
|
||||||
|
|
||||||
|
@@ -1479,6 +1516,13 @@
|
||||||
|
|
||||||
|
If wl_surface.attach is sent with a NULL wl_buffer, the
|
||||||
|
following wl_surface.commit will remove the surface content.
|
||||||
|
+
|
||||||
|
+ If a pending wl_buffer has been destroyed, the result is not specified.
|
||||||
|
+ Many compositors are known to remove the surface content on the following
|
||||||
|
+ wl_surface.commit, but this behaviour is not universal. Clients seeking to
|
||||||
|
+ maximise compatibility should not destroy pending buffers and should
|
||||||
|
+ ensure that they explicitly remove content from surfaces, even after
|
||||||
|
+ destroying buffers.
|
||||||
|
</description>
|
||||||
|
<arg name="buffer" type="object" interface="wl_buffer" allow-null="true"
|
||||||
|
summary="buffer of surface contents"/>
|
||||||
|
@@ -1618,16 +1662,18 @@
|
||||||
|
<description summary="commit pending surface state">
|
||||||
|
Surface state (input, opaque, and damage regions, attached buffers,
|
||||||
|
etc.) is double-buffered. Protocol requests modify the pending state,
|
||||||
|
- as opposed to the current state in use by the compositor. A commit
|
||||||
|
- request atomically applies all pending state, replacing the current
|
||||||
|
- state. After commit, the new pending state is as documented for each
|
||||||
|
- related request.
|
||||||
|
+ as opposed to the active state in use by the compositor.
|
||||||
|
|
||||||
|
- On commit, a pending wl_buffer is applied first, and all other state
|
||||||
|
- second. This means that all coordinates in double-buffered state are
|
||||||
|
- relative to the new wl_buffer coming into use, except for
|
||||||
|
- wl_surface.attach itself. If there is no pending wl_buffer, the
|
||||||
|
- coordinates are relative to the current surface contents.
|
||||||
|
+ A commit request atomically creates a content update from the pending
|
||||||
|
+ state, even if the pending state has not been touched. The content
|
||||||
|
+ update is placed in a queue until it becomes active. After commit, the
|
||||||
|
+ new pending state is as documented for each related request.
|
||||||
|
+
|
||||||
|
+ When the content update is applied, the wl_buffer is applied before all
|
||||||
|
+ other state. This means that all coordinates in double-buffered state
|
||||||
|
+ are relative to the newly attached wl_buffers, except for
|
||||||
|
+ wl_surface.attach itself. If there is no newly attached wl_buffer, the
|
||||||
|
+ coordinates are relative to the previous content update.
|
||||||
|
|
||||||
|
All requests that need a commit to become effective are documented
|
||||||
|
to affect double-buffered state.
|
||||||
|
@@ -1666,10 +1712,12 @@
|
||||||
|
|
||||||
|
<request name="set_buffer_transform" since="2">
|
||||||
|
<description summary="sets the buffer transformation">
|
||||||
|
- This request sets an optional transformation on how the compositor
|
||||||
|
- interprets the contents of the buffer attached to the surface. The
|
||||||
|
- accepted values for the transform parameter are the values for
|
||||||
|
- wl_output.transform.
|
||||||
|
+ This request sets the transformation that the client has already applied
|
||||||
|
+ to the content of the buffer. The accepted values for the transform
|
||||||
|
+ parameter are the values for wl_output.transform.
|
||||||
|
+
|
||||||
|
+ The compositor applies the inverse of this transformation whenever it
|
||||||
|
+ uses the buffer contents.
|
||||||
|
|
||||||
|
Buffer transform is double-buffered state, see wl_surface.commit.
|
||||||
|
|
||||||
|
@@ -1725,11 +1773,11 @@
|
||||||
|
a buffer that is larger (by a factor of scale in each dimension)
|
||||||
|
than the desired surface size.
|
||||||
|
|
||||||
|
- If scale is not positive the invalid_scale protocol error is
|
||||||
|
+ If scale is not greater than 0 the invalid_scale protocol error is
|
||||||
|
raised.
|
||||||
|
</description>
|
||||||
|
<arg name="scale" type="int"
|
||||||
|
- summary="positive scale for interpreting buffer contents"/>
|
||||||
|
+ summary="scale for interpreting buffer contents"/>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<!-- Version 4 additions -->
|
||||||
|
@@ -1802,10 +1850,15 @@
|
||||||
|
This event indicates the preferred buffer scale for this surface. It is
|
||||||
|
sent whenever the compositor's preference changes.
|
||||||
|
|
||||||
|
+ Before receiving this event the preferred buffer scale for this surface
|
||||||
|
+ is 1.
|
||||||
|
+
|
||||||
|
It is intended that scaling aware clients use this event to scale their
|
||||||
|
content and use wl_surface.set_buffer_scale to indicate the scale they
|
||||||
|
have rendered with. This allows clients to supply a higher detail
|
||||||
|
buffer.
|
||||||
|
+
|
||||||
|
+ The compositor shall emit a scale value greater than 0.
|
||||||
|
</description>
|
||||||
|
<arg name="factor" type="int" summary="preferred scaling factor"/>
|
||||||
|
</event>
|
||||||
|
@@ -1815,9 +1868,12 @@
|
||||||
|
This event indicates the preferred buffer transform for this surface.
|
||||||
|
It is sent whenever the compositor's preference changes.
|
||||||
|
|
||||||
|
- It is intended that transform aware clients use this event to apply the
|
||||||
|
- transform to their content and use wl_surface.set_buffer_transform to
|
||||||
|
- indicate the transform they have rendered with.
|
||||||
|
+ Before receiving this event the preferred buffer transform for this
|
||||||
|
+ surface is normal.
|
||||||
|
+
|
||||||
|
+ Applying this transformation to the surface buffer contents and using
|
||||||
|
+ wl_surface.set_buffer_transform might allow the compositor to use the
|
||||||
|
+ surface buffer more efficiently.
|
||||||
|
</description>
|
||||||
|
<arg name="transform" type="uint" enum="wl_output.transform"
|
||||||
|
summary="preferred transform"/>
|
||||||
|
@@ -1992,9 +2048,9 @@
|
||||||
|
where (x, y) are the coordinates of the pointer location, in
|
||||||
|
surface-local coordinates.
|
||||||
|
|
||||||
|
- On surface.attach requests to the pointer surface, hotspot_x
|
||||||
|
+ On wl_surface.offset requests to the pointer surface, hotspot_x
|
||||||
|
and hotspot_y are decremented by the x and y parameters
|
||||||
|
- passed to the request. Attach must be confirmed by
|
||||||
|
+ passed to the request. The offset must be applied by
|
||||||
|
wl_surface.commit as usual.
|
||||||
|
|
||||||
|
The hotspot can also be updated by passing the currently set
|
||||||
|
@@ -2248,7 +2304,7 @@
|
||||||
|
<arg name="axis" type="uint" enum="axis" summary="the axis stopped with this event"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
- <event name="axis_discrete" since="5">
|
||||||
|
+ <event name="axis_discrete" since="5" deprecated-since="8">
|
||||||
|
<description summary="axis click event">
|
||||||
|
Discrete step information for scroll and other axes.
|
||||||
|
|
||||||
|
@@ -2374,6 +2430,16 @@
|
||||||
|
<description summary="keyboard input device">
|
||||||
|
The wl_keyboard interface represents one or more keyboards
|
||||||
|
associated with a seat.
|
||||||
|
+
|
||||||
|
+ Each wl_keyboard has the following logical state:
|
||||||
|
+
|
||||||
|
+ - an active surface (possibly null),
|
||||||
|
+ - the keys currently logically down,
|
||||||
|
+ - the active modifiers,
|
||||||
|
+ - the active group.
|
||||||
|
+
|
||||||
|
+ By default, the active surface is null, the keys currently logically down
|
||||||
|
+ are empty, the active modifiers and the active group are 0.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<enum name="keymap_format">
|
||||||
|
@@ -2408,10 +2474,15 @@
|
||||||
|
|
||||||
|
The compositor must send the wl_keyboard.modifiers event after this
|
||||||
|
event.
|
||||||
|
+
|
||||||
|
+ In the wl_keyboard logical state, this event sets the active surface to
|
||||||
|
+ the surface argument and the keys currently logically down to the keys
|
||||||
|
+ in the keys argument. The compositor must not send this event if the
|
||||||
|
+ wl_keyboard already had an active surface immediately before this event.
|
||||||
|
</description>
|
||||||
|
<arg name="serial" type="uint" summary="serial number of the enter event"/>
|
||||||
|
<arg name="surface" type="object" interface="wl_surface" summary="surface gaining keyboard focus"/>
|
||||||
|
- <arg name="keys" type="array" summary="the currently pressed keys"/>
|
||||||
|
+ <arg name="keys" type="array" summary="the keys currently logically down"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="leave">
|
||||||
|
@@ -2422,8 +2493,10 @@
|
||||||
|
The leave notification is sent before the enter notification
|
||||||
|
for the new focus.
|
||||||
|
|
||||||
|
- After this event client must assume that all keys, including modifiers,
|
||||||
|
- are lifted and also it must stop key repeating if there's some going on.
|
||||||
|
+ In the wl_keyboard logical state, this event resets all values to their
|
||||||
|
+ defaults. The compositor must not send this event if the active surface
|
||||||
|
+ of the wl_keyboard was not equal to the surface argument immediately
|
||||||
|
+ before this event.
|
||||||
|
</description>
|
||||||
|
<arg name="serial" type="uint" summary="serial number of the leave event"/>
|
||||||
|
<arg name="surface" type="object" interface="wl_surface" summary="surface that lost keyboard focus"/>
|
||||||
|
@@ -2448,6 +2521,15 @@
|
||||||
|
|
||||||
|
If this event produces a change in modifiers, then the resulting
|
||||||
|
wl_keyboard.modifiers event must be sent after this event.
|
||||||
|
+
|
||||||
|
+ In the wl_keyboard logical state, this event adds the key to the keys
|
||||||
|
+ currently logically down (if the state argument is pressed) or removes
|
||||||
|
+ the key from the keys currently logically down (if the state argument is
|
||||||
|
+ released). The compositor must not send this event if the wl_keyboard
|
||||||
|
+ did not have an active surface immediately before this event. The
|
||||||
|
+ compositor must not send this event if state is pressed (resp. released)
|
||||||
|
+ and the key was already logically down (resp. was not logically down)
|
||||||
|
+ immediately before this event.
|
||||||
|
</description>
|
||||||
|
<arg name="serial" type="uint" summary="serial number of the key event"/>
|
||||||
|
<arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
|
||||||
|
@@ -2459,6 +2541,17 @@
|
||||||
|
<description summary="modifier and group state">
|
||||||
|
Notifies clients that the modifier and/or group state has
|
||||||
|
changed, and it should update its local state.
|
||||||
|
+
|
||||||
|
+ The compositor may send this event without a surface of the client
|
||||||
|
+ having keyboard focus, for example to tie modifier information to
|
||||||
|
+ pointer focus instead. If a modifier event with pressed modifiers is sent
|
||||||
|
+ without a prior enter event, the client can assume the modifier state is
|
||||||
|
+ valid until it receives the next wl_keyboard.modifiers event. In order to
|
||||||
|
+ reset the modifier state again, the compositor can send a
|
||||||
|
+ wl_keyboard.modifiers event with no pressed modifiers.
|
||||||
|
+
|
||||||
|
+ In the wl_keyboard logical state, this event updates the modifiers and
|
||||||
|
+ group.
|
||||||
|
</description>
|
||||||
|
<arg name="serial" type="uint" summary="serial number of the modifiers event"/>
|
||||||
|
<arg name="mods_depressed" type="uint" summary="depressed modifiers"/>
|
||||||
|
@@ -2566,6 +2659,8 @@
|
||||||
|
currently active on this client's surface. The client is
|
||||||
|
responsible for finalizing the touch points, future touch points on
|
||||||
|
this surface may reuse the touch point ID.
|
||||||
|
+
|
||||||
|
+ No frame event is required after the cancel event.
|
||||||
|
</description>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
@@ -2665,10 +2760,9 @@
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<enum name="transform">
|
||||||
|
- <description summary="transform from framebuffer to output">
|
||||||
|
- This describes the transform that a compositor will apply to a
|
||||||
|
- surface to compensate for the rotation or mirroring of an
|
||||||
|
- output device.
|
||||||
|
+ <description summary="transformation applied to buffer contents">
|
||||||
|
+ This describes transformations that clients and compositors apply to
|
||||||
|
+ buffer contents.
|
||||||
|
|
||||||
|
The flipped values correspond to an initial flip around a
|
||||||
|
vertical axis followed by rotation.
|
||||||
|
@@ -2700,6 +2794,10 @@
|
||||||
|
The geometry event will be followed by a done event (starting from
|
||||||
|
version 2).
|
||||||
|
|
||||||
|
+ Clients should use wl_surface.preferred_buffer_transform instead of the
|
||||||
|
+ transform advertised by this event to find the preferred buffer
|
||||||
|
+ transform to use for a surface.
|
||||||
|
+
|
||||||
|
Note: wl_output only advertises partial information about the output
|
||||||
|
position and identification. Some compositors, for instance those not
|
||||||
|
implementing a desktop-style output layout or those exposing virtual
|
||||||
|
@@ -2722,7 +2820,7 @@
|
||||||
|
<arg name="model" type="string"
|
||||||
|
summary="textual description of the model"/>
|
||||||
|
<arg name="transform" type="int" enum="transform"
|
||||||
|
- summary="transform that maps framebuffer to output"/>
|
||||||
|
+ summary="additional transformation applied to buffer contents during presentation"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<enum name="mode" bitfield="true">
|
||||||
|
@@ -2795,8 +2893,9 @@
|
||||||
|
This event contains scaling geometry information
|
||||||
|
that is not in the geometry event. It may be sent after
|
||||||
|
binding the output object or if the output scale changes
|
||||||
|
- later. If it is not sent, the client should assume a
|
||||||
|
- scale of 1.
|
||||||
|
+ later. The compositor will emit a non-zero, positive
|
||||||
|
+ value for scale. If it is not sent, the client should
|
||||||
|
+ assume a scale of 1.
|
||||||
|
|
||||||
|
A scale larger than 1 means that the compositor will
|
||||||
|
automatically scale surface buffers by this amount
|
||||||
|
@@ -2804,12 +2903,9 @@
|
||||||
|
displays where applications rendering at the native
|
||||||
|
resolution would be too small to be legible.
|
||||||
|
|
||||||
|
- It is intended that scaling aware clients track the
|
||||||
|
- current output of a surface, and if it is on a scaled
|
||||||
|
- output it should use wl_surface.set_buffer_scale with
|
||||||
|
- the scale of the output. That way the compositor can
|
||||||
|
- avoid scaling the surface, and the client can supply
|
||||||
|
- a higher detail image.
|
||||||
|
+ Clients should use wl_surface.preferred_buffer_scale
|
||||||
|
+ instead of this event to find the preferred buffer
|
||||||
|
+ scale to use for a surface.
|
||||||
|
|
||||||
|
The scale event will be followed by a done event.
|
||||||
|
</description>
|
||||||
|
@@ -3035,6 +3131,11 @@
|
||||||
|
|
||||||
|
If the parent wl_surface object is destroyed, the sub-surface is
|
||||||
|
unmapped.
|
||||||
|
+
|
||||||
|
+ A sub-surface never has the keyboard focus of any seat.
|
||||||
|
+
|
||||||
|
+ The wl_surface.offset request is ignored: clients must use set_position
|
||||||
|
+ instead to move the sub-surface.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
@@ -3060,9 +3161,7 @@
|
||||||
|
surface area. Negative values are allowed.
|
||||||
|
|
||||||
|
The scheduled coordinates will take effect whenever the state of the
|
||||||
|
- parent surface is applied. When this happens depends on whether the
|
||||||
|
- parent surface is in synchronized mode or not. See
|
||||||
|
- wl_subsurface.set_sync and wl_subsurface.set_desync for details.
|
||||||
|
+ parent surface is applied.
|
||||||
|
|
||||||
|
If more than one set_position request is invoked by the client before
|
||||||
|
the commit of the parent surface, the position of a new request always
|
||||||
|
@@ -3085,9 +3184,7 @@
|
||||||
|
The z-order is double-buffered. Requests are handled in order and
|
||||||
|
applied immediately to a pending state. The final pending state is
|
||||||
|
copied to the active state the next time the state of the parent
|
||||||
|
- surface is applied. When this happens depends on whether the parent
|
||||||
|
- surface is in synchronized mode or not. See wl_subsurface.set_sync and
|
||||||
|
- wl_subsurface.set_desync for details.
|
||||||
|
+ surface is applied.
|
||||||
|
|
||||||
|
A new sub-surface is initially added as the top-most in the stack
|
||||||
|
of its siblings and parent.
|
||||||
|
--
|
||||||
|
cgit v1.2.3
|
||||||
|
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - WebChannel component
|
Summary: Qt6 - WebChannel component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -124,6 +124,9 @@ popd
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
|
|
||||||
%global use_system_ffmpeg 1
|
%global use_system_ffmpeg 1
|
||||||
|
|
||||||
|
%global python3_pkgversion 3.12
|
||||||
|
%global __python3 %{_bindir}/python%{python3_pkgversion}
|
||||||
|
|
||||||
# Build with system libvpx is broken at the moment
|
# Build with system libvpx is broken at the moment
|
||||||
#if 0%{?rhel} == 8
|
#if 0%{?rhel} == 8
|
||||||
@ -64,7 +66,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - QtWebEngine components
|
Summary: Qt6 - QtWebEngine components
|
||||||
Name: qt6-qtwebengine
|
Name: qt6-qtwebengine
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
%global majmin %(echo %{version} | cut -d. -f1-2)
|
%global majmin %(echo %{version} | cut -d. -f1-2)
|
||||||
@ -143,13 +145,9 @@ BuildRequires: flex elfutils
|
|||||||
%if %{with clang}
|
%if %{with clang}
|
||||||
BuildRequires: clang >= 19.0
|
BuildRequires: clang >= 19.0
|
||||||
%else
|
%else
|
||||||
%if 0%{?rhel} && 0%{?rhel} < 10
|
|
||||||
BuildRequires: gcc-toolset-14-gcc-plugin-annobin
|
BuildRequires: gcc-toolset-14-gcc-plugin-annobin
|
||||||
BuildRequires: gcc-toolset-14-libatomic-devel
|
BuildRequires: gcc-toolset-14-libatomic-devel
|
||||||
BuildRequires: gcc-toolset-14-gcc-c++
|
BuildRequires: gcc-toolset-14-gcc-c++
|
||||||
%else
|
|
||||||
BuildRequires: gcc-c++ gcc
|
|
||||||
%endif
|
|
||||||
%endif
|
%endif
|
||||||
# gn links statically (for now)
|
# gn links statically (for now)
|
||||||
BuildRequires: libstdc++-static
|
BuildRequires: libstdc++-static
|
||||||
@ -227,7 +225,7 @@ BuildRequires: pkgconfig(lcms2)
|
|||||||
BuildRequires: pkgconfig(xkbcommon)
|
BuildRequires: pkgconfig(xkbcommon)
|
||||||
BuildRequires: pkgconfig(xkbfile)
|
BuildRequires: pkgconfig(xkbfile)
|
||||||
BuildRequires: pkgconfig(xshmfence)
|
BuildRequires: pkgconfig(xshmfence)
|
||||||
BuildRequires: python3-html5lib
|
|
||||||
%if 0%{?use_system_tiff}
|
%if 0%{?use_system_tiff}
|
||||||
BuildRequires: pkgconfig(libtiff-4) >= 4.2.0
|
BuildRequires: pkgconfig(libtiff-4) >= 4.2.0
|
||||||
%endif
|
%endif
|
||||||
@ -243,13 +241,11 @@ BuildRequires: pkgconfig(opus)
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
BuildRequires: perl-interpreter
|
BuildRequires: perl-interpreter
|
||||||
BuildRequires: python(abi) >= 3.11
|
|
||||||
|
|
||||||
%if 0%{?rhel} <= 9
|
BuildRequires: python(abi) >= %{python3_pkgversion}
|
||||||
BuildRequires: python3.11-html5lib
|
BuildRequires: python%{python3_pkgversion}-html5lib
|
||||||
BuildRequires: python3.11-rpm-macros
|
BuildRequires: python%{python3_pkgversion}-rpm-macros
|
||||||
%global __python3 %{_bindir}/python3.11
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?use_system_libvpx}
|
%if 0%{?use_system_libvpx}
|
||||||
BuildRequires: pkgconfig(vpx) >= 1.12.0
|
BuildRequires: pkgconfig(vpx) >= 1.12.0
|
||||||
@ -540,9 +536,7 @@ export LDFLAGS="-L/opt/rx/%{_lib}/ -Wl,-rpath=/opt/rx/%{_lib}/ %{__global_ldflag
|
|||||||
%{?use_system_re2:-DQT_FEATURE_webengine_system_re2:BOOL=ON} \
|
%{?use_system_re2:-DQT_FEATURE_webengine_system_re2:BOOL=ON} \
|
||||||
%{?use_system_libwebp:-DQT_FEATURE_webengine_system_libwebp:BOOL=ON} \
|
%{?use_system_libwebp:-DQT_FEATURE_webengine_system_libwebp:BOOL=ON} \
|
||||||
-DQT_BUILD_EXAMPLES:BOOL=OFF \
|
-DQT_BUILD_EXAMPLES:BOOL=OFF \
|
||||||
%if 0%{?rhel} <= 9
|
-DPython3_EXECUTABLE:FILEPATH=%{__python3} \
|
||||||
-DPython3_EXECUTABLE:FILEPATH=%{_bindir}/python3.11 \
|
|
||||||
%endif
|
|
||||||
-DFEATURE_webengine_system_ninja:BOOL=ON \
|
-DFEATURE_webengine_system_ninja:BOOL=ON \
|
||||||
-DFEATURE_webengine_vulkan:BOOL=ON \
|
-DFEATURE_webengine_vulkan:BOOL=ON \
|
||||||
-DFEATURE_pdf_v8:BOOL=ON \
|
-DFEATURE_pdf_v8:BOOL=ON \
|
||||||
@ -621,6 +615,7 @@ rm -fr %{buildroot}%{_qt6_libdir}/cmake/Qt6BuildInternals
|
|||||||
%{_qt6_libdir}/qt6/metatypes/*.json
|
%{_qt6_libdir}/qt6/metatypes/*.json
|
||||||
%{_qt6_libdir}/qt6/modules/*.json
|
%{_qt6_libdir}/qt6/modules/*.json
|
||||||
%{_qt6_libdir}/qt6/sbom/%{qt_module}-*.spdx
|
%{_qt6_libdir}/qt6/sbom/%{qt_module}-*.spdx
|
||||||
|
%{_qt6_libdir}/qt6/sbom/qtpdf-*.spdx
|
||||||
%{_libdir}/pkgconfig/Qt6*.pc
|
%{_libdir}/pkgconfig/Qt6*.pc
|
||||||
|
|
||||||
%files devtools
|
%files devtools
|
||||||
@ -628,6 +623,12 @@ rm -fr %{buildroot}%{_qt6_libdir}/cmake/Qt6BuildInternals
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
|
* Tue Jan 21 2025 Raven <raven@sysadmins.ws> - 6.8.1-2
|
||||||
|
- rebuild (ffmpeg)
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -0,0 +1,574 @@
|
|||||||
|
From 6e554a30893150793c2638e3689cf208ffc8e375 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dale Curtis <dalecurtis@chromium.org>
|
||||||
|
Date: Sat, 2 Apr 2022 05:13:53 +0000
|
||||||
|
Subject: [PATCH] Roll src/third_party/ffmpeg/ 574c39cce..32b2d1d526 (1125
|
||||||
|
commits)
|
||||||
|
|
||||||
|
https://chromium.googlesource.com/chromium/third_party/ffmpeg.git/+log/574c39cce323..32b2d1d526
|
||||||
|
|
||||||
|
Created with:
|
||||||
|
roll-dep src/third_party/ffmpeg
|
||||||
|
|
||||||
|
Fixed: 1293918
|
||||||
|
Cq-Include-Trybots: luci.chromium.try:mac_chromium_asan_rel_ng,linux_chromium_asan_rel_ng,linux_chromium_chromeos_asan_rel_ng
|
||||||
|
Change-Id: I41945d0f963e3d1f65940067bac22f63b68e37d2
|
||||||
|
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3565647
|
||||||
|
Auto-Submit: Dale Curtis <dalecurtis@chromium.org>
|
||||||
|
Reviewed-by: Dan Sanders <sandersd@chromium.org>
|
||||||
|
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
|
||||||
|
Cr-Commit-Position: refs/heads/main@{#988253}
|
||||||
|
---
|
||||||
|
.../clear_key_cdm/ffmpeg_cdm_audio_decoder.cc | 29 ++++++++++---------
|
||||||
|
media/ffmpeg/ffmpeg_common.cc | 11 +++----
|
||||||
|
media/filters/audio_file_reader.cc | 9 +++---
|
||||||
|
media/filters/audio_file_reader_unittest.cc | 6 ++--
|
||||||
|
.../filters/audio_video_metadata_extractor.cc | 11 +++++--
|
||||||
|
.../filters/ffmpeg_aac_bitstream_converter.cc | 7 +++--
|
||||||
|
...ffmpeg_aac_bitstream_converter_unittest.cc | 2 +-
|
||||||
|
media/filters/ffmpeg_audio_decoder.cc | 13 +++++----
|
||||||
|
8 files changed, 51 insertions(+), 37 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/3rdparty/chromium/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc b/src/3rdparty/chromium/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc
|
||||||
|
index c535d2b..62ddbc8 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc
|
||||||
|
@@ -74,7 +74,7 @@ void CdmAudioDecoderConfigToAVCodecContext(
|
||||||
|
codec_context->sample_fmt = AV_SAMPLE_FMT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
- codec_context->channels = config.channel_count;
|
||||||
|
+ codec_context->ch_layout.nb_channels = config.channel_count;
|
||||||
|
codec_context->sample_rate = config.samples_per_second;
|
||||||
|
|
||||||
|
if (config.extra_data) {
|
||||||
|
@@ -124,8 +124,8 @@ void CopySamples(cdm::AudioFormat cdm_format,
|
||||||
|
case cdm::kAudioFormatPlanarS16:
|
||||||
|
case cdm::kAudioFormatPlanarF32: {
|
||||||
|
const int decoded_size_per_channel =
|
||||||
|
- decoded_audio_size / av_frame.channels;
|
||||||
|
- for (int i = 0; i < av_frame.channels; ++i) {
|
||||||
|
+ decoded_audio_size / av_frame.ch_layout.nb_channels;
|
||||||
|
+ for (int i = 0; i < av_frame.ch_layout.nb_channels; ++i) {
|
||||||
|
memcpy(output_buffer, av_frame.extended_data[i],
|
||||||
|
decoded_size_per_channel);
|
||||||
|
output_buffer += decoded_size_per_channel;
|
||||||
|
@@ -185,13 +185,14 @@ bool FFmpegCdmAudioDecoder::Initialize(
|
||||||
|
// Success!
|
||||||
|
decoding_loop_ = std::make_unique<FFmpegDecodingLoop>(codec_context_.get());
|
||||||
|
samples_per_second_ = config.samples_per_second;
|
||||||
|
- bytes_per_frame_ = codec_context_->channels * config.bits_per_channel / 8;
|
||||||
|
+ bytes_per_frame_ =
|
||||||
|
+ codec_context_->ch_layout.nb_channels * config.bits_per_channel / 8;
|
||||||
|
output_timestamp_helper_ =
|
||||||
|
std::make_unique<AudioTimestampHelper>(config.samples_per_second);
|
||||||
|
is_initialized_ = true;
|
||||||
|
|
||||||
|
// Store initial values to guard against midstream configuration changes.
|
||||||
|
- channels_ = codec_context_->channels;
|
||||||
|
+ channels_ = codec_context_->ch_layout.nb_channels;
|
||||||
|
av_sample_format_ = codec_context_->sample_fmt;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
@@ -291,7 +292,8 @@ cdm::Status FFmpegCdmAudioDecoder::DecodeBuffer(
|
||||||
|
for (auto& frame : audio_frames) {
|
||||||
|
int decoded_audio_size = 0;
|
||||||
|
if (frame->sample_rate != samples_per_second_ ||
|
||||||
|
- frame->channels != channels_ || frame->format != av_sample_format_) {
|
||||||
|
+ frame->ch_layout.nb_channels != channels_ ||
|
||||||
|
+ frame->format != av_sample_format_) {
|
||||||
|
DLOG(ERROR) << "Unsupported midstream configuration change!"
|
||||||
|
<< " Sample Rate: " << frame->sample_rate << " vs "
|
||||||
|
<< samples_per_second_
|
||||||
|
@@ -302,7 +304,7 @@ cdm::Status FFmpegCdmAudioDecoder::DecodeBuffer(
|
||||||
|
}
|
||||||
|
|
||||||
|
decoded_audio_size = av_samples_get_buffer_size(
|
||||||
|
- nullptr, codec_context_->channels, frame->nb_samples,
|
||||||
|
+ nullptr, codec_context_->ch_layout.nb_channels, frame->nb_samples,
|
||||||
|
codec_context_->sample_fmt, 1);
|
||||||
|
if (!decoded_audio_size)
|
||||||
|
continue;
|
||||||
|
@@ -322,7 +324,7 @@ bool FFmpegCdmAudioDecoder::OnNewFrame(
|
||||||
|
std::vector<std::unique_ptr<AVFrame, ScopedPtrAVFreeFrame>>* audio_frames,
|
||||||
|
AVFrame* frame) {
|
||||||
|
*total_size += av_samples_get_buffer_size(
|
||||||
|
- nullptr, codec_context_->channels, frame->nb_samples,
|
||||||
|
+ nullptr, codec_context_->ch_layout.nb_channels, frame->nb_samples,
|
||||||
|
codec_context_->sample_fmt, 1);
|
||||||
|
audio_frames->emplace_back(av_frame_clone(frame));
|
||||||
|
return true;
|
||||||
|
diff --git a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
|
||||||
|
index 2665355..910f9ad 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
|
||||||
|
@@ -336,10 +336,11 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context,
|
||||||
|
codec_context->sample_fmt, codec_context->codec_id);
|
||||||
|
|
||||||
|
ChannelLayout channel_layout =
|
||||||
|
- codec_context->channels > 8
|
||||||
|
+ codec_context->ch_layout.nb_channels > 8
|
||||||
|
? CHANNEL_LAYOUT_DISCRETE
|
||||||
|
- : ChannelLayoutToChromeChannelLayout(codec_context->channel_layout,
|
||||||
|
- codec_context->channels);
|
||||||
|
+ : ChannelLayoutToChromeChannelLayout(
|
||||||
|
+ codec_context->ch_layout.u.mask,
|
||||||
|
+ codec_context->ch_layout.nb_channels);
|
||||||
|
|
||||||
|
switch (codec) {
|
||||||
|
// For AC3/EAC3 we enable only demuxing, but not decoding, so FFmpeg does
|
||||||
|
@@ -391,7 +392,7 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context,
|
||||||
|
extra_data, encryption_scheme, seek_preroll,
|
||||||
|
codec_context->delay);
|
||||||
|
if (channel_layout == CHANNEL_LAYOUT_DISCRETE)
|
||||||
|
- config->SetChannelsForDiscrete(codec_context->channels);
|
||||||
|
+ config->SetChannelsForDiscrete(codec_context->ch_layout.nb_channels);
|
||||||
|
|
||||||
|
#if BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO)
|
||||||
|
// These are bitstream formats unknown to ffmpeg, so they don't have
|
||||||
|
@@ -460,7 +461,7 @@ void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config,
|
||||||
|
|
||||||
|
// TODO(scherkus): should we set |channel_layout|? I'm not sure if FFmpeg uses
|
||||||
|
// said information to decode.
|
||||||
|
- codec_context->channels = config.channels();
|
||||||
|
+ codec_context->ch_layout.nb_channels = config.channels();
|
||||||
|
codec_context->sample_rate = config.samples_per_second();
|
||||||
|
|
||||||
|
if (config.extra_data().empty()) {
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/audio_file_reader.cc b/src/3rdparty/chromium/media/filters/audio_file_reader.cc
|
||||||
|
index 777eabc..2b58dd7 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/audio_file_reader.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/audio_file_reader.cc
|
||||||
|
@@ -113,14 +113,15 @@ bool AudioFileReader::OpenDecoder() {
|
||||||
|
|
||||||
|
// Verify the channel layout is supported by Chrome. Acts as a sanity check
|
||||||
|
// against invalid files. See http://crbug.com/171962
|
||||||
|
- if (ChannelLayoutToChromeChannelLayout(codec_context_->channel_layout,
|
||||||
|
- codec_context_->channels) ==
|
||||||
|
+ if (ChannelLayoutToChromeChannelLayout(
|
||||||
|
+ codec_context_->ch_layout.u.mask,
|
||||||
|
+ codec_context_->ch_layout.nb_channels) ==
|
||||||
|
CHANNEL_LAYOUT_UNSUPPORTED) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store initial values to guard against midstream configuration changes.
|
||||||
|
- channels_ = codec_context_->channels;
|
||||||
|
+ channels_ = codec_context_->ch_layout.nb_channels;
|
||||||
|
audio_codec_ = CodecIDToAudioCodec(codec_context_->codec_id);
|
||||||
|
sample_rate_ = codec_context_->sample_rate;
|
||||||
|
av_sample_format_ = codec_context_->sample_fmt;
|
||||||
|
@@ -223,7 +224,7 @@ bool AudioFileReader::OnNewFrame(
|
||||||
|
if (frames_read < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
- const int channels = frame->channels;
|
||||||
|
+ const int channels = frame->ch_layout.nb_channels;
|
||||||
|
if (frame->sample_rate != sample_rate_ || channels != channels_ ||
|
||||||
|
frame->format != av_sample_format_) {
|
||||||
|
DLOG(ERROR) << "Unsupported midstream configuration change!"
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter.cc b/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter.cc
|
||||||
|
index 76b41aa..e26b6cd 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter.cc
|
||||||
|
@@ -195,14 +195,15 @@ bool FFmpegAACBitstreamConverter::ConvertPacket(AVPacket* packet) {
|
||||||
|
if (!header_generated_ || codec_ != stream_codec_parameters_->codec_id ||
|
||||||
|
audio_profile_ != stream_codec_parameters_->profile ||
|
||||||
|
sample_rate_index_ != sample_rate_index ||
|
||||||
|
- channel_configuration_ != stream_codec_parameters_->channels ||
|
||||||
|
+ channel_configuration_ !=
|
||||||
|
+ stream_codec_parameters_->ch_layout.nb_channels ||
|
||||||
|
frame_length_ != header_plus_packet_size) {
|
||||||
|
header_generated_ =
|
||||||
|
GenerateAdtsHeader(stream_codec_parameters_->codec_id,
|
||||||
|
0, // layer
|
||||||
|
stream_codec_parameters_->profile, sample_rate_index,
|
||||||
|
0, // private stream
|
||||||
|
- stream_codec_parameters_->channels,
|
||||||
|
+ stream_codec_parameters_->ch_layout.nb_channels,
|
||||||
|
0, // originality
|
||||||
|
0, // home
|
||||||
|
0, // copyrighted_stream
|
||||||
|
@@ -214,7 +215,7 @@ bool FFmpegAACBitstreamConverter::ConvertPacket(AVPacket* packet) {
|
||||||
|
codec_ = stream_codec_parameters_->codec_id;
|
||||||
|
audio_profile_ = stream_codec_parameters_->profile;
|
||||||
|
sample_rate_index_ = sample_rate_index;
|
||||||
|
- channel_configuration_ = stream_codec_parameters_->channels;
|
||||||
|
+ channel_configuration_ = stream_codec_parameters_->ch_layout.nb_channels;
|
||||||
|
frame_length_ = header_plus_packet_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc b/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc
|
||||||
|
index 3b46f7f..1897eb0 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc
|
||||||
|
@@ -34,7 +34,7 @@ class FFmpegAACBitstreamConverterTest : public testing::Test {
|
||||||
|
memset(&test_parameters_, 0, sizeof(AVCodecParameters));
|
||||||
|
test_parameters_.codec_id = AV_CODEC_ID_AAC;
|
||||||
|
test_parameters_.profile = FF_PROFILE_AAC_MAIN;
|
||||||
|
- test_parameters_.channels = 2;
|
||||||
|
+ test_parameters_.ch_layout.nb_channels = 2;
|
||||||
|
test_parameters_.extradata = extradata_header_;
|
||||||
|
test_parameters_.extradata_size = sizeof(extradata_header_);
|
||||||
|
}
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc b/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc
|
||||||
|
index bf3ed00..d564ee9 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc
|
||||||
|
@@ -29,7 +29,7 @@ namespace media {
|
||||||
|
|
||||||
|
// Return the number of channels from the data in |frame|.
|
||||||
|
static inline int DetermineChannels(AVFrame* frame) {
|
||||||
|
- return frame->channels;
|
||||||
|
+ return frame->ch_layout.nb_channels;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called by FFmpeg's allocation routine to allocate a buffer. Uses
|
||||||
|
@@ -243,7 +243,7 @@ bool FFmpegAudioDecoder::OnNewFrame(const DecoderBuffer& buffer,
|
||||||
|
// Translate unsupported into discrete layouts for discrete configurations;
|
||||||
|
// ffmpeg does not have a labeled discrete configuration internally.
|
||||||
|
ChannelLayout channel_layout = ChannelLayoutToChromeChannelLayout(
|
||||||
|
- codec_context_->channel_layout, codec_context_->channels);
|
||||||
|
+ codec_context_->ch_layout.u.mask, codec_context_->ch_layout.nb_channels);
|
||||||
|
if (channel_layout == CHANNEL_LAYOUT_UNSUPPORTED &&
|
||||||
|
config_.channel_layout() == CHANNEL_LAYOUT_DISCRETE) {
|
||||||
|
channel_layout = CHANNEL_LAYOUT_DISCRETE;
|
||||||
|
@@ -360,11 +360,11 @@ bool FFmpegAudioDecoder::ConfigureDecoder(const AudioDecoderConfig& config) {
|
||||||
|
// Success!
|
||||||
|
av_sample_format_ = codec_context_->sample_fmt;
|
||||||
|
|
||||||
|
- if (codec_context_->channels != config.channels()) {
|
||||||
|
+ if (codec_context_->ch_layout.nb_channels != config.channels()) {
|
||||||
|
MEDIA_LOG(ERROR, media_log_)
|
||||||
|
<< "Audio configuration specified " << config.channels()
|
||||||
|
<< " channels, but FFmpeg thinks the file contains "
|
||||||
|
- << codec_context_->channels << " channels";
|
||||||
|
+ << codec_context_->ch_layout.nb_channels << " channels";
|
||||||
|
ReleaseFFmpegResources();
|
||||||
|
state_ = DecoderState::kUninitialized;
|
||||||
|
return false;
|
||||||
|
@@ -415,7 +415,7 @@ int FFmpegAudioDecoder::GetAudioBuffer(struct AVCodecContext* s,
|
||||||
|
if (frame->nb_samples <= 0)
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
|
||||||
|
- if (s->channels != channels) {
|
||||||
|
+ if (s->ch_layout.nb_channels != channels) {
|
||||||
|
DLOG(ERROR) << "AVCodecContext and AVFrame disagree on channel count.";
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
}
|
||||||
|
@@ -448,7 +448,8 @@ int FFmpegAudioDecoder::GetAudioBuffer(struct AVCodecContext* s,
|
||||||
|
ChannelLayout channel_layout =
|
||||||
|
config_.channel_layout() == CHANNEL_LAYOUT_DISCRETE
|
||||||
|
? CHANNEL_LAYOUT_DISCRETE
|
||||||
|
- : ChannelLayoutToChromeChannelLayout(s->channel_layout, s->channels);
|
||||||
|
+ : ChannelLayoutToChromeChannelLayout(s->ch_layout.u.mask,
|
||||||
|
+ s->ch_layout.nb_channels);
|
||||||
|
|
||||||
|
if (channel_layout == CHANNEL_LAYOUT_UNSUPPORTED) {
|
||||||
|
DLOG(ERROR) << "Unsupported channel layout.";
|
||||||
|
commit 62274859104bd828373ae406aa9309e610449ac5
|
||||||
|
Author: Ted Meyer <tmathmeyer@chromium.org>
|
||||||
|
Date: Fri Mar 22 19:56:55 2024 +0000
|
||||||
|
|
||||||
|
Replace deprecated use of AVCodecContext::reordered_opaque
|
||||||
|
|
||||||
|
We can use the AV_CODEC_FLAG_COPY_OPAQUE flag on the codec context
|
||||||
|
now to trigger timestamp propagation.
|
||||||
|
|
||||||
|
Bug: 330573128
|
||||||
|
Change-Id: I6bc57241a35ab5283742aad8d42acb4dc5e85858
|
||||||
|
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5384308
|
||||||
|
Commit-Queue: Ted (Chromium) Meyer <tmathmeyer@chromium.org>
|
||||||
|
Reviewed-by: Dan Sanders <sandersd@chromium.org>
|
||||||
|
Cr-Commit-Position: refs/heads/main@{#1277051}
|
||||||
|
|
||||||
|
diff --git a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
|
||||||
|
index 910f9ad..8be165c 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
|
||||||
|
@@ -411,7 +411,9 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context,
|
||||||
|
|
||||||
|
// TODO(dalecurtis): Just use the profile from the codec context if ffmpeg
|
||||||
|
// ever starts supporting xHE-AAC.
|
||||||
|
- if (codec_context->profile == FF_PROFILE_UNKNOWN) {
|
||||||
|
+ constexpr uint8_t kXHEAAc = 41;
|
||||||
|
+ if (codec_context->profile == FF_PROFILE_UNKNOWN ||
|
||||||
|
+ codec_context->profile == kXHEAAc) {
|
||||||
|
// Errors aren't fatal here, so just drop any MediaLog messages.
|
||||||
|
NullMediaLog media_log;
|
||||||
|
mp4::AAC aac_parser;
|
||||||
|
diff --git a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_regression_tests.cc b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_regression_tests.cc
|
||||||
|
index 05dcb1c..866f446 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_regression_tests.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_regression_tests.cc
|
||||||
|
@@ -90,16 +90,16 @@ FFMPEG_TEST_CASE(Cr62127,
|
||||||
|
PIPELINE_ERROR_DECODE,
|
||||||
|
PIPELINE_ERROR_DECODE);
|
||||||
|
FFMPEG_TEST_CASE(Cr93620, "security/93620.ogg", PIPELINE_OK, PIPELINE_OK);
|
||||||
|
-FFMPEG_TEST_CASE(Cr100492,
|
||||||
|
- "security/100492.webm",
|
||||||
|
- DECODER_ERROR_NOT_SUPPORTED,
|
||||||
|
- DECODER_ERROR_NOT_SUPPORTED);
|
||||||
|
+FFMPEG_TEST_CASE(Cr100492, "security/100492.webm", PIPELINE_OK, PIPELINE_OK);
|
||||||
|
FFMPEG_TEST_CASE(Cr100543, "security/100543.webm", PIPELINE_OK, PIPELINE_OK);
|
||||||
|
FFMPEG_TEST_CASE(Cr101458,
|
||||||
|
"security/101458.webm",
|
||||||
|
PIPELINE_ERROR_DECODE,
|
||||||
|
PIPELINE_ERROR_DECODE);
|
||||||
|
-FFMPEG_TEST_CASE(Cr108416, "security/108416.webm", PIPELINE_OK, PIPELINE_OK);
|
||||||
|
+FFMPEG_TEST_CASE(Cr108416,
|
||||||
|
+ "security/108416.webm",
|
||||||
|
+ PIPELINE_ERROR_DECODE,
|
||||||
|
+ PIPELINE_ERROR_DECODE);
|
||||||
|
FFMPEG_TEST_CASE(Cr110849,
|
||||||
|
"security/110849.mkv",
|
||||||
|
DEMUXER_ERROR_COULD_NOT_OPEN,
|
||||||
|
@@ -154,7 +154,10 @@ FFMPEG_TEST_CASE(Cr234630b,
|
||||||
|
"security/234630b.mov",
|
||||||
|
DEMUXER_ERROR_NO_SUPPORTED_STREAMS,
|
||||||
|
DEMUXER_ERROR_NO_SUPPORTED_STREAMS);
|
||||||
|
-FFMPEG_TEST_CASE(Cr242786, "security/242786.webm", PIPELINE_OK, PIPELINE_OK);
|
||||||
|
+FFMPEG_TEST_CASE(Cr242786,
|
||||||
|
+ "security/242786.webm",
|
||||||
|
+ PIPELINE_OK,
|
||||||
|
+ PIPELINE_ERROR_DECODE);
|
||||||
|
// Test for out-of-bounds access with slightly corrupt file (detection logic
|
||||||
|
// thinks it's a MONO file, but actually contains STEREO audio).
|
||||||
|
FFMPEG_TEST_CASE(Cr275590,
|
||||||
|
@@ -372,8 +375,8 @@ FFMPEG_TEST_CASE(WEBM_2,
|
||||||
|
DEMUXER_ERROR_NO_SUPPORTED_STREAMS);
|
||||||
|
FFMPEG_TEST_CASE(WEBM_4,
|
||||||
|
"security/out.webm.68798.1929",
|
||||||
|
- DECODER_ERROR_NOT_SUPPORTED,
|
||||||
|
- DECODER_ERROR_NOT_SUPPORTED);
|
||||||
|
+ PIPELINE_OK,
|
||||||
|
+ PIPELINE_OK);
|
||||||
|
FFMPEG_TEST_CASE(WEBM_5, "frame_size_change.webm", PIPELINE_OK, PIPELINE_OK);
|
||||||
|
|
||||||
|
// General MKV test cases.
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/audio_decoder_unittest.cc b/src/3rdparty/chromium/media/filters/audio_decoder_unittest.cc
|
||||||
|
index a7b2533..ba3c308 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/audio_decoder_unittest.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/audio_decoder_unittest.cc
|
||||||
|
@@ -484,7 +484,7 @@ constexpr TestParams kXheAacTestParams[] = {
|
||||||
|
}},
|
||||||
|
0,
|
||||||
|
29400,
|
||||||
|
- CHANNEL_LAYOUT_MONO,
|
||||||
|
+ CHANNEL_LAYOUT_UNSUPPORTED,
|
||||||
|
AudioCodecProfile::kXHE_AAC},
|
||||||
|
#endif
|
||||||
|
{AudioCodec::kAAC,
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/audio_file_reader.cc b/src/3rdparty/chromium/media/filters/audio_file_reader.cc
|
||||||
|
index 2b58dd7..9d37f32 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/audio_file_reader.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/audio_file_reader.cc
|
||||||
|
@@ -243,18 +243,10 @@ bool AudioFileReader::OnNewFrame(
|
||||||
|
// silence from being output. In the case where we are also discarding some
|
||||||
|
// portion of the packet (as indicated by a negative pts), we further want to
|
||||||
|
// adjust the duration downward by however much exists before zero.
|
||||||
|
-#if BUILDFLAG(USE_SYSTEM_FFMPEG)
|
||||||
|
- if (audio_codec_ == AudioCodec::kAAC && frame->pkt_duration) {
|
||||||
|
-#else
|
||||||
|
if (audio_codec_ == AudioCodec::kAAC && frame->duration) {
|
||||||
|
-#endif // BUILDFLAG(USE_SYSTEM_FFMPEG)
|
||||||
|
const base::TimeDelta pkt_duration = ConvertFromTimeBase(
|
||||||
|
glue_->format_context()->streams[stream_index_]->time_base,
|
||||||
|
-#if BUILDFLAG(USE_SYSTEM_FFMPEG)
|
||||||
|
- frame->pkt_duration + std::min(static_cast<int64_t>(0), frame->pts));
|
||||||
|
-#else
|
||||||
|
frame->duration + std::min(static_cast<int64_t>(0), frame->pts));
|
||||||
|
-#endif // BUILDFLAG(USE_SYSTEM_FFMPEG)
|
||||||
|
const base::TimeDelta frame_duration =
|
||||||
|
base::Seconds(frames_read / static_cast<double>(sample_rate_));
|
||||||
|
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/audio_file_reader_unittest.cc b/src/3rdparty/chromium/media/filters/audio_file_reader_unittest.cc
|
||||||
|
index a1c633d..5784fe1 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/audio_file_reader_unittest.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/audio_file_reader_unittest.cc
|
||||||
|
@@ -61,15 +61,14 @@ class AudioFileReaderTest : public testing::Test {
|
||||||
|
// Verify packets are consistent across demuxer runs. Reads the first few
|
||||||
|
// packets and then seeks back to the start timestamp and verifies that the
|
||||||
|
// hashes match on the packets just read.
|
||||||
|
- void VerifyPackets() {
|
||||||
|
- const int kReads = 3;
|
||||||
|
+ void VerifyPackets(int packet_reads) {
|
||||||
|
const int kTestPasses = 2;
|
||||||
|
|
||||||
|
AVPacket packet;
|
||||||
|
base::TimeDelta start_timestamp;
|
||||||
|
std::vector<std::string> packet_md5_hashes_;
|
||||||
|
for (int i = 0; i < kTestPasses; ++i) {
|
||||||
|
- for (int j = 0; j < kReads; ++j) {
|
||||||
|
+ for (int j = 0; j < packet_reads; ++j) {
|
||||||
|
ASSERT_TRUE(reader_->ReadPacketForTesting(&packet));
|
||||||
|
|
||||||
|
// On the first pass save the MD5 hash of each packet, on subsequent
|
||||||
|
@@ -98,7 +97,8 @@ class AudioFileReaderTest : public testing::Test {
|
||||||
|
int sample_rate,
|
||||||
|
base::TimeDelta duration,
|
||||||
|
int frames,
|
||||||
|
- int expected_frames) {
|
||||||
|
+ int expected_frames,
|
||||||
|
+ int packet_reads = 3) {
|
||||||
|
Initialize(fn);
|
||||||
|
ASSERT_TRUE(reader_->Open());
|
||||||
|
EXPECT_EQ(channels, reader_->channels());
|
||||||
|
@@ -112,7 +112,7 @@ class AudioFileReaderTest : public testing::Test {
|
||||||
|
EXPECT_EQ(reader_->HasKnownDuration(), false);
|
||||||
|
}
|
||||||
|
if (!packet_verification_disabled_)
|
||||||
|
- ASSERT_NO_FATAL_FAILURE(VerifyPackets());
|
||||||
|
+ ASSERT_NO_FATAL_FAILURE(VerifyPackets(packet_reads));
|
||||||
|
ReadAndVerify(hash, expected_frames);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -219,7 +219,7 @@ TEST_F(AudioFileReaderTest, AAC_ADTS) {
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(AudioFileReaderTest, MidStreamConfigChangesFail) {
|
||||||
|
- RunTestFailingDecode("midstream_config_change.mp3", 42624);
|
||||||
|
+ RunTestFailingDecode("midstream_config_change.mp3", 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@@ -229,7 +229,7 @@ TEST_F(AudioFileReaderTest, VorbisInvalidChannelLayout) {
|
||||||
|
|
||||||
|
TEST_F(AudioFileReaderTest, WaveValidFourChannelLayout) {
|
||||||
|
RunTest("4ch.wav", "131.71,38.02,130.31,44.89,135.98,42.52,", 4, 44100,
|
||||||
|
- base::Microseconds(100001), 4411, 4410);
|
||||||
|
+ base::Microseconds(100001), 4411, 4410, /*packet_reads=*/2);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(AudioFileReaderTest, ReadPartialMP3) {
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc b/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc
|
||||||
|
index e62b2af..ab39796 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc
|
||||||
|
@@ -125,7 +125,7 @@ bool FFmpegVideoDecoder::IsCodecSupported(VideoCodec codec) {
|
||||||
|
}
|
||||||
|
|
||||||
|
FFmpegVideoDecoder::FFmpegVideoDecoder(MediaLog* media_log)
|
||||||
|
- : media_log_(media_log) {
|
||||||
|
+ : media_log_(media_log), timestamp_map_(128) {
|
||||||
|
DVLOG(1) << __func__;
|
||||||
|
DETACH_FROM_SEQUENCE(sequence_checker_);
|
||||||
|
}
|
||||||
|
@@ -204,10 +204,6 @@ int FFmpegVideoDecoder::GetVideoBuffer(struct AVCodecContext* codec_context,
|
||||||
|
frame->linesize[plane] = layout->planes()[plane].stride;
|
||||||
|
}
|
||||||
|
|
||||||
|
- // This seems unsafe, given threaded decoding. However, `reordered_opaque` is
|
||||||
|
- // also going away upstream, so we need a whole new mechanism either way.
|
||||||
|
- frame->reordered_opaque = codec_context->reordered_opaque;
|
||||||
|
-
|
||||||
|
// This will be freed by `ReleaseVideoBufferImpl`.
|
||||||
|
auto* opaque = new OpaqueData(fb_priv, frame_pool_, data, allocation_size,
|
||||||
|
std::move(*layout));
|
||||||
|
@@ -354,8 +350,10 @@ bool FFmpegVideoDecoder::FFmpegDecode(const DecoderBuffer& buffer) {
|
||||||
|
DCHECK(packet->data);
|
||||||
|
DCHECK_GT(packet->size, 0);
|
||||||
|
|
||||||
|
- // Let FFmpeg handle presentation timestamp reordering.
|
||||||
|
- codec_context_->reordered_opaque = buffer.timestamp().InMicroseconds();
|
||||||
|
+ const int64_t timestamp = buffer.timestamp().InMicroseconds();
|
||||||
|
+ const TimestampId timestamp_id = timestamp_id_generator_.GenerateNextId();
|
||||||
|
+ timestamp_map_.Put(std::make_pair(timestamp_id, timestamp));
|
||||||
|
+ packet->opaque = reinterpret_cast<void*>(timestamp_id.GetUnsafeValue());
|
||||||
|
}
|
||||||
|
FFmpegDecodingLoop::DecodeStatus decode_status = decoding_loop_->DecodePacket(
|
||||||
|
packet, base::BindRepeating(&FFmpegVideoDecoder::OnNewFrame,
|
||||||
|
@@ -414,7 +412,12 @@ bool FFmpegVideoDecoder::OnNewFrame(AVFrame* frame) {
|
||||||
|
}
|
||||||
|
gfx::Size natural_size = aspect_ratio.GetNaturalSize(visible_rect);
|
||||||
|
|
||||||
|
- const auto pts = base::Microseconds(frame->reordered_opaque);
|
||||||
|
+ const auto ts_id = TimestampId(reinterpret_cast<size_t>(frame->opaque));
|
||||||
|
+ const auto ts_lookup = timestamp_map_.Get(ts_id);
|
||||||
|
+ if (ts_lookup == timestamp_map_.end()) {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ const auto pts = base::Microseconds(std::get<1>(*ts_lookup));
|
||||||
|
auto video_frame = VideoFrame::WrapExternalDataWithLayout(
|
||||||
|
opaque->layout, visible_rect, natural_size, opaque->data, opaque->size,
|
||||||
|
pts);
|
||||||
|
@@ -489,8 +492,10 @@ bool FFmpegVideoDecoder::ConfigureDecoder(const VideoDecoderConfig& config,
|
||||||
|
codec_context_->thread_count = GetFFmpegVideoDecoderThreadCount(config);
|
||||||
|
codec_context_->thread_type =
|
||||||
|
FF_THREAD_SLICE | (low_delay ? 0 : FF_THREAD_FRAME);
|
||||||
|
+
|
||||||
|
codec_context_->opaque = this;
|
||||||
|
codec_context_->get_buffer2 = GetVideoBufferImpl;
|
||||||
|
+ codec_context_->flags |= AV_CODEC_FLAG_COPY_OPAQUE;
|
||||||
|
|
||||||
|
if (decode_nalus_)
|
||||||
|
codec_context_->flags2 |= AV_CODEC_FLAG2_CHUNKS;
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.h b/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.h
|
||||||
|
index 60cb9d5..4fa8628 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.h
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.h
|
||||||
|
@@ -7,10 +7,12 @@
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
+#include "base/containers/lru_cache.h"
|
||||||
|
#include "base/functional/callback.h"
|
||||||
|
#include "base/memory/raw_ptr.h"
|
||||||
|
#include "base/memory/scoped_refptr.h"
|
||||||
|
#include "base/sequence_checker.h"
|
||||||
|
+#include "base/types/id_type.h"
|
||||||
|
#include "media/base/supported_video_decoder_config.h"
|
||||||
|
#include "media/base/video_decoder.h"
|
||||||
|
#include "media/base/video_decoder_config.h"
|
||||||
|
@@ -87,6 +89,20 @@ class MEDIA_EXPORT FFmpegVideoDecoder : public VideoDecoder {
|
||||||
|
// FFmpeg structures owned by this object.
|
||||||
|
std::unique_ptr<AVCodecContext, ScopedPtrAVFreeContext> codec_context_;
|
||||||
|
|
||||||
|
+ // The gist here is that timestamps need to be 64 bits to store microsecond
|
||||||
|
+ // precision. A 32 bit integer would overflow at ~35 minutes at this level of
|
||||||
|
+ // precision. We can't cast the timestamp to the void ptr object used by the
|
||||||
|
+ // opaque field in ffmpeg then, because it would lose data on a 32 bit build.
|
||||||
|
+ // However, we don't actually have 2^31 timestamped frames in a single
|
||||||
|
+ // playback, so it's fine to use the 32 bit value as a key in a map which
|
||||||
|
+ // contains the actual timestamps. Additionally, we've in the past set 128
|
||||||
|
+ // outstanding frames for re-ordering as a limit for cross-thread decoding
|
||||||
|
+ // tasks, so we'll do that here too with the LRU cache.
|
||||||
|
+ using TimestampId = base::IdType<int64_t, size_t, 0>;
|
||||||
|
+
|
||||||
|
+ TimestampId::Generator timestamp_id_generator_;
|
||||||
|
+ base::LRUCache<TimestampId, int64_t> timestamp_map_;
|
||||||
|
+
|
||||||
|
VideoDecoderConfig config_;
|
||||||
|
|
||||||
|
scoped_refptr<FrameBufferPool> frame_pool_;
|
||||||
|
diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc
|
||||||
|
index f67718c..fe42aef 100644
|
||||||
|
--- a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc
|
||||||
|
+++ b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc
|
||||||
|
@@ -229,7 +229,6 @@ int H264DecoderImpl::AVGetBuffer2(AVCodecContext* context,
|
||||||
|
int total_size = y_size + 2 * uv_size;
|
||||||
|
|
||||||
|
av_frame->format = context->pix_fmt;
|
||||||
|
- av_frame->reordered_opaque = context->reordered_opaque;
|
||||||
|
|
||||||
|
// Create a VideoFrame object, to keep a reference to the buffer.
|
||||||
|
// TODO(nisse): The VideoFrame's timestamp and rotation info is not used.
|
||||||
|
@@ -377,8 +376,6 @@ int32_t H264DecoderImpl::Decode(const EncodedImage& input_image,
|
||||||
|
return WEBRTC_VIDEO_CODEC_ERROR;
|
||||||
|
}
|
||||||
|
packet->size = static_cast<int>(input_image.size());
|
||||||
|
- int64_t frame_timestamp_us = input_image.ntp_time_ms_ * 1000; // ms -> μs
|
||||||
|
- av_context_->reordered_opaque = frame_timestamp_us;
|
||||||
|
|
||||||
|
int result = avcodec_send_packet(av_context_.get(), packet.get());
|
||||||
|
|
||||||
|
@@ -395,10 +392,6 @@ int32_t H264DecoderImpl::Decode(const EncodedImage& input_image,
|
||||||
|
return WEBRTC_VIDEO_CODEC_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
- // We don't expect reordering. Decoded frame timestamp should match
|
||||||
|
- // the input one.
|
||||||
|
- RTC_DCHECK_EQ(av_frame_->reordered_opaque, frame_timestamp_us);
|
||||||
|
-
|
||||||
|
// TODO(sakal): Maybe it is possible to get QP directly from FFmpeg.
|
||||||
|
h264_bitstream_parser_.ParseBitstream(input_image);
|
||||||
|
absl::optional<int> qp = h264_bitstream_parser_.GetLastSliceQp();
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - WebSockets component
|
Summary: Qt6 - WebSockets component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -118,6 +118,9 @@ popd
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Summary: Qt6 - WebView component
|
Summary: Qt6 - WebView component
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
@ -102,6 +102,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
Name: qt6
|
Name: qt6
|
||||||
Version: 6.8.1
|
Version: 6.8.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Qt6 meta package
|
Summary: Qt6 meta package
|
||||||
License: GPL-3.0-only
|
License: GPL-3.0-only
|
||||||
@ -148,6 +148,9 @@ echo "- Qt6 devel meta package" > %{buildroot}%{_docdir}/qt6-devel/README
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 1 2025 Raven <raven@sysadmins.ws> - 6.8.2-1
|
||||||
|
- 6.8.2
|
||||||
|
|
||||||
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
* Tue Dec 3 2024 Raven <raven@sysadmins.ws> - 6.8.1-1
|
||||||
- 6.8.1
|
- 6.8.1
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
%global debug_package %{nil}
|
%global debug_package %{nil}
|
||||||
|
|
||||||
%global shortname clc
|
%global shortname clc
|
||||||
%global libclc_version 19.1.2
|
%global libclc_version 19.1.7
|
||||||
#global rc_ver 4
|
#global rc_ver 4
|
||||||
%global libclc_srcdir libclc-%{libclc_version}%{?rc_ver:-rc%{rc_ver}}.src
|
%global libclc_srcdir libclc-%{libclc_version}%{?rc_ver:-rc%{rc_ver}}.src
|
||||||
|
|
||||||
@ -94,7 +94,22 @@ export CFLAGS="%{build_cflags} -D__extern_always_inline=inline"
|
|||||||
%{_includedir}/%{shortname}
|
%{_includedir}/%{shortname}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Wed Oct 18 2024 Raven <raven@sysadmins.ws> - 19.1.2-1
|
* Wed Jan 15 2025 Raven <raven@sysadmins.ws> - 19.1.7-1
|
||||||
|
- Update to LLVM 19.1.7
|
||||||
|
|
||||||
|
* Thu Dec 19 2024 Raven <raven@sysadmins.ws> - 19.1.6-1
|
||||||
|
- Update to LLVM 19.1.6
|
||||||
|
|
||||||
|
* Fri Dec 13 2024 Raven <raven@sysadmins.ws> - 19.1.5-1
|
||||||
|
- Update to LLVM 19.1.5
|
||||||
|
|
||||||
|
* Wed Nov 13 2024 Raven <raven@sysadmins.ws> - 19.1.4-1
|
||||||
|
- Update to LLVM 19.1.4
|
||||||
|
|
||||||
|
* Thu Oct 31 2024 Raven <raven@sysadmins.ws> - 19.1.3-1
|
||||||
|
- Update to LLVM 19.1.3
|
||||||
|
|
||||||
|
* Fri Oct 18 2024 Raven <raven@sysadmins.ws> - 19.1.2-1
|
||||||
- Update to 19.1.2
|
- Update to 19.1.2
|
||||||
|
|
||||||
* Wed Oct 2 2024 Raven <raven@sysadmins.ws> - 19.1.1-1
|
* Wed Oct 2 2024 Raven <raven@sysadmins.ws> - 19.1.1-1
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%global maj_ver 19
|
%global maj_ver 19
|
||||||
%global libcxx_version %{maj_ver}.1.1
|
%global libcxx_version %{maj_ver}.1.7
|
||||||
#global rc_ver 4
|
#global rc_ver 4
|
||||||
%global libcxx_srcdir libcxx-%{libcxx_version}%{?rc_ver:-rc%{rc_ver}}.src
|
%global libcxx_srcdir libcxx-%{libcxx_version}%{?rc_ver:-rc%{rc_ver}}.src
|
||||||
%global libcxxabi_srcdir libcxxabi-%{libcxx_version}%{?rc_ver:-rc%{rc_ver}}.src
|
%global libcxxabi_srcdir libcxxabi-%{libcxx_version}%{?rc_ver:-rc%{rc_ver}}.src
|
||||||
@ -258,6 +258,21 @@ rm %{buildroot}%{_pkgdocdir}/html/.buildinfo
|
|||||||
%doc %{_pkgdocdir}/html
|
%doc %{_pkgdocdir}/html
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Jan 15 2025 Raven <raven@sysadmins.ws> - 19.1.7-1
|
||||||
|
- Update to LLVM 19.1.7
|
||||||
|
|
||||||
|
* Thu Dec 19 2024 Raven <raven@sysadmins.ws> - 19.1.6-1
|
||||||
|
- Update to LLVM 19.1.6
|
||||||
|
|
||||||
|
* Fri Dec 13 2024 Raven <raven@sysadmins.ws> - 19.1.5-1
|
||||||
|
- Update to LLVM 19.1.5
|
||||||
|
|
||||||
|
* Wed Nov 13 2024 Raven <raven@sysadmins.ws> - 19.1.4-1
|
||||||
|
- Update to LLVM 19.1.4
|
||||||
|
|
||||||
|
* Fri Oct 31 2024 Raven <raven@sysadmins.ws> - 19.1.3-1
|
||||||
|
- Update to LLVM 19.1.3
|
||||||
|
|
||||||
* Thu Sep 19 2024 Timm Bäder <tbaeder@redhat.com> - 19.1.0-1
|
* Thu Sep 19 2024 Timm Bäder <tbaeder@redhat.com> - 19.1.0-1
|
||||||
- Update to 19.1.0
|
- Update to 19.1.0
|
||||||
|
|
||||||
|
29
modular/llvm/0001-18-Always-build-shared-libs-for-LLD.patch
Normal file
29
modular/llvm/0001-18-Always-build-shared-libs-for-LLD.patch
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
From b1c60d7fa322a2d208556087df9e7ef94bfbffb8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nikita Popov <npopov@redhat.com>
|
||||||
|
Date: Wed, 8 May 2024 12:30:36 +0900
|
||||||
|
Subject: [PATCH] Always build shared libs for LLD
|
||||||
|
|
||||||
|
We don't want to enable BUILD_SHARED_LIBS for the whole build,
|
||||||
|
but we do want to build lld libraries.
|
||||||
|
---
|
||||||
|
lld/cmake/modules/AddLLD.cmake | 5 ++---
|
||||||
|
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lld/cmake/modules/AddLLD.cmake b/lld/cmake/modules/AddLLD.cmake
|
||||||
|
index 2ee066b41535..270c03f096ac 100644
|
||||||
|
--- a/lld/cmake/modules/AddLLD.cmake
|
||||||
|
+++ b/lld/cmake/modules/AddLLD.cmake
|
||||||
|
@@ -7,9 +7,8 @@ macro(add_lld_library name)
|
||||||
|
""
|
||||||
|
""
|
||||||
|
${ARGN})
|
||||||
|
- if(ARG_SHARED)
|
||||||
|
- set(ARG_ENABLE_SHARED SHARED)
|
||||||
|
- endif()
|
||||||
|
+ # Always build shared libs for LLD.
|
||||||
|
+ set(ARG_ENABLE_SHARED SHARED)
|
||||||
|
llvm_add_library(${name} ${ARG_ENABLE_SHARED} ${ARG_UNPARSED_ARGUMENTS})
|
||||||
|
set_target_properties(${name} PROPERTIES FOLDER "lld libraries")
|
||||||
|
|
||||||
|
--
|
||||||
|
2.44.0
|
30
modular/llvm/0001-19-Always-build-shared-libs-for-LLD.patch
Normal file
30
modular/llvm/0001-19-Always-build-shared-libs-for-LLD.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
From 69faadbc396000bfa60c722f6fb9c0fc3fb2daf0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nikita Popov <npopov@redhat.com>
|
||||||
|
Date: Wed, 8 May 2024 12:30:36 +0900
|
||||||
|
Subject: [PATCH] Always build shared libs for LLD
|
||||||
|
|
||||||
|
We don't want to enable BUILD_SHARED_LIBS for the whole build,
|
||||||
|
but we do want to build lld libraries.
|
||||||
|
---
|
||||||
|
lld/cmake/modules/AddLLD.cmake | 5 ++---
|
||||||
|
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lld/cmake/modules/AddLLD.cmake b/lld/cmake/modules/AddLLD.cmake
|
||||||
|
index 9f2684b6f933..743ec87814a2 100644
|
||||||
|
--- a/lld/cmake/modules/AddLLD.cmake
|
||||||
|
+++ b/lld/cmake/modules/AddLLD.cmake
|
||||||
|
@@ -7,9 +7,8 @@ macro(add_lld_library name)
|
||||||
|
""
|
||||||
|
""
|
||||||
|
${ARGN})
|
||||||
|
- if(ARG_SHARED)
|
||||||
|
- set(ARG_ENABLE_SHARED SHARED)
|
||||||
|
- endif()
|
||||||
|
+ # Always build shared libs for LLD.
|
||||||
|
+ set(ARG_ENABLE_SHARED SHARED)
|
||||||
|
llvm_add_library(${name} ${ARG_ENABLE_SHARED} ${ARG_UNPARSED_ARGUMENTS})
|
||||||
|
|
||||||
|
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From d8742e9b361e5fd6fee2298b8ea0aeb4671ec05a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Nikita Popov <npopov@redhat.com>
|
|
||||||
Date: Wed, 22 May 2024 09:39:26 +0200
|
|
||||||
Subject: [PATCH] Remove myst_parser dependency for RHEL
|
|
||||||
|
|
||||||
---
|
|
||||||
clang/docs/conf.py | 3 +--
|
|
||||||
llvm/docs/conf.py | 3 +--
|
|
||||||
2 files changed, 2 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/clang/docs/conf.py b/clang/docs/conf.py
|
|
||||||
index 4cee382a718f..d2e2198e05d4 100644
|
|
||||||
--- a/clang/docs/conf.py
|
|
||||||
+++ b/clang/docs/conf.py
|
|
||||||
@@ -43,8 +43,7 @@ try:
|
|
||||||
|
|
||||||
extensions.append("myst_parser")
|
|
||||||
except ImportError:
|
|
||||||
- if not tags.has("builder-man"):
|
|
||||||
- raise
|
|
||||||
+ pass
|
|
||||||
|
|
||||||
|
|
||||||
# The encoding of source files.
|
|
||||||
diff --git a/llvm/docs/conf.py b/llvm/docs/conf.py
|
|
||||||
index 7f2ed5309606..354a41f11280 100644
|
|
||||||
--- a/llvm/docs/conf.py
|
|
||||||
+++ b/llvm/docs/conf.py
|
|
||||||
@@ -36,8 +36,7 @@ try:
|
|
||||||
|
|
||||||
extensions.append("myst_parser")
|
|
||||||
except ImportError:
|
|
||||||
- if not tags.has("builder-man"):
|
|
||||||
- raise
|
|
||||||
+ pass
|
|
||||||
|
|
||||||
# Automatic anchors for markdown titles
|
|
||||||
from llvm_slug import make_slug
|
|
||||||
--
|
|
||||||
2.44.0
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
|||||||
From 50cd36c2156d375a6d50f661908b460fbbd22e78 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Nikita Popov <npopov@redhat.com>
|
|
||||||
Date: Wed, 22 May 2024 09:39:26 +0200
|
|
||||||
Subject: [PATCH] Remove myst_parser dependency for RHEL
|
|
||||||
|
|
||||||
---
|
|
||||||
clang/docs/conf.py | 3 +--
|
|
||||||
llvm/docs/conf.py | 5 +----
|
|
||||||
2 files changed, 2 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/clang/docs/conf.py b/clang/docs/conf.py
|
|
||||||
index 4cee382a718f..d2e2198e05d4 100644
|
|
||||||
--- a/clang/docs/conf.py
|
|
||||||
+++ b/clang/docs/conf.py
|
|
||||||
@@ -43,8 +43,7 @@ try:
|
|
||||||
|
|
||||||
extensions.append("myst_parser")
|
|
||||||
except ImportError:
|
|
||||||
- if not tags.has("builder-man"):
|
|
||||||
- raise
|
|
||||||
+ pass
|
|
||||||
|
|
||||||
|
|
||||||
# The encoding of source files.
|
|
||||||
diff --git a/llvm/docs/conf.py b/llvm/docs/conf.py
|
|
||||||
index d9fa6961032b..e38c009a457d 100644
|
|
||||||
--- a/llvm/docs/conf.py
|
|
||||||
+++ b/llvm/docs/conf.py
|
|
||||||
@@ -36,10 +36,7 @@ try:
|
|
||||||
|
|
||||||
extensions.append("myst_parser")
|
|
||||||
except ImportError:
|
|
||||||
- if not tags.has("builder-man"):
|
|
||||||
- raise
|
|
||||||
-else:
|
|
||||||
- myst_enable_extensions = ["substitution"]
|
|
||||||
+ pass
|
|
||||||
|
|
||||||
# Automatic anchors for markdown titles
|
|
||||||
myst_heading_anchors = 6
|
|
||||||
--
|
|
||||||
2.46.0
|
|
||||||
|
|
129
modular/llvm/0001-CMake-Add-missing-dependency-108461.patch
Normal file
129
modular/llvm/0001-CMake-Add-missing-dependency-108461.patch
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
From 17ff6161b83e6a5e86fcb6a13c5551bba1438405 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Erick Ochoa <github@ceci-nest-pas.me>
|
||||||
|
Date: Thu, 12 Sep 2024 21:16:58 -0400
|
||||||
|
Subject: [PATCH 1/9] [CMake] Add missing dependency (#108461)
|
||||||
|
|
||||||
|
The [`mlir-capi-execution-engine-test` test
|
||||||
|
executable](https://github.com/llvm/llvm-project/blob/main/mlir/test/CAPI/CMakeLists.txt#L26-L34)
|
||||||
|
|
||||||
|
```cmake
|
||||||
|
if(MLIR_ENABLE_EXECUTION_ENGINE)
|
||||||
|
_add_capi_test_executable(mlir-capi-execution-engine-test
|
||||||
|
execution_engine.c
|
||||||
|
LINK_LIBS PRIVATE
|
||||||
|
MLIRCAPIConversion
|
||||||
|
MLIRCAPIExecutionEngine
|
||||||
|
MLIRCAPIRegisterEverything
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
is run by lit tests, but it is not properly listed as a dependency. It
|
||||||
|
is added in places conditionally across the file
|
||||||
|
[`tests/CMakeLists.txt`](https://github.com/llvm/llvm-project/blob/main/mlir/test/CMakeLists.txt#L130-L143)
|
||||||
|
|
||||||
|
```cmake
|
||||||
|
# The native target may not be enabled, in this case we won't
|
||||||
|
# run tests that involves executing on the host: do not build
|
||||||
|
# useless binaries.
|
||||||
|
if(LLVM_ENABLE_PIC AND TARGET ${LLVM_NATIVE_ARCH})
|
||||||
|
list(APPEND MLIR_TEST_DEPENDS
|
||||||
|
mlir-cpu-runner
|
||||||
|
llc
|
||||||
|
mlir_async_runtime
|
||||||
|
mlir-capi-execution-engine-test
|
||||||
|
mlir_c_runner_utils
|
||||||
|
mlir_runner_utils
|
||||||
|
mlir_float16_utils
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
```
|
||||||
|
|
||||||
|
But this condition is not the same as the one where the test executable
|
||||||
|
is added. [It has been reported on discord that the following error
|
||||||
|
occurred:](https://discord.com/channels/636084430946959380/642426447167881246/1283811636725022730)
|
||||||
|
|
||||||
|
```
|
||||||
|
FAIL: MLIR :: CAPI/execution_engine.c (2 of 2121)
|
||||||
|
******************** TEST 'MLIR :: CAPI/execution_engine.c' FAILED ********************
|
||||||
|
Exit Code: 127
|
||||||
|
Command Output (stdout):
|
||||||
|
--
|
||||||
|
# RUN: at line 10
|
||||||
|
/usr/bin/mlir-capi-execution-engine-test 2>&1 | /usr/bin/FileCheck /builddir/build/BUILD/mlir-19.1.0_rc4-build/mlir-19.1.0-rc4.src/test/CAPI/execution_engine.c
|
||||||
|
# executed command: /usr/bin/mlir-capi-execution-engine-test
|
||||||
|
# .---command stderr------------
|
||||||
|
# | '/usr/bin/mlir-capi-execution-engine-test': command not found
|
||||||
|
# `-----------------------------
|
||||||
|
```
|
||||||
|
|
||||||
|
This error will not be deterministic and is dependent on the order in
|
||||||
|
which tools are built. If by any chance,
|
||||||
|
`mlir-capi-execution-engine-test` is built before the lit tests run,
|
||||||
|
then nothing will happen. But lit tests can be run before
|
||||||
|
`mlir-capi-execution-engine-test` is built.
|
||||||
|
|
||||||
|
This patch adds the `mlir-capi-execution-engine` to the
|
||||||
|
`MLIR_TEST_DEPENDS` list when the `MLIR_ENABLE_EXECUTION_ENGINE` flag is
|
||||||
|
present.
|
||||||
|
|
||||||
|
Happy to make changes like:
|
||||||
|
* removing `mlir-capi-execution-engine-test` from the other place where
|
||||||
|
it is included in the tests
|
||||||
|
* and merge and sort alphabetically these two commands
|
||||||
|
|
||||||
|
```cmake
|
||||||
|
set(MLIR_TEST_DEPENDS
|
||||||
|
FileCheck count not split-file
|
||||||
|
mlir-capi-ir-test
|
||||||
|
mlir-capi-irdl-test
|
||||||
|
mlir-capi-llvm-test
|
||||||
|
mlir-capi-pass-test
|
||||||
|
mlir-capi-quant-test
|
||||||
|
mlir-capi-rewrite-test
|
||||||
|
mlir-capi-sparse-tensor-test
|
||||||
|
mlir-capi-transform-test
|
||||||
|
mlir-capi-transform-interpreter-test
|
||||||
|
mlir-capi-translation-test
|
||||||
|
mlir-linalg-ods-yaml-gen
|
||||||
|
mlir-lsp-server
|
||||||
|
mlir-opt
|
||||||
|
mlir-query
|
||||||
|
mlir-reduce
|
||||||
|
mlir-tblgen
|
||||||
|
mlir-translate
|
||||||
|
tblgen-lsp-server
|
||||||
|
tblgen-to-irdl
|
||||||
|
)
|
||||||
|
|
||||||
|
set(MLIR_TEST_DEPENDS ${MLIR_TEST_DEPENDS}
|
||||||
|
mlir-capi-pdl-test
|
||||||
|
mlir-pdll-lsp-server
|
||||||
|
mlir-pdll
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
Co-authored-by: Erick Ochoa <erick@ceci-nest-pas.me>
|
||||||
|
---
|
||||||
|
mlir/test/CMakeLists.txt | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/mlir/test/CMakeLists.txt b/mlir/test/CMakeLists.txt
|
||||||
|
index df95e5db11f1..4d2d738b734e 100644
|
||||||
|
--- a/mlir/test/CMakeLists.txt
|
||||||
|
+++ b/mlir/test/CMakeLists.txt
|
||||||
|
@@ -150,6 +150,10 @@ if(MLIR_ENABLE_CUDA_RUNNER)
|
||||||
|
list(APPEND MLIR_TEST_DEPENDS mlir_cuda_runtime)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
+if(MLIR_ENABLE_EXECUTION_ENGINE)
|
||||||
|
+ list(APPEND MLIR_TEST_DEPENDS mlir-capi-execution-engine-test)
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
if(MLIR_ENABLE_ROCM_RUNNER)
|
||||||
|
list(APPEND MLIR_TEST_DEPENDS mlir_rocm_runtime)
|
||||||
|
endif()
|
||||||
|
--
|
||||||
|
2.46.0
|
||||||
|
|
@ -0,0 +1,41 @@
|
|||||||
|
From 73d3b4047d757ef35850e2cef38285b96be82f0f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nikita Popov <npopov@redhat.com>
|
||||||
|
Date: Tue, 23 May 2023 12:17:29 +0200
|
||||||
|
Subject: [PATCH] [Driver] Give devtoolset path precedence over InstalledDir
|
||||||
|
|
||||||
|
This is a followup to the change from c5fe10f365247c3dd9416b7ec8bad73a60b5946e.
|
||||||
|
While that commit correctly adds the bindir from devtoolset to the
|
||||||
|
path, the driver dir / install dir still comes first. This means
|
||||||
|
we'll still end up picking /usr/bin/ld rather than the one from
|
||||||
|
devtoolset.
|
||||||
|
|
||||||
|
Unfortunately, I don't see any way to test this. In the environment
|
||||||
|
the tests are run, this would only result in a behavior difference
|
||||||
|
if there is an ld binary present in the LLVM build directory, which
|
||||||
|
isn't the case.
|
||||||
|
|
||||||
|
Differential Revision: https://reviews.llvm.org/D151203
|
||||||
|
---
|
||||||
|
clang/lib/Driver/ToolChains/Linux.cpp | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
|
||||||
|
index 853ff99d9fe5..aecabb46d4b9 100644
|
||||||
|
--- a/clang/lib/Driver/ToolChains/Linux.cpp
|
||||||
|
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
|
||||||
|
@@ -244,9 +244,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
|
||||||
|
// With devtoolset on RHEL, we want to add a bin directory that is relative
|
||||||
|
// to the detected gcc install, because if we are using devtoolset gcc then
|
||||||
|
// we want to use other tools from devtoolset (e.g. ld) instead of the
|
||||||
|
- // standard system tools.
|
||||||
|
- PPaths.push_back(Twine(GCCInstallation.getParentLibPath() +
|
||||||
|
- "/../bin").str());
|
||||||
|
+ // standard system tools. This should take precedence over InstalledDir.
|
||||||
|
+ PPaths.insert(PPaths.begin(),
|
||||||
|
+ Twine(GCCInstallation.getParentLibPath() + "/../bin").str());
|
||||||
|
|
||||||
|
if (Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb)
|
||||||
|
ExtraOpts.push_back("-X");
|
||||||
|
--
|
||||||
|
2.40.1
|
||||||
|
|
@ -0,0 +1,80 @@
|
|||||||
|
From c8f93f1958de1f59222a89dd64a573f91105e135 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Konrad Kleine <kkleine@redhat.com>
|
||||||
|
Date: Tue, 3 Dec 2024 20:53:29 +0100
|
||||||
|
Subject: [PATCH] [mlir] Specify deps via `LLVM_LINK_COMPONENTS`
|
||||||
|
|
||||||
|
This specifies the dependencies to link against with
|
||||||
|
`LLVM_LINK_COMPONENTS` for the
|
||||||
|
`mlir/test/Target/LLVM/MLIRTargetLLVMTests` binary.
|
||||||
|
|
||||||
|
Before, the dependencies where directly added to the
|
||||||
|
`target_link_libraries()` call which caused the problems I describe
|
||||||
|
next:
|
||||||
|
|
||||||
|
When doing a build of LLVM with MLIR I want to link against
|
||||||
|
`libLLVM.so` instead of statically linking `libLLVMSupport.a`.
|
||||||
|
MLIR on the other side seems to statically link against
|
||||||
|
`libLLVMSupport.a` because when I link to the shared library `libLLVM.so` I get:
|
||||||
|
|
||||||
|
```
|
||||||
|
CommandLine Error: Option 'aarch64-ptrauth-auth-checks' registered more than once!
|
||||||
|
```
|
||||||
|
|
||||||
|
This error indicates that the `Support` library is linked twice in the `MLIRTargetLLVMTest` binary.
|
||||||
|
|
||||||
|
Here's the creation of the `MLIRTargetLLVMTest` binary before (Notice the
|
||||||
|
`libLLVMSupport.a`):
|
||||||
|
|
||||||
|
```
|
||||||
|
[6535/6847] : && /usr/bin/clang++ -O2 -flto=thin -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS --config=/usr/lib/rpm/redhat/redhat-hardened-clang.cfg -fstack-protector-strong -mbranch-protection=standard -fasynchronous-unwind-tables -D_DEFAULT_SOURCE -Dasm=__asm__ -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Werror=mismatched-tags -O2 -g -DNDEBUG -Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now --config=/usr/lib/rpm/redhat/redhat-hardened-clang-ld.cfg -flto=thin -ffat-lto-objects -Wl,--build-id=sha1 -Wl,--gc-sections -fno-lto tools/mlir/unittests/Target/LLVM/CMakeFiles/MLIRTargetLLVMTests.dir/SerializeNVVMTarget.cpp.o tools/mlir/unittests/Target/LLVM/CMakeFiles/MLIRTargetLLVMTests.dir/SerializeROCDLTarget.cpp.o tools/mlir/unittests/Target/LLVM/CMakeFiles/MLIRTargetLLVMTests.dir/SerializeToLLVMBitcode.cpp.o -o tools/mlir/unittests/Target/LLVM/MLIRTargetLLVMTests -Wl,-rpath,/builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/lib64 lib64/libllvm_gtest_main.a lib64/libllvm_gtest.a lib64/libMLIRTargetLLVM.a lib64/libMLIRNVVMTarget.a lib64/libMLIRROCDLTarget.a lib64/libMLIRGPUDialect.a lib64/libMLIRNVVMDialect.a lib64/libMLIRLLVMDialect.a lib64/libMLIRLLVMToLLVMIRTranslation.a lib64/libMLIRBuiltinToLLVMIRTranslation.a lib64/libMLIRNVVMToLLVMIRTranslation.a lib64/libMLIRROCDLToLLVMIRTranslation.a lib64/libMLIRGPUToLLVMIRTranslation.a lib64/libLLVMAArch64CodeGen.a lib64/libLLVMAArch64Desc.a lib64/libLLVMAArch64Info.a -lpthread lib64/libMLIRTargetLLVM.a lib64/libMLIRROCDLDialect.a lib64/libMLIRExecutionEngineUtils.a lib64/libMLIRGPUDialect.a lib64/libMLIRMemRefDialect.a lib64/libMLIRArithUtils.a lib64/libMLIRDialectUtils.a lib64/libMLIRComplexDialect.a lib64/libMLIRArithAttrToLLVMConversion.a lib64/libMLIRArithDialect.a lib64/libMLIRCastInterfaces.a lib64/libMLIRDialect.a lib64/libMLIRInferIntRangeCommon.a lib64/libMLIRUBDialect.a lib64/libMLIRShapedOpInterfaces.a lib64/libMLIRTargetLLVMIRExport.a lib64/libMLIRDLTIDialect.a lib64/libMLIRLLVMIRTransforms.a lib64/libMLIRNVVMDialect.a lib64/libMLIRLLVMDialect.a lib64/libMLIRFuncDialect.a lib64/libMLIRTransforms.a lib64/libMLIRMemorySlotInterfaces.a lib64/libMLIRCopyOpInterface.a lib64/libMLIRRuntimeVerifiableOpInterface.a lib64/libMLIRTranslateLib.a lib64/libMLIRParser.a lib64/libMLIRBytecodeReader.a lib64/libMLIRAsmParser.a lib64/libMLIRTransformUtils.a lib64/libMLIRSubsetOpInterface.a lib64/libMLIRValueBoundsOpInterface.a lib64/libMLIRDestinationStyleOpInterface.a lib64/libMLIRRewrite.a lib64/libMLIRRewritePDL.a lib64/libMLIRPDLToPDLInterp.a lib64/libMLIRPass.a lib64/libMLIRAnalysis.a lib64/libMLIRControlFlowInterfaces.a lib64/libMLIRInferIntRangeInterface.a lib64/libMLIRCallInterfaces.a lib64/libMLIRDataLayoutInterfaces.a lib64/libMLIRViewLikeInterface.a lib64/libMLIRLoopLikeInterface.a lib64/libMLIRPresburger.a lib64/libMLIRPDLInterpDialect.a lib64/libMLIRFunctionInterfaces.a lib64/libMLIRPDLDialect.a lib64/libMLIRSideEffectInterfaces.a lib64/libMLIRInferTypeOpInterface.a lib64/libMLIRIR.a lib64/libMLIRSupport.a lib64/libLLVM.so.19.1 lib64/libLLVMAArch64Utils.a lib64/libLLVMAsmPrinter.a lib64/libLLVMCFGuard.a lib64/libLLVMGlobalISel.a lib64/libLLVMSelectionDAG.a lib64/libLLVMCodeGen.a lib64/libLLVMScalarOpts.a lib64/libLLVMAggressiveInstCombine.a lib64/libLLVMInstCombine.a lib64/libLLVMBitWriter.a lib64/libLLVMObjCARCOpts.a lib64/libLLVMCodeGenTypes.a lib64/libLLVMTarget.a lib64/libLLVMVectorize.a lib64/libLLVMTransformUtils.a lib64/libLLVMAnalysis.a lib64/libLLVMProfileData.a lib64/libLLVMSymbolize.a lib64/libLLVMDebugInfoDWARF.a lib64/libLLVMDebugInfoPDB.a lib64/libLLVMObject.a lib64/libLLVMMCParser.a lib64/libLLVMMC.a lib64/libLLVMIRReader.a lib64/libLLVMBitReader.a lib64/libLLVMAsmParser.a lib64/libLLVMTextAPI.a lib64/libLLVMDebugInfoCodeView.a lib64/libLLVMDebugInfoMSF.a lib64/libLLVMDebugInfoBTF.a lib64/libLLVMCore.a lib64/libLLVMBinaryFormat.a lib64/libLLVMRemarks.a lib64/libLLVMBitstreamReader.a lib64/libLLVMTargetParser.a lib64/libLLVMSupport.a lib64/libLLVMDemangle.a -lrt -ldl -lm /usr/lib64/libz.so /usr/lib64/libzstd.so && :
|
||||||
|
```
|
||||||
|
|
||||||
|
Here's the full error:
|
||||||
|
|
||||||
|
```
|
||||||
|
[24/25] cd /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/test && /usr/bin/python3 /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/./bin/llvm-lit -vv /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/test
|
||||||
|
: CommandLine Error: Option 'aarch64-ptrauth-auth-checks' registered more than once!
|
||||||
|
LLVM ERROR: inconsistency in registered CommandLine options
|
||||||
|
llvm-lit: /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/utils/lit/lit/formats/googletest.py:38: warning: unable to discover google-tests in '/builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/unittests/Target/LLVM/./MLIRTargetLLVMTests': Command '['/builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/unittests/Target/LLVM/./MLIRTargetLLVMTests', '--gtest_list_tests', '--gtest_filter=-*DISABLED_*']' died with <Signals.SIGABRT: 6>.. Process output: b''
|
||||||
|
error: filter did not match any tests (of 2704 discovered). Use '--allow-empty-runs' to suppress this error.
|
||||||
|
FAILED: tools/mlir/test/CMakeFiles/check-mlir /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/test/CMakeFiles/check-mlir
|
||||||
|
```
|
||||||
|
|
||||||
|
Here's the CMake invocation:
|
||||||
|
|
||||||
|
```
|
||||||
|
/usr/bin/cmake -S . -B redhat-linux-build -DCMAKE_C_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_CXX_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_Fortran_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_INSTALL_DO_STRIP:BOOL=OFF -DCMAKE_INSTALL_PREFIX:PATH=/usr -DINCLUDE_INSTALL_DIR:PATH=/usr/include -DLIB_INSTALL_DIR:PATH=/usr/lib64 -DSYSCONF_INSTALL_DIR:PATH=/etc -DSHARE_INSTALL_PREFIX:PATH=/usr/share -DLIB_SUFFIX=64 -DBUILD_SHARED_LIBS:BOOL=ON -G Ninja '' -DCLANG_BUILD_EXAMPLES:BOOL=OFF -DCLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang/ -DCLANG_DEFAULT_PIE_ON_LINUX=OFF -DCLANG_DEFAULT_UNWINDLIB=libgcc -DCLANG_ENABLE_ARCMT:BOOL=ON -DCLANG_ENABLE_STATIC_ANALYZER:BOOL=ON -DCLANG_INCLUDE_DOCS:BOOL=ON -DCLANG_INCLUDE_TESTS:BOOL=ON -DCLANG_LINK_CLANG_DYLIB=ON -DCLANG_PLUGIN_SUPPORT:BOOL=ON '-DCLANG_REPOSITORY_STRING=Fedora 19.1.3-5.fc42' -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=../clang-tools-extra -DCLANG_RESOURCE_DIR=../lib/clang/19 -DCOMPILER_RT_INCLUDE_TESTS:BOOL=OFF -DCOMPILER_RT_INSTALL_PATH=/usr/lib/clang/19 -DLLVM_ENABLE_DOXYGEN:BOOL=OFF -DLLVM_ENABLE_SPHINX:BOOL=ON -DLLVM_BUILD_DOCS:BOOL=ON -DSPHINX_EXECUTABLE=/usr/bin/sphinx-build-3 -DSPHINX_OUTPUT_HTML:BOOL=OFF -DSPHINX_OUTPUT_MAN:BOOL=ON -DSPHINX_WARNINGS_AS_ERRORS=OFF -DLLDB_DISABLE_CURSES:BOOL=OFF -DLLDB_DISABLE_LIBEDIT:BOOL=OFF -DLLDB_DISABLE_PYTHON:BOOL=OFF -DLLDB_ENFORCE_STRICT_TEST_REQUIREMENTS:BOOL=ON -DLLVM_APPEND_VC_REV:BOOL=OFF -DLLVM_BUILD_EXAMPLES:BOOL=OFF -DLLVM_BUILD_EXTERNAL_COMPILER_RT:BOOL=ON -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON -DLLVM_BUILD_RUNTIME:BOOL=ON -DLLVM_BUILD_TOOLS:BOOL=ON -DLLVM_BUILD_UTILS:BOOL=ON -DLLVM_COMMON_CMAKE_UTILS=/usr/share/llvm/cmake -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-redhat-linux-gnu -DLLVM_DYLIB_COMPONENTS=all -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_FFI:BOOL=ON -DLLVM_ENABLE_LIBCXX:BOOL=OFF -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON '-DLLVM_ENABLE_PROJECTS=clang;clang-tools-extra;lld;lldb;mlir' -DLLVM_ENABLE_RTTI:BOOL=ON '-DLLVM_ENABLE_RUNTIMES=compiler-rt;openmp;offload' -DLLVM_ENABLE_ZLIB:BOOL=ON -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=AVR -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_INCLUDE_EXAMPLES:BOOL=ON -DLLVM_INCLUDE_TOOLS:BOOL=ON -DLLVM_INCLUDE_UTILS:BOOL=ON -DLLVM_INSTALL_TOOLCHAIN_ONLY:BOOL=OFF -DLLVM_INSTALL_UTILS:BOOL=ON -DLLVM_LINK_LLVM_DYLIB:BOOL=ON -DLLVM_PARALLEL_LINK_JOBS=1 -DLLVM_TARGETS_TO_BUILD=all -DLLVM_TOOLS_INSTALL_DIR:PATH=bin -DLLVM_UNREACHABLE_OPTIMIZE:BOOL=OFF -DLLVM_USE_PERF:BOOL=ON -DLLVM_UTILS_INSTALL_DIR:PATH=bin -DMLIR_INCLUDE_DOCS:BOOL=ON -DMLIR_INCLUDE_TESTS:BOOL=ON -DMLIR_INCLUDE_INTEGRATION_TESTS:BOOL=OFF -DMLIR_INSTALL_AGGREGATE_OBJECTS=OFF -DMLIR_BUILD_MLIR_C_DYLIB=ON -DMLIR_ENABLE_BINDINGS_PYTHON:BOOL=ON -DOPENMP_INSTALL_LIBDIR=lib64 -DLIBOMP_INSTALL_ALIASES=OFF -DLLVM_BUILD_TESTS:BOOL=ON -DLLVM_INCLUDE_TESTS:BOOL=ON -DLLVM_INSTALL_GTEST:BOOL=ON -DLLVM_LIT_ARGS=-vv -DLLVM_UNITTEST_LINK_FLAGS=-fno-lto -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_LINKER_BUILD_ID:BOOL=ON -DOFFLOAD_INSTALL_LIBDIR=lib64 -DPython3_EXECUTABLE=/usr/bin/python3 -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON -DPPC_LINUX_DEFAULT_IEEELONGDOUBLE=ON -DLLVM_LIBDIR_SUFFIX=64 -DLLVM_BINUTILS_INCDIR=/usr/include -DLLVM_VERSION_SUFFIX=
|
||||||
|
```
|
||||||
|
---
|
||||||
|
mlir/unittests/Target/LLVM/CMakeLists.txt | 5 ++---
|
||||||
|
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/mlir/unittests/Target/LLVM/CMakeLists.txt b/mlir/unittests/Target/LLVM/CMakeLists.txt
|
||||||
|
index 6d612548a94c..0c61d222dedf 100644
|
||||||
|
--- a/mlir/unittests/Target/LLVM/CMakeLists.txt
|
||||||
|
+++ b/mlir/unittests/Target/LLVM/CMakeLists.txt
|
||||||
|
@@ -1,11 +1,11 @@
|
||||||
|
+set(LLVM_LINK_COMPONENTS nativecodegen)
|
||||||
|
+
|
||||||
|
add_mlir_unittest(MLIRTargetLLVMTests
|
||||||
|
SerializeNVVMTarget.cpp
|
||||||
|
SerializeROCDLTarget.cpp
|
||||||
|
SerializeToLLVMBitcode.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
-llvm_map_components_to_libnames(llvm_libs nativecodegen)
|
||||||
|
-
|
||||||
|
target_link_libraries(MLIRTargetLLVMTests
|
||||||
|
PRIVATE
|
||||||
|
MLIRTargetLLVM
|
||||||
|
@@ -19,7 +19,6 @@ target_link_libraries(MLIRTargetLLVMTests
|
||||||
|
MLIRNVVMToLLVMIRTranslation
|
||||||
|
MLIRROCDLToLLVMIRTranslation
|
||||||
|
MLIRGPUToLLVMIRTranslation
|
||||||
|
- ${llvm_libs}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (DEFINED LLVM_NATIVE_TARGET)
|
||||||
|
--
|
||||||
|
2.46.0
|
||||||
|
|
@ -0,0 +1,77 @@
|
|||||||
|
From 1d043550c7601ca776b0318b9b913e5ecf325baf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tulio Magno Quites Machado Filho <tuliom@redhat.com>
|
||||||
|
Date: Tue, 5 Sep 2023 10:35:37 -0300
|
||||||
|
Subject: [PATCH] Reuse the library directory
|
||||||
|
|
||||||
|
Prefer to get the path to the shared libraries from config.llvm_shlib_dir.
|
||||||
|
Fallback to the previous path only if config.llvm_shlib_dir is not
|
||||||
|
defined.
|
||||||
|
|
||||||
|
This ensures the test will pass regardless of the build configuration
|
||||||
|
used downstream.
|
||||||
|
---
|
||||||
|
mlir/test/lit.cfg.py | 1 +
|
||||||
|
mlir/test/python/execution_engine.py | 12 +++++++-----
|
||||||
|
2 files changed, 8 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/mlir/test/lit.cfg.py b/mlir/test/lit.cfg.py
|
||||||
|
--- a/mlir/test/lit.cfg.py 2024-08-05 10:40:33.000000000 +0200
|
||||||
|
+++ b/mlir/test/lit.cfg.py 2024-08-14 19:17:55.160470316 +0200
|
||||||
|
@@ -164,6 +164,7 @@
|
||||||
|
ToolSubst("transform-opt-ch2", unresolved="ignore"),
|
||||||
|
ToolSubst("transform-opt-ch3", unresolved="ignore"),
|
||||||
|
ToolSubst("transform-opt-ch4", unresolved="ignore"),
|
||||||
|
+ ToolSubst("%llvm_shlib_dir", config.llvm_shlib_dir, unresolved="ignore"),
|
||||||
|
ToolSubst("mlir-transform-opt", unresolved="ignore"),
|
||||||
|
ToolSubst("%mlir_lib_dir", config.mlir_lib_dir, unresolved="ignore"),
|
||||||
|
ToolSubst("%mlir_src_dir", config.mlir_src_root, unresolved="ignore"),
|
||||||
|
diff -ruN mlir-19.1.0-rc2.src.orig/test/python/execution_engine.py mlir-19.1.0-rc2.src/test/python/execution_engine.py
|
||||||
|
--- a/mlir/test/python/execution_engine.py 2024-08-05 10:40:33.000000000 +0200
|
||||||
|
+++ b/mlir/test/python/execution_engine.py 2024-08-14 19:17:20.822219824 +0200
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-# RUN: %PYTHON %s 2>&1 | FileCheck %s
|
||||||
|
+# RUN: env LLVM_SHLIB_DIR=%llvm_shlib_dir %PYTHON %s 2>&1 | FileCheck %s
|
||||||
|
# REQUIRES: host-supports-jit
|
||||||
|
import gc, sys, os, tempfile
|
||||||
|
from mlir.ir import *
|
||||||
|
@@ -6,6 +6,9 @@
|
||||||
|
from mlir.execution_engine import *
|
||||||
|
from mlir.runtime import *
|
||||||
|
|
||||||
|
+_DEFAULT_LIB_DIR = "../../../../lib"
|
||||||
|
+LIB_DIR = os.getenv("LLVM_SHLIB_DIR", _DEFAULT_LIB_DIR)
|
||||||
|
+
|
||||||
|
|
||||||
|
# Log everything to stderr and flush so that we have a unified stream to match
|
||||||
|
# errors/info emitted by MLIR to stderr.
|
||||||
|
@@ -613,6 +616,7 @@
|
||||||
|
shared_libs = [
|
||||||
|
"../../../../bin/mlir_runner_utils.dll",
|
||||||
|
"../../../../bin/mlir_c_runner_utils.dll",
|
||||||
|
+
|
||||||
|
]
|
||||||
|
elif sys.platform == "darwin":
|
||||||
|
shared_libs = [
|
||||||
|
@@ -621,8 +625,9 @@
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
shared_libs = [
|
||||||
|
- "../../../../lib/libmlir_runner_utils.so",
|
||||||
|
- "../../../../lib/libmlir_c_runner_utils.so",
|
||||||
|
+ LIB_DIR + "/libmlir_runner_utils.so",
|
||||||
|
+ LIB_DIR + "/libmlir_c_runner_utils.so",
|
||||||
|
+
|
||||||
|
]
|
||||||
|
|
||||||
|
execution_engine = ExecutionEngine(
|
||||||
|
@@ -664,8 +669,8 @@
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
shared_libs = [
|
||||||
|
- "../../../../lib/libmlir_runner_utils.so",
|
||||||
|
- "../../../../lib/libmlir_c_runner_utils.so",
|
||||||
|
+ LIB_DIR + "/libmlir_runner_utils.so",
|
||||||
|
+ LIB_DIR + "/libmlir_c_runner_utils.so",
|
||||||
|
]
|
||||||
|
|
||||||
|
execution_engine = ExecutionEngine(
|
@ -0,0 +1,62 @@
|
|||||||
|
From b2edeb58b8cb3268acee425cd52b406eb60a8095 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nikita Popov <npopov@redhat.com>
|
||||||
|
Date: Wed, 9 Oct 2024 11:29:30 +0200
|
||||||
|
Subject: [PATCH] [openmp] Add option to disable tsan tests (#111548)
|
||||||
|
|
||||||
|
This adds a OPENMP_TEST_ENABLE_TSAN option that allows to override
|
||||||
|
whether tests using tsan will be enabled. The option defaults to the
|
||||||
|
existing auto-detection.
|
||||||
|
|
||||||
|
The background here is
|
||||||
|
https://github.com/llvm/llvm-project/issues/111492, where we have some
|
||||||
|
systems where tsan doesn't work, but we do still want to build it and
|
||||||
|
run tests that don't use tsan.
|
||||||
|
---
|
||||||
|
openmp/cmake/OpenMPTesting.cmake | 3 +++
|
||||||
|
openmp/tools/archer/tests/CMakeLists.txt | 2 +-
|
||||||
|
openmp/tools/archer/tests/lit.site.cfg.in | 2 +-
|
||||||
|
3 files changed, 5 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/openmp/cmake/OpenMPTesting.cmake b/openmp/cmake/OpenMPTesting.cmake
|
||||||
|
index c67ad8b1cbd9..14cc5c67d84c 100644
|
||||||
|
--- a/openmp/cmake/OpenMPTesting.cmake
|
||||||
|
+++ b/openmp/cmake/OpenMPTesting.cmake
|
||||||
|
@@ -163,6 +163,9 @@ else()
|
||||||
|
set(OPENMP_TEST_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
+set(OPENMP_TEST_ENABLE_TSAN "${OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS}" CACHE BOOL
|
||||||
|
+ "Whether to enable tests using tsan")
|
||||||
|
+
|
||||||
|
# Function to set compiler features for use in lit.
|
||||||
|
function(update_test_compiler_features)
|
||||||
|
set(FEATURES "[")
|
||||||
|
diff --git a/openmp/tools/archer/tests/CMakeLists.txt b/openmp/tools/archer/tests/CMakeLists.txt
|
||||||
|
index 5de91148fa4b..412c7d63725e 100644
|
||||||
|
--- a/openmp/tools/archer/tests/CMakeLists.txt
|
||||||
|
+++ b/openmp/tools/archer/tests/CMakeLists.txt
|
||||||
|
@@ -28,7 +28,7 @@ macro(pythonize_bool var)
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
pythonize_bool(LIBARCHER_HAVE_LIBATOMIC)
|
||||||
|
-pythonize_bool(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS)
|
||||||
|
+pythonize_bool(OPENMP_TEST_ENABLE_TSAN)
|
||||||
|
|
||||||
|
set(ARCHER_TSAN_TEST_DEPENDENCE "")
|
||||||
|
if(TARGET tsan)
|
||||||
|
diff --git a/openmp/tools/archer/tests/lit.site.cfg.in b/openmp/tools/archer/tests/lit.site.cfg.in
|
||||||
|
index 55edfde9738e..ddcb7b8bc3a5 100644
|
||||||
|
--- a/openmp/tools/archer/tests/lit.site.cfg.in
|
||||||
|
+++ b/openmp/tools/archer/tests/lit.site.cfg.in
|
||||||
|
@@ -12,7 +12,7 @@ config.omp_library_dir = "@LIBOMP_LIBRARY_DIR@"
|
||||||
|
config.omp_header_dir = "@LIBOMP_INCLUDE_DIR@"
|
||||||
|
config.operating_system = "@CMAKE_SYSTEM_NAME@"
|
||||||
|
config.has_libatomic = @LIBARCHER_HAVE_LIBATOMIC@
|
||||||
|
-config.has_tsan = @OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS@
|
||||||
|
+config.has_tsan = @OPENMP_TEST_ENABLE_TSAN@
|
||||||
|
|
||||||
|
config.test_archer_flags = "@LIBARCHER_TEST_FLAGS@"
|
||||||
|
config.libarcher_obj_root = "@CMAKE_CURRENT_BINARY_DIR@"
|
||||||
|
--
|
||||||
|
2.46.0
|
||||||
|
|
@ -0,0 +1,205 @@
|
|||||||
|
From 5fb4d7f6079a76b2907ccc8c53c7c509c30a3dca Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nikita Popov <npopov@redhat.com>
|
||||||
|
Date: Thu, 10 Oct 2024 12:47:33 +0000
|
||||||
|
Subject: [PATCH] [openmp] Use core_siblings_list if physical_package_id not
|
||||||
|
available
|
||||||
|
|
||||||
|
On powerpc, physical_package_id may not be available. Currently,
|
||||||
|
this causes openmp to fall back to flat topology and various
|
||||||
|
affinity tests fail.
|
||||||
|
|
||||||
|
Fix this by parsing core_siblings_list to deterimine which cpus
|
||||||
|
belong to the same socket. This matches what the testing code
|
||||||
|
does. The code to parse the CPU list format thankfully already
|
||||||
|
exists.
|
||||||
|
|
||||||
|
Fixes https://github.com/llvm/llvm-project/issues/111809.
|
||||||
|
---
|
||||||
|
openmp/runtime/src/kmp_affinity.cpp | 100 +++++++++++++------
|
||||||
|
openmp/runtime/test/affinity/kmp-hw-subset.c | 2 +-
|
||||||
|
2 files changed, 72 insertions(+), 30 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/openmp/runtime/src/kmp_affinity.cpp b/openmp/runtime/src/kmp_affinity.cpp
|
||||||
|
index cf5cad04eb57..c3d5ecf1345e 100644
|
||||||
|
--- a/openmp/runtime/src/kmp_affinity.cpp
|
||||||
|
+++ b/openmp/runtime/src/kmp_affinity.cpp
|
||||||
|
@@ -1589,15 +1589,13 @@ kmp_str_buf_t *__kmp_affinity_str_buf_mask(kmp_str_buf_t *buf,
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
-// Return (possibly empty) affinity mask representing the offline CPUs
|
||||||
|
-// Caller must free the mask
|
||||||
|
-kmp_affin_mask_t *__kmp_affinity_get_offline_cpus() {
|
||||||
|
- kmp_affin_mask_t *offline;
|
||||||
|
- KMP_CPU_ALLOC(offline);
|
||||||
|
- KMP_CPU_ZERO(offline);
|
||||||
|
+static kmp_affin_mask_t *__kmp_parse_cpu_list(const char *path) {
|
||||||
|
+ kmp_affin_mask_t *mask;
|
||||||
|
+ KMP_CPU_ALLOC(mask);
|
||||||
|
+ KMP_CPU_ZERO(mask);
|
||||||
|
#if KMP_OS_LINUX
|
||||||
|
int n, begin_cpu, end_cpu;
|
||||||
|
- kmp_safe_raii_file_t offline_file;
|
||||||
|
+ kmp_safe_raii_file_t file;
|
||||||
|
auto skip_ws = [](FILE *f) {
|
||||||
|
int c;
|
||||||
|
do {
|
||||||
|
@@ -1606,29 +1604,29 @@ kmp_affin_mask_t *__kmp_affinity_get_offline_cpus() {
|
||||||
|
if (c != EOF)
|
||||||
|
ungetc(c, f);
|
||||||
|
};
|
||||||
|
- // File contains CSV of integer ranges representing the offline CPUs
|
||||||
|
+ // File contains CSV of integer ranges representing the CPUs
|
||||||
|
// e.g., 1,2,4-7,9,11-15
|
||||||
|
- int status = offline_file.try_open("/sys/devices/system/cpu/offline", "r");
|
||||||
|
+ int status = file.try_open(path, "r");
|
||||||
|
if (status != 0)
|
||||||
|
- return offline;
|
||||||
|
- while (!feof(offline_file)) {
|
||||||
|
- skip_ws(offline_file);
|
||||||
|
- n = fscanf(offline_file, "%d", &begin_cpu);
|
||||||
|
+ return mask;
|
||||||
|
+ while (!feof(file)) {
|
||||||
|
+ skip_ws(file);
|
||||||
|
+ n = fscanf(file, "%d", &begin_cpu);
|
||||||
|
if (n != 1)
|
||||||
|
break;
|
||||||
|
- skip_ws(offline_file);
|
||||||
|
- int c = fgetc(offline_file);
|
||||||
|
+ skip_ws(file);
|
||||||
|
+ int c = fgetc(file);
|
||||||
|
if (c == EOF || c == ',') {
|
||||||
|
// Just single CPU
|
||||||
|
end_cpu = begin_cpu;
|
||||||
|
} else if (c == '-') {
|
||||||
|
// Range of CPUs
|
||||||
|
- skip_ws(offline_file);
|
||||||
|
- n = fscanf(offline_file, "%d", &end_cpu);
|
||||||
|
+ skip_ws(file);
|
||||||
|
+ n = fscanf(file, "%d", &end_cpu);
|
||||||
|
if (n != 1)
|
||||||
|
break;
|
||||||
|
- skip_ws(offline_file);
|
||||||
|
- c = fgetc(offline_file); // skip ','
|
||||||
|
+ skip_ws(file);
|
||||||
|
+ c = fgetc(file); // skip ','
|
||||||
|
} else {
|
||||||
|
// Syntax problem
|
||||||
|
break;
|
||||||
|
@@ -1638,13 +1636,19 @@ kmp_affin_mask_t *__kmp_affinity_get_offline_cpus() {
|
||||||
|
end_cpu >= __kmp_xproc || begin_cpu > end_cpu) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
- // Insert [begin_cpu, end_cpu] into offline mask
|
||||||
|
+ // Insert [begin_cpu, end_cpu] into mask
|
||||||
|
for (int cpu = begin_cpu; cpu <= end_cpu; ++cpu) {
|
||||||
|
- KMP_CPU_SET(cpu, offline);
|
||||||
|
+ KMP_CPU_SET(cpu, mask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
- return offline;
|
||||||
|
+ return mask;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Return (possibly empty) affinity mask representing the offline CPUs
|
||||||
|
+// Caller must free the mask
|
||||||
|
+kmp_affin_mask_t *__kmp_affinity_get_offline_cpus() {
|
||||||
|
+ return __kmp_parse_cpu_list("/sys/devices/system/cpu/offline");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the number of available procs
|
||||||
|
@@ -3175,6 +3179,37 @@ static inline const char *__kmp_cpuinfo_get_envvar() {
|
||||||
|
return envvar;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static bool __kmp_package_id_from_core_siblings_list(unsigned **threadInfo,
|
||||||
|
+ unsigned num_avail,
|
||||||
|
+ unsigned idx) {
|
||||||
|
+ if (!KMP_AFFINITY_CAPABLE())
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
+ char path[256];
|
||||||
|
+ KMP_SNPRINTF(path, sizeof(path),
|
||||||
|
+ "/sys/devices/system/cpu/cpu%u/topology/core_siblings_list",
|
||||||
|
+ threadInfo[idx][osIdIndex]);
|
||||||
|
+ kmp_affin_mask_t *siblings = __kmp_parse_cpu_list(path);
|
||||||
|
+ for (unsigned i = 0; i < num_avail; ++i) {
|
||||||
|
+ unsigned cpu_id = threadInfo[i][osIdIndex];
|
||||||
|
+ KMP_ASSERT(cpu_id < __kmp_affin_mask_size * CHAR_BIT);
|
||||||
|
+ if (!KMP_CPU_ISSET(cpu_id, siblings))
|
||||||
|
+ continue;
|
||||||
|
+ if (threadInfo[i][pkgIdIndex] == UINT_MAX) {
|
||||||
|
+ // Arbitrarily pick the first index we encounter, it only matters that
|
||||||
|
+ // the value is the same for all siblings.
|
||||||
|
+ threadInfo[i][pkgIdIndex] = idx;
|
||||||
|
+ } else if (threadInfo[i][pkgIdIndex] != idx) {
|
||||||
|
+ // Contradictory sibling lists.
|
||||||
|
+ KMP_CPU_FREE(siblings);
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ KMP_ASSERT(threadInfo[idx][pkgIdIndex] != UINT_MAX);
|
||||||
|
+ KMP_CPU_FREE(siblings);
|
||||||
|
+ return true;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
// Parse /proc/cpuinfo (or an alternate file in the same format) to obtain the
|
||||||
|
// affinity map. On AIX, the map is obtained through system SRAD (Scheduler
|
||||||
|
// Resource Allocation Domain).
|
||||||
|
@@ -3550,18 +3585,13 @@ static bool __kmp_affinity_create_cpuinfo_map(int *line,
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
- // Check for missing fields. The osId field must be there, and we
|
||||||
|
- // currently require that the physical id field is specified, also.
|
||||||
|
+ // Check for missing fields. The osId field must be there. The physical
|
||||||
|
+ // id field will be checked later.
|
||||||
|
if (threadInfo[num_avail][osIdIndex] == UINT_MAX) {
|
||||||
|
CLEANUP_THREAD_INFO;
|
||||||
|
*msg_id = kmp_i18n_str_MissingProcField;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
- if (threadInfo[0][pkgIdIndex] == UINT_MAX) {
|
||||||
|
- CLEANUP_THREAD_INFO;
|
||||||
|
- *msg_id = kmp_i18n_str_MissingPhysicalIDField;
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
|
||||||
|
// Skip this proc if it is not included in the machine model.
|
||||||
|
if (KMP_AFFINITY_CAPABLE() &&
|
||||||
|
@@ -3591,6 +3621,18 @@ static bool __kmp_affinity_create_cpuinfo_map(int *line,
|
||||||
|
}
|
||||||
|
*line = 0;
|
||||||
|
|
||||||
|
+ // At least on powerpc, Linux may return -1 for physical_package_id. Try
|
||||||
|
+ // to reconstruct topology from core_siblings_list in that case.
|
||||||
|
+ for (i = 0; i < num_avail; ++i) {
|
||||||
|
+ if (threadInfo[i][pkgIdIndex] == UINT_MAX) {
|
||||||
|
+ if (!__kmp_package_id_from_core_siblings_list(threadInfo, num_avail, i)) {
|
||||||
|
+ CLEANUP_THREAD_INFO;
|
||||||
|
+ *msg_id = kmp_i18n_str_MissingPhysicalIDField;
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
#if KMP_MIC && REDUCE_TEAM_SIZE
|
||||||
|
unsigned teamSize = 0;
|
||||||
|
#endif // KMP_MIC && REDUCE_TEAM_SIZE
|
||||||
|
diff --git a/openmp/runtime/test/affinity/kmp-hw-subset.c b/openmp/runtime/test/affinity/kmp-hw-subset.c
|
||||||
|
index 606fcdfbada9..0b49969bd3b1 100644
|
||||||
|
--- a/openmp/runtime/test/affinity/kmp-hw-subset.c
|
||||||
|
+++ b/openmp/runtime/test/affinity/kmp-hw-subset.c
|
||||||
|
@@ -25,7 +25,7 @@ static int compare_hw_subset_places(const place_list_t *openmp_places,
|
||||||
|
expected_per_place = nthreads_per_core;
|
||||||
|
} else {
|
||||||
|
expected_total = nsockets;
|
||||||
|
- expected_per_place = ncores_per_socket;
|
||||||
|
+ expected_per_place = ncores_per_socket * nthreads_per_core;
|
||||||
|
}
|
||||||
|
if (openmp_places->num_places != expected_total) {
|
||||||
|
fprintf(stderr, "error: KMP_HW_SUBSET did not half each resource layer!\n");
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
@ -0,0 +1,86 @@
|
|||||||
|
From ccc2b792e57d632bc887b226a4e7f0a8189eab8b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Josh Stone <jistone@redhat.com>
|
||||||
|
Date: Mon, 4 Nov 2024 16:37:49 -0800
|
||||||
|
Subject: [PATCH] [profile] Use base+vaddr for `__llvm_write_binary_ids` note
|
||||||
|
pointers
|
||||||
|
|
||||||
|
This function is always examining its own ELF headers in memory, but it
|
||||||
|
was trying to use conditions between examining files or memory, and it
|
||||||
|
wasn't accounting for LOAD offsets at runtime. This is especially bad if
|
||||||
|
a loaded segment has additional padding that's not in the file offsets.
|
||||||
|
|
||||||
|
Now we do a first scan of the program headers to figure out the runtime
|
||||||
|
base address based on `PT_PHDR` and/or `PT_DYNAMIC` (else assume zero),
|
||||||
|
similar to libc's `do_start`. Then each `PT_NOTE` pointer is simply the
|
||||||
|
base plus the segments's `pt_vaddr`, which includes LOAD offsets.
|
||||||
|
|
||||||
|
Fixes #114605
|
||||||
|
---
|
||||||
|
.../lib/profile/InstrProfilingPlatformLinux.c | 40 ++++++++-----------
|
||||||
|
1 file changed, 16 insertions(+), 24 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c b/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c
|
||||||
|
index e2c06d51e0c6..c365129a0768 100644
|
||||||
|
--- a/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c
|
||||||
|
+++ b/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c
|
||||||
|
@@ -194,41 +194,33 @@ static int WriteBinaryIds(ProfDataWriter *Writer, const ElfW(Nhdr) * Note,
|
||||||
|
*/
|
||||||
|
COMPILER_RT_VISIBILITY int __llvm_write_binary_ids(ProfDataWriter *Writer) {
|
||||||
|
extern const ElfW(Ehdr) __ehdr_start __attribute__((visibility("hidden")));
|
||||||
|
+ extern ElfW(Dyn) _DYNAMIC[] __attribute__((weak, visibility("hidden")));
|
||||||
|
+
|
||||||
|
const ElfW(Ehdr) *ElfHeader = &__ehdr_start;
|
||||||
|
const ElfW(Phdr) *ProgramHeader =
|
||||||
|
(const ElfW(Phdr) *)((uintptr_t)ElfHeader + ElfHeader->e_phoff);
|
||||||
|
|
||||||
|
+ /* Compute the added base address in case of position-independent code. */
|
||||||
|
+ uintptr_t Base = 0;
|
||||||
|
+ for (uint32_t I = 0; I < ElfHeader->e_phnum; I++) {
|
||||||
|
+ if (ProgramHeader[I].p_type == PT_PHDR)
|
||||||
|
+ Base = (uintptr_t)ProgramHeader - ProgramHeader[I].p_vaddr;
|
||||||
|
+ if (ProgramHeader[I].p_type == PT_DYNAMIC && _DYNAMIC)
|
||||||
|
+ Base = (uintptr_t)_DYNAMIC - ProgramHeader[I].p_vaddr;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
int TotalBinaryIdsSize = 0;
|
||||||
|
- uint32_t I;
|
||||||
|
/* Iterate through entries in the program header. */
|
||||||
|
- for (I = 0; I < ElfHeader->e_phnum; I++) {
|
||||||
|
+ for (uint32_t I = 0; I < ElfHeader->e_phnum; I++) {
|
||||||
|
/* Look for the notes segment in program header entries. */
|
||||||
|
if (ProgramHeader[I].p_type != PT_NOTE)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* There can be multiple notes segment, and examine each of them. */
|
||||||
|
- const ElfW(Nhdr) * Note;
|
||||||
|
- const ElfW(Nhdr) * NotesEnd;
|
||||||
|
- /*
|
||||||
|
- * When examining notes in file, use p_offset, which is the offset within
|
||||||
|
- * the elf file, to find the start of notes.
|
||||||
|
- */
|
||||||
|
- if (ProgramHeader[I].p_memsz == 0 ||
|
||||||
|
- ProgramHeader[I].p_memsz == ProgramHeader[I].p_filesz) {
|
||||||
|
- Note = (const ElfW(Nhdr) *)((uintptr_t)ElfHeader +
|
||||||
|
- ProgramHeader[I].p_offset);
|
||||||
|
- NotesEnd = (const ElfW(Nhdr) *)((const char *)(Note) +
|
||||||
|
- ProgramHeader[I].p_filesz);
|
||||||
|
- } else {
|
||||||
|
- /*
|
||||||
|
- * When examining notes in memory, use p_vaddr, which is the address of
|
||||||
|
- * section after loaded to memory, to find the start of notes.
|
||||||
|
- */
|
||||||
|
- Note =
|
||||||
|
- (const ElfW(Nhdr) *)((uintptr_t)ElfHeader + ProgramHeader[I].p_vaddr);
|
||||||
|
- NotesEnd =
|
||||||
|
- (const ElfW(Nhdr) *)((const char *)(Note) + ProgramHeader[I].p_memsz);
|
||||||
|
- }
|
||||||
|
+ const ElfW(Nhdr) *Note =
|
||||||
|
+ (const ElfW(Nhdr) *)(Base + ProgramHeader[I].p_vaddr);
|
||||||
|
+ const ElfW(Nhdr) *NotesEnd =
|
||||||
|
+ (const ElfW(Nhdr) *)((const char *)(Note) + ProgramHeader[I].p_memsz);
|
||||||
|
|
||||||
|
int BinaryIdsSize = WriteBinaryIds(Writer, Note, NotesEnd);
|
||||||
|
if (TotalBinaryIdsSize == -1)
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
893
modular/llvm/18-99273.patch
Normal file
893
modular/llvm/18-99273.patch
Normal file
@ -0,0 +1,893 @@
|
|||||||
|
From 91052169960477fbc39169c10f9fae3bec732510 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carl Ritson <carl.ritson@amd.com>
|
||||||
|
Date: Wed, 17 Jul 2024 15:07:42 +0900
|
||||||
|
Subject: [PATCH 1/3] [AMDGPU] Implement workaround for GFX11.5 export priority
|
||||||
|
|
||||||
|
On GFX11.5 shaders having completed exports need to execute/wait
|
||||||
|
at a lower priority than shaders still executing exports.
|
||||||
|
Add code to maintain normal priority of 2 for shaders that export
|
||||||
|
and drop to priority 0 after exports.
|
||||||
|
---
|
||||||
|
llvm/lib/Target/AMDGPU/AMDGPU.td | 15 +-
|
||||||
|
.../lib/Target/AMDGPU/GCNHazardRecognizer.cpp | 112 ++++++
|
||||||
|
llvm/lib/Target/AMDGPU/GCNHazardRecognizer.h | 1 +
|
||||||
|
llvm/lib/Target/AMDGPU/GCNSubtarget.h | 3 +
|
||||||
|
.../AMDGPU/required-export-priority.ll | 344 ++++++++++++++++++
|
||||||
|
.../AMDGPU/required-export-priority.mir | 293 +++++++++++++++
|
||||||
|
6 files changed, 765 insertions(+), 3 deletions(-)
|
||||||
|
create mode 100644 llvm/test/CodeGen/AMDGPU/required-export-priority.ll
|
||||||
|
create mode 100644 llvm/test/CodeGen/AMDGPU/required-export-priority.mir
|
||||||
|
|
||||||
|
diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.td b/llvm/lib/Target/AMDGPU/AMDGPU.td
|
||||||
|
index dfc8eaea66f7b..14fcf6a210a78 100644
|
||||||
|
--- a/llvm/lib/Target/AMDGPU/AMDGPU.td
|
||||||
|
+++ b/llvm/lib/Target/AMDGPU/AMDGPU.td
|
||||||
|
@@ -947,6 +947,12 @@ def FeatureHasRestrictedSOffset : SubtargetFeature<"restricted-soffset",
|
||||||
|
"Has restricted SOffset (immediate not supported)."
|
||||||
|
>;
|
||||||
|
|
||||||
|
+def FeatureRequiredExportPriority : SubtargetFeature<"required-export-priority",
|
||||||
|
+ "HasRequiredExportPriority",
|
||||||
|
+ "true",
|
||||||
|
+ "Export priority must be explicitly manipulated on GFX11.5"
|
||||||
|
+>;
|
||||||
|
+
|
||||||
|
//===------------------------------------------------------------===//
|
||||||
|
// Subtarget Features (options and debugging)
|
||||||
|
//===------------------------------------------------------------===//
|
||||||
|
@@ -1597,14 +1603,16 @@ def FeatureISAVersion11_5_0 : FeatureSet<
|
||||||
|
!listconcat(FeatureISAVersion11_Common.Features,
|
||||||
|
[FeatureSALUFloatInsts,
|
||||||
|
FeatureDPPSrc1SGPR,
|
||||||
|
- FeatureVGPRSingleUseHintInsts])>;
|
||||||
|
+ FeatureVGPRSingleUseHintInsts,
|
||||||
|
+ FeatureRequiredExportPriority])>;
|
||||||
|
|
||||||
|
def FeatureISAVersion11_5_1 : FeatureSet<
|
||||||
|
!listconcat(FeatureISAVersion11_Common.Features,
|
||||||
|
[FeatureSALUFloatInsts,
|
||||||
|
FeatureDPPSrc1SGPR,
|
||||||
|
FeatureVGPRSingleUseHintInsts,
|
||||||
|
- FeatureGFX11FullVGPRs])>;
|
||||||
|
+ FeatureGFX11FullVGPRs,
|
||||||
|
+ FeatureRequiredExportPriority])>;
|
||||||
|
|
||||||
|
def FeatureISAVersion12 : FeatureSet<
|
||||||
|
[FeatureGFX12,
|
||||||
|
diff --git a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
|
||||||
|
index a402fc6d7e611..a8b171aa82840 100644
|
||||||
|
--- a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
|
||||||
|
+++ b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
|
||||||
|
@@ -14,6 +14,7 @@
|
||||||
|
#include "GCNSubtarget.h"
|
||||||
|
#include "MCTargetDesc/AMDGPUMCTargetDesc.h"
|
||||||
|
#include "SIMachineFunctionInfo.h"
|
||||||
|
+#include "llvm/CodeGen/MachineFrameInfo.h"
|
||||||
|
#include "llvm/CodeGen/MachineFunction.h"
|
||||||
|
#include "llvm/CodeGen/ScheduleDAG.h"
|
||||||
|
#include "llvm/TargetParser/TargetParser.h"
|
||||||
|
@@ -1104,6 +1105,7 @@ void GCNHazardRecognizer::fixHazards(MachineInstr *MI) {
|
||||||
|
fixWMMAHazards(MI);
|
||||||
|
fixShift64HighRegBug(MI);
|
||||||
|
fixVALUMaskWriteHazard(MI);
|
||||||
|
+ fixRequiredExportPriority(MI);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GCNHazardRecognizer::fixVcmpxPermlaneHazards(MachineInstr *MI) {
|
||||||
|
@@ -2895,3 +2897,113 @@ bool GCNHazardRecognizer::fixVALUMaskWriteHazard(MachineInstr *MI) {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+static bool ensureEntrySetPrio(MachineFunction *MF, int Priority,
|
||||||
|
+ const SIInstrInfo &TII) {
|
||||||
|
+ MachineBasicBlock &EntryMBB = MF->front();
|
||||||
|
+ if (EntryMBB.begin() != EntryMBB.end()) {
|
||||||
|
+ auto &EntryMI = *EntryMBB.begin();
|
||||||
|
+ if (EntryMI.getOpcode() == AMDGPU::S_SETPRIO &&
|
||||||
|
+ EntryMI.getOperand(0).getImm() >= Priority)
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ BuildMI(EntryMBB, EntryMBB.begin(), DebugLoc(), TII.get(AMDGPU::S_SETPRIO))
|
||||||
|
+ .addImm(Priority);
|
||||||
|
+ return true;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+bool GCNHazardRecognizer::fixRequiredExportPriority(MachineInstr *MI) {
|
||||||
|
+ if (!ST.hasRequiredExportPriority())
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
+ // Assume the following shader types will never have exports,
|
||||||
|
+ // and avoid adding or adjusting S_SETPRIO.
|
||||||
|
+ MachineBasicBlock *MBB = MI->getParent();
|
||||||
|
+ MachineFunction *MF = MBB->getParent();
|
||||||
|
+ auto CC = MF->getFunction().getCallingConv();
|
||||||
|
+ switch (CC) {
|
||||||
|
+ case CallingConv::AMDGPU_CS:
|
||||||
|
+ case CallingConv::AMDGPU_CS_Chain:
|
||||||
|
+ case CallingConv::AMDGPU_CS_ChainPreserve:
|
||||||
|
+ case CallingConv::AMDGPU_KERNEL:
|
||||||
|
+ return false;
|
||||||
|
+ default:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ const int MaxPriority = 3;
|
||||||
|
+ const int NormalPriority = 2;
|
||||||
|
+ const int PostExportPriority = 0;
|
||||||
|
+
|
||||||
|
+ auto It = MI->getIterator();
|
||||||
|
+ switch (MI->getOpcode()) {
|
||||||
|
+ case AMDGPU::S_ENDPGM:
|
||||||
|
+ case AMDGPU::S_ENDPGM_SAVED:
|
||||||
|
+ case AMDGPU::S_ENDPGM_ORDERED_PS_DONE:
|
||||||
|
+ case AMDGPU::SI_RETURN_TO_EPILOG:
|
||||||
|
+ // Ensure shader with calls raises priority at entry.
|
||||||
|
+ // This ensures correct priority if exports exist in callee.
|
||||||
|
+ if (MF->getFrameInfo().hasCalls())
|
||||||
|
+ return ensureEntrySetPrio(MF, NormalPriority, TII);
|
||||||
|
+ return false;
|
||||||
|
+ case AMDGPU::S_SETPRIO: {
|
||||||
|
+ // Raise minimum priority unless in workaround.
|
||||||
|
+ auto &PrioOp = MI->getOperand(0);
|
||||||
|
+ int Prio = PrioOp.getImm();
|
||||||
|
+ bool InWA = (Prio == PostExportPriority) &&
|
||||||
|
+ (It != MBB->begin() && TII.isEXP(*std::prev(It)));
|
||||||
|
+ if (InWA || Prio >= NormalPriority)
|
||||||
|
+ return false;
|
||||||
|
+ PrioOp.setImm(std::min(Prio + NormalPriority, MaxPriority));
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+ default:
|
||||||
|
+ if (!TII.isEXP(*MI))
|
||||||
|
+ return false;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // Check entry priority at each export (as there will only be a few).
|
||||||
|
+ // Note: amdgpu_gfx can only be a callee, so defer to caller setprio.
|
||||||
|
+ bool Changed = false;
|
||||||
|
+ if (CC != CallingConv::AMDGPU_Gfx)
|
||||||
|
+ Changed = ensureEntrySetPrio(MF, NormalPriority, TII);
|
||||||
|
+
|
||||||
|
+ auto NextMI = std::next(It);
|
||||||
|
+ bool EndOfShader = false;
|
||||||
|
+ if (NextMI != MBB->end()) {
|
||||||
|
+ // Only need WA at end of sequence of exports.
|
||||||
|
+ if (TII.isEXP(*NextMI))
|
||||||
|
+ return Changed;
|
||||||
|
+ // Assume appropriate S_SETPRIO after export means WA already applied.
|
||||||
|
+ if (NextMI->getOpcode() == AMDGPU::S_SETPRIO &&
|
||||||
|
+ NextMI->getOperand(0).getImm() == PostExportPriority)
|
||||||
|
+ return Changed;
|
||||||
|
+ EndOfShader = NextMI->getOpcode() == AMDGPU::S_ENDPGM;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ const DebugLoc &DL = MI->getDebugLoc();
|
||||||
|
+
|
||||||
|
+ // Lower priority.
|
||||||
|
+ BuildMI(*MBB, NextMI, DL, TII.get(AMDGPU::S_SETPRIO))
|
||||||
|
+ .addImm(PostExportPriority);
|
||||||
|
+
|
||||||
|
+ if (!EndOfShader) {
|
||||||
|
+ // Wait for exports to complete.
|
||||||
|
+ BuildMI(*MBB, NextMI, DL, TII.get(AMDGPU::S_WAITCNT_EXPCNT))
|
||||||
|
+ .addReg(AMDGPU::SGPR_NULL)
|
||||||
|
+ .addImm(0);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ BuildMI(*MBB, NextMI, DL, TII.get(AMDGPU::S_NOP)).addImm(0);
|
||||||
|
+ BuildMI(*MBB, NextMI, DL, TII.get(AMDGPU::S_NOP)).addImm(0);
|
||||||
|
+
|
||||||
|
+ if (!EndOfShader) {
|
||||||
|
+ // Return to normal (higher) priority.
|
||||||
|
+ BuildMI(*MBB, NextMI, DL, TII.get(AMDGPU::S_SETPRIO))
|
||||||
|
+ .addImm(NormalPriority);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return true;
|
||||||
|
+}
|
||||||
|
diff --git a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.h b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.h
|
||||||
|
index 3ccca527c626b..f2a64ab48e180 100644
|
||||||
|
--- a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.h
|
||||||
|
+++ b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.h
|
||||||
|
@@ -107,6 +107,7 @@ class GCNHazardRecognizer final : public ScheduleHazardRecognizer {
|
||||||
|
bool fixWMMAHazards(MachineInstr *MI);
|
||||||
|
bool fixShift64HighRegBug(MachineInstr *MI);
|
||||||
|
bool fixVALUMaskWriteHazard(MachineInstr *MI);
|
||||||
|
+ bool fixRequiredExportPriority(MachineInstr *MI);
|
||||||
|
|
||||||
|
int checkMAIHazards(MachineInstr *MI);
|
||||||
|
int checkMAIHazards908(MachineInstr *MI);
|
||||||
|
diff --git a/llvm/lib/Target/AMDGPU/GCNSubtarget.h b/llvm/lib/Target/AMDGPU/GCNSubtarget.h
|
||||||
|
index e5817594a4521..def89c785b855 100644
|
||||||
|
--- a/llvm/lib/Target/AMDGPU/GCNSubtarget.h
|
||||||
|
+++ b/llvm/lib/Target/AMDGPU/GCNSubtarget.h
|
||||||
|
@@ -238,6 +238,7 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
|
||||||
|
bool HasVOPDInsts = false;
|
||||||
|
bool HasVALUTransUseHazard = false;
|
||||||
|
bool HasForceStoreSC0SC1 = false;
|
||||||
|
+ bool HasRequiredExportPriority = false;
|
||||||
|
|
||||||
|
// Dummy feature to use for assembler in tablegen.
|
||||||
|
bool FeatureDisable = false;
|
||||||
|
@@ -1282,6 +1283,8 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
|
||||||
|
|
||||||
|
bool hasRestrictedSOffset() const { return HasRestrictedSOffset; }
|
||||||
|
|
||||||
|
+ bool hasRequiredExportPriority() const { return HasRequiredExportPriority; }
|
||||||
|
+
|
||||||
|
/// \returns true if the target uses LOADcnt/SAMPLEcnt/BVHcnt, DScnt/KMcnt
|
||||||
|
/// and STOREcnt rather than VMcnt, LGKMcnt and VScnt respectively.
|
||||||
|
bool hasExtendedWaitCounts() const { return getGeneration() >= GFX12; }
|
||||||
|
diff --git a/llvm/test/CodeGen/AMDGPU/required-export-priority.ll b/llvm/test/CodeGen/AMDGPU/required-export-priority.ll
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000..377902f3f0d1a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/llvm/test/CodeGen/AMDGPU/required-export-priority.ll
|
||||||
|
@@ -0,0 +1,344 @@
|
||||||
|
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
||||||
|
+; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -amdgpu-enable-vopd=0 -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
|
||||||
|
+
|
||||||
|
+define amdgpu_ps void @test_export_zeroes_f32() #0 {
|
||||||
|
+; GCN-LABEL: test_export_zeroes_f32:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v0, 0
|
||||||
|
+; GCN-NEXT: exp mrt0 off, off, off, off
|
||||||
|
+; GCN-NEXT: exp mrt0 off, off, off, off done
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 0, float 0.0, float 0.0, float 0.0, float 0.0, i1 false, i1 false)
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 0, float 0.0, float 0.0, float 0.0, float 0.0, i1 true, i1 false)
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_ps void @test_export_en_src0_f32() #0 {
|
||||||
|
+; GCN-LABEL: test_export_en_src0_f32:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v0, 4.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v1, 0.5
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v2, 2.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v3, 1.0
|
||||||
|
+; GCN-NEXT: exp mrt0 v3, off, off, off done
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 1, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_gs void @test_export_gs() #0 {
|
||||||
|
+; GCN-LABEL: test_export_gs:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v0, 4.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v1, 0.5
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v2, 2.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v3, 1.0
|
||||||
|
+; GCN-NEXT: exp mrt0 off, v2, off, off done
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_hs void @test_export_hs() #0 {
|
||||||
|
+; GCN-LABEL: test_export_hs:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v0, 4.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v1, 0.5
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v2, 2.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v3, 1.0
|
||||||
|
+; GCN-NEXT: exp mrt0 off, v2, off, off done
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_gfx void @test_export_gfx(float %v) #0 {
|
||||||
|
+; GCN-LABEL: test_export_gfx:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v1, 4.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v2, 0.5
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v3, 2.0
|
||||||
|
+; GCN-NEXT: exp mrt0 off, v3, off, off done
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_waitcnt_expcnt null, 0x0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: s_waitcnt expcnt(0)
|
||||||
|
+; GCN-NEXT: s_setpc_b64 s[30:31]
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float %v, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_cs void @test_export_cs() #0 {
|
||||||
|
+; GCN-LABEL: test_export_cs:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v0, 4.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v1, 0.5
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v2, 2.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v3, 1.0
|
||||||
|
+; GCN-NEXT: exp mrt0 off, v2, off, off done
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_kernel void @test_export_kernel() #0 {
|
||||||
|
+; GCN-LABEL: test_export_kernel:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v0, 4.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v1, 0.5
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v2, 2.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v3, 1.0
|
||||||
|
+; GCN-NEXT: exp mrt0 off, v2, off, off done
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_gfx void @test_no_export_gfx(float %v) #0 {
|
||||||
|
+; GCN-LABEL: test_no_export_gfx:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
|
||||||
|
+; GCN-NEXT: s_setpc_b64 s[30:31]
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_ps void @test_no_export_ps(float %v) #0 {
|
||||||
|
+; GCN-LABEL: test_no_export_ps:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_ps void @test_if_export_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 {
|
||||||
|
+; GCN-LABEL: test_if_export_f32:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: s_mov_b32 s0, exec_lo
|
||||||
|
+; GCN-NEXT: v_cmpx_ne_u32_e32 0, v0
|
||||||
|
+; GCN-NEXT: s_cbranch_execz .LBB9_2
|
||||||
|
+; GCN-NEXT: ; %bb.1: ; %exp
|
||||||
|
+; GCN-NEXT: exp mrt0 v1, v2, v3, v4
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_waitcnt_expcnt null, 0x0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: .LBB9_2: ; %end
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ %cc = icmp eq i32 %flag, 0
|
||||||
|
+ br i1 %cc, label %end, label %exp
|
||||||
|
+
|
||||||
|
+exp:
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 false, i1 false)
|
||||||
|
+ br label %end
|
||||||
|
+
|
||||||
|
+end:
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_ps void @test_if_export_vm_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 {
|
||||||
|
+; GCN-LABEL: test_if_export_vm_f32:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: s_mov_b32 s0, exec_lo
|
||||||
|
+; GCN-NEXT: v_cmpx_ne_u32_e32 0, v0
|
||||||
|
+; GCN-NEXT: s_cbranch_execz .LBB10_2
|
||||||
|
+; GCN-NEXT: ; %bb.1: ; %exp
|
||||||
|
+; GCN-NEXT: exp mrt0 v1, v2, v3, v4
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_waitcnt_expcnt null, 0x0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: .LBB10_2: ; %end
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ %cc = icmp eq i32 %flag, 0
|
||||||
|
+ br i1 %cc, label %end, label %exp
|
||||||
|
+
|
||||||
|
+exp:
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 false, i1 true)
|
||||||
|
+ br label %end
|
||||||
|
+
|
||||||
|
+end:
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_ps void @test_if_export_done_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 {
|
||||||
|
+; GCN-LABEL: test_if_export_done_f32:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: s_mov_b32 s0, exec_lo
|
||||||
|
+; GCN-NEXT: v_cmpx_ne_u32_e32 0, v0
|
||||||
|
+; GCN-NEXT: s_cbranch_execz .LBB11_2
|
||||||
|
+; GCN-NEXT: ; %bb.1: ; %exp
|
||||||
|
+; GCN-NEXT: exp mrt0 v1, v2, v3, v4 done
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_waitcnt_expcnt null, 0x0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: .LBB11_2: ; %end
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ %cc = icmp eq i32 %flag, 0
|
||||||
|
+ br i1 %cc, label %end, label %exp
|
||||||
|
+
|
||||||
|
+exp:
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 false)
|
||||||
|
+ br label %end
|
||||||
|
+
|
||||||
|
+end:
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_ps void @test_if_export_vm_done_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 {
|
||||||
|
+; GCN-LABEL: test_if_export_vm_done_f32:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: s_mov_b32 s0, exec_lo
|
||||||
|
+; GCN-NEXT: v_cmpx_ne_u32_e32 0, v0
|
||||||
|
+; GCN-NEXT: s_cbranch_execz .LBB12_2
|
||||||
|
+; GCN-NEXT: ; %bb.1: ; %exp
|
||||||
|
+; GCN-NEXT: exp mrt0 v1, v2, v3, v4 done
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_waitcnt_expcnt null, 0x0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: .LBB12_2: ; %end
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ %cc = icmp eq i32 %flag, 0
|
||||||
|
+ br i1 %cc, label %end, label %exp
|
||||||
|
+
|
||||||
|
+exp:
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 true)
|
||||||
|
+ br label %end
|
||||||
|
+
|
||||||
|
+end:
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_ps void @test_export_pos_before_param_across_load(i32 %idx) #0 {
|
||||||
|
+; GCN-LABEL: test_export_pos_before_param_across_load:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: buffer_load_b32 v0, v0, s[0:3], 0 offen
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v1, 0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v2, 1.0
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v3, 0.5
|
||||||
|
+; GCN-NEXT: s_waitcnt vmcnt(0)
|
||||||
|
+; GCN-NEXT: exp pos0 v1, v1, v1, v0 done
|
||||||
|
+; GCN-NEXT: exp invalid_target_32 v2, v2, v2, v2
|
||||||
|
+; GCN-NEXT: exp invalid_target_33 v2, v2, v2, v3
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float 1.0, float 1.0, float 1.0, float 1.0, i1 false, i1 false)
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 33, i32 15, float 1.0, float 1.0, float 1.0, float 0.5, i1 false, i1 false)
|
||||||
|
+ %load = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) undef, i32 %idx, i32 0, i32 0)
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 0.0, float 0.0, float 0.0, float %load, i1 true, i1 false)
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_ps void @test_export_across_store_load(i32 %idx, float %v) #0 {
|
||||||
|
+; GCN-LABEL: test_export_across_store_load:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v2, 24
|
||||||
|
+; GCN-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v0
|
||||||
|
+; GCN-NEXT: s_delay_alu instid0(VALU_DEP_2)
|
||||||
|
+; GCN-NEXT: v_cndmask_b32_e64 v0, v2, 8, vcc_lo
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v2, 0
|
||||||
|
+; GCN-NEXT: scratch_store_b32 v0, v1, off
|
||||||
|
+; GCN-NEXT: scratch_load_b32 v0, off, off
|
||||||
|
+; GCN-NEXT: v_mov_b32_e32 v1, 1.0
|
||||||
|
+; GCN-NEXT: exp pos0 v2, v2, v2, v1 done
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_waitcnt_expcnt null, 0x0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: s_waitcnt vmcnt(0)
|
||||||
|
+; GCN-NEXT: exp invalid_target_32 v0, v2, v1, v2
|
||||||
|
+; GCN-NEXT: exp invalid_target_33 v0, v2, v1, v2
|
||||||
|
+; GCN-NEXT: s_setprio 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_nop 0
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ %data0 = alloca <4 x float>, align 8, addrspace(5)
|
||||||
|
+ %data1 = alloca <4 x float>, align 8, addrspace(5)
|
||||||
|
+ %cmp = icmp eq i32 %idx, 1
|
||||||
|
+ %data = select i1 %cmp, ptr addrspace(5) %data0, ptr addrspace(5) %data1
|
||||||
|
+ store float %v, ptr addrspace(5) %data, align 8
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 0.0, float 0.0, float 0.0, float 1.0, i1 true, i1 false)
|
||||||
|
+ %load0 = load float, ptr addrspace(5) %data0, align 8
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float %load0, float 0.0, float 1.0, float 0.0, i1 false, i1 false)
|
||||||
|
+ call void @llvm.amdgcn.exp.f32(i32 33, i32 15, float %load0, float 0.0, float 1.0, float 0.0, i1 false, i1 false)
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_ps void @test_export_in_callee(float %v) #0 {
|
||||||
|
+; GCN-LABEL: test_export_in_callee:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: s_getpc_b64 s[0:1]
|
||||||
|
+; GCN-NEXT: s_add_u32 s0, s0, test_export_gfx@gotpcrel32@lo+4
|
||||||
|
+; GCN-NEXT: s_addc_u32 s1, s1, test_export_gfx@gotpcrel32@hi+12
|
||||||
|
+; GCN-NEXT: v_add_f32_e32 v0, 1.0, v0
|
||||||
|
+; GCN-NEXT: s_load_b64 s[0:1], s[0:1], 0x0
|
||||||
|
+; GCN-NEXT: s_mov_b32 s32, 0
|
||||||
|
+; GCN-NEXT: s_waitcnt lgkmcnt(0)
|
||||||
|
+; GCN-NEXT: s_swappc_b64 s[30:31], s[0:1]
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ %x = fadd float %v, 1.0
|
||||||
|
+ call void @test_export_gfx(float %x)
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define amdgpu_ps void @test_export_in_callee_prio(float %v) #0 {
|
||||||
|
+; GCN-LABEL: test_export_in_callee_prio:
|
||||||
|
+; GCN: ; %bb.0:
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: s_mov_b32 s32, 0
|
||||||
|
+; GCN-NEXT: v_add_f32_e32 v0, 1.0, v0
|
||||||
|
+; GCN-NEXT: s_setprio 2
|
||||||
|
+; GCN-NEXT: s_getpc_b64 s[0:1]
|
||||||
|
+; GCN-NEXT: s_add_u32 s0, s0, test_export_gfx@gotpcrel32@lo+4
|
||||||
|
+; GCN-NEXT: s_addc_u32 s1, s1, test_export_gfx@gotpcrel32@hi+12
|
||||||
|
+; GCN-NEXT: s_load_b64 s[0:1], s[0:1], 0x0
|
||||||
|
+; GCN-NEXT: s_waitcnt lgkmcnt(0)
|
||||||
|
+; GCN-NEXT: s_swappc_b64 s[30:31], s[0:1]
|
||||||
|
+; GCN-NEXT: s_endpgm
|
||||||
|
+ %x = fadd float %v, 1.0
|
||||||
|
+ call void @llvm.amdgcn.s.setprio(i16 0)
|
||||||
|
+ call void @test_export_gfx(float %x)
|
||||||
|
+ ret void
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+declare void @llvm.amdgcn.exp.f32(i32, i32, float, float, float, float, i1, i1) #1
|
||||||
|
+declare void @llvm.amdgcn.exp.i32(i32, i32, i32, i32, i32, i32, i1, i1) #1
|
||||||
|
+declare float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8), i32, i32, i32) #2
|
||||||
|
+declare void @llvm.amdgcn.s.setprio(i16)
|
||||||
|
+
|
||||||
|
+attributes #0 = { nounwind }
|
||||||
|
+attributes #1 = { nounwind inaccessiblememonly }
|
||||||
|
+attributes #2 = { nounwind readnone }
|
||||||
|
diff --git a/llvm/test/CodeGen/AMDGPU/required-export-priority.mir b/llvm/test/CodeGen/AMDGPU/required-export-priority.mir
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000..eee04468036e5
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/llvm/test/CodeGen/AMDGPU/required-export-priority.mir
|
||||||
|
@@ -0,0 +1,293 @@
|
||||||
|
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
|
||||||
|
+# RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -mattr=-wavefrontsize32,+wavefrontsize64 -run-pass=post-RA-hazard-rec -verify-machineinstrs %s -o - | FileCheck -check-prefixes=GFX1150 %s
|
||||||
|
+
|
||||||
|
+--- |
|
||||||
|
+ define amdgpu_ps void @end_of_shader() {
|
||||||
|
+ ret void
|
||||||
|
+ }
|
||||||
|
+ define amdgpu_ps void @end_of_shader_return_to_epilogue() {
|
||||||
|
+ ret void
|
||||||
|
+ }
|
||||||
|
+ define amdgpu_ps void @end_of_block() {
|
||||||
|
+ ret void
|
||||||
|
+ }
|
||||||
|
+ define amdgpu_ps void @start_of_block() {
|
||||||
|
+ ret void
|
||||||
|
+ }
|
||||||
|
+ define amdgpu_ps void @block_of_exports() {
|
||||||
|
+ ret void
|
||||||
|
+ }
|
||||||
|
+ define amdgpu_ps void @sparse_exports() {
|
||||||
|
+ ret void
|
||||||
|
+ }
|
||||||
|
+ define amdgpu_ps void @existing_setprio_1() {
|
||||||
|
+ ret void
|
||||||
|
+ }
|
||||||
|
+ define amdgpu_ps void @existing_setprio_2() {
|
||||||
|
+ ret void
|
||||||
|
+ }
|
||||||
|
+...
|
||||||
|
+
|
||||||
|
+---
|
||||||
|
+name: end_of_shader
|
||||||
|
+tracksRegLiveness: true
|
||||||
|
+liveins:
|
||||||
|
+ - { reg: '$vgpr0' }
|
||||||
|
+body: |
|
||||||
|
+ bb.0:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+ ; GFX1150-LABEL: name: end_of_shader
|
||||||
|
+ ; GFX1150: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_ENDPGM 0
|
||||||
|
+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ S_ENDPGM 0
|
||||||
|
+...
|
||||||
|
+
|
||||||
|
+---
|
||||||
|
+name: end_of_shader_return_to_epilogue
|
||||||
|
+tracksRegLiveness: true
|
||||||
|
+liveins:
|
||||||
|
+ - { reg: '$vgpr0' }
|
||||||
|
+body: |
|
||||||
|
+ bb.0:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+ ; GFX1150-LABEL: name: end_of_shader_return_to_epilogue
|
||||||
|
+ ; GFX1150: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 0
|
||||||
|
+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: SI_RETURN_TO_EPILOG $vgpr0
|
||||||
|
+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ SI_RETURN_TO_EPILOG $vgpr0
|
||||||
|
+...
|
||||||
|
+
|
||||||
|
+---
|
||||||
|
+name: end_of_block
|
||||||
|
+tracksRegLiveness: true
|
||||||
|
+liveins:
|
||||||
|
+ - { reg: '$vgpr0' }
|
||||||
|
+body: |
|
||||||
|
+ ; GFX1150-LABEL: name: end_of_block
|
||||||
|
+ ; GFX1150: bb.0:
|
||||||
|
+ ; GFX1150-NEXT: successors: %bb.1(0x80000000)
|
||||||
|
+ ; GFX1150-NEXT: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 0
|
||||||
|
+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: bb.1:
|
||||||
|
+ ; GFX1150-NEXT: S_ENDPGM 0
|
||||||
|
+ bb.0:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+
|
||||||
|
+ bb.1:
|
||||||
|
+ S_ENDPGM 0
|
||||||
|
+...
|
||||||
|
+
|
||||||
|
+---
|
||||||
|
+name: start_of_block
|
||||||
|
+tracksRegLiveness: true
|
||||||
|
+liveins:
|
||||||
|
+ - { reg: '$vgpr0' }
|
||||||
|
+body: |
|
||||||
|
+ ; GFX1150-LABEL: name: start_of_block
|
||||||
|
+ ; GFX1150: bb.0:
|
||||||
|
+ ; GFX1150-NEXT: successors: %bb.1(0x80000000)
|
||||||
|
+ ; GFX1150-NEXT: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: bb.1:
|
||||||
|
+ ; GFX1150-NEXT: successors: %bb.2(0x80000000)
|
||||||
|
+ ; GFX1150-NEXT: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 0
|
||||||
|
+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: bb.2:
|
||||||
|
+ ; GFX1150-NEXT: S_ENDPGM 0
|
||||||
|
+ bb.0:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+
|
||||||
|
+ bb.1:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+
|
||||||
|
+ bb.2:
|
||||||
|
+ S_ENDPGM 0
|
||||||
|
+...
|
||||||
|
+
|
||||||
|
+---
|
||||||
|
+name: block_of_exports
|
||||||
|
+tracksRegLiveness: true
|
||||||
|
+liveins:
|
||||||
|
+ - { reg: '$vgpr0' }
|
||||||
|
+body: |
|
||||||
|
+ bb.0:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+ ; GFX1150-LABEL: name: block_of_exports
|
||||||
|
+ ; GFX1150: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_ENDPGM 0
|
||||||
|
+ EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ S_ENDPGM 0
|
||||||
|
+...
|
||||||
|
+
|
||||||
|
+---
|
||||||
|
+name: sparse_exports
|
||||||
|
+tracksRegLiveness: true
|
||||||
|
+liveins:
|
||||||
|
+ - { reg: '$vgpr0' }
|
||||||
|
+body: |
|
||||||
|
+ bb.0:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+ ; GFX1150-LABEL: name: sparse_exports
|
||||||
|
+ ; GFX1150: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 0
|
||||||
|
+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 0
|
||||||
|
+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_ENDPGM 0
|
||||||
|
+ EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec
|
||||||
|
+ EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec
|
||||||
|
+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ S_ENDPGM 0
|
||||||
|
+...
|
||||||
|
+
|
||||||
|
+---
|
||||||
|
+name: existing_setprio_1
|
||||||
|
+tracksRegLiveness: true
|
||||||
|
+liveins:
|
||||||
|
+ - { reg: '$vgpr0' }
|
||||||
|
+body: |
|
||||||
|
+ ; GFX1150-LABEL: name: existing_setprio_1
|
||||||
|
+ ; GFX1150: bb.0:
|
||||||
|
+ ; GFX1150-NEXT: successors: %bb.1(0x80000000)
|
||||||
|
+ ; GFX1150-NEXT: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: bb.1:
|
||||||
|
+ ; GFX1150-NEXT: successors: %bb.2(0x80000000)
|
||||||
|
+ ; GFX1150-NEXT: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 3
|
||||||
|
+ ; GFX1150-NEXT: $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: bb.2:
|
||||||
|
+ ; GFX1150-NEXT: successors: %bb.3(0x80000000)
|
||||||
|
+ ; GFX1150-NEXT: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 3
|
||||||
|
+ ; GFX1150-NEXT: $vgpr0 = V_OR_B32_e32 3, $vgpr0, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: bb.3:
|
||||||
|
+ ; GFX1150-NEXT: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_ENDPGM 0
|
||||||
|
+ bb.0:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+ $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec
|
||||||
|
+
|
||||||
|
+ bb.1:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+ S_SETPRIO 3
|
||||||
|
+ $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec
|
||||||
|
+ S_SETPRIO 0
|
||||||
|
+
|
||||||
|
+ bb.2:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+ S_SETPRIO 1
|
||||||
|
+ $vgpr0 = V_OR_B32_e32 3, $vgpr0, implicit $exec
|
||||||
|
+ S_SETPRIO 0
|
||||||
|
+
|
||||||
|
+ bb.3:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+ EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ S_ENDPGM 0
|
||||||
|
+...
|
||||||
|
+
|
||||||
|
+---
|
||||||
|
+name: existing_setprio_2
|
||||||
|
+tracksRegLiveness: true
|
||||||
|
+liveins:
|
||||||
|
+ - { reg: '$vgpr0' }
|
||||||
|
+body: |
|
||||||
|
+ bb.0:
|
||||||
|
+ liveins: $vgpr0
|
||||||
|
+ ; GFX1150-LABEL: name: existing_setprio_2
|
||||||
|
+ ; GFX1150: liveins: $vgpr0
|
||||||
|
+ ; GFX1150-NEXT: {{ $}}
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 3
|
||||||
|
+ ; GFX1150-NEXT: EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 0
|
||||||
|
+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_NOP 0
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 2
|
||||||
|
+ ; GFX1150-NEXT: S_SETPRIO 3
|
||||||
|
+ ; GFX1150-NEXT: S_ENDPGM 0
|
||||||
|
+ S_SETPRIO 3
|
||||||
|
+ EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
|
||||||
|
+ S_SETPRIO 3
|
||||||
|
+ S_ENDPGM 0
|
||||||
|
+...
|
||||||
|
|
||||||
|
From 8ea44e65f2c19facff751aeb2ac960f907fb210f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carl Ritson <carl.ritson@amd.com>
|
||||||
|
Date: Wed, 17 Jul 2024 16:18:02 +0900
|
||||||
|
Subject: [PATCH 2/3] Remove -verify-machineinstrs from test.
|
||||||
|
|
||||||
|
---
|
||||||
|
llvm/test/CodeGen/AMDGPU/required-export-priority.ll | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/llvm/test/CodeGen/AMDGPU/required-export-priority.ll b/llvm/test/CodeGen/AMDGPU/required-export-priority.ll
|
||||||
|
index 377902f3f0d1a..ebc209bd4d451 100644
|
||||||
|
--- a/llvm/test/CodeGen/AMDGPU/required-export-priority.ll
|
||||||
|
+++ b/llvm/test/CodeGen/AMDGPU/required-export-priority.ll
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
||||||
|
-; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -amdgpu-enable-vopd=0 -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
|
||||||
|
+; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefix=GCN %s
|
||||||
|
|
||||||
|
define amdgpu_ps void @test_export_zeroes_f32() #0 {
|
||||||
|
; GCN-LABEL: test_export_zeroes_f32:
|
632
modular/llvm/2ffded40ed8bfdbc0859bfc3ce86cc129243962b.patch
Normal file
632
modular/llvm/2ffded40ed8bfdbc0859bfc3ce86cc129243962b.patch
Normal file
@ -0,0 +1,632 @@
|
|||||||
|
From 2ffded40ed8bfdbc0859bfc3ce86cc129243962b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Konrad Kleine <kkleine@redhat.com>
|
||||||
|
Date: Dec 05 2024 11:44:07 +0000
|
||||||
|
Subject: Add MLIR
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/0001-CMake-Add-missing-dependency-108461.patch b/0001-CMake-Add-missing-dependency-108461.patch
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..e6862fd
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/0001-CMake-Add-missing-dependency-108461.patch
|
||||||
|
@@ -0,0 +1,129 @@
|
||||||
|
+From 17ff6161b83e6a5e86fcb6a13c5551bba1438405 Mon Sep 17 00:00:00 2001
|
||||||
|
+From: Erick Ochoa <github@ceci-nest-pas.me>
|
||||||
|
+Date: Thu, 12 Sep 2024 21:16:58 -0400
|
||||||
|
+Subject: [PATCH 1/9] [CMake] Add missing dependency (#108461)
|
||||||
|
+
|
||||||
|
+The [`mlir-capi-execution-engine-test` test
|
||||||
|
+executable](https://github.com/llvm/llvm-project/blob/main/mlir/test/CAPI/CMakeLists.txt#L26-L34)
|
||||||
|
+
|
||||||
|
+```cmake
|
||||||
|
+if(MLIR_ENABLE_EXECUTION_ENGINE)
|
||||||
|
+ _add_capi_test_executable(mlir-capi-execution-engine-test
|
||||||
|
+ execution_engine.c
|
||||||
|
+ LINK_LIBS PRIVATE
|
||||||
|
+ MLIRCAPIConversion
|
||||||
|
+ MLIRCAPIExecutionEngine
|
||||||
|
+ MLIRCAPIRegisterEverything
|
||||||
|
+)
|
||||||
|
+endif()
|
||||||
|
+```
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+is run by lit tests, but it is not properly listed as a dependency. It
|
||||||
|
+is added in places conditionally across the file
|
||||||
|
+[`tests/CMakeLists.txt`](https://github.com/llvm/llvm-project/blob/main/mlir/test/CMakeLists.txt#L130-L143)
|
||||||
|
+
|
||||||
|
+```cmake
|
||||||
|
+# The native target may not be enabled, in this case we won't
|
||||||
|
+# run tests that involves executing on the host: do not build
|
||||||
|
+# useless binaries.
|
||||||
|
+if(LLVM_ENABLE_PIC AND TARGET ${LLVM_NATIVE_ARCH})
|
||||||
|
+ list(APPEND MLIR_TEST_DEPENDS
|
||||||
|
+ mlir-cpu-runner
|
||||||
|
+ llc
|
||||||
|
+ mlir_async_runtime
|
||||||
|
+ mlir-capi-execution-engine-test
|
||||||
|
+ mlir_c_runner_utils
|
||||||
|
+ mlir_runner_utils
|
||||||
|
+ mlir_float16_utils
|
||||||
|
+ )
|
||||||
|
+endif()
|
||||||
|
+```
|
||||||
|
+
|
||||||
|
+But this condition is not the same as the one where the test executable
|
||||||
|
+is added. [It has been reported on discord that the following error
|
||||||
|
+occurred:](https://discord.com/channels/636084430946959380/642426447167881246/1283811636725022730)
|
||||||
|
+
|
||||||
|
+```
|
||||||
|
+FAIL: MLIR :: CAPI/execution_engine.c (2 of 2121)
|
||||||
|
+******************** TEST 'MLIR :: CAPI/execution_engine.c' FAILED ********************
|
||||||
|
+Exit Code: 127
|
||||||
|
+Command Output (stdout):
|
||||||
|
+--
|
||||||
|
+# RUN: at line 10
|
||||||
|
+/usr/bin/mlir-capi-execution-engine-test 2>&1 | /usr/bin/FileCheck /builddir/build/BUILD/mlir-19.1.0_rc4-build/mlir-19.1.0-rc4.src/test/CAPI/execution_engine.c
|
||||||
|
+# executed command: /usr/bin/mlir-capi-execution-engine-test
|
||||||
|
+# .---command stderr------------
|
||||||
|
+# | '/usr/bin/mlir-capi-execution-engine-test': command not found
|
||||||
|
+# `-----------------------------
|
||||||
|
+```
|
||||||
|
+
|
||||||
|
+This error will not be deterministic and is dependent on the order in
|
||||||
|
+which tools are built. If by any chance,
|
||||||
|
+`mlir-capi-execution-engine-test` is built before the lit tests run,
|
||||||
|
+then nothing will happen. But lit tests can be run before
|
||||||
|
+`mlir-capi-execution-engine-test` is built.
|
||||||
|
+
|
||||||
|
+This patch adds the `mlir-capi-execution-engine` to the
|
||||||
|
+`MLIR_TEST_DEPENDS` list when the `MLIR_ENABLE_EXECUTION_ENGINE` flag is
|
||||||
|
+present.
|
||||||
|
+
|
||||||
|
+Happy to make changes like:
|
||||||
|
+* removing `mlir-capi-execution-engine-test` from the other place where
|
||||||
|
+it is included in the tests
|
||||||
|
+* and merge and sort alphabetically these two commands
|
||||||
|
+
|
||||||
|
+```cmake
|
||||||
|
+set(MLIR_TEST_DEPENDS
|
||||||
|
+FileCheck count not split-file
|
||||||
|
+mlir-capi-ir-test
|
||||||
|
+mlir-capi-irdl-test
|
||||||
|
+mlir-capi-llvm-test
|
||||||
|
+mlir-capi-pass-test
|
||||||
|
+mlir-capi-quant-test
|
||||||
|
+mlir-capi-rewrite-test
|
||||||
|
+mlir-capi-sparse-tensor-test
|
||||||
|
+mlir-capi-transform-test
|
||||||
|
+mlir-capi-transform-interpreter-test
|
||||||
|
+mlir-capi-translation-test
|
||||||
|
+mlir-linalg-ods-yaml-gen
|
||||||
|
+mlir-lsp-server
|
||||||
|
+mlir-opt
|
||||||
|
+ mlir-query
|
||||||
|
+ mlir-reduce
|
||||||
|
+ mlir-tblgen
|
||||||
|
+ mlir-translate
|
||||||
|
+ tblgen-lsp-server
|
||||||
|
+ tblgen-to-irdl
|
||||||
|
+ )
|
||||||
|
+
|
||||||
|
+set(MLIR_TEST_DEPENDS ${MLIR_TEST_DEPENDS}
|
||||||
|
+ mlir-capi-pdl-test
|
||||||
|
+ mlir-pdll-lsp-server
|
||||||
|
+ mlir-pdll
|
||||||
|
+ )
|
||||||
|
+```
|
||||||
|
+
|
||||||
|
+Co-authored-by: Erick Ochoa <erick@ceci-nest-pas.me>
|
||||||
|
+---
|
||||||
|
+ mlir/test/CMakeLists.txt | 4 ++++
|
||||||
|
+ 1 file changed, 4 insertions(+)
|
||||||
|
+
|
||||||
|
+diff --git a/mlir/test/CMakeLists.txt b/mlir/test/CMakeLists.txt
|
||||||
|
+index df95e5db11f1..4d2d738b734e 100644
|
||||||
|
+--- a/mlir/test/CMakeLists.txt
|
||||||
|
++++ b/mlir/test/CMakeLists.txt
|
||||||
|
+@@ -150,6 +150,10 @@ if(MLIR_ENABLE_CUDA_RUNNER)
|
||||||
|
+ list(APPEND MLIR_TEST_DEPENDS mlir_cuda_runtime)
|
||||||
|
+ endif()
|
||||||
|
+
|
||||||
|
++if(MLIR_ENABLE_EXECUTION_ENGINE)
|
||||||
|
++ list(APPEND MLIR_TEST_DEPENDS mlir-capi-execution-engine-test)
|
||||||
|
++endif()
|
||||||
|
++
|
||||||
|
+ if(MLIR_ENABLE_ROCM_RUNNER)
|
||||||
|
+ list(APPEND MLIR_TEST_DEPENDS mlir_rocm_runtime)
|
||||||
|
+ endif()
|
||||||
|
+--
|
||||||
|
+2.46.0
|
||||||
|
+
|
||||||
|
diff --git a/0001-mlir-Specify-deps-via-LLVM_LINK_COMPONENTS.patch b/0001-mlir-Specify-deps-via-LLVM_LINK_COMPONENTS.patch
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..2178800
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/0001-mlir-Specify-deps-via-LLVM_LINK_COMPONENTS.patch
|
||||||
|
@@ -0,0 +1,80 @@
|
||||||
|
+From c8f93f1958de1f59222a89dd64a573f91105e135 Mon Sep 17 00:00:00 2001
|
||||||
|
+From: Konrad Kleine <kkleine@redhat.com>
|
||||||
|
+Date: Tue, 3 Dec 2024 20:53:29 +0100
|
||||||
|
+Subject: [PATCH] [mlir] Specify deps via `LLVM_LINK_COMPONENTS`
|
||||||
|
+
|
||||||
|
+This specifies the dependencies to link against with
|
||||||
|
+`LLVM_LINK_COMPONENTS` for the
|
||||||
|
+`mlir/test/Target/LLVM/MLIRTargetLLVMTests` binary.
|
||||||
|
+
|
||||||
|
+Before, the dependencies where directly added to the
|
||||||
|
+`target_link_libraries()` call which caused the problems I describe
|
||||||
|
+next:
|
||||||
|
+
|
||||||
|
+When doing a build of LLVM with MLIR I want to link against
|
||||||
|
+`libLLVM.so` instead of statically linking `libLLVMSupport.a`.
|
||||||
|
+MLIR on the other side seems to statically link against
|
||||||
|
+`libLLVMSupport.a` because when I link to the shared library `libLLVM.so` I get:
|
||||||
|
+
|
||||||
|
+```
|
||||||
|
+CommandLine Error: Option 'aarch64-ptrauth-auth-checks' registered more than once!
|
||||||
|
+```
|
||||||
|
+
|
||||||
|
+This error indicates that the `Support` library is linked twice in the `MLIRTargetLLVMTest` binary.
|
||||||
|
+
|
||||||
|
+Here's the creation of the `MLIRTargetLLVMTest` binary before (Notice the
|
||||||
|
+`libLLVMSupport.a`):
|
||||||
|
+
|
||||||
|
+```
|
||||||
|
+[6535/6847] : && /usr/bin/clang++ -O2 -flto=thin -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS --config=/usr/lib/rpm/redhat/redhat-hardened-clang.cfg -fstack-protector-strong -mbranch-protection=standard -fasynchronous-unwind-tables -D_DEFAULT_SOURCE -Dasm=__asm__ -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Werror=mismatched-tags -O2 -g -DNDEBUG -Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now --config=/usr/lib/rpm/redhat/redhat-hardened-clang-ld.cfg -flto=thin -ffat-lto-objects -Wl,--build-id=sha1 -Wl,--gc-sections -fno-lto tools/mlir/unittests/Target/LLVM/CMakeFiles/MLIRTargetLLVMTests.dir/SerializeNVVMTarget.cpp.o tools/mlir/unittests/Target/LLVM/CMakeFiles/MLIRTargetLLVMTests.dir/SerializeROCDLTarget.cpp.o tools/mlir/unittests/Target/LLVM/CMakeFiles/MLIRTargetLLVMTests.dir/SerializeToLLVMBitcode.cpp.o -o tools/mlir/unittests/Target/LLVM/MLIRTargetLLVMTests -Wl,-rpath,/builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/lib64 lib64/libllvm_gtest_main.a lib64/libllvm_gtest.a lib64/libMLIRTargetLLVM.a lib64/libMLIRNVVMTarget.a lib64/libMLIRROCDLTarget.a lib64/libMLIRGPUDialect.a lib64/libMLIRNVVMDialect.a lib64/libMLIRLLVMDialect.a lib64/libMLIRLLVMToLLVMIRTranslation.a lib64/libMLIRBuiltinToLLVMIRTranslation.a lib64/libMLIRNVVMToLLVMIRTranslation.a lib64/libMLIRROCDLToLLVMIRTranslation.a lib64/libMLIRGPUToLLVMIRTranslation.a lib64/libLLVMAArch64CodeGen.a lib64/libLLVMAArch64Desc.a lib64/libLLVMAArch64Info.a -lpthread lib64/libMLIRTargetLLVM.a lib64/libMLIRROCDLDialect.a lib64/libMLIRExecutionEngineUtils.a lib64/libMLIRGPUDialect.a lib64/libMLIRMemRefDialect.a lib64/libMLIRArithUtils.a lib64/libMLIRDialectUtils.a lib64/libMLIRComplexDialect.a lib64/libMLIRArithAttrToLLVMConversion.a lib64/libMLIRArithDialect.a lib64/libMLIRCastInterfaces.a lib64/libMLIRDialect.a lib64/libMLIRInferIntRangeCommon.a lib64/libMLIRUBDialect.a lib64/libMLIRShapedOpInterfaces.a lib64/libMLIRTargetLLVMIRExport.a lib64/libMLIRDLTIDialect.a lib64/libMLIRLLVMIRTransforms.a lib64/libMLIRNVVMDialect.a lib64/libMLIRLLVMDialect.a lib64/libMLIRFuncDialect.a lib64/libMLIRTransforms.a lib64/libMLIRMemorySlotInterfaces.a lib64/libMLIRCopyOpInterface.a lib64/libMLIRRuntimeVerifiableOpInterface.a lib64/libMLIRTranslateLib.a lib64/libMLIRParser.a lib64/libMLIRBytecodeReader.a lib64/libMLIRAsmParser.a lib64/libMLIRTransformUtils.a lib64/libMLIRSubsetOpInterface.a lib64/libMLIRValueBoundsOpInterface.a lib64/libMLIRDestinationStyleOpInterface.a lib64/libMLIRRewrite.a lib64/libMLIRRewritePDL.a lib64/libMLIRPDLToPDLInterp.a lib64/libMLIRPass.a lib64/libMLIRAnalysis.a lib64/libMLIRControlFlowInterfaces.a lib64/libMLIRInferIntRangeInterface.a lib64/libMLIRCallInterfaces.a lib64/libMLIRDataLayoutInterfaces.a lib64/libMLIRViewLikeInterface.a lib64/libMLIRLoopLikeInterface.a lib64/libMLIRPresburger.a lib64/libMLIRPDLInterpDialect.a lib64/libMLIRFunctionInterfaces.a lib64/libMLIRPDLDialect.a lib64/libMLIRSideEffectInterfaces.a lib64/libMLIRInferTypeOpInterface.a lib64/libMLIRIR.a lib64/libMLIRSupport.a lib64/libLLVM.so.19.1 lib64/libLLVMAArch64Utils.a lib64/libLLVMAsmPrinter.a lib64/libLLVMCFGuard.a lib64/libLLVMGlobalISel.a lib64/libLLVMSelectionDAG.a lib64/libLLVMCodeGen.a lib64/libLLVMScalarOpts.a lib64/libLLVMAggressiveInstCombine.a lib64/libLLVMInstCombine.a lib64/libLLVMBitWriter.a lib64/libLLVMObjCARCOpts.a lib64/libLLVMCodeGenTypes.a lib64/libLLVMTarget.a lib64/libLLVMVectorize.a lib64/libLLVMTransformUtils.a lib64/libLLVMAnalysis.a lib64/libLLVMProfileData.a lib64/libLLVMSymbolize.a lib64/libLLVMDebugInfoDWARF.a lib64/libLLVMDebugInfoPDB.a lib64/libLLVMObject.a lib64/libLLVMMCParser.a lib64/libLLVMMC.a lib64/libLLVMIRReader.a lib64/libLLVMBitReader.a lib64/libLLVMAsmParser.a lib64/libLLVMTextAPI.a lib64/libLLVMDebugInfoCodeView.a lib64/libLLVMDebugInfoMSF.a lib64/libLLVMDebugInfoBTF.a lib64/libLLVMCore.a lib64/libLLVMBinaryFormat.a lib64/libLLVMRemarks.a lib64/libLLVMBitstreamReader.a lib64/libLLVMTargetParser.a lib64/libLLVMSupport.a lib64/libLLVMDemangle.a -lrt -ldl -lm /usr/lib64/libz.so /usr/lib64/libzstd.so && :
|
||||||
|
+```
|
||||||
|
+
|
||||||
|
+Here's the full error:
|
||||||
|
+
|
||||||
|
+```
|
||||||
|
+[24/25] cd /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/test && /usr/bin/python3 /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/./bin/llvm-lit -vv /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/test
|
||||||
|
+: CommandLine Error: Option 'aarch64-ptrauth-auth-checks' registered more than once!
|
||||||
|
+LLVM ERROR: inconsistency in registered CommandLine options
|
||||||
|
+llvm-lit: /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/utils/lit/lit/formats/googletest.py:38: warning: unable to discover google-tests in '/builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/unittests/Target/LLVM/./MLIRTargetLLVMTests': Command '['/builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/unittests/Target/LLVM/./MLIRTargetLLVMTests', '--gtest_list_tests', '--gtest_filter=-*DISABLED_*']' died with <Signals.SIGABRT: 6>.. Process output: b''
|
||||||
|
+error: filter did not match any tests (of 2704 discovered). Use '--allow-empty-runs' to suppress this error.
|
||||||
|
+FAILED: tools/mlir/test/CMakeFiles/check-mlir /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/test/CMakeFiles/check-mlir
|
||||||
|
+```
|
||||||
|
+
|
||||||
|
+Here's the CMake invocation:
|
||||||
|
+
|
||||||
|
+```
|
||||||
|
+/usr/bin/cmake -S . -B redhat-linux-build -DCMAKE_C_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_CXX_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_Fortran_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_INSTALL_DO_STRIP:BOOL=OFF -DCMAKE_INSTALL_PREFIX:PATH=/usr -DINCLUDE_INSTALL_DIR:PATH=/usr/include -DLIB_INSTALL_DIR:PATH=/usr/lib64 -DSYSCONF_INSTALL_DIR:PATH=/etc -DSHARE_INSTALL_PREFIX:PATH=/usr/share -DLIB_SUFFIX=64 -DBUILD_SHARED_LIBS:BOOL=ON -G Ninja '' -DCLANG_BUILD_EXAMPLES:BOOL=OFF -DCLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang/ -DCLANG_DEFAULT_PIE_ON_LINUX=OFF -DCLANG_DEFAULT_UNWINDLIB=libgcc -DCLANG_ENABLE_ARCMT:BOOL=ON -DCLANG_ENABLE_STATIC_ANALYZER:BOOL=ON -DCLANG_INCLUDE_DOCS:BOOL=ON -DCLANG_INCLUDE_TESTS:BOOL=ON -DCLANG_LINK_CLANG_DYLIB=ON -DCLANG_PLUGIN_SUPPORT:BOOL=ON '-DCLANG_REPOSITORY_STRING=Fedora 19.1.3-5.fc42' -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=../clang-tools-extra -DCLANG_RESOURCE_DIR=../lib/clang/19 -DCOMPILER_RT_INCLUDE_TESTS:BOOL=OFF -DCOMPILER_RT_INSTALL_PATH=/usr/lib/clang/19 -DLLVM_ENABLE_DOXYGEN:BOOL=OFF -DLLVM_ENABLE_SPHINX:BOOL=ON -DLLVM_BUILD_DOCS:BOOL=ON -DSPHINX_EXECUTABLE=/usr/bin/sphinx-build-3 -DSPHINX_OUTPUT_HTML:BOOL=OFF -DSPHINX_OUTPUT_MAN:BOOL=ON -DSPHINX_WARNINGS_AS_ERRORS=OFF -DLLDB_DISABLE_CURSES:BOOL=OFF -DLLDB_DISABLE_LIBEDIT:BOOL=OFF -DLLDB_DISABLE_PYTHON:BOOL=OFF -DLLDB_ENFORCE_STRICT_TEST_REQUIREMENTS:BOOL=ON -DLLVM_APPEND_VC_REV:BOOL=OFF -DLLVM_BUILD_EXAMPLES:BOOL=OFF -DLLVM_BUILD_EXTERNAL_COMPILER_RT:BOOL=ON -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON -DLLVM_BUILD_RUNTIME:BOOL=ON -DLLVM_BUILD_TOOLS:BOOL=ON -DLLVM_BUILD_UTILS:BOOL=ON -DLLVM_COMMON_CMAKE_UTILS=/usr/share/llvm/cmake -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-redhat-linux-gnu -DLLVM_DYLIB_COMPONENTS=all -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_FFI:BOOL=ON -DLLVM_ENABLE_LIBCXX:BOOL=OFF -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON '-DLLVM_ENABLE_PROJECTS=clang;clang-tools-extra;lld;lldb;mlir' -DLLVM_ENABLE_RTTI:BOOL=ON '-DLLVM_ENABLE_RUNTIMES=compiler-rt;openmp;offload' -DLLVM_ENABLE_ZLIB:BOOL=ON -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=AVR -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_INCLUDE_EXAMPLES:BOOL=ON -DLLVM_INCLUDE_TOOLS:BOOL=ON -DLLVM_INCLUDE_UTILS:BOOL=ON -DLLVM_INSTALL_TOOLCHAIN_ONLY:BOOL=OFF -DLLVM_INSTALL_UTILS:BOOL=ON -DLLVM_LINK_LLVM_DYLIB:BOOL=ON -DLLVM_PARALLEL_LINK_JOBS=1 -DLLVM_TARGETS_TO_BUILD=all -DLLVM_TOOLS_INSTALL_DIR:PATH=bin -DLLVM_UNREACHABLE_OPTIMIZE:BOOL=OFF -DLLVM_USE_PERF:BOOL=ON -DLLVM_UTILS_INSTALL_DIR:PATH=bin -DMLIR_INCLUDE_DOCS:BOOL=ON -DMLIR_INCLUDE_TESTS:BOOL=ON -DMLIR_INCLUDE_INTEGRATION_TESTS:BOOL=OFF -DMLIR_INSTALL_AGGREGATE_OBJECTS=OFF -DMLIR_BUILD_MLIR_C_DYLIB=ON -DMLIR_ENABLE_BINDINGS_PYTHON:BOOL=ON -DOPENMP_INSTALL_LIBDIR=lib64 -DLIBOMP_INSTALL_ALIASES=OFF -DLLVM_BUILD_TESTS:BOOL=ON -DLLVM_INCLUDE_TESTS:BOOL=ON -DLLVM_INSTALL_GTEST:BOOL=ON -DLLVM_LIT_ARGS=-vv -DLLVM_UNITTEST_LINK_FLAGS=-fno-lto -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_LINKER_BUILD_ID:BOOL=ON -DOFFLOAD_INSTALL_LIBDIR=lib64 -DPython3_EXECUTABLE=/usr/bin/python3 -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON -DPPC_LINUX_DEFAULT_IEEELONGDOUBLE=ON -DLLVM_LIBDIR_SUFFIX=64 -DLLVM_BINUTILS_INCDIR=/usr/include -DLLVM_VERSION_SUFFIX=
|
||||||
|
+```
|
||||||
|
+---
|
||||||
|
+ mlir/unittests/Target/LLVM/CMakeLists.txt | 5 ++---
|
||||||
|
+ 1 file changed, 2 insertions(+), 3 deletions(-)
|
||||||
|
+
|
||||||
|
+diff --git a/mlir/unittests/Target/LLVM/CMakeLists.txt b/mlir/unittests/Target/LLVM/CMakeLists.txt
|
||||||
|
+index 6d612548a94c..0c61d222dedf 100644
|
||||||
|
+--- a/mlir/unittests/Target/LLVM/CMakeLists.txt
|
||||||
|
++++ b/mlir/unittests/Target/LLVM/CMakeLists.txt
|
||||||
|
+@@ -1,11 +1,11 @@
|
||||||
|
++set(LLVM_LINK_COMPONENTS nativecodegen)
|
||||||
|
++
|
||||||
|
+ add_mlir_unittest(MLIRTargetLLVMTests
|
||||||
|
+ SerializeNVVMTarget.cpp
|
||||||
|
+ SerializeROCDLTarget.cpp
|
||||||
|
+ SerializeToLLVMBitcode.cpp
|
||||||
|
+ )
|
||||||
|
+
|
||||||
|
+-llvm_map_components_to_libnames(llvm_libs nativecodegen)
|
||||||
|
+-
|
||||||
|
+ target_link_libraries(MLIRTargetLLVMTests
|
||||||
|
+ PRIVATE
|
||||||
|
+ MLIRTargetLLVM
|
||||||
|
+@@ -19,7 +19,6 @@ target_link_libraries(MLIRTargetLLVMTests
|
||||||
|
+ MLIRNVVMToLLVMIRTranslation
|
||||||
|
+ MLIRROCDLToLLVMIRTranslation
|
||||||
|
+ MLIRGPUToLLVMIRTranslation
|
||||||
|
+- ${llvm_libs}
|
||||||
|
+ )
|
||||||
|
+
|
||||||
|
+ if (DEFINED LLVM_NATIVE_TARGET)
|
||||||
|
+--
|
||||||
|
+2.46.0
|
||||||
|
+
|
||||||
|
diff --git a/0001-mlir-python-Reuse-the-library-directory.patch b/0001-mlir-python-Reuse-the-library-directory.patch
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7590347
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/0001-mlir-python-Reuse-the-library-directory.patch
|
||||||
|
@@ -0,0 +1,77 @@
|
||||||
|
+From 1d043550c7601ca776b0318b9b913e5ecf325baf Mon Sep 17 00:00:00 2001
|
||||||
|
+From: Tulio Magno Quites Machado Filho <tuliom@redhat.com>
|
||||||
|
+Date: Tue, 5 Sep 2023 10:35:37 -0300
|
||||||
|
+Subject: [PATCH] Reuse the library directory
|
||||||
|
+
|
||||||
|
+Prefer to get the path to the shared libraries from config.llvm_shlib_dir.
|
||||||
|
+Fallback to the previous path only if config.llvm_shlib_dir is not
|
||||||
|
+defined.
|
||||||
|
+
|
||||||
|
+This ensures the test will pass regardless of the build configuration
|
||||||
|
+used downstream.
|
||||||
|
+---
|
||||||
|
+ mlir/test/lit.cfg.py | 1 +
|
||||||
|
+ mlir/test/python/execution_engine.py | 12 +++++++-----
|
||||||
|
+ 2 files changed, 8 insertions(+), 5 deletions(-)
|
||||||
|
+
|
||||||
|
+diff --git a/mlir/test/lit.cfg.py b/mlir/test/lit.cfg.py
|
||||||
|
+--- a/mlir/test/lit.cfg.py 2024-08-05 10:40:33.000000000 +0200
|
||||||
|
++++ b/mlir/test/lit.cfg.py 2024-08-14 19:17:55.160470316 +0200
|
||||||
|
+@@ -164,6 +164,7 @@
|
||||||
|
+ ToolSubst("transform-opt-ch2", unresolved="ignore"),
|
||||||
|
+ ToolSubst("transform-opt-ch3", unresolved="ignore"),
|
||||||
|
+ ToolSubst("transform-opt-ch4", unresolved="ignore"),
|
||||||
|
++ ToolSubst("%llvm_shlib_dir", config.llvm_shlib_dir, unresolved="ignore"),
|
||||||
|
+ ToolSubst("mlir-transform-opt", unresolved="ignore"),
|
||||||
|
+ ToolSubst("%mlir_lib_dir", config.mlir_lib_dir, unresolved="ignore"),
|
||||||
|
+ ToolSubst("%mlir_src_dir", config.mlir_src_root, unresolved="ignore"),
|
||||||
|
+diff -ruN mlir-19.1.0-rc2.src.orig/test/python/execution_engine.py mlir-19.1.0-rc2.src/test/python/execution_engine.py
|
||||||
|
+--- a/mlir/test/python/execution_engine.py 2024-08-05 10:40:33.000000000 +0200
|
||||||
|
++++ b/mlir/test/python/execution_engine.py 2024-08-14 19:17:20.822219824 +0200
|
||||||
|
+@@ -1,4 +1,4 @@
|
||||||
|
+-# RUN: %PYTHON %s 2>&1 | FileCheck %s
|
||||||
|
++# RUN: env LLVM_SHLIB_DIR=%llvm_shlib_dir %PYTHON %s 2>&1 | FileCheck %s
|
||||||
|
+ # REQUIRES: host-supports-jit
|
||||||
|
+ import gc, sys, os, tempfile
|
||||||
|
+ from mlir.ir import *
|
||||||
|
+@@ -6,6 +6,9 @@
|
||||||
|
+ from mlir.execution_engine import *
|
||||||
|
+ from mlir.runtime import *
|
||||||
|
+
|
||||||
|
++_DEFAULT_LIB_DIR = "../../../../lib"
|
||||||
|
++LIB_DIR = os.getenv("LLVM_SHLIB_DIR", _DEFAULT_LIB_DIR)
|
||||||
|
++
|
||||||
|
+
|
||||||
|
+ # Log everything to stderr and flush so that we have a unified stream to match
|
||||||
|
+ # errors/info emitted by MLIR to stderr.
|
||||||
|
+@@ -613,6 +616,7 @@
|
||||||
|
+ shared_libs = [
|
||||||
|
+ "../../../../bin/mlir_runner_utils.dll",
|
||||||
|
+ "../../../../bin/mlir_c_runner_utils.dll",
|
||||||
|
++
|
||||||
|
+ ]
|
||||||
|
+ elif sys.platform == "darwin":
|
||||||
|
+ shared_libs = [
|
||||||
|
+@@ -621,8 +625,9 @@
|
||||||
|
+ ]
|
||||||
|
+ else:
|
||||||
|
+ shared_libs = [
|
||||||
|
+- "../../../../lib/libmlir_runner_utils.so",
|
||||||
|
+- "../../../../lib/libmlir_c_runner_utils.so",
|
||||||
|
++ LIB_DIR + "/libmlir_runner_utils.so",
|
||||||
|
++ LIB_DIR + "/libmlir_c_runner_utils.so",
|
||||||
|
++
|
||||||
|
+ ]
|
||||||
|
+
|
||||||
|
+ execution_engine = ExecutionEngine(
|
||||||
|
+@@ -664,8 +669,8 @@
|
||||||
|
+ ]
|
||||||
|
+ else:
|
||||||
|
+ shared_libs = [
|
||||||
|
+- "../../../../lib/libmlir_runner_utils.so",
|
||||||
|
+- "../../../../lib/libmlir_c_runner_utils.so",
|
||||||
|
++ LIB_DIR + "/libmlir_runner_utils.so",
|
||||||
|
++ LIB_DIR + "/libmlir_c_runner_utils.so",
|
||||||
|
+ ]
|
||||||
|
+
|
||||||
|
+ execution_engine = ExecutionEngine(
|
||||||
|
diff --git a/Makefile b/Makefile
|
||||||
|
index 0d91301..83904c9 100644
|
||||||
|
--- a/Makefile
|
||||||
|
+++ b/Makefile
|
||||||
|
@@ -89,7 +89,7 @@ edit-last-failing-script: get-last-run-script
|
||||||
|
######### Re-run the last failing script from mock
|
||||||
|
|
||||||
|
.PHONY: mockbuild-rerun-last-script
|
||||||
|
-## Re-runs the last failing or running script of your release/mock mockbuild.
|
||||||
|
+## Re-runs the last failing or running script of your release/snapshot mock mockbuild.
|
||||||
|
mockbuild-rerun-last-script: get-last-run-script
|
||||||
|
mock --root=$(MOCK_CHROOT) --shell 'sh -e $(last_run_script)'
|
||||||
|
|
||||||
|
diff --git a/llvm.spec b/llvm.spec
|
||||||
|
index cea5ced..e2ce86f 100644
|
||||||
|
--- a/llvm.spec
|
||||||
|
+++ b/llvm.spec
|
||||||
|
@@ -41,6 +41,16 @@
|
||||||
|
%bcond_without lldb
|
||||||
|
%endif
|
||||||
|
|
||||||
|
+%if %{without compat_build} && 0%{?fedora}
|
||||||
|
+%ifarch %{ix86}
|
||||||
|
+%bcond_with mlir
|
||||||
|
+%else
|
||||||
|
+%bcond_without mlir
|
||||||
|
+%endif
|
||||||
|
+%else
|
||||||
|
+%bcond_with mlir
|
||||||
|
+%endif
|
||||||
|
+
|
||||||
|
# Disable LTO on x86 and riscv in order to reduce memory consumption.
|
||||||
|
%ifarch %ix86 riscv64
|
||||||
|
%bcond_with lto_build
|
||||||
|
@@ -178,11 +188,15 @@
|
||||||
|
#endregion LLDB globals
|
||||||
|
#endregion globals
|
||||||
|
|
||||||
|
+#region MLIR globals
|
||||||
|
+%global pkg_name_mlir mlir%{pkg_suffix}
|
||||||
|
+#endregion MLIR globals
|
||||||
|
+
|
||||||
|
#region packages
|
||||||
|
#region main package
|
||||||
|
Name: %{pkg_name_llvm}
|
||||||
|
Version: %{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:~rc%{rc_ver}}%{?llvm_snapshot_version_suffix:~%{llvm_snapshot_version_suffix}}
|
||||||
|
-Release: 1%{?dist}
|
||||||
|
+Release: 2%{?dist}
|
||||||
|
Summary: The Low Level Virtual Machine
|
||||||
|
|
||||||
|
License: Apache-2.0 WITH LLVM-exception OR NCSA
|
||||||
|
@@ -254,6 +268,15 @@ Patch103: 0001-Workaround-a-bug-in-ORC-on-ppc64le.patch
|
||||||
|
# this might no longer be needed.
|
||||||
|
Patch104: 0001-Driver-Give-devtoolset-path-precedence-over-Installe.patch
|
||||||
|
|
||||||
|
+#region MLIR patches
|
||||||
|
+# See https://github.com/llvm/llvm-project/pull/108579
|
||||||
|
+Patch1904: 0001-mlir-python-Reuse-the-library-directory.patch
|
||||||
|
+# See https://github.com/llvm/llvm-project/pull/108461
|
||||||
|
+Patch1905: 0001-CMake-Add-missing-dependency-108461.patch
|
||||||
|
+# See https://github.com/llvm/llvm-project/pull/118542
|
||||||
|
+Patch1906: 0001-mlir-Specify-deps-via-LLVM_LINK_COMPONENTS.patch
|
||||||
|
+#endregion MLIR patches
|
||||||
|
+
|
||||||
|
#region LLD patches
|
||||||
|
Patch1800: 0001-18-Always-build-shared-libs-for-LLD.patch
|
||||||
|
Patch1902: 0001-19-Always-build-shared-libs-for-LLD.patch
|
||||||
|
@@ -363,6 +386,12 @@ BuildRequires: perl(Term::ANSIColor)
|
||||||
|
BuildRequires: perl(Text::ParseWords)
|
||||||
|
BuildRequires: perl(Sys::Hostname)
|
||||||
|
|
||||||
|
+%if %{with mlir}
|
||||||
|
+BuildRequires: python%{python3_pkgversion}-numpy
|
||||||
|
+BuildRequires: python%{python3_pkgversion}-pybind11
|
||||||
|
+BuildRequires: python%{python3_pkgversion}-pyyaml
|
||||||
|
+%endif
|
||||||
|
+
|
||||||
|
BuildRequires: graphviz
|
||||||
|
|
||||||
|
# This is required because we need "ps" when running LLDB tests
|
||||||
|
@@ -761,6 +790,48 @@ Obsoletes: python3-lldb < 18.9
|
||||||
|
The package contains the LLDB Python module.
|
||||||
|
%endif
|
||||||
|
#endregion LLDB packages
|
||||||
|
+
|
||||||
|
+#region MLIR packages
|
||||||
|
+%if %{with mlir}
|
||||||
|
+%package -n %{pkg_name_mlir}
|
||||||
|
+Summary: Multi-Level Intermediate Representation Overview
|
||||||
|
+License: Apache-2.0 WITH LLVM-exception
|
||||||
|
+URL: http://mlir.llvm.org
|
||||||
|
+
|
||||||
|
+%description -n %{pkg_name_mlir}
|
||||||
|
+The MLIR project is a novel approach to building reusable and extensible
|
||||||
|
+compiler infrastructure. MLIR aims to address software fragmentation,
|
||||||
|
+improve compilation for heterogeneous hardware, significantly reduce
|
||||||
|
+the cost of building domain specific compilers, and aid in connecting
|
||||||
|
+existing compilers together.
|
||||||
|
+
|
||||||
|
+%package -n %{pkg_name_mlir}-static
|
||||||
|
+Summary: MLIR static files
|
||||||
|
+Requires: %{pkg_name_mlir}%{?_isa} = %{version}-%{release}
|
||||||
|
+
|
||||||
|
+%description -n %{pkg_name_mlir}-static
|
||||||
|
+MLIR static files.
|
||||||
|
+
|
||||||
|
+%package -n %{pkg_name_mlir}-devel
|
||||||
|
+Summary: MLIR development files
|
||||||
|
+Requires: %{pkg_name_mlir}%{?_isa} = %{version}-%{release}
|
||||||
|
+Requires: %{pkg_name_mlir}-static%{?_isa} = %{version}-%{release}
|
||||||
|
+
|
||||||
|
+%description -n %{pkg_name_mlir}-devel
|
||||||
|
+MLIR development files.
|
||||||
|
+
|
||||||
|
+%package -n python%{python3_pkgversion}-mlir
|
||||||
|
+%{?python_provide:%python_provide python%{python3_pkgversion}-mlir}
|
||||||
|
+Summary: MLIR python bindings
|
||||||
|
+
|
||||||
|
+Requires: python%{python3_pkgversion}
|
||||||
|
+Requires: python%{python3_pkgversion}-numpy
|
||||||
|
+
|
||||||
|
+%description -n python%{python3_pkgversion}-mlir
|
||||||
|
+MLIR python bindings.
|
||||||
|
+%endif
|
||||||
|
+#endregion MLIR packages
|
||||||
|
+
|
||||||
|
#endregion packages
|
||||||
|
|
||||||
|
#region prep
|
||||||
|
@@ -857,6 +928,9 @@ The package contains the LLDB Python module.
|
||||||
|
%if %{with lldb}
|
||||||
|
%global projects %{projects};lldb
|
||||||
|
%endif
|
||||||
|
+%if %{with mlir}
|
||||||
|
+%global projects %{projects};mlir
|
||||||
|
+%endif
|
||||||
|
|
||||||
|
# Copy CFLAGS into ASMFLAGS, so -fcf-protection is used when compiling assembly files.
|
||||||
|
export ASMFLAGS="%{build_cflags}"
|
||||||
|
@@ -990,6 +1064,18 @@ popd
|
||||||
|
-DLLVM_UTILS_INSTALL_DIR:PATH=bin
|
||||||
|
#endregion llvm options
|
||||||
|
|
||||||
|
+#region mlir options
|
||||||
|
+%if %{with mlir}
|
||||||
|
+%global cmake_config_args %{cmake_config_args} \\\
|
||||||
|
+ -DMLIR_INCLUDE_DOCS:BOOL=ON \\\
|
||||||
|
+ -DMLIR_INCLUDE_TESTS:BOOL=ON \\\
|
||||||
|
+ -DMLIR_INCLUDE_INTEGRATION_TESTS:BOOL=OFF \\\
|
||||||
|
+ -DMLIR_INSTALL_AGGREGATE_OBJECTS=OFF \\\
|
||||||
|
+ -DMLIR_BUILD_MLIR_C_DYLIB=ON \\\
|
||||||
|
+ -DMLIR_ENABLE_BINDINGS_PYTHON:BOOL=ON
|
||||||
|
+%endif
|
||||||
|
+#endregion mlir options
|
||||||
|
+
|
||||||
|
#region openmp options
|
||||||
|
%global cmake_config_args %{cmake_config_args} \\\
|
||||||
|
-DOPENMP_INSTALL_LIBDIR=%{unprefixed_libdir} \\\
|
||||||
|
@@ -1403,6 +1489,17 @@ ln -vsf "../../../${liblldb}" %{buildroot}%{python3_sitearch}/lldb/_lldb.so
|
||||||
|
%endif
|
||||||
|
#endregion LLDB installation
|
||||||
|
|
||||||
|
+#region mlir installation
|
||||||
|
+%if %{with mlir}
|
||||||
|
+mkdir -p %{buildroot}/%{python3_sitearch}
|
||||||
|
+mv %{buildroot}%{_prefix}/python_packages/mlir_core/mlir %{buildroot}/%{python3_sitearch}
|
||||||
|
+# These directories should be empty now.
|
||||||
|
+rmdir %{buildroot}%{_prefix}/python_packages/mlir_core %{buildroot}%{_prefix}/python_packages
|
||||||
|
+# Unneeded files.
|
||||||
|
+rm -rf %{buildroot}%{_prefix}/src/python
|
||||||
|
+%endif
|
||||||
|
+#endregion mlir installation
|
||||||
|
+
|
||||||
|
%if %{with compat_build}
|
||||||
|
# Add version suffix to binaries. Do this at the end so it includes any
|
||||||
|
# additional binaries that may be been added by other steps.
|
||||||
|
@@ -1494,6 +1591,9 @@ function reset_test_opts()
|
||||||
|
# Set for filtering out unit tests.
|
||||||
|
# See http://google.github.io/googletest/advanced.html#running-a-subset-of-the-tests
|
||||||
|
unset GTEST_FILTER
|
||||||
|
+
|
||||||
|
+ # Some test (e.g. mlir) require this to be set.
|
||||||
|
+ unset PYTHONPATH
|
||||||
|
}
|
||||||
|
|
||||||
|
# Convert array of test names into a regex.
|
||||||
|
@@ -1520,6 +1620,21 @@ function test_list_to_regex()
|
||||||
|
# Add enclosing parenthesis
|
||||||
|
echo "($arr)"
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+# Similar to test_list_to_regex() except that this function exports
|
||||||
|
+# the LIT_FILTER_OUT if there are tests in the given list.
|
||||||
|
+# If there are no tests, the LIT_FILTER_OUT is unset in order to
|
||||||
|
+# avoid issues with the llvm test system.
|
||||||
|
+function adjust_lit_filter_out()
|
||||||
|
+{
|
||||||
|
+ local -n arr=$1
|
||||||
|
+ local res=$(test_list_to_regex test_list_filter_out)
|
||||||
|
+ if [[ "$res" != "()" ]]; then
|
||||||
|
+ export LIT_FILTER_OUT=$res
|
||||||
|
+ else
|
||||||
|
+ unset LIT_FILTER_OUT
|
||||||
|
+ fi
|
||||||
|
+}
|
||||||
|
#endregion Helper functions
|
||||||
|
|
||||||
|
#region Test LLVM lit
|
||||||
|
@@ -1606,7 +1721,7 @@ test_list_filter_out+=("libomp :: flush/omp_flush.c")
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%ifarch aarch64 s390x
|
||||||
|
-# The following test has been failling intermittently on aarch64 and s390x.
|
||||||
|
+# The following test has been failing intermittently on aarch64 and s390x.
|
||||||
|
# Re-enable it after https://github.com/llvm/llvm-project/issues/117773
|
||||||
|
# gets fixed.
|
||||||
|
test_list_filter_out+=("libarcher :: races/taskwait-depend.c")
|
||||||
|
@@ -1711,7 +1826,7 @@ export LIT_XFAIL="$LIT_XFAIL;offloading/thread_state_1.c"
|
||||||
|
export LIT_XFAIL="$LIT_XFAIL;offloading/thread_state_2.c"
|
||||||
|
%endif
|
||||||
|
|
||||||
|
-export LIT_FILTER_OUT=$(test_list_to_regex test_list_filter_out)
|
||||||
|
+adjust_lit_filter_out test_list_filter_out
|
||||||
|
|
||||||
|
%cmake_build --target check-openmp
|
||||||
|
#endregion Test OPENMP
|
||||||
|
@@ -1743,6 +1858,29 @@ reset_test_opts
|
||||||
|
%cmake_build --target check-lld
|
||||||
|
#endregion Test LLD
|
||||||
|
|
||||||
|
+#region Test MLIR
|
||||||
|
+%if %{with mlir}
|
||||||
|
+reset_test_opts
|
||||||
|
+%ifarch s390x
|
||||||
|
+# s390x does not support half-float
|
||||||
|
+test_list_filter_out+=("mlir/test/python/execution_engine.py")
|
||||||
|
+
|
||||||
|
+# https://discourse.llvm.org/t/mlir-s390x-linux-failure/76695/25
|
||||||
|
+test_list_filter_out+=("mlir/test/Target/LLVMIR/llvmir.mlir")
|
||||||
|
+test_list_filter_out+=("mlir/test/python/ir/array_attributes.py")
|
||||||
|
+%endif
|
||||||
|
+
|
||||||
|
+%ifarch ppc64le
|
||||||
|
+test_list_filter_out+=("test/python/execution_engine.py")
|
||||||
|
+%endif
|
||||||
|
+
|
||||||
|
+adjust_lit_filter_out test_list_filter_out
|
||||||
|
+
|
||||||
|
+export PYTHONPATH=%{buildroot}/%{python3_sitearch}
|
||||||
|
+%cmake_build --target check-mlir
|
||||||
|
+%endif
|
||||||
|
+#endregion Test MLIR
|
||||||
|
+
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with snapshot_build}
|
||||||
|
@@ -2501,10 +2639,62 @@ fi
|
||||||
|
%{python3_sitearch}/lldb
|
||||||
|
%endif
|
||||||
|
#endregion LLDB files
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#region MLIR files
|
||||||
|
+%if %{with mlir}
|
||||||
|
+%files -n %{pkg_name_mlir}
|
||||||
|
+%license LICENSE.TXT
|
||||||
|
+%{_libdir}/libmlir_arm_runner_utils.so.%{maj_ver}*
|
||||||
|
+%{_libdir}/libmlir_arm_sme_abi_stubs.so.%{maj_ver}*
|
||||||
|
+%{_libdir}/libmlir_async_runtime.so.%{maj_ver}*
|
||||||
|
+%{_libdir}/libmlir_c_runner_utils.so.%{maj_ver}*
|
||||||
|
+%{_libdir}/libmlir_float16_utils.so.%{maj_ver}*
|
||||||
|
+%{_libdir}/libmlir_runner_utils.so.%{maj_ver}*
|
||||||
|
+%{_libdir}/libMLIR*.so.%{maj_ver}*
|
||||||
|
+
|
||||||
|
+%files -n %{pkg_name_mlir}-static
|
||||||
|
+%{_libdir}/libMLIR*.a
|
||||||
|
+
|
||||||
|
+%files -n %{pkg_name_mlir}-devel
|
||||||
|
+%{_bindir}/mlir-cat
|
||||||
|
+%{_bindir}/mlir-cpu-runner
|
||||||
|
+%{_bindir}/mlir-linalg-ods-yaml-gen
|
||||||
|
+%{_bindir}/mlir-lsp-server
|
||||||
|
+%{_bindir}/mlir-minimal-opt
|
||||||
|
+%{_bindir}/mlir-minimal-opt-canonicalize
|
||||||
|
+%{_bindir}/mlir-opt
|
||||||
|
+%{_bindir}/mlir-pdll
|
||||||
|
+%{_bindir}/mlir-pdll-lsp-server
|
||||||
|
+%{_bindir}/mlir-query
|
||||||
|
+%{_bindir}/mlir-reduce
|
||||||
|
+%{_bindir}/mlir-tblgen
|
||||||
|
+%{_bindir}/mlir-transform-opt
|
||||||
|
+%{_bindir}/mlir-translate
|
||||||
|
+%{_bindir}/tblgen-lsp-server
|
||||||
|
+%{_bindir}/tblgen-to-irdl
|
||||||
|
+%{_includedir}/mlir
|
||||||
|
+%{_includedir}/mlir-c
|
||||||
|
+%{_libdir}/cmake/mlir
|
||||||
|
+%{_libdir}/libmlir_arm_runner_utils.so
|
||||||
|
+%{_libdir}/libmlir_arm_sme_abi_stubs.so
|
||||||
|
+%{_libdir}/libmlir_async_runtime.so
|
||||||
|
+%{_libdir}/libmlir_c_runner_utils.so
|
||||||
|
+%{_libdir}/libmlir_float16_utils.so
|
||||||
|
+%{_libdir}/libmlir_runner_utils.so
|
||||||
|
+%{_libdir}/libMLIR*.so
|
||||||
|
+
|
||||||
|
+%files -n python%{python3_pkgversion}-%{pkg_name_mlir}
|
||||||
|
+%{python3_sitearch}/mlir/
|
||||||
|
+%endif
|
||||||
|
+#endregion MLIR files
|
||||||
|
#endregion files
|
||||||
|
|
||||||
|
#region changelog
|
||||||
|
%changelog
|
||||||
|
+* Wed Dec 04 2024 Konrad Kleine <kkleine@redhat.com> - 19.1.5-2
|
||||||
|
+- Add mlir
|
||||||
|
+
|
||||||
|
* Tue Dec 03 2024 Timm Bäder <tbaeder@redhat.com> - 19.1.5-1
|
||||||
|
- Update to 19.1.5
|
||||||
|
|
||||||
|
|
180
modular/llvm/Makefile
Normal file
180
modular/llvm/Makefile
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
.DEFAULT_GOAL=help
|
||||||
|
|
||||||
|
# See ~/.config/mock/<CONFIG>.cfg or /etc/mock/<CONFIG>.cfg
|
||||||
|
# Tweak this to centos-stream-9-x86_64 to build for CentOS
|
||||||
|
MOCK_CHROOT?=fedora-rawhide-x86_64
|
||||||
|
MOCK_OPTS?=
|
||||||
|
MOCK_OPTS_RELEASE?=--no-clean --no-cleanup-after $(MOCK_OPTS)
|
||||||
|
MOCK_OPTS_SNAPSHOT?=$(MOCK_OPTS_RELEASE) --with snapshot_build $(MOCK_OPTS)
|
||||||
|
YYYYMMDD=$(shell date +%Y%m%d)
|
||||||
|
SOURCEDIR=$(shell pwd)
|
||||||
|
SPEC=llvm.spec
|
||||||
|
# When nothing is given, this will be determined based on
|
||||||
|
# release or snapshot builds.
|
||||||
|
SRPM_PATH?=
|
||||||
|
|
||||||
|
######### Get sources
|
||||||
|
|
||||||
|
.PHONY: get-sources-snapshot
|
||||||
|
## Downloads all sources we need for a snapshot build.
|
||||||
|
get-sources-snapshot:
|
||||||
|
YYYYMMDD=$(YYYYMMDD) ./.copr/snapshot-info.sh > $(SOURCEDIR)/version.spec.inc
|
||||||
|
spectool -g --define "_sourcedir $(SOURCEDIR)" --define "_with_snapshot_build 1" $(SPEC)
|
||||||
|
|
||||||
|
.PHONY: get-sources-release
|
||||||
|
## Downloads all sources we need for a release build.
|
||||||
|
get-sources-release:
|
||||||
|
spectool -g --define "_sourcedir $(SOURCEDIR)" $(SPEC)
|
||||||
|
|
||||||
|
######### Build SRPM
|
||||||
|
|
||||||
|
.PHONY: srpm-release
|
||||||
|
## Builds an SRPM that can be used for a release build.
|
||||||
|
srpm-release: get-sources-release
|
||||||
|
rpmbuild \
|
||||||
|
--define "_rpmdir $(SOURCEDIR)" \
|
||||||
|
--define "_sourcedir $(SOURCEDIR)" \
|
||||||
|
--define "_specdir $(SOURCEDIR)" \
|
||||||
|
--define "_srcrpmdir $(SOURCEDIR)" \
|
||||||
|
--define "_builddir $(SOURCEDIR)" \
|
||||||
|
-bs $(SPEC)
|
||||||
|
|
||||||
|
.PHONY: srpm-snapshot
|
||||||
|
## Builds an SRPM that can be used for a snapshot build.
|
||||||
|
srpm-snapshot: get-sources-snapshot
|
||||||
|
rpmbuild \
|
||||||
|
--with=snapshot_build \
|
||||||
|
--define "_rpmdir $(SOURCEDIR)" \
|
||||||
|
--define "_sourcedir $(SOURCEDIR)" \
|
||||||
|
--define "_specdir $(SOURCEDIR)" \
|
||||||
|
--define "_srcrpmdir $(SOURCEDIR)" \
|
||||||
|
--define "_builddir $(SOURCEDIR)" \
|
||||||
|
-bs $(SPEC)
|
||||||
|
|
||||||
|
######### Scrub mock chroot and cache
|
||||||
|
|
||||||
|
.PHONY: scrub-chroot
|
||||||
|
## Completely remove the fedora chroot and cache.
|
||||||
|
scrub-chroot:
|
||||||
|
mock -r $(MOCK_CHROOT) --scrub all
|
||||||
|
|
||||||
|
######### Do a mock build
|
||||||
|
|
||||||
|
.PHONY: mockbuild-release
|
||||||
|
## Start a mock build of the release SRPM.
|
||||||
|
mockbuild-release: srpm-release get-srpm-release
|
||||||
|
mock -r $(MOCK_CHROOT) $(MOCK_OPTS_RELEASE) $(srpm_path)
|
||||||
|
|
||||||
|
.PHONY: mockbuild-snapshot
|
||||||
|
## Start a mock build of the snapshot SRPM.
|
||||||
|
mockbuild-snapshot: srpm-snapshot get-srpm-snapshot
|
||||||
|
mock -r $(MOCK_CHROOT) $(MOCK_OPTS_SNAPSHOT) $(srpm_path)
|
||||||
|
|
||||||
|
######### Edit-last-failing-script
|
||||||
|
|
||||||
|
.PHONY: get-last-run-script
|
||||||
|
## Get the file that was last modified in /var/tmp/ within the chroot.
|
||||||
|
get-last-run-script:
|
||||||
|
$(eval last_run_script:=/var/tmp/$(shell ls -t1 /var/lib/mock/$(MOCK_CHROOT)/root/var/tmp | head -n1))
|
||||||
|
$(info last_run_script=$(last_run_script))
|
||||||
|
@echo > /dev/null
|
||||||
|
|
||||||
|
.PHONY: edit-last-failing-script
|
||||||
|
## Opens the last failing or running script from mock in your editor
|
||||||
|
## of choice for you to edit it and later re-run it in mock with:
|
||||||
|
## "make mockbuild-rerun-last-script".
|
||||||
|
edit-last-failing-script: get-last-run-script
|
||||||
|
$$EDITOR /var/lib/mock/$(MOCK_CHROOT)/root$(last_run_script)
|
||||||
|
|
||||||
|
######### Re-run the last failing script from mock
|
||||||
|
|
||||||
|
.PHONY: mockbuild-rerun-last-script
|
||||||
|
## Re-runs the last failing or running script of your release/snapshot mock mockbuild.
|
||||||
|
mockbuild-rerun-last-script: get-last-run-script
|
||||||
|
mock --root=$(MOCK_CHROOT) --shell 'sh -e $(last_run_script)'
|
||||||
|
|
||||||
|
.PHONY: help
|
||||||
|
# Based on https://gist.github.com/rcmachado/af3db315e31383502660
|
||||||
|
## Display this help text.
|
||||||
|
help:/
|
||||||
|
$(info Available targets)
|
||||||
|
$(info -----------------)
|
||||||
|
@awk '/^[a-zA-Z\-0-9]+:/ { \
|
||||||
|
helpMessage = match(lastLine, /^## (.*)/); \
|
||||||
|
helpCommand = substr($$1, 0, index($$1, ":")-1); \
|
||||||
|
if (helpMessage) { \
|
||||||
|
helpMessage = substr(lastLine, RSTART + 3, RLENGTH); \
|
||||||
|
gsub(/##/, "\n ", helpMessage); \
|
||||||
|
} else { \
|
||||||
|
helpMessage = "(No documentation)"; \
|
||||||
|
} \
|
||||||
|
printf "%-37s - %s\n", helpCommand, helpMessage; \
|
||||||
|
lastLine = "" \
|
||||||
|
} \
|
||||||
|
{ hasComment = match(lastLine, /^## (.*)/); \
|
||||||
|
if(hasComment) { \
|
||||||
|
lastLine=lastLine$$0; \
|
||||||
|
} \
|
||||||
|
else { \
|
||||||
|
lastLine = $$0 \
|
||||||
|
} \
|
||||||
|
}' $(MAKEFILE_LIST)
|
||||||
|
|
||||||
|
######### Deprecated targets
|
||||||
|
|
||||||
|
# Map deprecated targets to new targets
|
||||||
|
.PHONY: snapshot-srpm release-srpm
|
||||||
|
snapshot-srpm release-srpm:
|
||||||
|
$(eval mapped_target:=$(subst snapshot-srpm,srpm-snapshot,$(MAKECMDGOALS)))
|
||||||
|
$(eval mapped_target:=$(subst release-srpm,srpm-release,$(mapped_target)))
|
||||||
|
$(info WARNING: "$(MAKECMDGOALS)" is deprecated. Instead running "$(mapped_target)")
|
||||||
|
$(MAKE) $(mapped_target)
|
||||||
|
|
||||||
|
######### Version/Release helper targets to build name of SRPM
|
||||||
|
|
||||||
|
.PHONY: get-llvm-version-release
|
||||||
|
## Determines the LLVM version given in the llvm.spec file.
|
||||||
|
get-llvm-version-release:
|
||||||
|
$(eval llvm_version_release:=$(shell grep -ioP "%global\s+(maj|min|patch)_ver[^0-9]\K[0-9]+" $(SPEC) | paste -sd'.'))
|
||||||
|
$(info LLVM Release Version: $(llvm_version_release))
|
||||||
|
@echo > /dev/null
|
||||||
|
|
||||||
|
.PHONY: get-llvm-version-snapshot
|
||||||
|
## Determines the LLVM version given in the version.spec.inc file.
|
||||||
|
get-llvm-version-snapshot:
|
||||||
|
$(eval llvm_version_snapshot:=$(shell grep -ioP "%global\s+(maj|min|patch)_ver[^0-9]\K[0-9]+" version.spec.inc | paste -sd'.'))
|
||||||
|
$(info LLVM Snapshot Version: $(llvm_version_snapshot))
|
||||||
|
@echo > /dev/null
|
||||||
|
|
||||||
|
.PHONY: get-spec-file-release
|
||||||
|
## Parses the spec file for the Release: tag
|
||||||
|
get-spec-file-release:
|
||||||
|
$(eval spec_file_release:=$(shell grep -ioP '^Release:\s*\K[0-9]+' $(SPEC)))
|
||||||
|
$(info LLVM Spec file Release: $(spec_file_release))
|
||||||
|
@echo > /dev/null
|
||||||
|
|
||||||
|
.PHONY: get-srpm-release
|
||||||
|
## Determines the name of the SRPM used for release builds
|
||||||
|
## Can be overriden by giving "make ... SRPM_PATH=foo.src.rpm".
|
||||||
|
get-srpm-release: get-llvm-version-release get-spec-file-release
|
||||||
|
ifeq ($(SRPM_PATH),)
|
||||||
|
$(eval srpm_path:=llvm-$(llvm_version_release)-$(spec_file_release).*.src.rpm)
|
||||||
|
else
|
||||||
|
$(eval srpm_path:=$(SRPM_PATH))
|
||||||
|
endif
|
||||||
|
$(info LLVM SRPM Release: $(srpm_path))
|
||||||
|
@echo > /dev/null
|
||||||
|
|
||||||
|
.PHONY: get-srpm-snapshot
|
||||||
|
## Determines the name of the SRPM used for snapshot builds
|
||||||
|
## Can be overriden by giving "make ... SRPM_PATH=foo.src.rpm".
|
||||||
|
get-srpm-snapshot: get-llvm-version-snapshot get-spec-file-release
|
||||||
|
ifeq ($(SRPM_PATH),)
|
||||||
|
$(eval yyyymmdd:=$(shell grep -ioP "%global\s+llvm_snapshot_yyyymmdd\s+\K[0-9]+" version.spec.inc))
|
||||||
|
$(eval git_short:=$(shell grep -ioP "%global\s+llvm_snapshot_git_revision_short\s+\K[a-zA-Z0-9]+" version.spec.inc))
|
||||||
|
$(eval srpm_path:=llvm-$(llvm_version_snapshot)~pre$(yyyymmdd).g$(git_short)-$(spec_file_release).*.src.rpm)
|
||||||
|
else
|
||||||
|
$(eval srpm_path:=$(SRPM_PATH))
|
||||||
|
endif
|
||||||
|
$(info LLVM SRPM Snapshot: $(srpm_path))
|
||||||
|
@echo > /dev/null
|
File diff suppressed because it is too large
Load Diff
3203
modular/llvm/llvm.spec.orig
Normal file
3203
modular/llvm/llvm.spec.orig
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user