From 019c1b798991ed6eb32f9f71f289b074cad5fd5c Mon Sep 17 00:00:00 2001 From: orbea Date: Sun, 20 Oct 2024 09:38:36 -0700 Subject: [PATCH] games-emulation/rmg: fix -Wstrict-aliasing warnings Upstream-Issue: https://github.com/gonetz/GLideN64/issues/2877 Upstream-PR: https://github.com/gonetz/GLideN64/pull/2884 Upstream-Commit: https://github.com/gonetz/GLideN64/commit/a1320da566c03503ea755447458bb2b79a610cb5 Upstream-Commit: https://github.com/Rosalie241/RMG/commit/e68483fce2a977c07fee38e1d8d8f8dc22bb6072 Signed-off-by: orbea --- ...4plus-video-GLideN64-strict-aliasing.patch | 207 ++++++++++++++++++ games-emulation/rmg/rmg-0.6.6-r1.ebuild | 143 ++++++++++++ games-emulation/rmg/rmg-9999.ebuild | 9 +- 3 files changed, 351 insertions(+), 8 deletions(-) create mode 100644 games-emulation/rmg/files/rmg-0.6.6-mupen64plus-video-GLideN64-strict-aliasing.patch create mode 100644 games-emulation/rmg/rmg-0.6.6-r1.ebuild diff --git a/games-emulation/rmg/files/rmg-0.6.6-mupen64plus-video-GLideN64-strict-aliasing.patch b/games-emulation/rmg/files/rmg-0.6.6-mupen64plus-video-GLideN64-strict-aliasing.patch new file mode 100644 index 00000000000000..4b8686a6902137 --- /dev/null +++ b/games-emulation/rmg/files/rmg-0.6.6-mupen64plus-video-GLideN64-strict-aliasing.patch @@ -0,0 +1,207 @@ +https://github.com/gonetz/GLideN64/issues/2877 +https://github.com/gonetz/GLideN64/pull/2884 +https://github.com/gonetz/GLideN64/commit/a1320da566c03503ea755447458bb2b79a610cb5 +https://github.com/Rosalie241/RMG/commit/e68483fce2a977c07fee38e1d8d8f8dc22bb6072 + +From a1320da566c03503ea755447458bb2b79a610cb5 Mon Sep 17 00:00:00 2001 +From: Sergey Lipskiy +Date: Sat, 19 Oct 2024 16:18:29 +0700 +Subject: [PATCH] Fix -Wstrict-aliasing warnings + +--- + Source/3rdParty/mupen64plus-video-GLideN64/src/Textures.cpp | 56 ++++++++++++++++++++++++------------------------ + 1 file changed, 28 insertions(+), 28 deletions(-) + +diff --git a/Source/3rdParty/mupen64plus-video-GLideN64/src/Textures.cpp b/Source/3rdParty/mupen64plus-video-GLideN64/src/Textures.cpp +index 4739ec31c..22edf608d 100644 +--- a/Source/3rdParty/mupen64plus-video-GLideN64/src/Textures.cpp ++++ b/Source/3rdParty/mupen64plus-video-GLideN64/src/Textures.cpp +@@ -52,9 +52,9 @@ u32 GetCI4IA_RGBA4444(u16 offset, u16 x, u16 i, u8 palette) + const u8 color4B = Get4BitPaletteColor(offset, x, i); + + if (x & 1) +- return IA88_RGBA4444(*(u16*)&TMEM[(0x100 + (palette << 4) + (color4B & 0x0F)) & 0x1FF]); ++ return IA88_RGBA4444(static_cast(TMEM[(0x100 + (palette << 4) + (color4B & 0x0F)) & 0x1FF] & 0xFFFF)); + else +- return IA88_RGBA4444(*(u16*)&TMEM[(0x100 + (palette << 4) + (color4B >> 4)) & 0x1FF]); ++ return IA88_RGBA4444(static_cast(TMEM[(0x100 + (palette << 4) + (color4B >> 4)) & 0x1FF] & 0xFFFF)); + } + + u32 GetCI4IA_RGBA8888(u16 offset, u16 x, u16 i, u8 palette) +@@ -62,9 +62,9 @@ u32 GetCI4IA_RGBA8888(u16 offset, u16 x, u16 i, u8 palette) + const u8 color4B = Get4BitPaletteColor(offset, x, i); + + if (x & 1) +- return IA88_RGBA8888(*(u16*)&TMEM[(0x100 + (palette << 4) + (color4B & 0x0F)) & 0x1FF]); ++ return IA88_RGBA8888(static_cast(TMEM[(0x100 + (palette << 4) + (color4B & 0x0F)) & 0x1FF] & 0xFFFF)); + else +- return IA88_RGBA8888(*(u16*)&TMEM[(0x100 + (palette << 4) + (color4B >> 4)) & 0x1FF]); ++ return IA88_RGBA8888(static_cast(TMEM[(0x100 + (palette << 4) + (color4B >> 4)) & 0x1FF] & 0xFFFF)); + } + + u32 GetCI4RGBA_RGBA5551(u16 offset, u16 x, u16 i, u8 palette) +@@ -72,9 +72,9 @@ u32 GetCI4RGBA_RGBA5551(u16 offset, u16 x, u16 i, u8 palette) + const u8 color4B = Get4BitPaletteColor(offset, x, i); + + if (x & 1) +- return RGBA5551_RGBA5551(*(u16*)&TMEM[(0x100 + (palette << 4) + (color4B & 0x0F)) & 0x1FF]); ++ return RGBA5551_RGBA5551(static_cast(TMEM[(0x100 + (palette << 4) + (color4B & 0x0F)) & 0x1FF] & 0xFFFF)); + else +- return RGBA5551_RGBA5551(*(u16*)&TMEM[(0x100 + (palette << 4) + (color4B >> 4)) & 0x1FF]); ++ return RGBA5551_RGBA5551(static_cast(TMEM[(0x100 + (palette << 4) + (color4B >> 4)) & 0x1FF] & 0xFFFF)); + } + + u32 GetCI4RGBA_RGBA8888(u16 offset, u16 x, u16 i, u8 palette) +@@ -82,9 +82,9 @@ u32 GetCI4RGBA_RGBA8888(u16 offset, u16 x, u16 i, u8 palette) + const u8 color4B = Get4BitPaletteColor(offset, x, i); + + if (x & 1) +- return RGBA5551_RGBA8888(*(u16*)&TMEM[(0x100 + (palette << 4) + (color4B & 0x0F)) & 0x1FF]); ++ return RGBA5551_RGBA8888(static_cast(TMEM[(0x100 + (palette << 4) + (color4B & 0x0F)) & 0x1FF] & 0xFFFF)); + else +- return RGBA5551_RGBA8888(*(u16*)&TMEM[(0x100 + (palette << 4) + (color4B >> 4)) & 0x1FF]); ++ return RGBA5551_RGBA8888(static_cast(TMEM[(0x100 + (palette << 4) + (color4B >> 4)) & 0x1FF] & 0xFFFF)); + } + + u32 GetIA31_RGBA8888(u16 offset, u16 x, u16 i, u8 palette) +@@ -120,25 +120,25 @@ inline u8 Get8BitPaletteColor(u16 offset, u16 x, u16 i) + u32 GetCI8IA_RGBA4444(u16 offset, u16 x, u16 i, u8 palette) + { + const u8 color = Get8BitPaletteColor(offset, x, i); +- return IA88_RGBA4444(*(u16*)&TMEM[(0x100 + color) & 0x1FF]); ++ return IA88_RGBA4444(static_cast(TMEM[(0x100 + color) & 0x1FF] & 0xFFFF)); + } + + u32 GetCI8IA_RGBA8888(u16 offset, u16 x, u16 i, u8 palette) + { + const u8 color = Get8BitPaletteColor(offset, x, i); +- return IA88_RGBA8888(*(u16*)&TMEM[(0x100 + color) & 0x1FF]); ++ return IA88_RGBA8888(static_cast(TMEM[(0x100 + color) & 0x1FF] & 0xFFFF)); + } + + u32 GetCI8RGBA_RGBA5551(u16 offset, u16 x, u16 i, u8 palette) + { + const u8 color = Get8BitPaletteColor(offset, x, i); +- return RGBA5551_RGBA5551(*(u16*)&TMEM[(0x100 + color) & 0x1FF]); ++ return RGBA5551_RGBA5551(static_cast(TMEM[(0x100 + color) & 0x1FF] & 0xFFFF)); + } + + u32 GetCI8RGBA_RGBA8888(u16 offset, u16 x, u16 i, u8 palette) + { + const u8 color = Get8BitPaletteColor(offset, x, i); +- return RGBA5551_RGBA8888(*(u16*)&TMEM[(0x100 + color) & 0x1FF]); ++ return RGBA5551_RGBA8888(static_cast(TMEM[(0x100 + color) & 0x1FF] & 0xFFFF)); + } + + u32 GetIA44_RGBA8888(u16 offset, u16 x, u16 i, u8 palette) +@@ -193,7 +193,7 @@ u32 GetI16_RGBA4444(u16 offset, u16 x, u16 i, u8 palette) + u32 GetCI16IA_RGBA8888(u16 offset, u16 x, u16 i, u8 palette) + { + const u16 tex = Get16BitColor(offset, x, i); +- const u16 col = (*(u16*)&TMEM[0x100 + (tex & 0xFF)]); ++ const u16 col = (static_cast(TMEM[0x100 + (tex & 0xFF)] & 0xFFFF)); + const u16 c = col >> 8; + const u16 a = col & 0xFF; + return (a << 24) | (c << 16) | (c << 8) | c; +@@ -202,7 +202,7 @@ u32 GetCI16IA_RGBA8888(u16 offset, u16 x, u16 i, u8 palette) + u32 GetCI16IA_RGBA4444(u16 offset, u16 x, u16 i, u8 palette) + { + const u16 tex = Get16BitColor(offset, x, i); +- const u16 col = (*(u16*)&TMEM[0x100 + (tex & 0xFF)]); ++ const u16 col = (static_cast(TMEM[0x100 + (tex & 0xFF)] & 0xFFFF)); + const u16 c = col >> 12; + const u16 a = col & 0x0F; + return (a << 12) | (c << 8) | (c << 4) | c; +@@ -303,9 +303,9 @@ u32 GetCI4IA_RGBA4444_BG(u64 *src, u16 x, u16 i, u8 palette) + u8 color4B = ((u8*)src)[(x >> 1) ^ (i << 1)]; + + if (x & 1) +- return IA88_RGBA4444(*(u16*)&TMEM[256 + (palette << 4) + (color4B & 0x0F)]); ++ return IA88_RGBA4444(static_cast(TMEM[256 + (palette << 4) + (color4B & 0x0F)] & 0xFFFF)); + else +- return IA88_RGBA4444(*(u16*)&TMEM[256 + (palette << 4) + (color4B >> 4)]); ++ return IA88_RGBA4444(static_cast(TMEM[256 + (palette << 4) + (color4B >> 4)] & 0xFFFF)); + } + + u32 GetCI4IA_RGBA8888_BG(u64 *src, u16 x, u16 i, u8 palette) +@@ -313,9 +313,9 @@ u32 GetCI4IA_RGBA8888_BG(u64 *src, u16 x, u16 i, u8 palette) + u8 color4B = ((u8*)src)[(x >> 1) ^ (i << 1)]; + + if (x & 1) +- return IA88_RGBA8888(*(u16*)&TMEM[256 + (palette << 4) + (color4B & 0x0F)]); ++ return IA88_RGBA8888(static_cast(TMEM[256 + (palette << 4) + (color4B & 0x0F)] & 0xFFFF)); + else +- return IA88_RGBA8888(*(u16*)&TMEM[256 + (palette << 4) + (color4B >> 4)]); ++ return IA88_RGBA8888(static_cast(TMEM[256 + (palette << 4) + (color4B >> 4)] & 0xFFFF)); + } + + u32 GetCI4RGBA_RGBA5551_BG(u64 *src, u16 x, u16 i, u8 palette) +@@ -323,9 +323,9 @@ u32 GetCI4RGBA_RGBA5551_BG(u64 *src, u16 x, u16 i, u8 palette) + u8 color4B = ((u8*)src)[(x >> 1) ^ (i << 1)]; + + if (x & 1) +- return RGBA5551_RGBA5551(*(u16*)&TMEM[256 + (palette << 4) + (color4B & 0x0F)]); ++ return RGBA5551_RGBA5551(static_cast(TMEM[256 + (palette << 4) + (color4B & 0x0F)] & 0xFFFF)); + else +- return RGBA5551_RGBA5551(*(u16*)&TMEM[256 + (palette << 4) + (color4B >> 4)]); ++ return RGBA5551_RGBA5551(static_cast(TMEM[256 + (palette << 4) + (color4B >> 4)] & 0xFFFF)); + } + + u32 GetCI4RGBA_RGBA8888_BG(u64 *src, u16 x, u16 i, u8 palette) +@@ -333,9 +333,9 @@ u32 GetCI4RGBA_RGBA8888_BG(u64 *src, u16 x, u16 i, u8 palette) + u8 color4B = ((u8*)src)[(x >> 1) ^ (i << 1)]; + + if (x & 1) +- return RGBA5551_RGBA8888(*(u16*)&TMEM[256 + (palette << 4) + (color4B & 0x0F)]); ++ return RGBA5551_RGBA8888(static_cast(TMEM[256 + (palette << 4) + (color4B & 0x0F)] & 0xFFFF)); + else +- return RGBA5551_RGBA8888(*(u16*)&TMEM[256 + (palette << 4) + (color4B >> 4)]); ++ return RGBA5551_RGBA8888(static_cast(TMEM[256 + (palette << 4) + (color4B >> 4)] & 0xFFFF)); + } + + u32 GetIA31_RGBA8888_BG(u64 *src, u16 x, u16 i, u8 palette) +@@ -368,22 +368,22 @@ u32 GetI4_RGBA4444_BG(u64 *src, u16 x, u16 i, u8 palette) + + u32 GetCI8IA_RGBA4444_BG(u64 *src, u16 x, u16 i, u8 palette) + { +- return IA88_RGBA4444(*(u16*)&TMEM[256 + ((u8*)src)[x ^ (i << 1)]]); ++ return IA88_RGBA4444(static_cast(TMEM[256 + ((u8*)src)[x ^ (i << 1)]] & 0xFFFF)); + } + + u32 GetCI8IA_RGBA8888_BG(u64 *src, u16 x, u16 i, u8 palette) + { +- return IA88_RGBA8888(*(u16*)&TMEM[256 + ((u8*)src)[x ^ (i << 1)]]); ++ return IA88_RGBA8888(static_cast(TMEM[256 + ((u8*)src)[x ^ (i << 1)]] & 0xFFFF)); + } + + u32 GetCI8RGBA_RGBA5551_BG(u64 *src, u16 x, u16 i, u8 palette) + { +- return RGBA5551_RGBA5551(*(u16*)&TMEM[256 + ((u8*)src)[x ^ (i << 1)]]); ++ return RGBA5551_RGBA5551(static_cast(TMEM[256 + ((u8*)src)[x ^ (i << 1)]] & 0xFFFF)); + } + + u32 GetCI8RGBA_RGBA8888_BG(u64 *src, u16 x, u16 i, u8 palette) + { +- return RGBA5551_RGBA8888(*(u16*)&TMEM[256 + ((u8*)src)[x ^ (i << 1)]]); ++ return RGBA5551_RGBA8888(static_cast(TMEM[256 + ((u8*)src)[x ^ (i << 1)]] & 0xFFFF)); + } + + u32 GetIA44_RGBA8888_BG(u64 *src, u16 x, u16 i, u8 palette) +@@ -429,7 +429,7 @@ u32 GetI16_RGBA4444_BG(u64 *src, u16 x, u16 i, u8 palette) + u32 GetCI16IA_RGBA8888_BG(u64 *src, u16 x, u16 i, u8 palette) + { + const u16 tex = ((u16*)src)[x^i]; +- const u16 col = (*(u16*)&TMEM[256 + (tex & 0xFF)]); ++ const u16 col = (static_cast(TMEM[256 + (tex & 0xFF)] & 0xFFFF)); + const u16 c = col >> 8; + const u16 a = col & 0xFF; + return (a << 24) | (c << 16) | (c << 8) | c; +@@ -438,7 +438,7 @@ u32 GetCI16IA_RGBA8888_BG(u64 *src, u16 x, u16 i, u8 palette) + u32 GetCI16IA_RGBA4444_BG(u64 *src, u16 x, u16 i, u8 palette) + { + const u16 tex = ((u16*)src)[x^i]; +- const u16 col = (*(u16*)&TMEM[256 + (tex & 0xFF)]); ++ const u16 col = (static_cast(TMEM[256 + (tex & 0xFF)] & 0xFFFF)); + const u16 c = col >> 12; + const u16 a = col & 0x0F; + return (a << 12) | (c << 8) | (c << 4) | c; diff --git a/games-emulation/rmg/rmg-0.6.6-r1.ebuild b/games-emulation/rmg/rmg-0.6.6-r1.ebuild new file mode 100644 index 00000000000000..7965b43ea709af --- /dev/null +++ b/games-emulation/rmg/rmg-0.6.6-r1.ebuild @@ -0,0 +1,143 @@ +# Copyright 2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +CARGO_OPTIONAL=1 + +CRATES=" + cc@1.0.83 + cfg-if@1.0.0 + libc@0.2.152 + libloading@0.7.4 + libusb1-sys@0.6.4 + once_cell@1.19.0 + pkg-config@0.3.29 + proc-macro2@1.0.78 + quote@1.0.35 + rusb@0.9.3 + serde@1.0.195 + serde_derive@1.0.195 + syn@2.0.48 + toml@0.5.11 + unicode-ident@1.0.12 + vcpkg@0.2.15 + winapi-i686-pc-windows-gnu@0.4.0 + winapi-x86_64-pc-windows-gnu@0.4.0 + winapi@0.3.9 +" + +inherit cargo cmake toolchain-funcs xdg + +MY_PN="${PN^^}" +MY_P="${MY_PN}-${PV}" +DESCRIPTION="Rosalie's Mupen GUI" +HOMEPAGE="https://github.com/Rosalie241/RMG" +if [[ "${PV}" == *9999 ]] ; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/Rosalie241/${MY_PN}.git" +else + SRC_URI=" + https://github.com//Rosalie241/${MY_PN}/archive/v${PV}/${MY_P}.tar.gz \ + -> ${P}.tar.gz + rust-plugin? ( ${CARGO_CRATE_URIS} ) + " + S="${WORKDIR}/${MY_P}" + KEYWORDS="~amd64" +fi + +LICENSE=" + BSD-2 CC0-1.0 GPL-2 GPL-3 MIT ZLIB public-domain + angrylion-plugin? ( XMAME ) + rust-plugin? ( ISC Unicode-DFS-2016 ) +" +SLOT="0" +IUSE="angrylion-plugin discord dynarec rust-plugin" + +DEPEND=" + dev-libs/hidapi + dev-qt/qtbase:6[gui,opengl,vulkan,widgets] + dev-qt/qtsvg:6 + media-libs/freetype + media-libs/libpng:= + media-libs/libsamplerate + media-libs/libsdl2[haptic,joystick,opengl,sound,vulkan] + media-libs/speexdsp + sys-libs/zlib[minizip(+)] + virtual/opengl + rust-plugin? ( dev-libs/libusb:1 ) +" +RDEPEND="${DEPEND}" +BDEPEND=" + sys-apps/which + virtual/pkgconfig + dynarec? ( dev-lang/nasm ) + rust-plugin? ( virtual/rust ) +" + +PATCHES=( + "${FILESDIR}"/${PN}-0.5.6-parallel-rdp-standalone-musl.patch + # https://bugs.gentoo.org/941889 + "${FILESDIR}"/${P}-mupen64plus-input-raphnetraw-pkgconfig.patch + # https://github.com/gonetz/GLideN64/issues/2877 + "${FILESDIR}"/${P}-mupen64plus-video-GLideN64-strict-aliasing.patch +) + +pkg_setup() { + QA_FLAGS_IGNORED="/usr/$(get_libdir)/RMG/Plugin/Input/libmupen64plus_input_gca.so" +} + +src_unpack() { + if [[ "${PV}" == *9999 ]] ; then + git-r3_src_unpack + if use rust-plugin; then + S="${S}"/Source/3rdParty/mupen64plus-input-gca \ + cargo_live_src_unpack + fi + else + if use rust-plugin; then + cargo_src_unpack + else + default + fi + fi +} + +src_prepare() { + cmake_src_prepare + + # Don't install unused 3rdParty code + rm -r "${S}"/Source/3rdParty/fmt || die + + # Don't install XMAME licensed code + if ! use angrylion-plugin; then + rm -r "${S}"/Source/3rdParty/mupen64plus-video-angrylion-plus || die + fi + + # Don't install pre-compiled binaries + rm -r "${S}"/Source/3rdParty/vosk-api || die + + # Enable verbose make(1) output + sed -e 's/CC=/V=1 CC=/' -i "${S}"/Source/3rdParty/CMakeLists.txt || die +} + +src_configure() { + export PKG_CONFIG="$(tc-getPKG_CONFIG)" + export PKG_CONFIG_ALLOW_CROSS=1 + + local mycmakeargs=( + -DAPPIMAGE_UPDATER=OFF + -DDISCORD_RPC=$(usex discord) + -DNO_ASM=$(usex dynarec OFF ON) + -DNO_RUST=$(usex rust-plugin OFF ON) + -DPORTABLE_INSTALL=OFF + -DUPDATER=OFF + -DUSE_ANGRYLION=$(usex angrylion-plugin) + -DUSE_CCACHE=OFF + -DUSE_LIBFMT=OFF # Use std::format + -DUSE_LTO=OFF + -DVRU=OFF # Precompiled binaries + ) + + cmake_src_configure +} diff --git a/games-emulation/rmg/rmg-9999.ebuild b/games-emulation/rmg/rmg-9999.ebuild index 22e00c1161c017..25bd0044beae76 100644 --- a/games-emulation/rmg/rmg-9999.ebuild +++ b/games-emulation/rmg/rmg-9999.ebuild @@ -27,7 +27,7 @@ CRATES=" winapi@0.3.9 " -inherit cargo cmake flag-o-matic toolchain-funcs xdg +inherit cargo cmake toolchain-funcs xdg MY_PN="${PN^^}" MY_P="${MY_PN}-${PV}" @@ -118,13 +118,6 @@ src_prepare() { } src_configure() { - # -Werror=strict-aliasing - # https://github.com/gonetz/GLideN64/issues/2877 - # - # Disable strict-aliasing until its handled upstream. - append-flags -fno-strict-aliasing - filter-lto - export PKG_CONFIG="$(tc-getPKG_CONFIG)" export PKG_CONFIG_ALLOW_CROSS=1