docs/Building-Dart-SDK-for-ARM-or-RISC-V.md
The Dart VM runs on a variety of ARM processors on Linux and Android. This document explains how to build the Dart VM and SDK to target these platforms.
Note: You must follow the steps in Building.md to set up the environment and properly fetch the source code. Cloning the repository or obtaining the source code through other means will not result in a successful build.
The build scripts download a Clang toolchain that can target X64, ARM, ARM64 or RISCV64 and run on an X64 or ARM64 host. For these cases, you do not need to install a cross-compiler yourself. For other cases, like building on a RISCV64 host or targeting RISCV32, you will need to manually install a toolchain.
If you are running Debian/Ubuntu, you can obtain a cross-compiler by doing the following:
$ sudo apt-get install g++-x86-64-linux-gnu # To target x64
$ sudo apt-get install g++-arm-linux-gnueabihf # To target arm
$ sudo apt-get install g++-aarch64-linux-gnu # To target arm64
$ sudo apt-get install g++-riscv64-linux-gnu # To target riscv64
Follow instructions under "One-time Setup" under Android
With the default Debian/Ubuntu toolchains, simply do:
$ ./tools/build.py --no-clang --mode release --arch arm create_sdk
$ ./tools/build.py --no-clang --mode release --arch arm64 create_sdk
$ ./tools/build.py --no-clang --mode release --arch riscv64 create_sdk
You can also produce only a Dart VM runtime, no SDK, by replacing create_sdk with runtime. This process involves also building a VM that targets x64, which is used to generate a few parts of the SDK.
You can use a different toolchain using the -t switch. For example, if the path to your gcc is /path/to/toolchain/prefix-gcc, then you'd invoke the build script with:
$ ./tools/build.py --no-clang -m release -a arm -t arm=/path/to/toolchain/prefix create_sdk
$ ./tools/build.py --no-clang -m release -a arm64 -t arm64=/path/to/toolchain/prefix create_sdk
$ ./tools/build.py --no-clang -m release -a riscv32 -t riscv32=/path/to/toolchain/prefix create_sdk
$ ./tools/build.py --no-clang -m release -a riscv64 -t riscv64=/path/to/toolchain/prefix create_sdk
The standalone Dart VM can also target Android.
$ ./tools/build.py --mode=release --arch=arm --os=android create_sdk
$ ./tools/build.py --mode=release --arch=arm64 --os=android create_sdk
$ ./tools/build.py --mode=release --arch=riscv64 --os=android create_sdk
You can create Debian packages targeting ARM or RISC-V as follows:
$ ./tools/build.py --mode=release --arch=arm,arm64,riscv64 debian_package
In addition to cross-compiling the Dart SDK, tests can be run even without the corresponding hardware by using QEMU.
$ sudo apt install qemu-user libc6-armhf-cross libc6-arm64-cross libc6-riscv64-cross
$ ./tools/build.py --mode release --arch arm,arm64,riscv64 runtime
$ ./tools/test.py --mode release --arch arm,arm64,riscv64 --use-qemu lib