The project consists of GHC wpc-plugin and the corresponding External STG IR and tooling.
The wpc-plugin is a compiler plugin for GHC 9.6 or newer. It exports the STG IR (.modpak)
for the compiled modules and linker metadata (.ghc_stgapp
) at application link time.
gen-exe
main compiler driver, it produces executable from .ghc_stgapp
files.gen-obj
compiles STG IR files .o_stgbin
to object code .o
. (gen-exe calls it)ext-stg
CLI tool for external STG IR, it can pretty print .o_stgbin
files. stack install
wpc-plugin
zip
package
cabal install zip-cmd
wpc-plugin
The wpc-plugin
has a speparate stack.yaml
because it uses the plugin API of GHC 9.6.1
.
cd wpc-plugin
stack build
libwpc-plugin.[so|dylib|dll]
ln -s `find . -type f -name 'libwpc-plugin.so' -o -name 'libwpc-plugin.dylib' -o -name 'libwpc-plugin.dll' | head -1`
It is required to use GHC 9.6.1.
Add the following lines to your project's cabal.project
:
package *
ghc-options:
-fplugin-trustworthy
-fplugin-library=PATH_TO/libwpc-plugin.so;wpc-plugin-unit;WPC.Plugin;[]
Add the following lines to your project's stack.yaml
:
apply-ghc-options: everything
ghc-options:
"$everything":
-fplugin-trustworthy
-fplugin-library=PATH_TO/libwpc-plugin.so;wpc-plugin-unit;WPC.Plugin;[]
Ext-STG IR
gen-exe
compiles -O0 executables)The .modpak
and .fullpak
files use Zstd compression method that was introduced in the Zip 6.3.8 standard in 2020.
The GHC-WPC tooling can handle Zstd zip files out of the box.
But if you'd like to unpack the .modpak
and .fullpak
files manually then you'll need an unzip
version with Zstd support.
https://github.com/csabahruska/unzip-zstd