Manual LLVM build
You need to build LLVM manually in the following cases |
---|
You would like to use it for the ESP8266 or ESP32 chips |
You are using Windows. |
Your Linux distribution (if you use Linux) does not ship the right LLVM version. |
Build dependencies
Depending on which OS you use the command to install the dependencies needed to build LLVM will differ. Skip over to the command for your Operating System (OS) in this section (OS names are bolded):
Linux Debian and Ubuntu users may install all required tools this way:
sudo apt-get install build-essential git cmake ninja-build
Linux Fedora users may install all required tools with:
sudo dnf groupinstall "Development Tools"
sudo dnf install cmake ninja-build
MacOS users may install these tools using Homebrew:
brew install cmake ninja
Windows users may install build dependencies using Chocolatey. Install Chocolatey first, then run the following in a command prompt or PowerShell with administrative privileges:
choco install --confirm git golang mingw make cmake ninja python
Windows users should also use Git Bash (installed above) to run all the build commands like make
. The TinyGo build system expects a Unix-like environment that is not normally provided by Windows but is included already in Git Bash.
Choco doesn’t seem to add CMake automatically to the $PATH
variable. You can do this manually if needed, in Git bash:
export PATH="$PATH:/c/Program Files/CMake/bin"
Building LLVM
The following instructions are common to all operating systems.
Background: LLVM is a library and collection of tools for building compilers. It is the base of many newer compilers, like Clang, Swift, and the Rust compiler so they can all build on the same high-quality base. Similarly, TinyGo uses LLVM for all its low-level optimization and machine code generation so that it can produce code that’s roughly as small and efficient as all these other modern compilers.
We build LLVM from inside the TinyGo repository we cloned in the previous step. The following command when run inside the TinyGo repo will take care of first downloading the LLVM source code to later build it in the next step. It places the source code in llvm-project/
and the build output in llvm-build/
. It only needs to be done once until the next LLVM release (every half year).
Note that the build step may take some time- feel free to grab a drink meanwhile. Warnings emitted through the compilation in this part are normal as of LLVM 17.
make llvm-source llvm-build
When building on Windows, add CCACHE=OFF.
make llvm-source llvm-build CCACHE=OFF
Building TinyGo
Once this is finished, you can build TinyGo against this manually built LLVM:
make
This results in a tinygo
binary in the build
directory:
$ ./build/tinygo version
tinygo version 0.35.0-dev-d4189fec linux/amd64 (using go version go1.23 and LLVM version 18.1.2)
You have successfully built TinyGo from source. Congratulations! What’s left now is to complete the additional requirements
Adding tinygo to your path
Linux users may choose to run TinyGo from any directory you may want to move the built binary to a location on your path
or add the ./build
directory to your path. The following shell command moves the TinyGo binary to /user/bin
so that any user can run TinyGo. You may need root privileges to complete this step.
mv ./build/tinygo /usr/bin/
If you ran the above command, uninstalling TinyGo is as easy as running rm /usr/bin/tinygo
.
If you’d prefer a user-based install you can move TinyGo to your $HOME/go/bin
directory, where the Go compiler installs binaries by default. The directory should be added to your PATH if it hasn’t already been added for this to work.