关于编译hyperscan

CMAKE

hyperscan是基于cmake生成Makefile,所以我们先需要下载cmake,我这里用的是3.9.5版本。
cmake我理解就是一个自动化构建编译工程文件(比如makefile,VS的 .proc文件)的东西,类似bjam。

1
2
3
4
5
tar zxf cmake-3.9.5.tar.gz
cd cmake-3.9.5
./configure
gmake -j 20
make install

至此cmake安装完毕

安装依赖

boost

需要boost的regex lib,我们把boost解压到/opt目录下

ragel

我安装的是6.10版本

1
2
3
/configure --prefix=/opt/
make -j 20
make install

pcap

我安装的是1.8.1版本

1
2
3
/configure --prefix=/opt/
make -j 20
make install

dbus

我安装的是dbus-1.11.12版本

1
2
3
/configure --prefix=/opt/
make -j 20
make install

最后准备

修改一下CMakefileList 加入头文件和lib依赖目录

1
2
3
4
5
6
7
8
9
10
ln -s /opt/boost_1_65_1/boost <hyperscan-src>/include/boost
include_directories(${PROJECT_SOURCE_DIR}/src)
include_directories(${PROJECT_BINARY_DIR})
include_directories(SYSTEM include)
include_directories(/opt/include) <----------

include (${CMAKE_MODULE_PATH}/boost.cmake)

link_directories("/opt/lib") <---------------

安装hyperscan

1
2
3
4
cd <where-you-want-to-build-hyperscan>
mkdir <build-dir>
cd <build-dir>
cmake -G "Unix Makefiles" -DCMAKE_C_COMPILER=/opt/compiler/gcc-4.8.2/bin/gcc -DCMAKE_INSTALL_PREFIX=/opt/ ../

在编译的时候会提示ELSE分支问题,需要修改一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (FAT_RUNTIME)
if (NOT HAVE_SSSE3)
message(FATAL_ERROR "SSSE3 support required to build fat runtime")
endif ()
if (NOT HAVE_AVX2)
message(FATAL_ERROR "AVX2 support required to build fat runtime")
endif ()
if (BUILD_AVX512 AND NOT HAVE_AVX512)
message(FATAL_ERROR "AVX512 support requested but not supported")
endif ()
else (NOT FAT_RUNTIME)
if (NOT HAVE_AVX2)
message(STATUS "Building without AVX2 support")
endif ()
if (NOT HAVE_AVX512)
message(STATUS "Building without AVX512 support")
endif ()
#else (NOT FAT_RUNTIME)
# if (NOT HAVE_SSSE3)
# message(FATAL_ERROR "A minimum of SSSE3 compiler support is required")
# endif ()
endif ()

注释掉上面的4行,否则编译不过

各种检查通过以后,会生成我们想要的make file,然后执行

1
2
make -j 20
make install

编译的过程是很慢的,可以喝杯茶等着。
最后在我们/opt里有的lib和include头文件,第三方用这个就可以了