1# Hare {#sec-language-hare}
2
3## Building Hare programs with `hareHook` {#ssec-language-hare}
4
5The `hareHook` package sets up the environment for building Hare programs by
6doing the following:
7
81. Setting the `HARECACHE`, `HAREPATH` and `NIX_HAREFLAGS` environment variables;
91. Propagating `harec`, `qbe` and two wrapper scripts for the hare binary.
10
11It is not a function as is the case for some other languages --- *e. g.*, Go or
12Rust ---, but a package to be added to `nativeBuildInputs`.
13
14## Attributes of `hareHook` {#hareHook-attributes}
15
16The following attributes are accepted by `hareHook`:
17
181. `hareBuildType`: Either `release` (default) or `debug`. It controls if the
19 `-R` flag is added to `NIX_HAREFLAGS`.
20
21## Example for `hareHook` {#ex-hareHook}
22
23```nix
24{
25 hareHook,
26 lib,
27 stdenv,
28}:
29stdenv.mkDerivation {
30 pname = "<name>";
31 version = "<version>";
32 src = "<src>";
33
34 nativeBuildInputs = [ hareHook ];
35
36 meta = {
37 description = "<description>";
38 inherit (hareHook) badPlatforms platforms;
39 };
40}
41```
42
43## Cross Compilation {#hareHook-cross-compilation}
44
45`hareHook` should handle cross compilation out of the box. This is the main
46purpose of `NIX_HAREFLAGS`: In it, the `-a` flag is passed with the architecture
47of the `hostPlatform`.
48
49However, manual intervention may be needed when a binary compiled by the build
50process must be run for the build to complete --- *e. g.*, when using Hare's
51`hare` module for code generation.
52
53In those cases, `hareHook` provides the `hare-native` script, which is a wrapper
54around the hare binary for using the native (`buildPlatform`) toolchain.