GHC Whole Program Compiler and External STG IR tooling
Haskell
122
626 commits
updated Jul 1, 2026
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.10 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-pluginzip package
cabal install zip-cmd
wpc-plugin
The wpc-plugin has a speparate stack.yaml because it uses the plugin API of GHC 9.10.3.
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.10.3.
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
Haskell
93.2%
C++
4.2%
Python
2.4%
GHC Whole Program Compiler and External STG IR tooling
Haskell
122
626 commits
updated Jul 1, 2026
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.10 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-pluginzip package
cabal install zip-cmd
wpc-plugin
The wpc-plugin has a speparate stack.yaml because it uses the plugin API of GHC 9.10.3.
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.10.3.
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
Haskell
93.2%
C++
4.2%
Python
2.4%