如何在 ARM 上建置¶
簡介¶
本文檔包含在 ARM 機器上建置/測試 LLVM 和 Clang 的相關資訊。
本文檔並非為協助您在其他架構(例如 x86_64 機器)上交叉編譯 LLVM/Clang 到 ARM 而設計。若要瞭解更多關於交叉編譯的資訊,請查看如何使用 Clang/LLVM 交叉編譯 Clang/LLVM。
在 ARM 上建置 LLVM/Clang 的注意事項¶
以下是在 ARM 上建置/測試 LLVM/Clang 的一些注意事項。請注意,ARM 涵蓋了各種不同的 CPU;這些建議主要基於 ARMv6 和 ARMv7 架構,可能不適用於較舊的晶片。
最受歡迎的 Linaro/Ubuntu ARM 開發板作業系統,例如 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 排程器設定為所有核心上的「效能 (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 隨身碟更容易發生故障,而 USB 隨身碟又比外接硬碟更容易發生故障(外接硬碟也快得多)。因此,至少您應該考慮購買一個快速的 USB 隨身碟。在具有快速 eMMC 的系統上,這也是一個不錯的選擇。
請確保您擁有一個像樣的電源供應器(價值數十美元),它可以提供至少 4 安培的電流,如果您在開發板上使用 USB 裝置,這一點尤其重要。外部供電的 USB/SATA 硬碟甚至比擁有良好的電源供應器更好。