如何在ARM平台上构建¶
简介¶
本文档包含在ARM机器上构建/测试LLVM和Clang的信息。
这份文档 不 是帮助您了解在其他系统上(例如x86_64的机器)交叉编译LLVM / Clang到ARM上的。要了解更多关于交叉编译,请检查 How To Cross-Compile Clang/LLVM using Clang/LLVM 。
在ARM上构建LLVM / Clang的注意事项¶
这里是在ARM上构建/测试LLVM / Clang的一些注意事项。需要注意的是ARM涵盖了各种各样的CPU;目前这个文档主要是基于ARMv6和ARMv7体系结构,可能不适用某些较旧的芯片。
最流行的Linaro/Ubuntu的操作系统的ARM板,例如,Pandaboard,已经成为难以替换的平台。使用CMake您将有许多选择。而Autoconf构建系统已在LLVM3.8被废弃。
用
Relese
模式构建LLVM / Clang将是首选,因为它消耗更少的内存。否则,构建过程很可能会由于由于内存不足而失败。当然,由于只构建较少的后端(ARM和AArch64),构建过程也快了很多。不支持其他后端是因为,大多数人不太可能会使用ARM板交叉编译到其他的系统架构上。如果你运行Compiler-RT的测试(包括x86后端测试),其中某些测试将会失败。cmake $LLVM_SRC_DIR -DCMAKE_BUILD_TYPE=Release \ -DLLVM_TARGETS_TO_BUILD="ARM;X86;AArch64"
您可以使用其他选项是:
Use Ninja instead of Make: "-G Ninja" Build with assertions on: "-DLLVM_ENABLE_ASSERTIONS=True" Force Python2: "-DPYTHON_EXECUTABLE=/usr/bin/python2" Local (non-sudo) install path: "-DCMAKE_INSTALL_PREFIX=$HOME/llvm/instal" CPU flags: "DCMAKE_C_FLAGS=-mcpu=cortex-a15" (same for CXX_FLAGS)
之后,只需输入
make -jN
orninja
将会开始构建。make -jN check-all
orninja check-all
将运行所有的编译器测试。对于运行测试套件,请参考 LLVM Testing Infrastructure Guide 。如果您是在内存少于1G的ARM板上构建LLVM / Clang的,请使用
gold
而不是GNUld
。大多数情况下,建立一个交换分区将是一个不错的主意。$ sudo ln -sf /usr/bin/ld /usr/bin/ld.gold
ARM开发板可能是不稳定的,您可能会遇到内核消失,big.LITTLE切换时刷新缓存,和其它类似的问题。为了帮助缓解这样的问题,可以对**全部**使用该脚本的内核设置Linux scheduler到 “performance”。
# The code below requires the package 'cpufrequtils' to be installed. for ((cpu=0; cpu<`grep -c proc /proc/cpuinfo`; cpu++)); do sudo cpufreq-set -c $cpu -g performance done
记得把它们关掉,否则构建结束后,长时间运行可能会烧毁这款CPU。大多数现代的内核并不需要这样做,所以只有当你遇到类似问题时再进行这样的设置。
在SD卡上运行构建是没问题的,但相比质量好的USB记忆棒,SD卡更容易出现错误,甚至比外部硬盘驱动器更容易出错(这些也更快)。所以,至少,你应该考虑买一个快速的USB记忆棒。在一个快速的eMMC系统,也是一个很好的选择。
请确保你有一个高质量的电源(几十美元的)可以提供 至少 4安培,这一点在你还需要同时使用其他USB设备(如移动硬盘)时显得尤其重要。当然,使用外部供电的USB / SATA硬盘,这可能比有一个好的电源更加有效。