PlatanusをMacで使う

縁あって、ゲノム解析とか発現解析をしています。
de novoでゲノムデータをassembleするというので、Platanus ( http://platanus.bio.titech.ac.jp/ ) というのを使ってみることとしました。現在のバージョンは1.2.4のようで(去年に出たようだ)。サイトでは1.2.1ってのも配られていて、こちらはMacのバイナリもあるようですが、最新版の1.2.4はLinux 64 bit binary (precompiled)かソースで、という状況。
そこいらのマシンで自分のMacProが一番性能がよさげなので、これで動かすべくソースを落としてみました。
一応、trimmerも使おうかと思うので、まずはこちらから。ほどきまして、makeしますと、

nakazato@grouper:~/Downloads/Platanus_trim_v1.0.7$ make
g++ -o common.o -c common.cpp -s -std=c++0x -O3 -funroll-loops -fomit-frame-pointer -fopenmp -DRUN_MODE=\"\"
clang: warning: argument unused during compilation: '-s'
In file included from common.cpp:2:
./common.h:13:10: fatal error: 'omp.h' file not found
#include
^
1 error generated.
make: *** [common.o] Error 1

はい、怒られました。もろもろ調べたところ、Macのg++はclangの方で(イミフ。でもよし)OpenMPは使わないようになっているとか。そこで(brewbrew install gcc49してからか?)Makefile

CXX = g++
 ↓
CXX = g++-4.9

しますと

nakazato@grouper:~/Downloads/Platanus_trim_v1.0.7$ make
g++-4.9 -o common.o -c common.cpp -s -std=c++0x -O3 -funroll-loops -fomit-frame-pointer -fopenmp -DRUN_MODE=\"\"
g++-4.9 -o trim.o -c trim.cpp -s -std=c++0x -O3 -funroll-loops -fomit-frame-pointer -fopenmp -DRUN_MODE=\"\"
g++-4.9 -o main.o -c main.cpp -s -std=c++0x -O3 -funroll-loops -fomit-frame-pointer -fopenmp -DRUN_MODE=\"\"
g++-4.9 -s -std=c++0x -O3 -funroll-loops -fomit-frame-pointer -fopenmp -o platanus_trim common.o trim.o main.o
ld: warning: option -s is obsolete and being ignored
g++-4.9 -o main.oo -c main.cpp -s -std=c++0x -O3 -funroll-loops -fomit-frame-pointer -fopenmp -DRUN_MODE=\"internal\"
g++-4.9 -s -std=c++0x -O3 -funroll-loops -fomit-frame-pointer -fopenmp -o platanus_internal_trim common.o trim.o main.oo
ld: warning: option -s is obsolete and being ignored

なにやら怒られましたが、platanus_internal_trimとplatanus_trimができたのでよしとしましょう。(ちゃんと動きました)。
はてさて、今度はPlatanus本体ですが

nakazato@grouper:~/Downloads/Platanus_v1.2.4$ make
g++ -o main.o -c main.cpp -std=c++0x -O3 -funroll-loops -Wall -fopenmp -finline-limit-50000 -lm -Dnullptr=0
clang: error: unknown argument: '-finline-limit-50000'
clang: warning: -lm: 'linker' input unused
make: *** [main.o] Error 1

はい、やっぱり怒られました。で、trimmerのと同様に直したわけですが

nakazato@grouper:~/Downloads/Platanus_v1.2.4$ make
g++ -o main.o -c main.cpp -std=c++0x -O3 -funroll-loops -Wall -fopenmp -finline-limit-50000 -lm -Dnullptr=0
clang: error: unknown argument: '-finline-limit-50000'
clang: warning: -lm: 'linker' input unused
make: *** [main.o] Error 1
nakazato@grouper:~/Downloads/Platanus_v1.2.4$ cp Makefile.org Makefile.arrange
nakazato@grouper:~/Downloads/Platanus_v1.2.4$ vi Makefile.arrange
nakazato@grouper:~/Downloads/Platanus_v1.2.4$ make clean
rm -f platanus main.o assemble.o scaffold.o scaffoldGraph.o gapClose.o common.o baseCommand.o seqlib.o mapper.o gapCloseOLC.o
nakazato@grouper:~/Downloads/Platanus_v1.2.4$ make -f Makefile.arrange
g++-4.9 -o main.o -c main.cpp -std=c++0x -O3 -funroll-loops -Wall -fopenmp -finline-limit-50000 -lm -Dnullptr=0
In file included from assemble.h:25:0,
from main.cpp:22:
counter.h:455:263: error: redeclaration of 'void Counter::countKmerOrWriteTemporary(bool&, const typename KMER::keyType&, DoubleHash*, FILE*, omp_lock_t*, const KMER&, unsigned int)' may not have default arguments [-fpermissive]
inline void Counter::countKmerOrWriteTemporary(bool &loopFlag, const typename KMER::keyType &key, DoubleHash tmpOccurrenceTable, FILE *unmappedFP, omp_lock_t lock, const KMER &kmer, const unsigned iterateTimes=32)
^
counter.h:684:190: error: redeclaration of 'void Counter::countKmerOrWriteTemporary(bool&, const typename KMER::keyType&, FILE*, omp_lock_t*, const KMER&, unsigned int)' may not have default arguments [-fpermissive]
inline void Counter::countKmerOrWriteTemporary(bool &loopFlag, const typename KMER::keyType &key, FILE *unmappedFP, omp_lock_t lock[], const KMER &kmer, const unsigned iterateTimes=32)
^
In file included from assemble.h:26:0,
from main.cpp:22:
graph.h:1764:80: error: redeclaration of 'void BruijnGraph::cutBranchIterative(long long unsigned int)' may not have default arguments [-fpermissive]
void BruijnGraph::cutBranchIterative(const unsigned long long numThread=1)
^
make: *** [main.o] Error 1

やっぱり怒られました。で、うねうね調べまして、むりくり先に進めるみたいなオプションをつけるとうまくいくとかで、上記のに加えて

CXXFLAGS = -std=c++0x -O3 -funroll-loops -Wall -fopenmp -finline-limit-50000 -lm -Dnullptr=0

CXXFLAGS = -std=c++0x -O3 -funroll-loops -Wall -fopenmp -finline-limit-50000 -lm -Dnullptr=0 -fpermissive

としますと、まぁやっぱりくどくど怒られるんですが、無事にplatanusの実行ファイルができまして、ちゃんととりあえず、動き始めたんで一安心みたいなところですかね。
週末を越えて動かしているんですが、ちょっとファイルが大きかったのか、スレッド数とかメモリが小さかったのか、"WARNING: Sorry, memory exceeds specified value!!"と怒られつつ、まだ計算しております。。。(そのあたりはまた後日?