11 KiB
Building SurrealDB
This file contains a set of instructions for building SurrealDB on a number of different platforms. Currently, SurrealDB is built for release automatically in a Github Actions continuous-integration environment, on macOS, Ubuntu, and Windows.
While installing rustup
, use the default (stable
) release channel of Rust for best results. If you already have a different release channel, you can run rustup override set stable
from within the top level directory of this repository.
Building on macOS (arm64)
Click to show details
✅ Compile for apple-darwin
(macOS)
# Setup
brew install cmake
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
# Compile for x86_64-apple-darwin
cargo build --release --locked --target x86_64-apple-darwin
# Compile for aarch64-apple-darwin
cargo build --release --locked --target aarch64-apple-darwin
✅ Compile for aarch64-unknown-linux-gnu
(Linux)
# Run Docker
docker run -it --platform linux/arm64 -v $PWD:/code ubuntu
# Setup
apt-get -y update
apt-get -y install \
curl \
llvm \
cmake \
binutils \
clang-11 \
qemu-user \
musl-tools \
libssl-dev \
pkg-config \
build-essential
# Install rustlang and cargo
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# Add extra targets for rust
rustup target add aarch64-unknown-linux-gnu
# Compile for aarch64-unknown-linux-gnu
cargo build --release --locked --target aarch64-unknown-linux-gnu
✅ Compile for x86_64-unknown-linux-gnu
(Linux)
# Run Docker
docker run -it --platform linux/amd64 -v $PWD:/code ubuntu
# Setup
apt-get -y update
apt-get -y install \
curl \
llvm \
cmake \
binutils \
clang-11 \
qemu-user \
musl-tools \
libssl-dev \
pkg-config \
build-essential
# Install rustlang and cargo
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# Add extra targets for rust
rustup target add x86_64-unknown-linux-gnu
# Compile for x86_64-unknown-linux-gnu
cargo build --release --locked --target x86_64-unknown-linux-gnu
❌ Cross-compile for x86_64-pc-windows-gnu
(Windows)
This does not yet build successfully
# Setup
brew install cmake mingw-w64
rustup target add x86_64-pc-windows-gnu
# Compile for x86_64-w64-mingw32-gcc
export CC_x86_64_pc_windows_gnu=x86_64-w64-mingw32-gcc
export CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER=x86_64-w64-mingw32-gcc
cargo build --release --locked --target x86_64-pc-windows-gnu
❌ Cross-compile for x86_64-unknown-linux-musl
(Linux Musl)
This does not yet build successfully
docker pull clux/muslrust:stable
docker run --pull --rm -v $PWD:/volume -t clux/muslrust:stable cargo build --release --target x86_64-unknown-linux-musl
Building on Ubuntu 20.04 (arm64)
Click to show details
✅ Compile for aarch64-unknown-linux-gnu
(Linux)
# Setup
apt-get -y update
apt-get -y install \
curl \
llvm \
cmake \
binutils \
clang-11 \
qemu-user \
musl-tools \
libssl-dev \
pkg-config \
build-essential
# Install rustlang and cargo
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# Add extra targets for rust
rustup target add aarch64-unknown-linux-gnu
# Compile for aarch64-unknown-linux-gnu
cargo build --release --locked --target aarch64-unknown-linux-gnu
✅ Compile for x86_64-unknown-linux-gnu
(Linux)
# Setup
apt-get -y update
apt-get -y install \
curl \
llvm \
cmake \
binutils \
clang-11 \
qemu-user \
musl-tools \
libssl-dev \
pkg-config \
build-essential \
libc6-dev-amd64-cross \
crossbuild-essential-amd64
# Install rustlang and cargo
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# Add extra targets for rust
rustup target add x86_64-unknown-linux-gnu
# Compile for x86_64-unknown-linux-gnu
cargo build --release --locked --target x86_64-unknown-linux-gnu
❌ Cross-compile for x86_64-pc-windows-gnu
(Windows)
This does not yet build successfully
# Setup
sudo apt-get -y update
sudo apt-get -y install llvm cmake clang-11 binutils mingw-w64
rustup target add x86_64-pc-windows-gnu
# Compile for x86_64-pc-windows-gnu
export CC_x86_64_pc_windows_gnu=x86_64-w64-mingw32-gcc
export CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER=x86_64-w64-mingw32-gcc
cargo build --release --locked --target x86_64-pc-windows-gnu
❌ Cross-compile for armv7-unknown-linux-musleabihf
(Raspberry Pi)
This does not yet build successfully
# Setup
apt-get -y update
apt-get -y install \
curl \
llvm \
cmake \
binutils \
clang-11 \
qemu-user \
musl-tools \
libssl-dev \
pkg-config \
build-essential \
g++-arm-linux-gnueabihf \
gcc-arm-linux-gnueabihf
# Install rustlang and cargo
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# Add extra targets for rust
rustup target add armv7-unknown-linux-musleabihf
# Compile for x86_64-unknown-linux-gnu
cargo build --release --locked --target armv7-unknown-linux-musleabihf
❌ Cross-compile for x86_64-unknown-linux-musl
(Linux Musl)
This does not yet build successfully
docker pull clux/muslrust:stable
docker run --pull --rm -v $PWD:/volume -t clux/muslrust:stable cargo build --release --target x86_64-unknown-linux-musl
Building on Ubuntu 20.04 (amd64)
Click to show details
✅ Compile for x86_64-unknown-linux-gnu
(Linux)
# Setup
apt-get -y update
apt-get -y install \
curl \
llvm \
cmake \
binutils \
clang-11 \
qemu-user \
musl-tools \
libssl-dev \
pkg-config \
build-essential
# Install rustlang and cargo
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# Add extra targets for rust
rustup target add x86_64-unknown-linux-gnu
# Compile for x86_64-unknown-linux-gnu
cargo build --release --locked --target x86_64-unknown-linux-gnu
✅ Compile for aarch64-unknown-linux-gnu
(Linux)
# Setup
apt-get -y update
apt-get -y install \
curl \
llvm \
cmake \
binutils \
clang-11 \
qemu-user \
musl-tools \
libssl-dev \
pkg-config \
build-essential \
libc6-dev-arm64-cross \
crossbuild-essential-arm64
# Install rustlang and cargo
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# Add extra targets for rust
rustup target add aarch64-unknown-linux-gnu
# Compile for x86_64-unknown-linux-gnu
cargo build --release --locked --target aarch64-unknown-linux-gnu
❌ Cross-compile for x86_64-pc-windows-gnu
(Windows)
This does not yet build successfully
# Setup
sudo apt-get -y update
sudo apt-get -y install llvm cmake clang-11 binutils mingw-w64
rustup target add x86_64-pc-windows-gnu
# Compile for x86_64-pc-windows-gnu
export CC_x86_64_pc_windows_gnu=x86_64-w64-mingw32-gcc
export CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER=x86_64-w64-mingw32-gcc
cargo build --release --locked --target x86_64-pc-windows-gnu
❌ Cross-compile for armv7-unknown-linux-musleabihf
(Raspberry Pi)
This does not yet build successfully
# Setup
apt-get -y update
apt-get -y install \
curl \
llvm \
cmake \
binutils \
clang-11 \
qemu-user \
musl-tools \
libssl-dev \
pkg-config \
build-essential \
g++-arm-linux-gnueabihf \
gcc-arm-linux-gnueabihf
# Install rustlang and cargo
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# Add extra targets for rust
rustup target add armv7-unknown-linux-musleabihf
# Compile for x86_64-unknown-linux-gnu
cargo build --release --locked --target armv7-unknown-linux-musleabihf
❌ Cross-compile for x86_64-unknown-linux-musl
(Linux Musl)
This does not yet build successfully
docker pull clux/muslrust:stable
docker run --pull --rm -v $PWD:/volume -t clux/muslrust:stable cargo build --release --target x86_64-unknown-linux-musl
Building on Windows-amd64 (Windows OS)
Click to show details
✅ Compile for windows-amd64
Compiling SurrealDB with windows OS requires Administrator priveledge!
⚠Tested on Windows 11 build 22H2(22621.963)
-
Install LLVM 👉 Download Here look for something like
LLVM-X.Y.Z-win64.exe
-
Install
MYSYS2
👉 Follow instructions on their website -
When
MYSYS2
is installed it opens a shell. Install GCC via that shellpacman -S mingw-w64-i686-gcc pacman -S mingw-w64-x86_64-gcc
-
Install
patch
GNU UtilGo to GNUWin32 page for patch and extract the patch binaries onto your drive.
e.g. "C:\patch"
For some bizzare reasons, patch.exe needs elevated priviledge to be invoked during compilation
-
Add
gcc
andpatch
binary path to environmentSetting the environment variables for the entire system requires an elevated ⚠ shell.
[System.Environment]::SetEnvironmentVariable( "PATH", [System.Environment]::GetEnvironmentVariable("PATH", "Machine") + ";" + "C:\msys64\mingw64\bin;" + "C:\msys64\mingw32\bin;" + "C:\patch\bin;", "Machine" )
Or do it manually via
sysdm.cpl
. -
Run cargo in an elevated ⚠ shell
Running
cargo build
in an elevated shell will now build theSurrealDB
in Windows OS.
Building using the Nix package manager
SurrealDB can be built using the Nix package manager.