2023-04-10 17:57:24 -05:00
# Building from Source
2023-09-21 04:53:02 -05:00
If you'd like to build OpenTofu from source, you can do so using the Go build toolchain and the options specified in this document.
2023-04-10 17:57:24 -05:00
## Prerequisites
2023-09-07 06:32:52 -05:00
1. Ensure you've installed the Go language version specified in [`.go-version` ](.go-version ).
2023-04-10 17:57:24 -05:00
2. Clone this repository to a location of your choice.
2023-09-21 04:53:02 -05:00
## OpenTofu Build Options
2023-04-10 17:57:24 -05:00
2023-09-21 04:53:02 -05:00
OpenTofu accepts certain options passed using `ldflags` at build time which control the behavior of the resulting binary.
2023-04-10 17:57:24 -05:00
### Dev Version Reporting
2023-09-21 04:53:02 -05:00
OpenTofu will include a `-dev` flag when reporting its own version (ex: 1.5.0-dev) unless `version.dev` is set to `no` :
2023-04-10 17:57:24 -05:00
```
2023-09-27 07:37:55 -05:00
go build -ldflags "-w -s -X 'github.com/opentofu/opentofu/version.dev=no'" -o bin/ ./cmd/tofu
2023-04-10 17:57:24 -05:00
```
### Experimental Features
2023-09-21 04:53:02 -05:00
Experimental features of OpenTofu will be disabled unless `main.experimentsAllowed` is set to `yes` :
2023-04-10 17:57:24 -05:00
```
2023-09-27 07:37:55 -05:00
go build -ldflags "-w -s -X 'main.experimentsAllowed=yes'" -o bin/ ./cmd/tofu
2023-04-10 17:57:24 -05:00
```
## Go Options
2023-09-21 04:53:02 -05:00
For the most part, the OpenTofu release process relies on the Go toolchain defaults for the target operating system and processor architecture.
2023-07-17 13:56:13 -05:00
### `CGO_ENABLED`
2023-09-21 04:53:02 -05:00
One exception is the `CGO_ENABLED` option, which is set explicitly when building OpenTofu binaries. For most platforms, we build with `CGO_ENABLED=0` in order to produce a statically linked binary. For MacOS/Darwin operating systems, we build with `CGO_ENABLED=1` to avoid a platform-specific issue with DNS resolution.
2023-04-10 17:57:24 -05:00