LLVM
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*LLVMを利用してCbCコンパイラを開発した時のメモ [#v9d0fb30]
**インストール [#m668d5c0]
- まずLLVMを取得する。
--[[llvm.org:http://llvm.org]]から純粋なLLVMを取ってくる...
% git clone http://llvm.org/git/llvm.git (保存先。指定し...
% cd llvm/tools
% git clone http://llvm.org/git/clang.git
-- 研究室のmercurialからCbCをコンパイルできるよう拡張され...
% hg clone ssh://one@www.cr.ie.u-ryukyu.ac.jp/hg/CbC/CbC...
- 次にインストール先のディレクトリを作る。ついでにそこに...
% mkdir (いんすとーるするとこ)
% cd (↑でつくったとこ)
** 今は古い!! [#xfe07efa]
-- configureを実行する。この時、インストール先のディレク...
% (llvmとってきた場所)/configure --prefix=$PWD --disable...
% --enable-debug-symbols --enable-assertions
-- 各オプションについて
--- --prefix=dir~
インストール先のディレクトリ指定
--- --disable-optimized~
最適化無効化
--- --enable-debug-symbols~
デバッグ情報を含めてコンパイルする。
--- --enable-debug-runtime~
実行時に使用するライブラリのデバッグ情報を含めてコンパイ...
--- --enable-assertions~
assertionを有効化する。
- makeする
% make -j
オプションjをつけてうまくいかないときは -jなしで試す。
※jは並列にビルドするオプション。速度は上がるがときどき上...
** Cmakeを使う方法 [#acd75e2c]
詳しくはcross compilerのとこ
- cmakeする
このときにビルドするディレクトリに移動すること.
%cmake3 -G Ninja -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE...
インストールパスは$PWDで良い
- ninja
% ninja-build
ちなみにubuntuで行う場合はninja-buildでいれないとaptに登...
- インストールされたかチェックする。
% (インストールした場所)/Debug+Asserts/bin/clang -v
正しくインストールされていればバージョンが見れるはず。見...
** インストールしないでllvmのバージョンを調べる方法 [#nb7...
makeすると時間かかるからね。~
% configure -V
** gdbで動かす場合の手順 [#p32acde0]
- まず動かすときの引数を得る
% (CbC_LLVM) (source file) -### |& grep cc1
これで実際に実行されるコマンドと引数が取れるので引数だけ...
- gdbを動かす
% gdb --args (さっきコピーしたものを貼る)
これでうごくはず。正しく動かない場合はmakeがちゃんとでき...
** lldbで動かす場合の手順 [#x868382f]
実行時の引数は一緒なのでgdbで動かす場合のとこ見て。
- lldbを動かす
% lldb (clangのパス)
- 実行
(lldb) r (コピーしたやつ)
** gdbのちょっとしたテクニック [#vedf8eb2]
*** 何度も引っかかるタイプのブレークポイントの最後の一回...
-まずコンテニューかけまくる
(gdb) c 9999
-おそらくは9999回もコンテニューせずに実行が終了する。ここ...
(gdb) info b
見たいとこが何回止まったのかを確認する。already hit 〜 と...
-最後の一回で止まるように仕向ける
通常実行したらさっき見た数字分break pointを通過するという...
(gdb) ignore (break pointの番号) (さっきの数字-1)
これで止まるはず。
**distcleanについて [#w98f7652]
LLVMの場合distcleanではなくdist-clean。なのでconfigureか...
% make dist-clean
但し間違ってソースファイルと同じ場所に入れちゃった場合は...
**clang ASTを見る方法 [#y76a3eca]
% clang -cc1 -ast-dump (source file)
もしくは
% clang -Xclang -ast-dump -c (source file)
**最終的に生成されるASTと対応したコードの出力方法 [#p8539...
% clang -cc1 -ast-print (source file)
内部でコードを生成したときにそれが実際に上手くいったかど...
**LLVM IRのアセンブリ表現として出力する方法 [#aa668f44]
% clang (source file) -S -emit-llvm
**LLVM IRをlliで実行するためのバイナリとして出力する方法 ...
% llvm-as (アセンブリ表現のbit code)
**Machine Codeを見る方法 [#rf9a0cfc]
% llc -print-machineinstrs (LLVM IR file)
標準エラー出力に出力される。
**CbC on LLVM のアップデート方法 [#idf64386]
- まず最新版のLLVM, clangを取得する。
% git clone http://llvm.org/git/llvm.git (保存先。指定し...
% cd llvm/tools
% git clone http://llvm.org/git/clang.git
- 研究室のmercurialにオリジナルのLLVMを置いたリポジトリが...
% hg clone ssh://one@www.cr.ie.u-ryukyu.ac.jp/hg/CbC/LLV...
% cd LLVM_original
% rm -rf ./*
% mv ../llvm/* ./
- リポジトリの状態を確認し、消えてるものは消す、新しく増...
% hg status
% hg remove --after
% hg add (新しく増えたファイルで必要なもの。)
% hg commit
% hg push
- タグを付ける。
% hg tag -r (リビジョン番号) "LLVM X.X"
- CbC on LLVM の方のディレクトリに移動し、更新作業を行う。
-- emacs の場合 ediff-merge を使うと少し楽かも。
% cd ../CbC_LLVM
% hg incoming ../LLVM_original
% hg pull ../LLVM_original
% hg merge
- 動くようになったら commit, push して終了。
% hg commit
% hg push
- cmake
% cmake -G Ninja -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE...
** memo [#b0ec8446]
*** ヘッダファイルが見つからないと言われた時(stdio.h file...
- command line tools がインストールされてない可能性がある...
- 以下のようにclangを実行することでclangの見るパスがわか...
% clang -print-search-dirs
** homebrewでのインストール方法 [#p5c6039f]
% brew tap ie-developers/ie
% brew install cbc
でcbcがインストールされる。
% brew install cbc --HEAD
でRepositoryのHEADがインストールされる.
** llvm 3.8.0 lldb 用tar ball [#kd155f2c]
http://www.cr.ie.u-ryukyu.ac.jp/software/debug/CbCM.tgz
lldbがソースを見つけられるようにsymbolic link が必要。
% sudo mkdir -p /Users/kono/src/public
% sudo ln -s `pwd`/CbC /Users/kono/src/public
% sudo ln -s `pwd`/CbC_llvm /Users/kono/src/public
で、
% sudo lldb -- ./Debug+Asserts/bin/clang -cc1 -S hello.c
l main で main が表示されれば Ok 。
終了行:
*LLVMを利用してCbCコンパイラを開発した時のメモ [#v9d0fb30]
**インストール [#m668d5c0]
- まずLLVMを取得する。
--[[llvm.org:http://llvm.org]]から純粋なLLVMを取ってくる...
% git clone http://llvm.org/git/llvm.git (保存先。指定し...
% cd llvm/tools
% git clone http://llvm.org/git/clang.git
-- 研究室のmercurialからCbCをコンパイルできるよう拡張され...
% hg clone ssh://one@www.cr.ie.u-ryukyu.ac.jp/hg/CbC/CbC...
- 次にインストール先のディレクトリを作る。ついでにそこに...
% mkdir (いんすとーるするとこ)
% cd (↑でつくったとこ)
** 今は古い!! [#xfe07efa]
-- configureを実行する。この時、インストール先のディレク...
% (llvmとってきた場所)/configure --prefix=$PWD --disable...
% --enable-debug-symbols --enable-assertions
-- 各オプションについて
--- --prefix=dir~
インストール先のディレクトリ指定
--- --disable-optimized~
最適化無効化
--- --enable-debug-symbols~
デバッグ情報を含めてコンパイルする。
--- --enable-debug-runtime~
実行時に使用するライブラリのデバッグ情報を含めてコンパイ...
--- --enable-assertions~
assertionを有効化する。
- makeする
% make -j
オプションjをつけてうまくいかないときは -jなしで試す。
※jは並列にビルドするオプション。速度は上がるがときどき上...
** Cmakeを使う方法 [#acd75e2c]
詳しくはcross compilerのとこ
- cmakeする
このときにビルドするディレクトリに移動すること.
%cmake3 -G Ninja -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE...
インストールパスは$PWDで良い
- ninja
% ninja-build
ちなみにubuntuで行う場合はninja-buildでいれないとaptに登...
- インストールされたかチェックする。
% (インストールした場所)/Debug+Asserts/bin/clang -v
正しくインストールされていればバージョンが見れるはず。見...
** インストールしないでllvmのバージョンを調べる方法 [#nb7...
makeすると時間かかるからね。~
% configure -V
** gdbで動かす場合の手順 [#p32acde0]
- まず動かすときの引数を得る
% (CbC_LLVM) (source file) -### |& grep cc1
これで実際に実行されるコマンドと引数が取れるので引数だけ...
- gdbを動かす
% gdb --args (さっきコピーしたものを貼る)
これでうごくはず。正しく動かない場合はmakeがちゃんとでき...
** lldbで動かす場合の手順 [#x868382f]
実行時の引数は一緒なのでgdbで動かす場合のとこ見て。
- lldbを動かす
% lldb (clangのパス)
- 実行
(lldb) r (コピーしたやつ)
** gdbのちょっとしたテクニック [#vedf8eb2]
*** 何度も引っかかるタイプのブレークポイントの最後の一回...
-まずコンテニューかけまくる
(gdb) c 9999
-おそらくは9999回もコンテニューせずに実行が終了する。ここ...
(gdb) info b
見たいとこが何回止まったのかを確認する。already hit 〜 と...
-最後の一回で止まるように仕向ける
通常実行したらさっき見た数字分break pointを通過するという...
(gdb) ignore (break pointの番号) (さっきの数字-1)
これで止まるはず。
**distcleanについて [#w98f7652]
LLVMの場合distcleanではなくdist-clean。なのでconfigureか...
% make dist-clean
但し間違ってソースファイルと同じ場所に入れちゃった場合は...
**clang ASTを見る方法 [#y76a3eca]
% clang -cc1 -ast-dump (source file)
もしくは
% clang -Xclang -ast-dump -c (source file)
**最終的に生成されるASTと対応したコードの出力方法 [#p8539...
% clang -cc1 -ast-print (source file)
内部でコードを生成したときにそれが実際に上手くいったかど...
**LLVM IRのアセンブリ表現として出力する方法 [#aa668f44]
% clang (source file) -S -emit-llvm
**LLVM IRをlliで実行するためのバイナリとして出力する方法 ...
% llvm-as (アセンブリ表現のbit code)
**Machine Codeを見る方法 [#rf9a0cfc]
% llc -print-machineinstrs (LLVM IR file)
標準エラー出力に出力される。
**CbC on LLVM のアップデート方法 [#idf64386]
- まず最新版のLLVM, clangを取得する。
% git clone http://llvm.org/git/llvm.git (保存先。指定し...
% cd llvm/tools
% git clone http://llvm.org/git/clang.git
- 研究室のmercurialにオリジナルのLLVMを置いたリポジトリが...
% hg clone ssh://one@www.cr.ie.u-ryukyu.ac.jp/hg/CbC/LLV...
% cd LLVM_original
% rm -rf ./*
% mv ../llvm/* ./
- リポジトリの状態を確認し、消えてるものは消す、新しく増...
% hg status
% hg remove --after
% hg add (新しく増えたファイルで必要なもの。)
% hg commit
% hg push
- タグを付ける。
% hg tag -r (リビジョン番号) "LLVM X.X"
- CbC on LLVM の方のディレクトリに移動し、更新作業を行う。
-- emacs の場合 ediff-merge を使うと少し楽かも。
% cd ../CbC_LLVM
% hg incoming ../LLVM_original
% hg pull ../LLVM_original
% hg merge
- 動くようになったら commit, push して終了。
% hg commit
% hg push
- cmake
% cmake -G Ninja -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE...
** memo [#b0ec8446]
*** ヘッダファイルが見つからないと言われた時(stdio.h file...
- command line tools がインストールされてない可能性がある...
- 以下のようにclangを実行することでclangの見るパスがわか...
% clang -print-search-dirs
** homebrewでのインストール方法 [#p5c6039f]
% brew tap ie-developers/ie
% brew install cbc
でcbcがインストールされる。
% brew install cbc --HEAD
でRepositoryのHEADがインストールされる.
** llvm 3.8.0 lldb 用tar ball [#kd155f2c]
http://www.cr.ie.u-ryukyu.ac.jp/software/debug/CbCM.tgz
lldbがソースを見つけられるようにsymbolic link が必要。
% sudo mkdir -p /Users/kono/src/public
% sudo ln -s `pwd`/CbC /Users/kono/src/public
% sudo ln -s `pwd`/CbC_llvm /Users/kono/src/public
で、
% sudo lldb -- ./Debug+Asserts/bin/clang -cc1 -S hello.c
l main で main が表示されれば Ok 。
ページ名: