MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
インストール - LLVMのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
インストール - LLVM
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == LLVMプロジェクトは、モジュール化され再利用可能なコンパイラとツールチェイン技術の集合体である。<br> <br> イリノイ大学の研究プロジェクトとして始まり、任意のプログラミング言語の静的 / 動的コンパイルをサポートできる、SSAベースの近代的なコンパイル戦略を提供することを目的としていた。<br> その後、LLVMは多くのサブプロジェクトからなるアンブレラプロジェクトに成長して、その多くは、学術研究において広く利用されるだけでなく、様々な商用およびオープンソースプロジェクトによって稼働している。<br> <br> LLVMの主なサブプロジェクトを、以下に示す。<br> * LLVMコアライブラリ *: ソースコードやターゲットに依存しない最新のオプティマイザと、多くの一般的なCPUに対応したコード生成機能を提供する。 *: これらのライブラリは、LLVM中間表現(LLVM IR)として知られる指定されたコード表現を中心に構築されている。 *: LLVMコアライブラリは文書化されており、LLVMをオプティマイザやコード生成器として使用するための独自の言語の考案(または既存のコンパイラの移植)が容易である。 *: <br> * Clang *: LLVMネイティブのC / C++ / Objective-Cコンパイラにおいて、速いコンパイル、非常に有用なエラーと警告メッセージ、優れたソースレベルツールを構築するためのプラットフォームを提供することを目的としている。 *: Clang Static Analyzerとclang-tidyは、コードのバグを自動的に見つけるツールであり、C / C++コードを解析するライブラリとしてClangフロントエンドを使用して構築できる。 *: <br> * libc++およびlibc++ ABIプロジェクト *: C++11およびC++14の完全サポートを含むC++標準ライブラリの標準準拠かつ高性能な実装を提供する。 *: <br> * compiler-rtプロジェクト *: __fixunsdfdi等の低レベルコードジェネレータサポートルーチンや、ターゲットがコアIR操作を実装するための短いネイティブ命令列を持っていない場合に発生するその他のコールの高度に調整された実装を提供する。 *: また、AddressSanitizer、ThreadSanitizer、MemorySanitizer、DataFlowSanitizer等の動的テストツールのランタイムライブラリの実装を提供している。 *: <br> * MLIRサブプロジェクト *: 再利用可能で拡張性のあるコンパイラ基盤を構築するための新しいアプローチである。 *: MLIRは、ソフトウェアの断片化の対処、異種ハードウェアに対するコンパイルの改善、ドメイン固有のコンパイラを構築するコストを大幅に削減する等、既存のコンパイラの接続を支援することを目的としている。 *: <br> * OpenMPサブプロジェクト *: ClangのOpenMP実装で使用するためのOpenMPランタイムを提供する。 *: <br> * pollyプロジェクト *: 多面体モデルを用いて、自動並列化やベクトル化だけでなく、キャッシュローカリティ最適化のスイートも実装している。 *: <br> * libclcプロジェクト *: OpenCL標準ライブラリの実装を目的としている。 *: <br> * kleeプロジェクト *: 定理証明器を用いてプログラムの動的パスの評価を行い、バグの発見や関数の性質を証明する"記号的仮想機械"を実装している。 *: kleeの大きな特徴は、バグを検出した際にテストケースを生成することができる点である。 *: <br> * LLDプロジェクト *: リンカのことであり、システムリンカのドロップイン置き換えで、高速に動作する。 *: <br> * BOLTプロジェクト *: ポストリンクオプティマイザである。 *: サンプリングプロファイラで収集した実行プロファイルをもとに、ソフトウェアのコードレイアウトを最適化することにより、高速化を実現する。 <br><br> == LLVMのインストール == ==== パッケージ管理システムからインストール ==== sudo zypper install llvm llvm-gold llvm-polly clang lldb lld <br> ==== ソースコードからインストール ==== [https://github.com/llvm/llvm-project/releases LLVMのGithub]から、LLVMのソースコードをダウンロードする。<br> ダウンロードするファイルは、llvm-project-<バージョン>.src.tar.xzである。<br> <br> ダウンロードしたLLVMのソースコードを解凍する。<br> tar xf llvm-project-<バージョン>.src.tar.xz <br> LLVMのビルドディレクトリを作成する。<br> cd llvm-project mkdir build && cd build <br> LLVMをビルドおよびインストールする。<br> cmake -G "Unix Makefiles" \ -DCMAKE_C_COMPILER=<GCC 8以降のgccコンパイラのパス> -DCMAKE_CXX_COMPILER=<GCC 8以降のg++コンパイラのパス> \ -DLLVM_TARGETS_TO_BUILD="X86;AArch64" \ # x86, x86-64, AArch64向けのLLVMをビルドする場合(デフォルトは全てのアーキテクチャ) -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=<LLVMのインストールディレクトリ> \ -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;flang;libclc;lld;lldb;mlir;openmp;polly" \ -DLLVM_ENABLE_RUNTIMES="compiler-rt;libc;libcxx;libcxxabi;libunwind;openmp" \ ../llvm make -j $(nproc) make install # または cmake -G Ninja \ -DCMAKE_C_COMPILER=<GCC 8以降のgccコンパイラのパス> -DCMAKE_CXX_COMPILER=<GCC 8以降のg++コンパイラのパス> \ -DLLVM_TARGETS_TO_BUILD="X86;AArch64" \ # x86, x86-64, AArch64向けのLLVMをビルドする場合(デフォルトは全てのアーキテクチャ) -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=<LLVMのインストールディレクトリ> \ -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;flang;libclc;lld;lldb;mlir;openmp;polly" \ -DLLVM_ENABLE_RUNTIMES="compiler-rt;libc;libcxx;libcxxabi;libunwind;openmp" \ ../llvm ninja -j $(nproc) ninja install <br> ビルド向けオプションは、以下の通りである。<br> * PYTHON_EXECUTABLE *: Pythonへのパスを渡すことで、CMakeに特定のPythonのバージョンを使用する。 *: デフォルトでは環境変数PATHにあるPythonが使用される。 *: <br> * LLVM_TARGETS_TO_BUILD *: ビルドするターゲットを選択する。 *: これは、LLVMにどのターゲットをリンクするかを制御するセミコロンで区切られたリストである。 *: デフォルトは、LLVM_ALL_TARGETSとして定義されている。 *: デフォルトでは、以下のターゲットが含まれる。 *: AArch64, AMDGPU, ARM, AVR, BPF, Hexagon, Lanai, Mips, MSP430, NVPTX, PowerPC, RISCV, Sparc, SystemZ, WebAssembly, X86, XCore *: <br> * LLVM_ENABLE_DOXYGEN *: ソースコードからdoxygenベースのドキュメントをビルドする。 *: これは多くの出力を生成するため、デフォルトでは無効になっている。 *: <br> * LLVM_ENABLE_PROJECTS *: 他のLLVMサブプロジェクトの内、どのプロジェクトを追加でビルドするかをセミコロンで区切ったリストで指定する。 *: デフォルトでは空のリストである。 *: ビルドできるプロジェクトは、以下の通りである。 *: clang、clang-tools-extra、compiler-rt、cross-project-tests、flang、libc、libclc、libcxx、libcxxabi、libunwind、lld、lldb、mlir、openmp、polly、pstl *: <br> * LLVM_ENABLE_SPHINX *: Sphinxベースのドキュメントをビルドする。 *: これは多くの出力を生成するため、デフォルトでは無効になっている。 *: Sphinx 1.5以降を推奨する。 *: <br> * LLVM_BUILD_LLVM_DYLIB *: libLLVM.soを生成する。 *: このライブラリには、LLVMコンポーネントのデフォルトセットが含まれており、LLVM_DYLIB_COMPONENTSでオーバーライドすることができる。 *: デフォルトでは、ほとんどのLLVMが含まれており、tools/llvm-shlib/CMakelists.txtで定義されている。 *: このオプションはWindowsでは使用できない。 *: <br> * LLVM_OPTIMIZED_TABLEGEN *: リリーステーブル生成器を構築する。 <br> LLVMのインストール完了後、~/.profileファイル等に環境変数を設定する。<br> export PATH="/<LLVMのインストールディレクトリ>/bin:$PATH" export LLVM_INSTALL_DIR="<LLVMのインストールディレクトリ>" export LDFLAGS="-L/<LLVMのインストールディレクトリ>/lib" # 不要の可能性あり export CPPFLAGS="-I/<LLVMのインストールディレクトリ>/include" # 不要の可能性あり <br><br> == LLVMのクロスコンパイル == LLVMの実行ファイルやライブラリにおいて、ビルドされるプラットフォームとは異なるプラットフォームでホストするためにインストールすることができる。<br> クロスコンパイル向けのビルドファイルを生成するために、<code>-DCMAKE_TOOLCHAIN_FILE</code>オプションを、LLVMのインストール時に使用するコンパイラフラグや変数を定義することができる。<br> <br> ==== AArch64 ==== 以下の例では、AArch64をターゲットとしたLLVMをクロスビルドおよびインストールしている。<br> mkdir build && cd build cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=<LLVMクロスツールチェーンのインストールディレクトリ> \ -DLLVM_NATIVE_TOOL_DIR=/<ホスト向けLLVMのインストールディレクトリ>//bin \ -DCMAKE_TOOLCHAIN_FILE=<CMakeツールチェーンファイルのパス> \ # CMakeツールチェーンファイルを使用する場合 -DLLVM_BUILD_RUNTIME=Off \ -DLLVM_INCLUDE_TESTS=Off \ -DLLVM_INCLUDE_EXAMPLES=Off \ -DLLVM_ENABLE_BACKTRACES=Off \ -DCMAKE_CROSSCOMPILING=1 \ -DLLVM_HOST_ARCH=X86 \ -DLLVM_HOST_TRIPLE=X86 \ -DLLVM_TARGET_ARCH="AArch64" \ -DLLVM_TARGETS_TO_BUILD="AArch64" \ -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-unknown-linux-gnu \ -DCMAKE_CXX_FLAGS='-march=armv8-a -mtune=cortex-a53' \ -DLLVM_TABLEGEN=/<ホスト向けLLVMのインストールディレクトリ>/bin/llvm-tblgen \ -DCLANG_TABLEGEN=/<ホスト向けLLVMのインストールディレクトリ>/bin/clang-tblgen \ -DCMAKE_LIBRARY_ARCHITECTURE=/<ターゲットのシステムルートのパス>/lib \ -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;lld;lldb" \ -DLLVM_INSTALL_TOOLCHAIN_ONLY=On \ -DLLDB_ENABLE_PYTHON=0 \ -DLLDB_ENABLE_LIBEDIT=0 \ -DLLDB_ENABLE_CURSES=0 \ -DLLVM_BUILD_LLVM_DYLIB=On \ -DLLVM_LINK_LLVM_DYLIB=On \ ../llvm <br> ==== iOS ==== 以下の例では、iOSをターゲットとしたLLVMをクロスビルドおよびインストールしている。<br> mkdir build && cd build cmake -G Ninja "Unix Makefiles" \ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<LLVMのインストールディレクトリ> \ -DCMAKE_OSX_ARCHITECTURES="armv7;armv7s;arm64" \ -DCMAKE_TOOLCHAIN_FILE=<PATH_TO_LLVM>/cmake/platforms/iOS.cmake \ -DLLVM_BUILD_RUNTIME=Off -DLLVM_INCLUDE_TESTS=Off \ -DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_ENABLE_BACKTRACES=Off \ ../llvm ninja -j $(nproc) ninja install <br><br> __FORCETOC__ [[カテゴリ:CentOS]][[カテゴリ:SUSE]]
インストール - LLVM
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse