# futhark-c

## SYNOPSIS

futhark c [options…] <program.fut>

## DESCRIPTION

`futhark c` translates a Futhark program to sequential C code, and either compiles that C code with a C compiler (see below) to an executable binary program, or produces a `.h` and `.c` file that can be linked with other code.. The standard Futhark optimisation pipeline is used, and

The resulting program will read the arguments to the entry point (`main` by default) from standard input and print its return value on standard output. The arguments are read and printed in Futhark syntax.

## OPTIONS

`-h`

  Print help text to standard output and exit.

`--entry-point NAME`

  Treat this top-level function as an entry point.

`--library`

  Generate a library instead of an executable. Appends `.c`/`.h` to the name indicated by the `-o` option to determine output file names.

`-o outfile`

  Where to write the result. If the source program is named `foo.fut`, this defaults to `foo`.

`--safe`

  Ignore `unsafe` in program and perform safety checks unconditionally.

`--server`

  Generate a server-mode executable that reads commands from stdin.

`-v verbose`

  Enable debugging output. If compilation fails due to a compiler error, the result of the last successful compiler step will be printed to standard error.

`-V`

  Print version information on standard output and exit.

`-W`

  Do not print any warnings.

`--Werror`

  Treat warnings as errors.

## ENVIRONMENT VARIABLES

`CC`

> The C compiler used to compile the program. Defaults to `cc` if unset.

`CFLAGS`

> Space-separated list of options passed to the C compiler. Defaults to `-O3 -std=c99` if unset.

## EXECUTABLE OPTIONS

The following options are accepted by executables generated by `futhark c`.

`-h, --help`

  Print help text to standard output and exit.

`-b, --binary-output`

  Print the program result in the binary output format. The default is human-readable text, which is very slow. Not accepted by server-mode executables.

`--cache-file=FILE`

  Store any reusable initialisation data in this file, possibly speeding up subsequent launches.

`-D, --debugging`

  Perform possibly expensive internal correctness checks and verbose logging. Implies `-L`.

`-e, --entry-point=FUN`

  The entry point to run. Defaults to `main`. Not accepted by server-mode executables.

`-L, --log`

  Print various low-overhead logging information to stderr while running.

`-n, --no-print-result`

  Do not print the program result. Not accepted by server-mode executables.

`-P, --profile`

  Gather profiling data during execution. Mostly interesting in `--server` mode. Implied by `-D`.

`--param=ASSIGNMENT`

  Set a tuning parameter to the given value. `ASSIGNMENT` must be of the form `NAME=INT` Use `--print-params` to see which names are available.

`--print-params`

  Print all tuning parameters that can be set with `--param` or `--tuning`.

`-r, --runs=NUM`

  Perform NUM runs of the program. With `-t`, the runtime for each individual run will be printed. Additionally, a single leading warmup run will be performed (not counted). Only the final run will have its result written to stdout. Not accepted by server-mode executables.

`-t, --write-runtime-to=FILE`

  Print the time taken to execute the program to the indicated file, an integral number of microseconds. Not accepted by server-mode executables.

`--tuning=FILE`

  Read size=value assignments from the given file.

## SEE ALSO

futhark-opencl, futhark-cuda, futhark-test