1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
HARE-BUILD(1)
# NAME
hare-build - compile a Hare program or module
# SYNOPSIS
*hare build* [-hFqv]++
[-a _arch_]++
[-D _ident[:type]=value_]++
[-j _jobs_]++
[-L _libdir_]++
[-l _libname_]++
[-N _namespace_]++
[-o _path_]++
[-R]++
[-T _tagset_]++
[-t _type_]++
[_path_]
# DESCRIPTION
; TODO: Decide on and document driver exit statuses
*hare build* compiles a Hare program or module. The _path_ argument is a path to
a Hare source file or to a directory which contains a Hare module (see
*hare-module*(5)). If no path is given, the Hare module contained in the current
working directory is built.
# OPTIONS
*-h*
Print the help text.
*-F*
Build for freestanding (non-hosted) environment. See *FREESTANDING
ENVIRONMENT*.
*-q*
Outside of errors, don't write anything to stdout while building.
*-v*
Enable verbose logging. Specify twice to increase verbosity.
*-a* _arch_
Set the desired architecture for cross-compiling. See *ARCHITECTURES*
for supported architecture names.
*-D* _ident[:type]=value_
Define a constant in the type system. _ident_ is parsed as a Hare
identifier (e.g. "foo::bar::baz"), _type_ as a Hare type (e.g. "str" or
"struct { x: int, y: int }"), and _value_ as a Hare expression (e.g.
"42"). Take care to address any necessary escaping to avoid conflicts
between your shell syntax and Hare syntax.
*-j* _jobs_
Set the maximum number of jobs to execute in parallel. The default is
the number of processors available on the host.
*-L* _libdir_
Add a directory to the linker library search path.
*-l* _libname_
Link with the named system library. The name is passed directly to the
linker. Linking with any library will also link with *libc*(7) and add
the +libc tag to the default build tags (see *BUILD TAGS* in
*hare-module*(5)).
*-N* _namespace_
Override the namespace for the module.
*-o* _path_
Set the output file to the given path. Setting the path to *-* causes
output to be written to stdout.
*-R*
Build in release mode. In debug mode (the default), the debug:: module
is imported as a dependency, which automatically installs a number of
runtime debugging features in your executable. See this module's
documentation for details on these features.
*-T* _tagset_
Set or unset build tags. See *BUILD TAGS* in *hare-module*(5).
*-t* _type_
Set the build type. _type_ should be one of s, o, or bin, for assembly,
compiled object, or compiled binary, respectively. The default build
type is compiled binary.
# ARCHITECTURES
The *-a* flag is used for cross-compilation to a target architecture different
from the host architecture. The following architectures are currently supported:
- aarch64
- riscv64
- x86_64
The system usually provides reasonable defaults for the *AR*, *AS*, *LD*, and
*CC* tools based on the desired target. However, you may wish to set these
variables yourself to control the cross toolchain in use.
# FREESTANDING ENVIRONMENT
If run with *-F*, hare build will target a freestanding environment. This has
the following effects:
- No constraints are imposed on the signature of "main"
- Specifying external libraries with *-l* will *not* automatically:
- Link with libc (add *-lc* manually if required)
- Add the +libc flag (add *-T+libc* manually if required)
- Use the C compiler for linking (use *LD=cc* if required)
# ENVIRONMENT
The following environment variables affect *hare build*'s execution:
|[ *HARECACHE*
:< The path to the build cache. Defaults to *$XDG_CACHE_HOME/hare*, or
*~/.cache/hare* if *$XDG_CACHE_HOME* isn't set.
| *HAREPATH*
: The list of directories to search for module dependencies in. See
*hare-module*(5).
| *NO_COLOR*
: Disables all color output when set to a non-empty string.
| *HAREC_COLOR*
: Disables color output for *harec* when set to 0, enables it when set to any
other value. This overrides *NO_COLOR*.
| *HAREC*
: Name of the *harec* command to use.
| *HARECFLAGS*
: Additional flags to pass to *harec*.
| *QBE*
: Name of the *qbe* command to use.
| *QBEFLAGS*
: Additional flags to pass to *qbe*.
| *AR*
: Name of the *ar*(1) command to use.
| *ARFLAGS*
: Additional flags to pass to *ar*(1).
| *AS*
: Name of the *as*(1) command to use.
| *ASFLAGS*
: Additional flags to pass to *as*(1).
| *LD*
: Name of the *ld*(1) command to use.
| *LDLINKFLAGS*
: Additional flags to pass to *ld*(1).
| *CC*
: Name of the *cc*(1) command to use when linking external libraries.
| *LDFLAGS*
: Additional linker flags to pass to *cc*(1).
# SEE ALSO
*hare-run*(1), *hare-test*(1), *hare-module*(5), *ar*(1), *as*(1), *cc*(1),
*ld*(1)
|