0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ゲノムグラフを生成するvgをARM Macでコンパイルする

Last updated at Posted at 2023-10-12

はじめに 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

まとまりがありませんが、この記事は以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?