MyNixOS website logo
Description

Build "as static as possible" executable on Linux.

The following stanzas in your cabal file will make sure that the executable is linked statically with all libraries except for glibc:

executable your-awesome-program
    build-tool-depends: ecstatic:ecstatic >= 0.1.0
    ghc-options: -pgml ecstatic

See README.md for background and more details.

ecstatic

This package provides a way to build "as static as possible" Haskell Linux executable.

Why?

On Linux, using -static gcc flag will link all libraries statically, including libc, which is explicitly not supported. The correct way to build redistributable Linux executables is to statically link everything except for libc (and link against an older glibc version, for maximum compatibility), but ghc doesn't make it easy. ecstatic is a drop-in replacement for the linker that will do the correct thing.

Usage

Add this to the executable section of your cabal file:

    build-tool-depends: ecstatic:ecstatic >= 0.1.0
    ghc-options: -pgml ecstatic

You likely want to link dynamically by default; add a configuration flag:

Flag distrib
  description: Build redistributable executable
  default: False
  manual: True

...

executable your-awesome-program
  if flag(distrib) {
    build-tool-depends: ecstatic:ecstatic >= 0.1.0
    ghc-options: -pgml ecstatic
  }
Metadata

Version

0.1.0.0

License

Platforms (76)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-linux
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows