summary refs log tree commit diff
path: root/pkgs/applications/virtualization/bochs/default.nix
diff options
context:
space:
mode:
authorAndersonTorres <torres.anderson.85@gmail.com>2014-09-28 22:20:34 -0300
committerMateusz Kowalczyk <fuuzetsu@fuuzetsu.co.uk>2014-10-02 06:48:50 +0100
commit59418454e615e14938eeaeb3357912049bc44ef1 (patch)
treee4b234c6019af227778b171f7481b89c47ec6f2d /pkgs/applications/virtualization/bochs/default.nix
parent0d41386f485c86b17c727f97ab8c4eeea276b184 (diff)
downloadnixpkgs-59418454e615e14938eeaeb3357912049bc44ef1.tar
nixpkgs-59418454e615e14938eeaeb3357912049bc44ef1.tar.gz
nixpkgs-59418454e615e14938eeaeb3357912049bc44ef1.tar.bz2
nixpkgs-59418454e615e14938eeaeb3357912049bc44ef1.tar.lz
nixpkgs-59418454e615e14938eeaeb3357912049bc44ef1.tar.xz
nixpkgs-59418454e615e14938eeaeb3357912049bc44ef1.tar.zst
nixpkgs-59418454e615e14938eeaeb3357912049bc44ef1.zip
Bochs: adding configurable options
Now, Bochs expression has a bunch of configurable options!

Unhappily, it is a big and complex project, and some configure options
are in constant clash. But the set created for now is very usable and
stable.

Closes #4366
Diffstat (limited to 'pkgs/applications/virtualization/bochs/default.nix')
-rw-r--r--pkgs/applications/virtualization/bochs/default.nix151
1 files changed, 124 insertions, 27 deletions
diff --git a/pkgs/applications/virtualization/bochs/default.nix b/pkgs/applications/virtualization/bochs/default.nix
index 95db0dd67a1..a3e7a5b2994 100644
--- a/pkgs/applications/virtualization/bochs/default.nix
+++ b/pkgs/applications/virtualization/bochs/default.nix
@@ -1,14 +1,17 @@
-{ stdenv, fetchurl
-, pkgconfig, gtk
-, libX11 , mesa
+{ stdenv, fetchurl, config
+, pkgconfig, libtool
+, gtk, mesa, readline, libX11, libXpm
+, docbook_xml_dtd_45, docbook_xsl
 , sdlSupport ? true, SDL ? null
-, termSupport ? true , ncurses ? null, readline ? null
-, wxSupport ? false, wxGTK ? null
+, termSupport ? true , ncurses ? null
+, wxSupport ? false, wxGTK ? null # Warning! Broken
+# Optional, undocumented dependencies
 , wgetSupport ? false, wget ? null
-, curlSupport ? false, curl ? null }:
+, curlSupport ? false, curl ? null
+}:
 
 assert sdlSupport -> (SDL != null);
-assert termSupport -> (ncurses != null&& readline != null);
+assert termSupport -> (ncurses != null);
 assert wxSupport -> (gtk != null && wxGTK != null);
 assert wgetSupport -> (wget != null);
 assert curlSupport -> (curl != null);
@@ -23,33 +26,125 @@ stdenv.mkDerivation rec {
     sha256 = "0nlrl218x93vz97n46aw2szsalx97r020mn43fjsif100v7zix6f";
   };
 
+  # The huge list of configurable options
+  # Blatantly based on ffmpeg expressions
+
+  termSupport = config.bochs.termSupport or true;
+  sdlSupport = config.bochs.sdlSupport or true;
+  wxSupport = config.bochs.wxSupport or false;
+  largefile = config.bochs.largefile or true;
+  idleHack = config.bochs.idleHack or true;
+  plugins = config.bochs.plugins or false; # Warning! Broken
+  a20Pin = config.bochs.a20Pin or true;
+  emulate64Bits = config.bochs.emulate64Bits or false;
+  smp = config.bochs.smp or false;
+  largeRamfile = config.bochs.largeRamfile or true;
+  repeatSpeedups = config.bochs.repeatSpeedups or false;
+  handlersChaining = config.bochs.handlersChaining or false;
+  traceLinking = config.bochs.traceLinking or false;
+  configurableMSRegs = config.bochs.configurableMSRegs or false;
+  showIPS = config.bochs.showIPS or true;
+  debugger = config.bochs.debugger or false;
+  disasm = config.bochs.disasm or false;
+  debuggerGui = config.bochs.debuggerGui or false;
+  gdbStub = config.bochs.gdbStub or false;
+  IODebug = config.Bochs.IODebug or false;
+  fpu = config.bochs.fpu or true;
+  svm = config.bochs.svm or false;
+  avx = config.bochs.avx or false;
+  evex = config.bochs.evex or false;
+  x86Debugger = config.bochs.x86Debugger or false;
+  pci = config.bochs.pci or true;
+  uhci = config.bochs.uhci or false;
+  ohci = config.bochs.ohci or false;
+  ne2k = config.bochs.ne2k or true;
+  pNIC = config.bochs.pNIC or true;
+  e1000 = config.bochs.e1000 or true;
+  clgd54xx = config.bochs.clgd54xx or true;
+  voodoo = config.bochs.voodoo or true;
+  cdrom = config.bochs.cdrom or true;
+  sb16 = config.bochs.sb16 or true;
+  es1370 = config.bochs.es1370 or true;
+  gameport = config.bochs.gameport or true;
+  busMouse = config.bochs.busMouse or false;
+
   buildInputs = with stdenv.lib;
-  [ pkgconfig gtk libX11 mesa ]
+  [ pkgconfig libtool gtk mesa readline libX11 libXpm docbook_xml_dtd_45 docbook_xsl ]
+  ++ optionals termSupport [ ncurses ]
   ++ optionals sdlSupport [ SDL ]
-  ++ optionals termSupport [ readline ncurses ]
   ++ optionals wxSupport [ wxGTK ]
   ++ optionals wgetSupport [ wget ]
   ++ optionals curlSupport [ curl ];
 
-  configureFlags = ''
-    --with-x11
-    --with-term=${if termSupport then "yes" else "no"}
-    --with-sdl=${if sdlSupport then "yes" else "no"}
-    --with-svga=no
-    --with-wx=${if wxSupport then "yes" else "no"}
-    --enable-readline
-    --enable-plugins=no
-    --enable-disasm
-    --enable-debugger
-    --enable-ne2000
-    --enable-e1000
-    --enable-sb16
-    --enable-voodoo
-    --enable-usb
-    --enable-pnic
-'';
+  configureFlags = [
+    "--with-x=yes"
+    "--with-x11=yes"
+
+    "--with-rfb=no"
+    "--with-vncsrv=no"
+    "--with-svga=no" # it doesn't compile on NixOS
+    "--with-wx=no"
+
+    # These will always be "yes" on NixOS
+    "--enable-ltdl-install=yes"
+    "--enable-readline=yes"
+    "--enable-all-optimizations=yes"
+    "--enable-logging=yes"
+    "--enable-xpm=yes"
+
+    # ... whereas these, always "no"!
+    "--enable-cpp=no"
+    "--enable-instrumentation=no"
+
+    "--enable-docbook=no" # Broken - it requires docbook2html
+
+    # Dangerous options - they are marked as "incomplete/experimental" on Bochs documentation
+    "--enable-3dnow=no"
+    "--enable-usb-xhci=no"
+    "--enable-monitor-mwait=no"
+    "--enable-raw-serial=no" ]
+    # Boolean flags
+    ++ stdenv.lib.optional termSupport "--with-term"
+    ++ stdenv.lib.optional sdlSupport "--with-sdl"
+    ++ stdenv.lib.optional wxSupport "--with-wx"
+    ++ stdenv.lib.optional largefile "--enable-largefile"
+    ++ stdenv.lib.optional idleHack "--enable-idle-hack"
+    ++ stdenv.lib.optional plugins "--enable-plugins"
+    ++ stdenv.lib.optional a20Pin "--enable-a20-pin"
+    ++ stdenv.lib.optional emulate64Bits "--enable-x86-64"
+    ++ stdenv.lib.optional smp "--enable-smp"
+    ++ stdenv.lib.optional largeRamfile "--enable-large-ramfile"
+    ++ stdenv.lib.optional repeatSpeedups "--enable-repeat-speedups"
+    ++ stdenv.lib.optional handlersChaining "--enable-handlers-chaining"
+    ++ stdenv.lib.optional traceLinking "--enable-trace-linking"
+    ++ stdenv.lib.optional configurableMSRegs "--enable-configurable-msrs"
+    ++ stdenv.lib.optional showIPS "--enable-show-ips"
+    ++ stdenv.lib.optional debugger "--enable-debugger"
+    ++ stdenv.lib.optional disasm "--enable-disasm"
+    ++ stdenv.lib.optional debuggerGui "--enable-debugger-gui"
+    ++ stdenv.lib.optional gdbStub "--enable-gdb-stub"
+    ++ stdenv.lib.optional IODebug "--enable-iodebug"
+    ++ stdenv.lib.optional fpu "--enable-fpu"
+    ++ stdenv.lib.optional svm "--enable-svm"
+    ++ stdenv.lib.optional avx "--enable-avx"
+    ++ stdenv.lib.optional evex "--enable-evex"
+    ++ stdenv.lib.optional x86Debugger "--enable-x86-debugger"
+    ++ stdenv.lib.optional pci "--enable-pci"
+    ++ stdenv.lib.optional uhci "--enable-usb"
+    ++ stdenv.lib.optional ohci "--enable-usb-ohci"
+    ++ stdenv.lib.optional ne2k "--enable-ne2000"
+    ++ stdenv.lib.optional pNIC "--enable-pnic"
+    ++ stdenv.lib.optional e1000 "--enable-e1000"
+    ++ stdenv.lib.optional clgd54xx "--enable-clgd54xx"
+    ++ stdenv.lib.optional voodoo "--enable-voodoo"
+    ++ stdenv.lib.optional cdrom "--enable-cdrom"
+    ++ stdenv.lib.optional sb16 "--enable-sb16"
+    ++ stdenv.lib.optional es1370 "--enable-es1370"
+    ++ stdenv.lib.optional busMouse "--enable-busmouse"
+    ;
 
-  NIX_CFLAGS_COMPILE="-I${gtk}/include/gtk-2.0/";
+  NIX_CFLAGS_COMPILE="-I${gtk}/include/gtk-2.0/ -I${libtool}/include/";
+  NIX_LDFLAGS="-L${libtool}/lib";
 	
   meta = with stdenv.lib; {
     description = "An open-source IA-32 (x86) PC emulator";
@@ -67,3 +162,5 @@ stdenv.mkDerivation rec {
 }
 
 # TODO: study config.bochs.* implementation (like config.ffmpeg.* options)
+# TODO: investigate the wxWidgets problem (maybe upstream devteam didn't update wxGTK GUI)
+# TODO: investigate svga support - the Bochs sources explicitly cite /usr/include/svga.h