はじめに vgとは
何もわかってないのでbing AIに説明してもらった。
- vgは、ゲノムバリエーショングラフを扱うためのツールキットです。
- ゲノムの多様性を記述するための強力なオブジェクトであるバリエーショングラフを構築、操作、可視化するためのツールを提供します。
コンパイル
M1 や M2 などのARM Mac をbioinformaticsに使うべきではないという話がある。しかし今Macを買う人はほとんどM2だと思う。速度を要求するbioiformaticsのプログラムはSIMD拡張命令を使って高速化しているので、M2 Macでは正常にコンパイルできない場合がある。
vgのARM Macにけるコンパイルもやや混沌としている。自分もそこまでコンピュータに詳しいわけではないので上手に問題の切り分けができない。しかし、誰かの役に立つかもしれないので遭遇した問題と、解決策をメモっておく。
ただ、どれが効いたのかよくわからない部分も多い。
リポジトリをcloneする
git clone --recursive https://github.com/vgteam/vg.git
cd vg
--recursive
に注意してほしい。vgはC++のプロジェクトである。C++のツールでしばしば見られる「依存ライブラリはgit submoduleとして管理する」という方針をとっている。なのでサブモジュールとして依存ライブラリをダウンロードする必要がある。
HTTP Proxy環境などインターネットへのアクセスが制限されている場合は、すでにこの時点で問題が発生する。elfutils
のsubmoduleがダウンロードされない。.gitmodues
を確認すると、
[submodule "deps/elfutils"]
path = deps/elfutils
url = git://sourceware.org/git/elfutils.git
となっており、リポジトリのURLがhttpsではないのである。この問題を解決するためには、次のissueを参照して、
git config --global url."https://".insteadOf git://
とするのがよい。しかし、そもそもGitプロトコルは現在では推奨されていない。httpsで構わない気がしたので、gitをhttpsに差し替えるプルリクエストを作成した。(このプルリクエストがマージされた場合は問題は発生しなくなると思う)
conda環境をはずす
一般的にはCやCppのツールをコンパイルするときには通常はcondaを外すべきである。miniconda/anaconda を使っている人は、コンパイル時にconda内部のツールが使われたり、ライブラリにリンクされることを防ぐために conda deactivate
をして、環境変数やパスを外しておく。
依存するライブラリをインストールする。
MacPorts を使う方法も公式のREADMEには書かれている。Homebrewを使っている場合は、下記のコマンドを叩いて依存するライブラリをインストールする。
brew bundle
これでリポジトリ直下の Brewfile
内に記述されているライブラリがインストールされる。Rubyの bundle
コマンドを知っていると、このディレクトリだけで有効になるようにライブラリがインストールされるのかな?と思ったりするが、そんなことは全くなく、ツールはグローバルにインストールされる。
コンパイル
. ./source_me.sh && make -j7
このあたりから、少し混沌としてくる。
. ./source_me.sh
の意味であるが、.
は source
と同じらしい。この source_me.sh
は主に環境変数を設定している。./source_me.sh && make
では環境変数は make
コマンドまで反映されないらしい。だから . ./source_me.sh
とする。./source_me.sh
は、LIBRARY_PATH
LD_LIBRARY_PATH
DYLD_LIBRARY_PATH
LD_INCLUDE_PATH
CFLAGS
CXXFLAGS
などを pwd
下のディレクトリに設定する。
ここで、CCやCXX設定しているが、自分の場合はコンパイラはgccなどは使わず、Apple謹製のものを使った。自分の場合はこれでうまくいった。
gcc --version
Apple clang version 15.0.0 (clang-1500.0.40.1)
Target: arm64-apple-darwin23.0.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
g++ --version
Apple clang version 15.0.0 (clang-1500.0.40.1)
Target: arm64-apple-darwin23.0.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
そのうえで gcc を使わないといけないのか、あるいは、すでにbrew bundleでインストールされているはずのopenmpがインストールされていないのかと紛らわしいエラーメッセージが出た気がするが、そうではなく LLVM をインストールする必要があった。
brew install llvm
おそらく llvm-config
などでLLVMのライブラリ等ののパスを取得していると思うので、実行形式のファイルがパスに含まれるように
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
を ~/.zshrc
に追加した。効いているかどうかは定かではない。
一応このあたりの対策でをすると、コンパイルが通るようになった。
(しかし、それ以前には、エラーメッセージがない状態で make
コマンドが正常に途中で終了したりするという、あまり経験したことがない現象もあったりしたので、どうなっているのかはよくわからない。)
MacOSはDockerで動かせないので、完全に新しい環境でコンパイルが可能だということを再現できないので、この記事もこのぐらいになる。(GitHub ActionsにM1が来るらしい ので期待してる)
コンパイルが終わると、bin/vg
が利用できるようになる。
bin/vg
vg: variation graph tool, version v1.51.0-22-g49cc69c14 "Quellenhof"
usage: vg <command> [options]
main mapping and calling pipeline:
-- autoindex mapping tool-oriented index construction from interchange formats
-- construct graph construction
-- rna construct splicing graphs and pantranscriptomes
-- index index graphs or alignments for random access or mapping
-- map MEM-based read alignment
-- giraffe fast haplotype-aware short read alignment
-- mpmap splice-aware multipath alignment of short reads
-- augment augment a graph from an alignment
-- pack convert alignments to a compact coverage index
-- call call or genotype VCF variants
-- help show all subcommands
For more commands, type `vg help`.
For technical support, please visit: https://www.biostars.org/tag/vg/
念のためリンクを確認しておく。公式READMEによるとMacではstaticなコンパイルはできないようである。予想外のライブラリにリンクされていないかチェックする。
otool -L bin/vg
なかには
/Users/kojix2/Cpp/vg/lib/libvgio.dylib (compatibility version 0.0.0, current version 0.0.0)
のように、vgディレクトリ内にリンクされているライブラリが存在するので注意が必要である。
誤って miniconda/condaにリンクされていないことをチェックしてもいいかもしれない。
otool -L bin/vg | grep conda
正しく動作するのか不安なので、テストを走らせるとよいと思う。
make test
まとまりがありませんが、この記事は以上です。