I have seen that sb-ext:save-lisp-and-die
is used to make executables from sourc code, but how do you make the executable for specific systems? e.g. Linux, Windows, Apple.
Hi, you have to compile them on their respective platform, with possible help of a CI system. Or compile a Windows version on Wine: I read that the Kandria game’s version is built like this.
Example Github actions: https://github.com/melusina-org/make-common-lisp-program
Example software that ships for all three platforms (in addition of an AppImage): https://github.com/VitoVan/calm
`save-lisp-and-die` just saves a core images which has the same global state as the current image, the saved image is executable when the `:EXECUTABLE` is `true`. However, you can only save the image for the underlying OS, eg, if you run `sbcl` in Linux, `save-lisp-and-die` will only save a Linux version.
The typical usages of `save-lisp-and-die` are, when you want to run this lisp image as a standalone exe, or when you load a lot of libs or large data set, you can save it to another image and run that image afterwards, that will save you a lot of loading time.
Common Lisp is not a batch compiled language, it relies on having a running program in order to compile your code. As such you must be running on the target platform to deploy for to produce executables.