llvm-ffi: FFI bindings to the LLVM compiler toolkit.

[ bsd3, code-generation, compilers-interpreters, library ] [ Propose Tags ] [ Report a vulnerability ]

FFI bindings to the LLVM compiler toolkit.

Installation cannot be done fully automatically. It would require Cabal code that is bound to certain Cabal versions and is prone to fail. We give several non-automatic ways that also allow you to choose a particular LLVM version.

First possibility is to point Cabal to the LLVM installation directories manually. It is recommended to add options to your global .cabal/config:

extra-include-dirs: /usr/lib/llvm-16/include
extra-lib-dirs: /usr/lib/llvm-16/lib

This works for both v1-build and v2-build. The shown paths work for Debian and Ubuntu using the LLVM repositories at https://apt.llvm.org/. You can obtain them with

llvm-config-16 --includedir --libdir

You can choose specific LLVM versions per project. For v1-builds it works like so:

cabal install -fllvm900 --extra-include-dirs=$(llvm-config-9 --includedir) --extra-lib-dirs=$(llvm-config-9 --libdir) yourpackage

For Nix-style build you must add some options to the cabal.project.local file of your LLVM-related project:

package llvm-ffi
  flags: +llvm900
  extra-include-dirs: /usr/lib/llvm-9/include
  extra-lib-dirs: /usr/lib/llvm-9/lib

The second way uses pkg-config. You can store above paths permanently in a pkg-config file like llvm.pc. The optimal way would be if LLVM installations or GNU/Linux distributions would contain such a file, but they don't. Instead, you may generate it using the llvm-pkg-config package or write one manually. Then you run

cabal install -fpkgConfig

We try to stay up to date with LLVM releases. The current version of this package is compatible with LLVM 8-16. Please understand that the package may or may not work against older LLVM releases.

Warning for inplace builds: Re-configuring the package using, say -fllvm1100, and re-buildung it might result in corrupt code. You must make sure that the stuff in cbits is re-compiled. Cabal or GHC may forget about that. You are safe if you run cabal clean.

Caution: Ugly crashes can occur if you have configured paths for LLVM version X in .cabal/config and try to build llvm-ffi for a different LLVM version Y. Counterintuitively, global search paths have higher precedence than local ones: https://github.com/haskell/cabal/issues/7782. But that does not simply mean that the local configuration is ignored completely. Instead the local library file is found, because its name libLLVM-Y.so is unique, whereas the include file names clash, thus the ones from the global include directory are used.

Flags

Manual Flags

NameDescriptionDefault
developer

developer mode - warnings let compilation fail

Disabled
buildexamples

Build example executables

Disabled
pkgconfig

use pkgconfig (llvm.pc) instead of extra-libraries

Disabled
specificpkgconfig

use llvm-x.pc instead of llvm.pc

Enabled
llvm309

use LLVM-3.9 instead of latest supported LLVM

Disabled
llvm400

use LLVM-4.0 instead of latest supported LLVM

Disabled
llvm500

use LLVM-5.0 instead of latest supported LLVM

Disabled
llvm600

use LLVM-6.0 instead of latest supported LLVM

Disabled
llvm700

use LLVM-7 instead of latest supported LLVM

Disabled
llvm800

use LLVM-8 instead of latest supported LLVM

Disabled
llvm900

use LLVM-9 instead of latest supported LLVM

Disabled
llvm1000

use LLVM-10 instead of latest supported LLVM

Disabled
llvm1100

use LLVM-11 instead of latest supported LLVM

Disabled
llvm1200

use LLVM-12 instead of latest supported LLVM

Disabled
llvm1300

use LLVM-13 instead of latest supported LLVM

Disabled
llvm1400

use LLVM-14 instead of latest supported LLVM

Disabled
llvm1500

use LLVM-15 instead of latest supported LLVM

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 3.0.0, 3.0.0.1, 3.0.0.2, 3.1.0, 3.2.0, 3.2.1, 3.3.0, 3.4.0, 3.5.0, 3.5.1, 3.6.0, 3.7.0, 3.8.0, 3.8.1, 3.8.1.1, 3.8.1.2, 3.9.0, 3.9.1, 9.0.0, 9.1.0, 9.1.0.1, 9.1.1, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0
Dependencies base (>=3 && <5), enumset (>=0.0.5 && <0.2) [details]
Tested with ghc ==7.4.2, ghc ==7.6.3, ghc ==7.8.4, ghc ==8.0.2, ghc ==8.2.2, ghc ==8.4.4, ghc ==8.6.5, ghc ==8.8.4, ghc ==8.10.4
License BSD-3-Clause
Author Henning Thielemann, Bryan O'Sullivan, Lennart Augustsson
Maintainer Henning Thielemann <llvm@henning-thielemann.de>
Category Compilers/Interpreters, Code Generation
Home page http://haskell.org/haskellwiki/LLVM
Source repo head: darcs get https://hub.darcs.net/thielema/llvm-ffi/
this: darcs get https://hub.darcs.net/thielema/llvm-ffi/ --tag 16.0
Uploaded by HenningThielemann at 2023-10-08T15:05:01Z
Distributions NixOS:16.0
Reverse Dependencies 2 direct, 8 indirect [details]
Executables llvm-ffi-offset, llvm-ffi-jit, llvm-ffi-host
Downloads 13346 total (34 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]