1. 需要的环境
1.1 硬件环境
Intel X86
平台32位或者64位都可以运行。另外hyperscan在编译时可以添加一些新的特性,如果系统支持:
- Intel Streaming SIMD Extensions 4.2 (SSE4.2)
- POPCNT指令
- BMI, BMI2指令
- Intel AVX2指令
例如:
cmake -DCMAKE_C_FLAGS="-march=corei7" \
-DCMAKE_CXX_FLAGS="-march=corei7" <hyperscan-source-path>
对于不同的cpu
特性,-march
表格如下:
Variant | cpu支持的特性flags | gcc arch flag |
---|---|---|
Core 2 | SSSE3 | -march=core2 |
Core i7 | SSE4_2 and POPCNT | -march=corei7 |
AVX 2 | AVX2 | -march=core-avx2 |
AVX 512 | AVX512BW (见下面注释1.1) | -march=skylake-avx512 |
注释1.1:AVX 512是至强处理器引入的指令集,并不是所有的cpu都支持,编译时默认是关闭的。如果需要打开,编译时执行如下代码
cmake - DBUILD_AVX512 = on <...>
1.2 软件环境
GCC/C++编译器
- GCC, v4.8.1或更高版本
- Clang, v3.4或更高版本(包含libstdc++或libc++)
- Intel C++ Compiler v15或更高版本
操作系统
- Linux
- Ubuntu 14.04 LTS or newer
- RedHat/CentOS 7 or newer
- FreeBSD
- 10.0 or newer
- Mac OS X
- 10.8 or newer, using XCode/Clang
其他系统可能也可以运行hyperscan,但性能稳定性无法担保。
其他一些依赖
依赖的软件 | 版本 | 备注 |
---|---|---|
CMake | >=2.8.11 | |
Ragel | 6.9 | |
Python | 2.7 | |
Boost | >=1.57 | 只需要Boost的头文件 |
Pcap | >=0.8 | 可选项:只例子程序需要 |
Boost头文件
boost不用编译和安装,只需要把头文件链接到hyperscan源码中即可,以Boost-1.59.0正式版为例:
ln -s boost_1_59_0/boost <hyperscan-source-path>/include/boost
1.3 编译和安装
编译
cd <hyperscan-source-path>
mkdir hs_build;cd hs_build
cmake -D<variable name>=<value> <hyperscan-source-path>
cmake --build .
-D参数列表
变量名 | 描述 |
---|---|
CMAKE_C_COMPILER | 使用c编译器,默认是/usr/bin/cc |
CMAKE_CXX_COMPILER | 使用c++编译器,默认是/usr/bin/c++ |
CMAKE_INSTALL_PREFIX | 安装目录 |
CMAKE_BUILD_TYPE | Debug,Release,RelWithDebInfo,MinSizeRel,默认是RelWithDebInfo |
BUILD_SHARED_LIBS | 默认是静态库,设置这个参数编译为动态库 |
BUILD_STATIC_AND_SHARED | 同时生成静态库和动态库,默认关闭 |
BOOST_ROOT | Boost源代码树的位置 |
DEBUG_OUTPUT | 打开啰嗦模式输出,默认关闭 |
FAT_RUNTIME | 在linux环境默认打开,其他环境没有 |
一个例子
源码是hyperscan-4.7.0
cd hyperscan-4.7.0
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=on ../hyperscan-4.7.0
cmake --build .
-DCMAKE_BUILD_TYPE=Release
:编译为release版本,默认是RelWithDebInfo-DBUILD_SHARED_LIBS=on
:生成动态库,默认生成静态库