编译和安装
操作步骤
- 使用PuTTY工具,以root用户登录服务器。
- 执行以下命令进入源码安装目录。
cd /path/to/MEGAHIT
- 执行以下命令解压源码包。
tar -xvf v1.2.9.tar.gz
- 执行以下命令进入解压后的文件夹。
cd megahit-1.2.9
- 执行以下命令修改“CMakeLists.txt”文件。
- 打开“CMakeLists.txt”文件。
vi CMakeLists.txt
- 按“i”进入编辑模式,修改如下内容。修改前:
6 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") … 76 set_target_properties(megahit_core PROPERTIES COMPILE_FLAGS "-mbmi2 -DUSE_BMI2 -mpopcnt") 77 set_target_properties(megahit_core_popcnt PROPERTIES COMPILE_FLAGS "-mpopcnt")
修改后:6 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=armv8.2-a") … 76 set_target_properties(megahit_core PROPERTIES COMPILE_FLAGS "") 77 set_target_properties(megahit_core_popcnt PROPERTIES COMPILE_FLAGS "")
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开“CMakeLists.txt”文件。
- 执行以下命令切换目录。
cd ./src/utils/
- 执行以下命令拷贝鲲鹏代码迁移工具中的头文件到当前目录。
cp /path/to/PORT_ADVISOR/portadv/tools/inline_asm/config/KunpengTrans.h ./
- 执行以下命令修改代码“cpu_dispatch.h”。
vi cpu_dispatch.h
新增代码已标记:
#if defined(__aarch64__) //新增代码 #include "KunpengTrans.h" //新增代码 #endif //新增代码 #ifndef MEGAHIT_CPU_DISPATCH_H #define MEGAHIT_CPU_DISPATCH_H inline bool HasPopcnt() { unsigned eax, ebx, ecx, edx; #ifdef _MSC_VER int cpuid[4]; __cpuid(cpuid, 1); eax = cpuid[0], ebx = cpuid[1], ecx = cpuid[2], edx = cpuid[3]; #else #if defined(__x86_64__) //新增代码 asm volatile("cpuid\n\t" : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) : "0"(1)); #elif defined(__aarch64__) //新增代码 { eax = 1; //新增代码 GetSupportedCPUID(&eax,&ebx,&ecx,&edx); //新增代码 } #endif //新增代码 #endif return ecx >> 23U & 1U; } inline bool HasBmi2() { unsigned eax, ebx, ecx, edx; #ifdef _MSC_VER int cpuid[4]; __cpuidex(cpuid, 7, 0); eax = cpuid[0], ebx = cpuid[1], ecx = cpuid[2], edx = cpuid[3]; #else #if defined(__x86_64__) //新增代码 asm volatile("cpuid\n\t" : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) : "0"(7), "2"(0)); #elif defined(__aarch64__) //新增代码 { eax = 7; //新增代码 ecx = 0; //新增代码 GetSupportedCPUID(&eax,&ebx,&ecx,&edx); //新增代码 } #endif //新增代码 #endif return ebx >> 8U & 1U; } #endif // MEGAHIT_CPU_DISPATCH_H
- 执行以下命令切换目录。
cd ../kmlib/
- 执行以下命令修改代码kmrns.h,替换头文件。
vi kmrns.h
修改前:#include <x86intrin.h>
修改后:#include <sse2neon.h>
- 执行以下命令拷贝sse2neon.h头文件到src目录。
cp /path/to/SSE2NEON/sse2neon-1.5.0/sse2neon.h /path/to/MEGAHIT/megahit-1.2.9/src
- 执行以下命令创建并进入构建文件夹。
mkdir /path/to/MEGAHIT/build && cd /path/to/MEGAHIT/build
- 执行以下命令进行编译安装。
CC=`which gcc` CXX=`which g++` cmake -DCMAKE_INSTALL_PREFIX=/path/to/MEGAHIT -DCMAKE_BUILD_TYPE=Release ../ make -j 16 make install
- 执行以下命令加载环境变量。
export PATH=/path/to/MEGAHIT/bin:$PATH