LLVM

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 ライクなコマンド群が生成されます。
続きを読む

2010年03月09日

Clang (クラン(グ)) は、C/C++/Objective-C のコンパイラフロントエンドです。バックエンドに LLVM (Low-Level Virtual machine) を使います。(GCC をバックエンド(アセンブラ & リンカ代わり) として使い、通常の実行形式を生成することもできます。逆に、GCC のミドルエンド以降を LLVM 向けに改造した llvm-gcc というフロントエンドも存在します。)

ライセンスが BSD ライク なので、FreeBSD が Clgan で GCC を置き換えようとする動きがあったりと、徐々に注目を集めています。

Getting Started: Building and Running Clang を見る限り、Windows 上では VisualStudio 2005/2008 でビルドできるそうなので、さっそく試してみました。

続きを読む

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

QRコード
QRコード