# How to Build

AssemblyLift applications are built using the `cast` command:

```
$ asml cast
```

This command will compile each function in each service using the language's build tool, and then compile the resulting WASM to backend-native binary.

In addition, `asml` will invoke [Terraform](https://docs.assemblylift.akkoro.io/resources/the-lexicon#terraform) & generate an infrastructure plan for your project. All build artifacts are serialized to the `net` directory.

## Configuring Remote State

AssemblyLift allows you to configure the S3/DynamoDB [remote state store](https://www.terraform.io/docs/language/state/remote.html) in the AssemblyLift manifest.

{% code title="assemblylift.toml" %}

```
[project]
name = "my-project"

# The terraform table is optional
# By default Terraform will write state to a local file
[terraform]
state_bucket_name = "bucket"
lock_table_name = "table"
```

{% endcode %}

This configuration requires that the bucket & table resources referenced by `state_bucket_name` and `lock_table_name` already exist and are correctly configured.

## Using an AWS Credentials Profile

If you are deploying to multiple AWS accounts, the `asml` CLI will respect the setting of the `AWS_PROFILE` environment variable. For example:

```
$ export AWS_PROFILE=my-profile-name
$ asml cast
$ asml bind
```
