nixpkgs/pkgs/by-name/bo/bochs/package.nix
Anderson Torres be5f3bd31e bochs: use lib.* string functions
Also, nixfmt
2024-09-25 17:46:50 -03:00

166 lines
4.6 KiB
Nix

{
lib,
SDL2,
curl,
darwin,
docbook_xml_dtd_45,
docbook_xsl,
fetchurl,
gtk3,
libGL,
libGLU,
libX11,
libXpm,
libtool,
ncurses,
pkg-config,
readline,
stdenv,
wget,
wxGTK32,
# Boolean flags
enableSDL2 ? true,
enableTerm ? true,
enableWx ? !stdenv.hostPlatform.isDarwin,
enableX11 ? !stdenv.hostPlatform.isDarwin,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "bochs";
version = "2.8";
src = fetchurl {
url = "mirror://sourceforge/project/bochs/bochs/${finalAttrs.version}/bochs-${finalAttrs.version}.tar.gz";
hash = "sha256-qFsTr/fYQR96nzVrpsM7X13B+7EH61AYzCOmJjnaAFk=";
};
nativeBuildInputs = [
docbook_xml_dtd_45
docbook_xsl
libtool
pkg-config
];
buildInputs =
[
curl
readline
wget
]
++ lib.optionals enableSDL2 [
SDL2
]
++ lib.optionals enableTerm [
ncurses
]
++ lib.optionals enableWx [
gtk3
wxGTK32
]
++ lib.optionals enableX11 [
libGL
libGLU
libX11
libXpm
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
darwin.libobjc
];
configureFlags =
[
(lib.withFeature false "rfb")
(lib.withFeature false "vncsrv")
(lib.withFeature true "nogui")
# These will always be "yes" on NixOS
(lib.enableFeature true "ltdl-install")
(lib.enableFeature true "readline")
(lib.enableFeature true "all-optimizations")
(lib.enableFeature true "logging")
(lib.enableFeature true "xpm")
# ... whereas these, always "no"!
(lib.enableFeature false "cpp")
(lib.enableFeature false "instrumentation")
(lib.enableFeature false "docbook") # Broken - it requires docbook2html
# Dangerous options - they are marked as "incomplete/experimental" on Bochs documentation
(lib.enableFeature false "3dnow")
(lib.enableFeature false "monitor-mwait")
(lib.enableFeature false "raw-serial")
# These are completely configurable, and they don't depend of external tools
(lib.enableFeature true "a20-pin")
(lib.enableFeature true "avx")
(lib.enableFeature true "busmouse")
(lib.enableFeature true "cdrom")
(lib.enableFeature true "clgd54xx")
(lib.enableFeature true "configurable-msrs")
(lib.enableFeatureAs true "cpu-level" "6") # from 3 to 6
(lib.enableFeature true "debugger") # conflicts with gdb-stub option
(lib.enableFeature true "debugger-gui")
(lib.enableFeature true "evex")
(lib.enableFeature true "fpu")
(lib.enableFeature false "gdb-stub") # conflicts with debugger option
(lib.enableFeature true "handlers-chaining")
(lib.enableFeature true "idle-hack")
(lib.enableFeature true "iodebug")
(lib.enableFeature true "large-ramfile")
(lib.enableFeature true "largefile")
(lib.enableFeature true "pci")
(lib.enableFeature true "repeat-speedups")
(lib.enableFeature true "show-ips")
(lib.enableFeature true "smp")
(lib.enableFeatureAs true "vmx" "2")
(lib.enableFeature true "svm")
(lib.enableFeature true "trace-linking")
(lib.enableFeature true "usb")
(lib.enableFeature true "usb-ehci")
(lib.enableFeature true "usb-ohci")
(lib.enableFeature true "usb-xhci")
(lib.enableFeature true "voodoo")
(lib.enableFeature true "x86-64")
(lib.enableFeature true "x86-debugger")
]
++ lib.optionals enableSDL2 [
(lib.withFeature true "sdl2")
]
++ lib.optionals enableTerm [
(lib.withFeature true "term")
]
++ lib.optionals enableWx [
(lib.withFeature true "wx")
]
++ lib.optionals enableX11 [
(lib.withFeature true "x")
(lib.withFeature true "x11")
]
++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
(lib.enableFeature true "e1000")
(lib.enableFeature true "es1370")
(lib.enableFeature true "ne2000")
(lib.enableFeature true "plugins")
(lib.enableFeature true "pnic")
(lib.enableFeature true "sb16")
];
enableParallelBuilding = true;
meta = {
homepage = "https://bochs.sourceforge.io/";
description = "Open-source IA-32 (x86) PC emulator";
longDescription = ''
Bochs is an open-source (LGPL), highly portable IA-32 PC emulator, written
in C++, that runs on most popular platforms. It includes emulation of the
Intel x86 CPU, common I/O devices, and a custom BIOS.
'';
license = lib.licenses.lgpl2Plus;
maintainers = with lib.maintainers; [ AndersonTorres ];
platforms = lib.platforms.unix;
};
})
# TODO: a better way to organize the options
# TODO: docbook (docbook-tools from RedHat mirrors should help)