Skip to content

WINE: using SBCL and building applications for Windows from Linux #50

@vindarel

Description

@vindarel

Wine progress:

  • You can download a full SBCL installer from their website, run wine on it, and then open a REPL via the resulting .exe

  • *features* contains :WIN32 and neither :LINUX nor :UNIX

  • If you wine ~/.wine/blahblah/sbcl.exe from outside the wine prefix and then ask it (uiop:getcwd), it tells you a path under Z: like Z:/home/colin/code/foobar/

  • If you vend repl wine /home/colin/.wine/drive_c/Program\ Files/Steel\ Bank\ Common\ Lisp/sbcl.exe (using vend) it "just works" and you can load your systems.

  • Loading systems produces messages like:

; compiling file "Z:/home/colin/code/common-lisp/filepaths/src/filepaths.lisp" (written 17 FEB 2025 06:14:11 AM):
; wrote C:/users/colin/AppData/Local/cache/common-lisp/sbcl-2.5.5-win-x64/Z/home/colin/code/common-lisp/filepaths/src/filepaths-tmpUX5S4ADN.fasl
  • In emacs, you can add the following to sly-lisp-implementations and it will "just work":

    (sbcl-wine ("vend" "repl" "wine" "/home/colin/.wine/drive_c/Program Files/Steel Bank Common Lisp/sbcl.exe"))
    
  • I'm able to load and test systems as usual from a normal Emacs session running in Linux, but the underlying SBCL thinks it's in Windows.

  • The :device field of pathname finally matters:

The object is a PATHNAME.
0. NAMESTRING: "Z:/home/colin/code/common-lisp/filepaths/"
1. HOST: #<SB-IMPL::WIN32-HOST {1100039A13}>
2. DEVICE: "Z"
3. DIR+HASH: ((:ABSOLUTE "home" "colin" "code" "common-lisp" "filepaths")
              . 1436663681855573684)
4. NAME: NIL
5. TYPE: NIL
6. VERSION: NIL

Likewise, this shape of literal does what you expect: #p"Z:/foo" with Z as the device. Notice however that even on windows, the separator is a slash (not a backslash, thank god)

(@fosskers on Discord)


Does Wine work well? The Kandria game Windows version was built like this.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions