xemu-0.8.134tatsh-overlay
download
# Copyright 2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_1{0,1,2,3,4} )
PYTHON_REQ_USE="ncurses,readline"
inherit fcaps flag-o-matic pax-utils python-r1 toolchain-funcs xdg-utils
DESCRIPTION="Original Xbox emulator."
HOMEPAGE="https://xemu.app/ https://github.com/xemu-project/xemu"
BERKELEY_SOFTFLOAT_SHA="b64af41c3276f97f0e181920400ee056b9c88037"
BERKELEY_TESTFLOAT_SHA="e7af9751d9f9fd3b47911f51a5cfd08af256a9ab"
GENCONFIG_SHA="42f85f9a2457e61d7e32542c07723565a284fcd6"
GLSLANG_SHA="16.2.0"
IMGUI_SHA="b911105fca3ca1b025706dd168e5798070f143a1"
IMPLOT_SHA="8553562dbb2025fd520f4bed57b094767b96c670"
KEYCODEMAPDB_SHA="f5772a62ec52591ff6870b7e8ef32482371f22c6"
NV2A_VSH_CPU_SHA="561fe80da57a881f89000256b459440c0178a7ce"
SPIRV_REFLECT_SHA="vulkan-sdk-1.4.335.0"
TOMLPLUSPLUS_SHA="30172438cee64926dc41fdd9c11fb3ba5b2ba9de"
VMA_SHA="3.3.0"
VOLK_SHA="1.4.304"
SRC_URI="https://github.com/xemu-project/xemu/archive/v${PV}.tar.gz -> ${P}.tar.gz
https://gitlab.com/qemu-project/keycodemapdb/-/archive/${KEYCODEMAPDB_SHA}/keycodemapdb-${KEYCODEMAPDB_SHA}.tar.bz2 -> ${PN}-keycodemapdb-${KEYCODEMAPDB_SHA:0:7}.tar.bz2
https://github.com/abaire/nv2a_vsh_cpu/archive/${NV2A_VSH_CPU_SHA}.tar.gz -> ${PN}-nv2a_vsh_cpu-${NV2A_VSH_CPU_SHA:0:7}.tar.gz
https://github.com/xemu-project/imgui/archive/${IMGUI_SHA}.tar.gz -> ${PN}-imgui-${IMGUI_SHA:0:7}.tar.gz
https://github.com/epezent/implot/archive/${IMPLOT_SHA}.tar.gz -> ${PN}-implot-${IMPLOT_SHA:0:7}.tar.gz
https://github.com/marzer/tomlplusplus/archive/${TOMLPLUSPLUS_SHA}.tar.gz -> ${PN}-tomlplusplus-${TOMLPLUSPLUS_SHA:0:7}.tar.gz
https://github.com/mborgerson/genconfig/archive/${GENCONFIG_SHA}.tar.gz -> ${PN}-genconfig-${GENCONFIG_SHA:0:7}.tar.gz
https://github.com/KhronosGroup/glslang/archive/refs/tags/${GLSLANG_SHA}.tar.gz -> ${PN}-glslang-${GLSLANG_SHA}.tar.gz
https://github.com/zeux/volk/archive/refs/tags/${VOLK_SHA}.tar.gz -> ${PN}-volk-${VOLK_SHA}.tar.gz
https://github.com/KhronosGroup/SPIRV-Reflect/archive/refs/tags/${SPIRV_REFLECT_SHA}.tar.gz -> ${PN}-spirv-reflect-${SPIRV_REFLECT_SHA}.tar.gz
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/archive/refs/tags/v${VMA_SHA}.tar.gz -> ${PN}-vulkanmemoryallocator-${VMA_SHA}.tar.gz
https://gitlab.com/qemu-project/berkeley-softfloat-3/-/archive/${BERKELEY_SOFTFLOAT_SHA}/berkeley-softfloat-3-${BERKELEY_SOFTFLOAT_SHA}.tar.bz2 -> ${PN}-berkeley-softfloat-3-${BERKELEY_SOFTFLOAT_SHA}.tar.bz2
https://gitlab.com/qemu-project/berkeley-testfloat-3/-/archive/${BERKELEY_TESTFLOAT_SHA}/berkeley-testfloat-3-${BERKELEY_TESTFLOAT_SHA}.tar.bz2 -> ${PN}-berkeley-testfloat-3-${BERKELEY_TESTFLOAT_SHA}.tar.bz2"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~ppc64 ~x86"
IUSE="xattr aio alsa debug io-uring jack malloc-trim membarrier pulseaudio test"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
RESTRICT="!test? ( test )"
DEPEND="dev-libs/glib
dev-libs/openssl
dev-libs/xxhash
media-libs/libepoxy
media-libs/libglvnd[X]
media-libs/libsamplerate
media-libs/libsdl2
net-misc/curl
net-libs/libpcap
net-libs/libslirp
sys-apps/dtc
virtual/zlib
x11-libs/gtk+:3
x11-libs/pixman
aio? ( dev-libs/libaio )
alsa? ( media-libs/alsa-lib )
pulseaudio? ( media-libs/libpulse )
jack? ( virtual/jack )
io-uring? ( sys-libs/liburing )
xattr? ( sys-apps/attr )"
RDEPEND="${DEPEND} ${PYTHON_DEPS}"
# shellcheck disable=SC2016
BDEPEND="dev-lang/perl
dev-build/meson
dev-build/ninja
sys-apps/texinfo
virtual/pkgconfig
$(python_gen_impl_dep)
$(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
test? (
dev-libs/glib[utils]
sys-devel/bc
)"
PATCHES=(
"${FILESDIR}/${PN}-0001-make-target-list-xemu-work-w.patch"
"${FILESDIR}/${PN}-0002-make-running-tests-configura.patch"
"${FILESDIR}/${PN}-0003-ui-qemu-xemu-do-not-install-.patch"
"${FILESDIR}/${PN}-0004-meson-let-version-get-stale.patch"
"${FILESDIR}/${PN}-0005-not-for-upstream-remove-trac.patch"
"${FILESDIR}/${PN}-0006-not-for-upstream-remove-keym.patch"
"${FILESDIR}/${PN}-0007-not-for-upstream-misc-update.patch"
"${FILESDIR}/${PN}-0008-add-target_long_bits.patch"
"${FILESDIR}/${PN}-0009-uncomment-acpi-build.c.patch"
"${FILESDIR}/${PN}-0010-fix-number-of-registered-aud.patch"
"${FILESDIR}/${PN}-0011-fix-boot.patch"
)
DOCS=( README.md )
# shellcheck disable=SC2054
FILECAPS=( cap_net_raw,cap_net_admin=eip "usr/bin/${PN}" )
src_prepare() {
mv "${WORKDIR}/genconfig-${GENCONFIG_SHA}" subprojects/genconfig || die
mv "${WORKDIR}/nv2a_vsh_cpu-${NV2A_VSH_CPU_SHA}" subprojects/nv2a_vsh_cpu || die
mv "${WORKDIR}/tomlplusplus-${TOMLPLUSPLUS_SHA}" subprojects/tomlplusplus || die
mv "${WORKDIR}/keycodemapdb-${KEYCODEMAPDB_SHA}" subprojects//keycodemapdb || die
mv "${WORKDIR}/imgui-${IMGUI_SHA}" subprojects/imgui || die
mv "${WORKDIR}/implot-${IMPLOT_SHA}" subprojects/implot || die
mv "${WORKDIR}/glslang-${GLSLANG_SHA}" subprojects/glslang || die
mv "${WORKDIR}/volk-${VOLK_SHA}" subprojects/volk || die
mv "${WORKDIR}/SPIRV-Reflect-${SPIRV_REFLECT_SHA}" subprojects/SPIRV-Reflect || die
mv "${WORKDIR}/VulkanMemoryAllocator-${VMA_SHA}" subprojects/VulkanMemoryAllocator || die
mv "${WORKDIR}/berkeley-softfloat-3-${BERKELEY_SOFTFLOAT_SHA}" subprojects/berkeley-softfloat-3 || die
cp subprojects/packagefiles/berkeley-softfloat-3/meson* subprojects/berkeley-softfloat-3 || die
mv "${WORKDIR}/berkeley-testfloat-3-${BERKELEY_TESTFLOAT_SHA}" subprojects/berkeley-testfloat-3 || die
cp subprojects/packagefiles/berkeley-testfloat-3/meson* subprojects/berkeley-testfloat-3 || die
echo "${PV}" > XEMU_VERSION || die
echo master > XEMU_BRANCH || die
touch XEMU_COMMIT || die
default
}
src_configure() {
local audio_drv_list=( "'sdl'," )
local build_cflags=("-I${S}/ui/imgui")
local debug_flag
if use debug; then
filter-flags '-O*'
build_cflags+=(-O0 -g -DXEMU_DEBUG_BUILD=1)
debug_flag=--enable-debug
fi
use alsa && audio_drv_list+=( "'alsa'," )
use jack && audio_drv_list+=( "'jack'," )
use pulseaudio && audio_drv_list+=( "'pa'," )
local other_opts=(
"$(use_enable alsa)"
"$(use_enable debug debug-info)"
"$(use_enable debug debug-tcg)"
"$(use_enable jack)"
--disable-gettext
"$(use_enable pulseaudio pa)"
"$(use_enable xattr attr)"
--cc="$(tc-getCC)"
--cxx="$(tc-getCXX)"
--disable-bsd-user
--disable-containers # bug #732972
--disable-guest-agent
--disable-tcg-interpreter
--host-cc="$(tc-getBUILD_CC)"
"--libdir=/usr/$(get_libdir)"
# From qemu ebuild
# We support gnutls/nettle for crypto operations. It is possible
# to use gcrypt when gnutls/nettle are disabled (but not when they
# are enabled), but it's not really worth the hassle. Disable it
# all the time to avoid automatically detecting it. #568856
--disable-gcrypt
# use prebuilt keymaps, bug #759604
--disable-xkbcommon
)
local audio_drv_list_str="${audio_drv_list[*]}"
local l=$((${#audio_drv_list_str}-1))
audio_drv_list_str="${audio_drv_list_str:0:${l}}"
audio_drv_list_str="${audio_drv_list_str// /}"
econf \
"$(use_enable aio linux-aio)" \
${debug_flag} \
"$(use_enable io-uring linux-io-uring)" \
"$(use_enable malloc-trim)" \
"$(use_enable membarrier)" \
"$(use_enable test tests)" \
"--audio-drv-list=[${audio_drv_list_str}]" \
--disable-docs \
--disable-qom-cast-debug \
--disable-strip \
--disable-werror \
"--extra-cflags=-DXBOX=1 -DCONFIG_SOFTMMU ${build_cflags[*]} -Wno-error=redundant-decls ${CFLAGS}" \
--target-list=xemu \
"${other_opts[@]}"
}
src_compile() {
MAKEOPTS+=" V=1"
emake
}
src_install() {
default
rm -R \
"${D}/usr/"{lib,lib64} \
"${D}/usr/bin/"{glslang,spirv}* \
"${D}/usr/share/qemu" || die
}
src_test() {
cd "${S}/build" || die
pax-mark m "${PN}"* #515550
emake check
}
pkg_postinst() {
fcaps_pkg_postinst
xdg_desktop_database_update
xdg_icon_cache_update
}