Install this version:
emerge -a =app-emulation/bochs-3.1
If this version is masked, you can unmask it using the autounmask tool or standard emerge options:
autounmask =app-emulation/bochs-3.1
Or alternatively:
emerge --autounmask-write -a =app-emulation/bochs-3.1
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
DESCRIPTION="LGPL-ed pc emulator"
HOMEPAGE="http://bochs.sourceforge.io/"
MY_P="REL_$(ver_cut 1)_$(ver_cut 2)_FINAL"
SRC_URI="https://github.com/bochs-emu/Bochs/archive/refs/tags/${MY_P}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/Bochs-${MY_P}/bochs"
LICENSE="LGPL-2.1"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~ppc ~sparc ~x86"
IUSE="3dnow avx debugger doc gdb ncurses readline sdl +smp vnc X +x86-64"
REQUIRED_USE="
avx? ( x86-64 )
gdb? ( !debugger !smp )
debugger? ( !gdb )
"
RDEPEND="
ncurses? ( sys-libs/ncurses:= )
readline? ( sys-libs/readline:= )
sdl? ( media-libs/libsdl )
X? (
x11-libs/libICE
x11-libs/libSM
x11-libs/libX11
x11-libs/libXpm
)
"
DEPEND="${RDEPEND}
X? ( x11-base/xorg-proto )
"
BDEPEND="
>=app-text/opensp-1.5
doc? ( app-text/docbook-sgml-utils )
"
src_prepare() {
default
sed -i "s:^docdir.*:docdir = ${EPREFIX}/usr/share/doc/${PF}:" \
Makefile.in || die
sed -i 's:| $(GZIP_BIN) -c > $(DESTDIR)$(man1dir)/$$i.1.gz:> $(DESTDIR)$(man1dir)/$$i.1:' Makefile.in || die
sed -i 's:$$i.1.gz:$$i.1:' Makefile.in || die
sed -i 's:| $(GZIP_BIN) -c > $(DESTDIR)$(man5dir)/$$i.5.gz:> $(DESTDIR)$(man5dir)/$$i.5:' Makefile.in || die
sed -i 's:$$i.5.gz:$$i.5:' Makefile.in || die
}
src_configure() {
econf \
--enable-all-optimizations \
--enable-idle-hack \
--enable-cdrom \
--enable-clgd54xx \
--enable-cpu-level=6 \
--enable-e1000 \
--enable-gameport \
--enable-iodebug \
--enable-monitor-mwait \
--enable-ne2000 \
--enable-plugins \
--enable-pci \
--enable-pnic \
--enable-raw-serial \
--enable-sb16=linux \
--enable-usb \
--enable-usb-ohci \
--enable-usb-xhci \
--prefix=/usr \
--with-nogui \
--without-wx \
$(use_enable 3dnow) \
$(use_enable avx) \
$(use_enable avx evex) \
$(use_enable debugger) \
$(use_enable doc docbook) \
$(use_enable gdb gdb-stub) \
$(use_enable readline) \
$(use_enable smp) \
$(use_enable x86-64) \
$(use_with ncurses term) \
$(use_with sdl) \
$(use_with vnc rfb) \
$(use_with X x) \
$(use_with X x11)
# BENTOO-DIVERGENCE: src_configure - THE REASON THIS REVISION EXISTS.
#
# Without this, bochs merges cleanly and then cannot start at all:
# >>PANIC<< bx_plugin_ctrl_init() failure: no plugins found
#
# GCC 16 reports "-latomic_asneeded" among the implicit dependencies of any
# C++ link. That name is not a library: it is a linker script,
# INPUT ( AS_NEEDED ( -latomic ) )
# which is how GCC links libatomic only when something needs it.
#
# libtool probes the compiler, records the flag in `postdeps`, and then
# cannot resolve it as a library. It warns
# linker path does not have real file for library -latomic_asneeded
# and QUIETLY falls back to a static-only build of every dlopen module: the
# .la files come out with dlname='' and only libbx_*.a is installed. All 53
# plugins become unloadable, and nothing in the build reports an error --
# which is why this reaches users instead of the build log.
#
# Dropping the flag from postdeps only changes what libtool BELIEVES the
# compiler links implicitly. The link itself is still driven by g++, which
# keeps applying its own implicit dependencies, so the as-needed behaviour is
# preserved: the resulting modules carry no unresolved __atomic/__sync
# symbols and no libatomic in DT_NEEDED (verified on 3.0 with GCC 16.2.0).
#
# Adding GCC's directory to libtool's sys_lib_search_path does NOT help --
# measured. That directory is already in the search path; libtool's problem
# is the linker script itself, not where it lives.
#
# Neither elibtoolize nor rebuilding dev-build/libtool fixes this: the first
# patches the bundled ltmain.sh rather than the compiler probing that filled
# postdeps, and the second is irrelevant because this tarball ships a
# pre-generated configure and never reads the system libtool macros.
#
# The grep is the guard, not decoration: `sed -i` exits 0 when its pattern
# matches nothing, so without it a GCC that stops emitting the flag would
# leave this revision silently doing nothing at all.
grep -q -- '-latomic_asneeded' libtool ||
die "libtool no longer records -latomic_asneeded; re-check whether this workaround is still needed"
sed -i 's/-latomic_asneeded//g' libtool || die
}
src_install() {
default
# The .la files are only needed by libtool at install time; the plugins are
# dlopen'ed by name and load fine without them.
find "${ED}" -name '*.la' -delete || die
}
Manage flags for this package:
euse -i <flag> -p app-emulation/bochs |
euse -E <flag> -p app-emulation/bochs |
euse -D <flag> -p app-emulation/bochs
ncurses? ( sys-libs/ncurses:= ) readline? ( sys-libs/readline:= ) sdl? ( media-libs/libsdl ) X? ( x11-libs/libICE x11-libs/libSM x11-libs/libX11 x11-libs/libXpm ) X? ( x11-base/xorg-proto )
ncurses? ( sys-libs/ncurses:= ) readline? ( sys-libs/readline:= ) sdl? ( media-libs/libsdl ) X? ( x11-libs/libICE x11-libs/libSM x11-libs/libX11 x11-libs/libXpm )
>=app-text/opensp-1.5 doc? ( app-text/docbook-sgml-utils )