Install this version:
emerge -a =app-containers/waydroid-nvidia-0.1.2
| Version | EAPI | Keywords | Slot |
|---|---|---|---|
| 0.1.2 | 8 | amd64 | 0 |
# Copyright 2022-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{12..15} )
PYTHON_REQ_USE="ssl"
inherit linux-info optfeature python-single-r1 systemd xdg
# waydroid commit the NVIDIA patch is applied against
_WAYDROID_SHA="a33a5c0b31d89d6ce687381104b30aff4dd2d330"
DESCRIPTION="Waydroid with full NVIDIA GPU acceleration via Mesa Venus/vtest"
HOMEPAGE="https://github.com/Shiro836/waydroid-nvidia"
SRC_URI="
https://github.com/Shiro836/waydroid-nvidia/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
https://github.com/waydroid/waydroid/archive/${_WAYDROID_SHA}.tar.gz -> waydroid-${_WAYDROID_SHA:0:8}.tar.gz
https://github.com/Shiro836/waydroid-nvidia/releases/download/v${PV}/waydroid-nvidia-host-x86_64-v${PV}.tar.zst -> ${P}-host-x86_64.tar.zst
https://github.com/Shiro836/waydroid-nvidia/releases/download/v${PV}/waydroid-nvidia-guest-android-x86_64-v${PV}.tar.zst -> ${P}-guest-android.tar.zst
https://github.com/Shiro836/waydroid-nvidia/releases/download/v${PV}/waydroid-nvidia-guest-prebuilts-v${PV}.tar.zst -> ${P}-guest-prebuilts.tar.zst
"
S="${WORKDIR}/${PN}-${PV}"
LICENSE="GPL-3+"
SLOT="0"
KEYWORDS="amd64"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
IUSE="apparmor"
# Conflicts: provides the same waydroid binary (patched for NVIDIA)
RDEPEND="${PYTHON_DEPS}
!app-containers/waydroid
app-containers/lxc[apparmor?,seccomp]
dev-libs/expat
x11-libs/libdrm
media-libs/libepoxy
media-libs/mesa
media-libs/vulkan-loader
net-firewall/nftables
net-dns/dnsmasq[dhcp]
sys-devel/binutils
sys-apps/dbus
sys-auth/polkit
virtual/notification-daemon
x11-libs/gtk+:3[introspection,wayland]
x11-libs/libX11
x11-themes/hicolor-icon-theme
$(python_gen_cond_dep '
dev-python/dbus-python[${PYTHON_USEDEP}]
>=dev-python/gbinder-1.3.0[${PYTHON_USEDEP}]
dev-python/pygobject[${PYTHON_USEDEP}]
')
|| (
media-video/pipewire[sound-server]
media-sound/pulseaudio-daemon
)
"
BDEPEND="app-arch/zstd"
# Pre-built host (virglrenderer) and guest (Android Mesa/ANGLE/HWC) binaries
RESTRICT="strip"
QA_PREBUILT="
usr/lib/waydroid-nvidia/virgl_test_server
usr/lib/waydroid-nvidia/virgl_render_server
usr/lib/waydroid-nvidia/libvirglrenderer.so.1
usr/lib/waydroid-nvidia/guest/*
"
CONFIG_CHECK="
~ANDROID_BINDER_IPC
~ANDROID_BINDERFS
~MEMFD_CREATE
~NETFILTER_XT_TARGET_MASQUERADE
~NETFILTER_XT_NAT
~PSI
~!PSI_DEFAULT_DISABLED
~NF_TABLES
~NF_TABLES_INET
~NF_TABLES_NETDEV
~NFT_NUMGEN
~NFT_NAT
~NFT_TUNNEL
~NFT_QUOTA
~NFT_SOCKET
~NF_FLOW_TABLE
~NFT_BRIDGE_META
~NFT_BRIDGE_REJECT
~UDMABUF
"
ERROR_UDMABUF="CONFIG_UDMABUF: needed for /dev/udmabuf — the Venus gralloc allocates CPU-mappable buffers through it"
pkg_setup() {
linux-info_pkg_setup
python-single-r1_pkg_setup
}
src_unpack() {
unpack "${P}.tar.gz"
unpack "waydroid-${_WAYDROID_SHA:0:8}.tar.gz"
mkdir -p "${WORKDIR}/host" "${WORKDIR}/guest" || die
# Android-relative paths in the tarballs require explicit extraction dirs
tar -C "${WORKDIR}/host" -xf "${DISTDIR}/${P}-host-x86_64.tar.zst" || die
tar -C "${WORKDIR}/guest" -xf "${DISTDIR}/${P}-guest-android.tar.zst" || die
tar -C "${WORKDIR}/guest" -xf "${DISTDIR}/${P}-guest-prebuilts.tar.zst" || die
}
src_prepare() {
local waydroid_src="${WORKDIR}/waydroid-${_WAYDROID_SHA}"
pushd "${waydroid_src}" > /dev/null || die
eapply "${S}/patches/waydroid/0001-nvidia-integration.patch"
if ! use apparmor; then
# https://github.com/waydroid/waydroid/issues/652
sed -e '/^lxc\.apparmor\.profile =/d' \
-i data/configs/config_3 || die
fi
popd > /dev/null || die
default
}
src_install() {
local waydroid_src="${WORKDIR}/waydroid-${_WAYDROID_SHA}"
local pkg_aur="${S}/packaging/aur/waydroid-nvidia-bin"
# 1. Patched waydroid (same layout as app-containers/waydroid)
pushd "${waydroid_src}" > /dev/null || die
python_fix_shebang waydroid.py
local mymakeargs=(
DESTDIR="${D}"
PREFIX="${EPREFIX}"/usr
SYSD_DIR="$(systemd_get_systemunitdir)"
USE_NFTABLES=1
USE_SYSTEMD=1
)
emake "${mymakeargs[@]}" install install_apparmor
popd > /dev/null || die
newinitd "${FILESDIR}/waydroid.initd" waydroid
# 2. Host Venus renderer (private libdir; wd-venus.service sets LD_LIBRARY_PATH)
exeinto /usr/lib/waydroid-nvidia
doexe "${WORKDIR}"/host/virgl_test_server "${WORKDIR}"/host/virgl_render_server \
"${WORKDIR}"/host/libvirglrenderer.so.1
# 3. Guest driver stack — preserve Android-relative lib/lib64 paths
local guest_libs=(
vendor/lib/hw/vulkan.virtio.so
vendor/lib/egl/libEGL_angle.so
vendor/lib/egl/libGLESv1_CM_angle.so
vendor/lib/egl/libGLESv2_angle.so
vendor/lib64/hw/vulkan.virtio.so
vendor/lib64/egl/libEGL_angle.so
vendor/lib64/egl/libGLESv1_CM_angle.so
vendor/lib64/egl/libGLESv2_angle.so
vendor/lib64/libgbm_mesa_wrapper.so
vendor/lib64/hw/hwcomposer.waydroid.so
)
local rel
for rel in "${guest_libs[@]}"; do
insinto "/usr/lib/waydroid-nvidia/guest/${rel%/*}"
doins "${WORKDIR}/guest/${rel}"
done
exeinto /usr/lib/waydroid-nvidia/guest/system/bin
doexe "${WORKDIR}"/guest/system/bin/surfaceflinger
# 4. Host integration
systemd_douserunit "${pkg_aur}/wd-venus.service"
dobin "${pkg_aur}/waydroid-nvidia-setup"
insinto /usr/lib/udev/rules.d
newins "${pkg_aur}/waydroid-nvidia.rules" 70-waydroid-nvidia.rules
}
pkg_postinst() {
xdg_pkg_postinst
elog "After installation:"
elog " 1. Initialize waydroid: waydroid init"
elog " 2. Run the NVIDIA setup: sudo waydroid-nvidia-setup"
elog " 3. Enable the container: rc-service waydroid start"
elog " 4. Start the Venus server: systemctl --user enable --now wd-venus"
elog " 5. Start the session: waydroid session start"
elog
elog "Requirements: nvidia-open kernel modules + nvidia_drm.modeset=1"
elog "See https://github.com/Shiro836/waydroid-nvidia for full documentation"
elog
if use apparmor; then
ewarn "Check the known issues for apparmor:"
ewarn "https://docs.waydro.id/debugging/known-issues"
fi
optfeature "clipboard support" "dev-python/pyclip[wayland]"
optfeature "NVIDIA proprietary driver (required for GPU acceleration)" "x11-drivers/nvidia-drivers"
}
pkg_config() {
"${EROOT}"/usr/bin/waydroid init
}
Manage flags for this package:
euse -i <flag> -p app-containers/waydroid-nvidia |
euse -E <flag> -p app-containers/waydroid-nvidia |
euse -D <flag> -p app-containers/waydroid-nvidia
${PYTHON_DEPS}
!app-containers/waydroid
app-containers/lxc[apparmor?,seccomp]
dev-libs/expat
x11-libs/libdrm
media-libs/libepoxy
media-libs/mesa
media-libs/vulkan-loader
net-firewall/nftables
net-dns/dnsmasq[dhcp]
sys-devel/binutils
sys-apps/dbus
sys-auth/polkit
virtual/notification-daemon
x11-libs/gtk+:3[introspection,wayland]
x11-libs/libX11
x11-themes/hicolor-icon-theme
$(python_gen_cond_dep '
dev-python/dbus-python[${PYTHON_USEDEP}]
>=dev-python/gbinder-1.3.0[${PYTHON_USEDEP}]
dev-python/pygobject[${PYTHON_USEDEP}]
')
|| (
media-video/pipewire[sound-server]
media-sound/pulseaudio-daemon
)
app-arch/zstd