From 31487e434b317195d22e2e9b4810a46285df0782 Mon Sep 17 00:00:00 2001 From: AndersonTorres Date: Mon, 28 Jun 2021 01:03:36 -0300 Subject: [PATCH] bochs: refactor and prepare it for next release --- .../virtualization/bochs/default.nix | 157 ++++++++++-------- 1 file changed, 87 insertions(+), 70 deletions(-) diff --git a/pkgs/applications/virtualization/bochs/default.nix b/pkgs/applications/virtualization/bochs/default.nix index 3a8e9dc0bee7..e614b3da2b0c 100644 --- a/pkgs/applications/virtualization/bochs/default.nix +++ b/pkgs/applications/virtualization/bochs/default.nix @@ -1,23 +1,24 @@ -{ lib, stdenv, fetchurl -, pkg-config, libtool -, gtk2, libGLU, libGL, readline, libX11, libXpm -, docbook_xml_dtd_45, docbook_xsl -, sdlSupport ? true, SDL2 ? null -, termSupport ? true, ncurses ? null -, wxSupport ? true, wxGTK ? null -, wgetSupport ? false, wget ? null -, curlSupport ? false, curl ? null +{ lib +, stdenv +, fetchurl +, SDL2 +, curl +, docbook_xml_dtd_45 +, docbook_xsl +, gtk2 +, libGL +, libGLU +, libX11 +, libXpm +, libtool +, ncurses +, pkg-config +, readline +, wget +, wxGTK }: -assert sdlSupport -> (SDL2 != null); -assert termSupport -> (ncurses != null); -assert wxSupport -> (gtk2 != null && wxGTK != null); -assert wgetSupport -> (wget != null); -assert curlSupport -> (curl != null); - -with lib; stdenv.mkDerivation rec { - pname = "bochs"; version = "2.6.11"; @@ -27,18 +28,33 @@ stdenv.mkDerivation rec { }; patches = [ + # A flip between two lines of code, in order to compile with GLIBC 2.26 ./bochs-2.6.11-glibc-2.26.patch - ./fix-build-smp.patch + # Fix compilation for MSYS2 GCC 10; remove it when the next version arrives ./bochs_fix_narrowing_conv_warning.patch + # SMP-enabled configs; remove it when the next version arrives + ./fix-build-smp.patch ]; - buildInputs = - [ pkg-config libtool gtk2 libGLU libGL readline libX11 libXpm docbook_xml_dtd_45 docbook_xsl ] - ++ optionals termSupport [ ncurses ] - ++ optionals sdlSupport [ SDL2 ] - ++ optionals wxSupport [ wxGTK ] - ++ optionals wgetSupport [ wget ] - ++ optionals curlSupport [ curl ]; + nativeBuildInputs = [ + docbook_xml_dtd_45 + docbook_xsl + pkg-config + ]; + buildInputs = [ + SDL2 + curl + gtk2 + libGL + libtool + libGLU + libX11 + libXpm + ncurses + readline + wget + wxGTK + ]; configureFlags = [ "--with-x=yes" @@ -64,49 +80,51 @@ stdenv.mkDerivation rec { # Dangerous options - they are marked as "incomplete/experimental" on Bochs documentation "--enable-3dnow=no" "--enable-monitor-mwait=no" - "--enable-raw-serial=no" ] - # Boolean flags - ++ optionals termSupport [ "--with-term" ] - ++ optionals sdlSupport [ "--with-sdl2" ] - ++ optionals wxSupport [ "--with-wx" ] + "--enable-raw-serial=no" + # These are completely configurable, and they don't depend of external tools - ++ [ "--enable-cpu-level=6" # from 3 to 6 - "--enable-largefile" - "--enable-idle-hack" - "--enable-plugins=no" # Plugins are a bit buggy in Bochs - "--enable-a20-pin" - "--enable-x86-64" - "--enable-smp" - "--enable-large-ramfile" - "--enable-repeat-speedups" - "--enable-handlers-chaining" - "--enable-trace-linking" - "--enable-configurable-msrs" - "--enable-show-ips" - "--enable-debugger" #conflicts with gdb-stub option - "--enable-disasm" - "--enable-debugger-gui" - "--enable-gdb-stub=no" # conflicts with debugger option - "--enable-iodebug" - "--enable-fpu" - "--enable-svm" - "--enable-avx" - "--enable-evex" - "--enable-x86-debugger" - "--enable-pci" - "--enable-usb" - "--enable-usb-ohci" - "--enable-usb-ehci" - "--enable-usb-xhci" - "--enable-ne2000" - "--enable-pnic" - "--enable-e1000" - "--enable-clgd54xx" - "--enable-voodoo" - "--enable-cdrom" - "--enable-sb16" - "--enable-es1370" - "--enable-busmouse" ]; + "--enable-a20-pin" + "--enable-avx" + "--enable-busmouse" + "--enable-cdrom" + "--enable-clgd54xx" + "--enable-configurable-msrs" + "--enable-cpu-level=6" # from 3 to 6 + "--enable-debugger" #conflicts with gdb-stub option + "--enable-debugger-gui" + "--enable-disasm" + "--enable-e1000" + "--enable-es1370" + "--enable-evex" + "--enable-fpu" + "--enable-gdb-stub=no" # conflicts with debugger option + "--enable-handlers-chaining" + "--enable-idle-hack" + "--enable-iodebug" + "--enable-large-ramfile" + "--enable-largefile" + "--enable-ne2000" + "--enable-pci" + "--enable-plugins=no" # Plugins are a bit buggy in Bochs + "--enable-pnic" + "--enable-repeat-speedups" + "--enable-sb16" + "--enable-show-ips" + "--enable-smp" + "--enable-svm" + "--enable-trace-linking" + "--enable-usb" + "--enable-usb-ehci" + "--enable-usb-ohci" + "--enable-usb-xhci" + "--enable-voodoo" + "--enable-x86-64" + "--enable-x86-debugger" + ] + # Boolean flags + ++ lib.optionals (SDL2 != null) [ "--with-sdl2" ] + ++ lib.optionals (ncurses != null) [ "--with-term" ] + ++ lib.optionals (gtk2 != null && wxGTK != null) [ "--with-wx" ]; NIX_CFLAGS_COMPILE="-I${gtk2.dev}/include/gtk-2.0/ -I${libtool}/include/"; NIX_LDFLAGS="-L${libtool.lib}/lib"; @@ -115,19 +133,18 @@ stdenv.mkDerivation rec { enableParallelBuilding = true; - meta = { + meta = with lib; { + homepage = "http://bochs.sourceforge.io/"; description = "An 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. ''; - homepage = "http://bochs.sourceforge.net/"; license = licenses.lgpl2Plus; maintainers = with maintainers; [ AndersonTorres ]; platforms = platforms.unix; }; } # TODO: plugins -# TODO: svga support - the Bochs sources explicitly cite /usr/include/vga.h # TODO: a better way to organize the options