LLVM

2023年12月06日

従来は Linux や Apple などのリッチ OS のアプリ向けというイメージだった LLVM の高速リンカ lld ですが、LLVM 17 で GNU ld との互換性がほぼ完璧になり、AArch64/ARM/RISC-V のベアメタルツールチェーンでも GNU ld を置き換えできることが確認できました。そこで弊社の SOLID もリンクの高速化や Clang での LTO などを期待して lld 対応を進めているのですが、その時に 1 点だけ非常にわかりにくい非互換性に悩まされたのでメモしておきます。

続きを読む

2018年11月07日

LLVM/Clang/compiler-rt は 3 つがセットになって初めて動作します。LLVM/Clang はマルチアーキテクチャ(例:ARM/AArch64/X86)、マルチターゲット(例:arm-eabi、arm-linux-gnueabi、arm-linux-gnueabihf、aarch64-elf、aarch64-linux-gnu)のコード生成が可能なのですが、ライブラリの compiler-rt だけは、3 つを 1 度にビルドしようとした場合に、1 ターゲットぶんしかビルドできないという問題があります。

そこでこの記事では、先に Ubuntu Linux 上で AArch64 ターゲットのクロス LLVM/Clang コンパイラをビルドした後、それを使用して AArch64 Linux ターゲットの compiler-rt をビルドする手順を説明します。他のターゲットも同様の手順で可能と思われます。

続きを読む

2016年02月18日

MSYS2 を試してみた所、LLVM/Clang が比較的簡単にビルドできましたので紹介します。以前紹介した、VisualStudio でビルドする場合と比較すると、
  1. LLVM/Clang のビルドに必要な、GCC、CMake、Python、GNU Make などの各種 GNU ツールが、Linux の APT や Yum のようなパッケージマネージャ(MSYS2 は Arch Linux の pacman を採用)でインストールできるので、環境構築や管理が楽。
  2. VisualStudio は比較的大きく、有償(無料の Express エディションもありますが、常用には登録が必要)のソフトウェアなので、比較的コンパクトで自由なソフトウェアである MSYS2 の方が色々楽。
  3. GNU 環境のコマンドライン操作に慣れている人には、MSYS2 の方が楽。
などの利点が考えられます。
続きを読む

2015年10月06日

Design Solution Forum 2015 で、LLVM と GCC の違いや、弊社の(現在開発中の)ARM64 用 PARTNER デバッガのアセンブラ/逆アセンブラ表示に LLVM を使用した事例などを紹介(35 分)してきました。
続きを読む

2015年07月23日

過去に何回か似たような記事を書いてますが、それのアップデートです。

内容的には、以下とほとんど同じ内容です。このツールの組み合わせでビルドが成功したというメモです。

LLVM 3.5(git リポジトリ)をMS VC++でビルド (2014/3/6)

(2015/9/4 追記: 下記手順で Express 2015 for Windows Desktop と LLVM 3.7.0 でもビルドと動作を確認しました。リンク先、中央の Community 2015 ではなく、下の方の Express for Windows Desktop からダウンロードしてください。)

続きを読む

2014年03月06日

最新の LLVM 3.5(2014/3/6 の git リポジトリ)を MS Windows 環境でビルドしてみました。

続きを読む

2010年05月24日

ここ数週間の間に、LLVM プロジェクトに大きな動きがありました。

独自の C++ 標準ライブラリ (C++0x 規格も含む 85 % を完了とのこと) をリリースし、Boost C++ ライブラリのビルドに成功したそうです。

続きを読む

2010年04月08日

私が LLVM を調査しているのは、Multi-Stage Optimization や直接 LLVM を iPhone のように組み込みソフトウェア開発で利用したいというよりも、

(1) C/C++ プログラムの静的解析に使えそう
(2) CPU シミュレータのバックエンドとして使えそう
(デバッガに組み込んだり、QEMU の TCG を置き換えたりできるのでは ?)

などの動機があったわけですが、(2) の方は既にプロジェクトが存在していました。

http://www.libcpu.org/wiki/index.php/Main_Page

twitter で mjt さんに教えていただきました。 (それ以前から mjt さんの日記で存在は知っていたのですが、LLVM を使っていたということは頭から抜け落ちていました。)

libcpu の面白い点として、リンク先の mjt さんの日記にもあるのですが、独自の CPU 仕様記述から CPU シミュレータの自動生成を (将来的には) 目指しているという点があります。あまり開発は活発では無い感じですが、今後に期待したいところです。

また、QEMU の TCG API を LLVM で置き換えるという方も、今ちょっと検索してみたところ、llvm-qemu - Backend for QEMU using LLVM components. というプロジェクトが存在していました。

http://code.google.com/p/llvm-qemu/

2007 年の GSoC ということは、当時はまだ QEMU 0.10.0 は出てないので、TCG ではなく dyngen の時代だと思われます。こちらは開発が停止している感じですね。

2010年04月06日

今回はローカル変数を作ってみました。

また、JIT 実行ではなく、bitcode をファイルに書き出してみました。

WriteBitcodeToFile() API の使い方などは、ModuleMaker.cpp というサンプルを参考にしました。そのままそのサンプルの main() 関数を、後述するものに置き換えて、関連しそうなプロジェクト全てに依存関係を設定すれば、ビルド & 実行できるはずです。

(なぜか HowToUseJIT サンプルでは、関連しそうなプロジェクト全てに依存関係を設定しても、BitcodeWriter.cpp の関数がリンクできませんでした。)

続きを読む

2010年03月31日

LLVM の JIT API を使うと、関数を返す(作る)関数が書けます。

肝は ExecutionEngine の getPointerToFunction() API で、JIT 済みの関数(コード)へのポインタを取得できます。

続きを読む

2010年03月29日

JIT の API を見ていきます。

ざっと考えてみると、最低限プログラムを実行するためには、以下のような項目が必要だと考えられます。

  • 初期化、終了処理
  • コンパイル単位 (モジュール)
    • 関数定義
        • 式(変数、定数、関数呼び出しなど)
  • プログラムの実行、結果の取得
続きを読む

2010年03月25日

LLVM を利用しているプロジェクトとしては MacRuby が有名ですが、他にも LLVM の JIT を利用しているプロジェクトはたくさん存在するようです。

The LLVM Compiler Infrastructure: Projects built with LLVM

では、具体的には、どのようにすれば LLVM の JIT が利用できるのでしょうか ?

続きを読む

2010年03月17日

GCC のミドルエンド(最適化パス)とバックエンド(コード生成)に手を加えることにより、LLVM target をサポートしているのが、llvm-gcc です。

DragonEgg は、GCC 本体には手を加えずに、GCC 4.5 から入る plugin アーキテクチャによって、同様のことを実現し、llvm-gcc の置き換えを目指しているプロジェクトです。

既にブートストラップが可能なほどの完成度に到達しているとのことです。

DragonEgg - Using LLVM as a GCC backend

ただし、現状では GCC 4.5 本体への patch が必要で、Linux と Darwin 上でしか動かないようです。
(そもそも現状の GCC plugin って、Windows 上で動作するのでしょうか ? 追々確認してみます。)
今後に期待して、見守って行きたいと思います。

続きを読む

2010年03月11日

前回は Clang フロントエンドだけをビルドしました。

今回は LLVM もビルドして、実際に使ってみます。とはいっても、前回と同様に LLVM.sln を開いて、ALL_BUILD するだけです。時間がかかるかなと思って前回は試さなかったのですが、10 分もかかりませんでした。

lli.exe (LLVM 仮想マシン本体。JVM の java コマンドのようなもの)、llc.exe (ネイティブアセンブリコードへのトランスレータ) の他に、llvm-as.exe や llvm-ld.exe、llvm-nm.exe など、おなじみの binutils ライクなコマンド群が生成されます。
続きを読む

記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード