Bowtie

Written by Hunter Jansen on November 21, 2014

Hi there, today’s entry is about my work on Bowtie, An ultrafast memory-efficient short read aligner for the Linaro Performance challenge as I continue to try to find a package to port from x86 to arm64.

Bowtie

Last time out, I covered zeromq and how the work to port that over from x86 to arm64 was already done - making five packages in a row in which porting work was already done or rendered unnecessary due to codebase changes. I decided to move on to package randomly chosen for its name: Bowtie (because bowties are cool).

Bowtie also appears to be pretty popular in the space it’s in, but actually receives pretty sparse updates on it’s github page (every other week or so). I was hopeful that this project would be the one I would get to port over to arm64.

Alas, it looks like it’s already done as well :(

Getting Started

So the first step I’ve taken to trying (since I’ve had to go through so many packages by this point) is to simply install via yum.

sudo yum install bowtie

And, as I tried this on the arm machine I see an aarch64 package roll in. Sixth time is indeed not the charm, it seems. But I’m determined to do my due diligence to make sure everything works just fine, especially considering the sparse history of commits. So first I pulled the package in with fedpkg and prepped it. From there I ran the make file (Interestingly enough, no config needed).

fedpkg clone -a bowtie
cd bowtie
fedpkg prep
cd bowtie-1.0.1
make

And the make doesn’t work on the arm64 system…why not? After some poking around, it turns out I was receiving a nondescript error during the gcc phase of the make script. There’s no error message and nothing indicating why it fails, so then I had to look at the compile call and see what’s happening.

The compile command looks like:

    g++ -O3 -m64 -DCOMPILER_OPTIONS="\"-O3 -m64 -Wl,--hash-style=both -DPOPCNT_CAPABILITY  \""  -Wl,--hash-style=both -DPOPCNT_CAPABILITY    \
    -fno-strict-aliasing -DBOWTIE_VERSION="\"`cat VERSION`\"" -DBUILD_HOST="\"`hostname`\"" -DBUILD_TIME="\"`date`\"" -DCOMPILER_VERSION="\"`g++ -v 2>&1 | tail -1`\"" -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE  -DPREFETCH_LOCALITY=2 -DBOWTIE_MM -DBOWTIE_SHARED_MEM -DNDEBUG -Wall \
    -I SeqAn-1.1 -I third_party -I third_party\
    -o bowtie-build ebwt_build.cpp \
    ccnt_lut.cpp ref_read.cpp alphabet.cpp shmem.cpp edit.cpp ebwt.cpp tinythread.cpp  bowtie_build_main.cpp \
    -lpthread 

There’s a bunch of stuff happening there, but after some investigation, it looks like the first clue to the puzzle is obvious. The -m64 flag is an x86 only for gcc, so that would definitely cause some problems. However, after removing that part from the make file, things still aren’t working. FURTHER INVESTIGATION REQUIRED!

Next

This post ended up being so much more eventful than I expected and it looks like I might actually have a project to work on. Next time, I’ll continue investigating!

Tune in next time! -Hunter