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
. forc build [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, midenvm]
--dca-graph
<DCA_GRAPH>
Print the computed Sway DCA graph. DCA graph is printed to the specified path. If specified '' graph is printed to stdout
--dca-graph-url-format
<DCA_GRAPH_URL_FORMAT>
Specifies the url format to be used in the generated dot file. Variables {path}, {line} {col} can be used in the provided format. An example for vscode would be: "vscode://file/{path}:{line}:{col}"
--error-on-warnings
Treat warnings as errors
--experimental-new-encoding
Experimental flag for the "new encoding" feature
--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.
--ipfs-node
<IPFS_NODE>
The IPFS Node to use for fetching IPFS sources.
Possible values: PUBLIC, LOCAL, <GATEWAY_URL>
--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
--metrics-outfile
<METRICS_OUTFILE>
Output compilation metrics into file
-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.
--reverse-order
Output build errors and warnings in reverse order
-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
-V
, --version
Print version information
EXAMPLES: #Compile the current project forc build
#Compile the current project with a different path forc build --path ../tests/
#Compile the current project without updating dependencies forc build --locked
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.