llvm-ffi: FFI bindings to the LLVM compiler toolkit.
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
Name | Description | Default |
---|---|---|
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
- llvm-ffi-16.0.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
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] |