ARM でのビルド方法

はじめに

このドキュメントには、ARM マシン上で LLVM と Clang をビルド/テストする方法に関する情報が含まれています。

このドキュメントは、x86_64 マシンなど、別のアーキテクチャ上で ARM への LLVM/Clang のクロスコンパイルを支援することを目的としていません。クロスコンパイルの詳細については、Clang/LLVM を使用した Clang/LLVM のクロスコンパイル方法 を参照してください。

ARM での LLVM/Clang のビルドに関する注意事項

ARM で LLVM/Clang をビルド/テストする際の注意事項をいくつか示します。ARM は非常に多様な CPU を包含するため、このアドバイスは主に ARMv6 および ARMv7 アーキテクチャに基づいており、古いチップには適用できない場合があります。

  1. Pandaboard など、ARM ボードで最も人気のある Linaro/Ubuntu OS は、ハードフロートプラットフォームになっています。CMake を使用する場合、いくつかの選択肢があります。Autoconf の使用は 3.8 以降非推奨です。

    メモリ消費量が大幅に削減されるため、LLVM/Clang はReleaseモードでビルドすることをお勧めします。そうでなければ、メモリ不足のためにビルドプロセスが失敗する可能性が非常に高くなります。また、関連するバックエンド(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 テストインフラストラクチャガイド を参照してください。

  2. 1GB 以下のメモリを搭載した ARM ボードで LLVM/Clang をビルドする場合は、GNU ld ではなく gold を使用してください。いずれの場合も、スワップパーティションを設定することも良い考えです。

    $ sudo ln -sf /usr/bin/ld /usr/bin/ld.gold
    
  3. 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 が故障する可能性があります。ほとんどの最新のカーネルではこれは必要ありませんので、問題が発生した場合にのみ使用してください。

  4. SD カードでビルドを実行しても問題ありませんが、高品質の USB メモリスティックよりも失敗しやすい傾向があり、USB メモリスティックは外付けハードドライブよりも失敗しやすい傾向があります(外付けハードドライブの方がはるかに高速です)。そのため、少なくとも高速な USB メモリスティックを購入することを検討する必要があります。高速な eMMC を搭載したシステムでは、それも良い選択肢です。

  5. 適切な電源(数十ドル相当)を備え、少なくとも 4 アンペアを提供できることを確認してください。これは、ボードで USB デバイスを使用する場合に特に重要です。外付け電源付きの USB/SATA ハードドライブは、優れた電源を使用するよりもさらに優れています。