forc-build

Compile the current or target project.

The output produced will depend on the project's program type.

  • script, predicate and contract projects will produce their bytecode in binary format <project-name>.bin.

  • script projects will also produce a file containing the hash of the bytecode binary <project-name>-bin-hash (using fuel_cypto::Hasher).

  • predicate projects will also produce a file containing the root hash of the bytecode binary <project-name>-bin-root (using fuel_tx::Contract::root_from_code).

  • contract and library projects will also produce the public ABI in JSON format <project-name>-abi.json.

USAGE:

forc build [OPTIONS]

OPTIONS:

--ast

Print the generated Sway AST (Abstract Syntax Tree)

--build-profile <BUILD_PROFILE>

Name of the build profile to use.

If unspecified, forc will use debug build profile.

--build-target <BUILD_TARGET>

Build target to use for code generation

[default: fuel] [possible values: fuel, evm, miden-vm]

--dca-graph

Print the computed Sway DCA graph

--error-on-warnings

Treat warnings as errors

--finalized-asm

Print the finalized ASM.

This is the state of the ASM with registers allocated and optimisations applied.

-g, --output-debug <DEBUG_FILE>

If set, outputs source file mapping in JSON format

-h, --help

Print help information

--intermediate-asm

Print the generated ASM.

This is the state of the ASM prior to performing register allocation and other ASM optimisations.

--ir

Print the generated Sway IR (Intermediate Representation)

--json-abi

By default the JSON for ABIs is formatted for human readability. By using this option JSON output will be "minified", i.e. all on one line without whitespace

--json-abi-with-callpaths

Outputs json abi with callpaths instead of names for struct and enums

--json-storage-slots

By default the JSON for initial storage slots is formatted for human readability. By using this option JSON output will be "minified", i.e. all on one line without whitespace

-L, --log-level <LOG_LEVEL>

Set the log level

--locked

Requires that the Forc.lock file is up-to-date. If the lock file is missing, or it needs to be updated, Forc will exit with an error

-o, --output-bin <BIN_FILE>

If set, outputs a binary file representing the script bytes

--offline

Offline mode, prevents Forc from using the network when managing dependencies. Meaning it will only try to use previously downloaded dependencies

--output-directory <OUTPUT_DIRECTORY>

The directory in which the sway compiler output artifacts are placed.

By default, this is <project-root>/out.

-p, --path <PATH>

Path to the project, if not specified, current working directory will be used

--release

Use release build plan. If a custom release plan is not specified, it is implicitly added to the manifest file.

If --build-profile is also provided, forc omits this flag and uses provided build-profile.

-s, --silent

Silence all output

-t, --terse

Terse mode. Limited warning and error output

--tests

Also build all tests within the project

--time-phases

Output the time elapsed over each part of the compilation process

-v, --verbose

Use verbose output

EXAMPLE

Compile the sway files of the current project.

$ forc build
Compiled script "my-fuel-project".
Bytecode size is 28 bytes.

The output produced will depend on the project's program type. Building script, predicate and contract projects will produce their bytecode in binary format <project-name>.bin. Building contracts and libraries will also produce the public ABI in JSON format <project-name>-abi.json.

By default, these artifacts are placed in the out/ directory.

If a Forc.lock file did not yet exist, it will be created in order to pin each of the dependencies listed in Forc.toml to a specific commit or version.