如何在 ARM 上建置¶
簡介¶
本文檔包含在 ARM 機器上建置/測試 LLVM 和 Clang 的資訊。
本文檔*並非*專為協助您在其他架構(例如 x86_64 機器)上將 LLVM/Clang 交叉編譯至 ARM 而設計。如需瞭解更多關於交叉編譯的資訊,請查看如何使用 Clang/LLVM 交叉編譯 Clang/LLVM。
關於在 ARM 上建置 LLVM/Clang 的注意事項¶
以下是在 ARM 上建置/測試 LLVM/Clang 的一些注意事項。請注意,ARM 包含各種 CPU;此建議主要基於 ARMv6 和 ARMv7 架構,可能不適用於舊晶片。
ARM 開發板最受歡迎的 Linaro/Ubuntu 作業系統(例如 Pandaboard)已成為硬體浮點平台。使用 CMake 時,有許多選項可供選擇。自 3.8 版起,不建議使用 Autoconf。
建議以
Release
模式建置 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" Local (non-sudo) install path: "-DCMAKE_INSTALL_PREFIX=$HOME/llvm/install" CPU flags: "DCMAKE_C_FLAGS=-mcpu=cortex-a15" (same for CXX_FLAGS)
之後,只需輸入
make -jN
或ninja
即可建置所有項目。make -jN check-all
或ninja check-all
將執行所有編譯器測試。如需執行測試套件,請參閱LLVM 測試基礎架構指南。如果您在記憶體為 1G 或更少的 ARM 開發板上建置 LLVM/Clang,請使用
gold
而不是 GNUld
。無論如何,設定交換分割區可能也是個好主意。$ sudo ln -sf /usr/bin/ld /usr/bin/ld.gold
ARM 開發板可能不穩定,您可能會遇到核心消失、每次 big.LITTLE 切換時快取被清空,以及其他類似問題。為了減輕這種情況的影響,請使用以下小腳本將*所有*核心上的 Linux 排程器設定為「效能」:
# 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 隨身碟更容易出錯,而後者又比外接硬碟更容易出錯(後者也快得多)。因此,至少您應該考慮購買一個高速 USB 隨身碟。在具有高速 eMMC 的系統上,這也是一個不錯的選擇。
確保您有一個像樣的電源供應器(價值幾十美元),可以提供*至少* 4 安培的電流,如果您在電路板上使用 USB 設備,這一點尤其重要。外接供電的 USB/SATA 硬碟比使用好的電源供應器更好。