编译和安装

前提条件

已获取“sse2neon.h”文件,获取路径:https://github.com/DLTcollab/sse2neon/blob/master/sse2neon.h

操作步骤

  1. 执行以下命令,命令解压安装包。

    unzip hisat-0.1.6-beta-source.zip

  2. 执行以下命令,进入解压后的目录。

    cd hisat-0.1.6-beta

  3. 执行以下命令,设置环境变量。

    export NO_TBB=1

    export POPCNT_CAPABILITY=0

  4. 执行以下命令,修改“Makefile”文件。

    1. 打开“Makefile”文件。

      vi Makefile

    2. 按“i”进入编辑模式,修改“Makefile”文件的BITS=64 aarch64分支,在第143和144行之间插入以下粗体部分内容。目前BITS=64只支持x86,不支持AArch64,需要新增一个AArch64的分支。

      修改前:

      BITS=32
      ifeq (x86_64,$(shell uname -m))
      BITS=64
      endif

      修改后:

      BITS=32
      ifeq (x86_64,$(shell uname -m))
      BITS=64
      endif
      ifeq (aarch64,$(shell uname -m))
      BITS=64
      endif
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  5. 执行以下命令,修改“Makfile”文件。

    1. 打开“Makefile”文件。

      vi Makefile

    2. 按“i”进入编辑模式,修改“Makefile”文件的-m64以及-msse2的AArch64分支,在第165和168行之间插入以下粗体部分内容。Makefile编译选项-m64/-msse2只支持x86,不支持AArch64,需要增加AArch64分支。

      修改前(源文件152 ~159行):

      ifeq (32,$(BITS))
      BITS_FLAG = -m32
      endif
      ifeq (64,$(BITS))
      BITS_FLAG = -m64
      endif
      SSE_FLAG=-msse2

      修改后:

      ifeq (32,$(BITS))
              BITS_FLAG = -m32
      endif
      ifeq (64,$(BITS))
              BITS_FLAG = -m64
      endif
      SSE_FLAG=-msse2
      ifeq (aarch64,$(shell uname -m))
              BITS_FLAG =
              SSE_FLAG =
      endif
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  6. 执行以下命令修改“Makefile”文件。

    1. 打开“Makefile”文件。

      vi Makefile

    2. 按“i”进入编辑模式,修改“Makefile”文件的FLAGS参数。

      修改前:

      DEBUG_FLAGS    = -O0 -g3 $(BIToS_FLAG) $(SSE_FLAG) 
      DEBUG_DEFS     = -DCOMPILER_OPTIONS="\"$(DEBUG_FLAGS) $(EXTRA_FLAGS)\""
      RELEASE_FLAGS  = -O3 $(BITS_FLAG) $(SSE_FLAG) -funroll-loops -g3 
      RELEASE_DEFS   = -DCOMPILER_OPTIONS="\"$(RELEASE_FLAGS) $(EXTRA_FLAGS)\""
      NOASSERT_FLAGS = -DNDEBUG
      FILE_FLAGS     = -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE

      修改后:

      DEBUG_FLAGS    = -O0 -g3 $(BIToS_FLAG) $(SSE_FLAG) -funroll-loops -std=c++98
      DEBUG_DEFS     = -DCOMPILER_OPTIONS="\"$(DEBUG_FLAGS) $(EXTRA_FLAGS)\""
      RELEASE_FLAGS  = -O3 $(BITS_FLAG) $(SSE_FLAG) -funroll-loops -g3 -std=c++98 -Xlinker --allow-multiple-definition
      RELEASE_DEFS   = -DCOMPILER_OPTIONS="\"$(RELEASE_FLAGS) $(EXTRA_FLAGS)\""
      NOASSERT_FLAGS = -DNDEBUG
      FILE_FLAGS     = -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  7. 执行以下命令,将“sse2neon.h”拷贝到编译器的安装目录下。

    cp sse2neon.h /path/to/GNU/include

  8. 执行以下命令,修改“aligner_sw.h”和“sse_util.h”头文件。

    1. 打开“aligner_sw.h”文件。

      vi aligner_sw.h

    2. 按“i”进入编辑模式,修改“aligner_sw.h”文件,将“#include <emmintrin.h>”替换为“#include <sse2neon.h>”。

      修改前:

      #include <emmintrin.h>

      修改后:

      #include <sse2neon.h>
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

    同理修改“sse_util.h”文件。

  9. 执行以下命令,进行编译安装。

    make

  10. 执行以下命令,添加环境变量。

    export PATH=/path/to/HISAT/hisat-0.1.6-beta:$PATH