Windows上的构建
这是一个简单的一步步的解释,说明我们如何能够在Microsoft Windows 10 上构建RocksDB(或RocksJava)和所有第三方库。
Windows构建系统已经准备好了,但是我需要反复试验才能构建第三方库并将它们合并到构建中。
必备条件
1、微软Visual Studio 2015(社区)与"桌面开发与c++"安装
2、CMake 安装
3、我使用的是Windows Git Bash
4、Mercurial - 我使用64位MSI安装程序
5、wget
步骤
在机器上某个地方创建一个目录,该目录将用作RocksDB源代码及其第三方依赖项的容器。在我的机器上我用C:\\Users\aretter\code,在此的我只会把它作为%CODE_HOME%;可以将其设置为环境变量,即set CODE_HOME=C:\Users\aretter\code。
以下所有操作均在"Developer Command Prompt for VS2015"。
构建 GFlags
cd %CODE_HOME%
wget https://github.com/gflags/gflags/archive/v2.2.0.zip
unzip v2.2.0.zip
cd gflags-2.2.0
mkdir target
cd target
cmake -G "Visual Studio 14 Win64" ..
在Visual Studio中打开项目,复制Win32平台并选择x64 CPU,创建一个新的x64平台。关闭Visual Studio。
msbuild gflags.sln /p:Configuration=Debug /p:Platform=x64
msbuild gflags.sln /p:Configuration=Release /p:Platform=x64
生成的静态库可以在
%CODE_HOME%\gflags-2.2.0\target\lib\Debug\gflags_static.lib 或
%CODE_HOME%\gflags-2.2.0\target\lib\Release\gflags_static.lib. 中找到
构建 Snappy
cd %CODE_HOME%
wget https://github.com/google/snappy/archive/1.1.7.zip
unzip 1.1.7.zip
cd snappy-1.1.7
mkdir build
cd build
cmake -DCMAKE_GENERATOR_PLATFORM=x64 ..
msbuild Snappy.sln /p:Configuration=Debug /p:Platform=x64
msbuild Snappy.sln /p:Configuration=Release /p:Platform=x64
生成的静态库可以在
%CODE_HOME%\snappy-1.1.7\build\Debug\snappy.lib 或
%CODE_HOME%\snappy-1.1.7\build\Release\snappy.lib. 中找到
构建 LZ4
cd %CODE_HOME%
wget https://github.com/lz4/lz4/archive/v1.7.5.zip
unzip v1.7.5.zip
cd lz4-1.7.5
cd visual\VS2010
devenv lz4.sln /upgrade
msbuild lz4.sln /p:Configuration=Debug /p:Platform=x64
msbuild lz4.sln /p:Configuration=Release /p:Platform=x64
生成的静态库可以在
%CODE_HOME%\lz4-1.7.5\visual\VS2010\bin\x64_Debug\liblz4_static.lib 或
%CODE_HOME%\lz4-1.7.5\visual\VS2010\bin\x64_Release\liblz4_static.lib. 中找到
构建 Zlib
cd %CODE_HOME%
wget http://zlib.net/zlib1211.zip
unzip zlib1211.zip
cd zlib-1.2.11\contrib\vstudio\vc14
编辑文件zlibvc.vcxproj, 更改 <command>cd ..\..\contrib\masmx64 bld_ml64.bat</command> 变为 <command>cd ..\..\masmx64 bld_ml64.bat</command>. 在masmx64之后添加新行。
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64_x86\vcvarsamd64_x86.bat"
msbuild zlibvc.sln /p:Configuration=Debug /p:Platform=x64
msbuild zlibvc.sln /p:Configuration=Release /p:Platform=x64
copy x64\ZlibDllDebug\zlibwapi.lib x64\ZlibStatDebug\
copy x64\ZlibDllRelease\zlibwapi.lib x64\ZlibStatRelease\
生成的静态库可以在
%CODE_HOME%\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibStatDebug\zlibstat.lib 或
%CODE_HOME%\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibStatRelease\zlibstat.lib. 中找到
构建 ZStd
wget https://github.com/facebook/zstd/archive/v1.3.7.zip
unzip v1.3.7.zip
cd zstd-1.3.7/build/VS2010
devenv zstd.sln /upgrade
msbuild zstd.sln /p:Configuration=Debug /p:Platform=x64
msbuild zstd.sln /p:Configuration=Release /p:Platform=x64
生成的静态库可以在
%CODE_HOME%\zstd-1.3.7\build\VS2010\bin\x64_Debug\libzstd_static.lib 或
%CODE_HOME%\zstd-1.3.7\build\VS2010\bin\x64_Release\libzstd_static.lib. 中找到
构建 RocksDB
cd %CODE_HOME%
git clone https://github.com/facebook/rocksdb.git
cd rocksdb
编辑 %CODE_HOME%\rocksdb\thirdparty.inc 文件 作出如下更改:
set(GFLAGS_HOME $ENV{THIRDPARTY_HOME}/gflags-2.2.0)
set(GFLAGS_INCLUDE ${GFLAGS_HOME}/target/include)
set(GFLAGS_LIB_DEBUG ${GFLAGS_HOME}/target/lib/Debug/gflags_static.lib)
set(GFLAGS_LIB_RELEASE ${GFLAGS_HOME}/target/lib/Release/gflags_static.lib)
set(SNAPPY_HOME $ENV{THIRDPARTY_HOME}/snappy-1.1.7)
set(SNAPPY_INCLUDE ${SNAPPY_HOME} ${SNAPPY_HOME}/build)
set(SNAPPY_LIB_DEBUG ${SNAPPY_HOME}/build/Debug/snappy.lib)
set(SNAPPY_LIB_RELEASE ${SNAPPY_HOME}/build/Release/snappy.lib)
set(LZ4_HOME $ENV{THIRDPARTY_HOME}/lz4-1.7.5)
set(LZ4_INCLUDE ${LZ4_HOME}/lib)
set(LZ4_LIB_DEBUG ${LZ4_HOME}/visual/VS2010/bin/x64_Debug/liblz4_static.lib)
set(LZ4_LIB_RELEASE ${LZ4_HOME}/visual/VS2010/bin/x64_Release/liblz4_static.lib)
set(ZLIB_HOME $ENV{THIRDPARTY_HOME}/zlib-1.2.11)
set(ZLIB_INCLUDE ${ZLIB_HOME})
set(ZLIB_LIB_DEBUG ${ZLIB_HOME}/contrib/vstudio/vc14/x64/ZlibStatDebug/zlibstat.lib)
set(ZLIB_LIB_RELEASE ${ZLIB_HOME}/contrib/vstudio/vc14/x64/ZlibStatRelease/zlibstat.lib)
set(ZSTD_HOME $ENV{THIRDPARTY_HOME}/zstd-1.3.7)
set(ZSTD_INCLUDE ${ZSTD_HOME}/lib ${ZSTD_HOME}/lib/dictBuilder)
set(ZSTD_LIB_DEBUG ${ZSTD_HOME}/build/VS2010/bin/x64_Debug/libzstd_static.lib)
set(ZSTD_LIB_RELEASE ${ZSTD_HOME}/build/VS2010/bin/x64_Release/libzstd_static.lib)
最后编译RocksDB:
注意: 默认的CMake构建将生成包含/arch:AVX2标志的MSBuild项目文件。
如果您有这个CPU扩展指令集,那么生成的二进制文件也只能在其他使用AVX2的CPU上运行。
如果您想创建一个没有特定CPU扩展的构建,那么您还应该在下面的cmake参数中传递-DPORTABLE=1标志。
注意: 下面的构建选项包括-DXPRESS=1,它支持Microsoft XPRESS压缩。
这要求Windows 10或更新版本能够可靠地工作,并且不与旧版本的Windows向后兼容。
目前,我们构建的RocksJava版本没有XPRESS。
mkdir build
cd build
set JAVA_HOME="C:\Program Files\Java\jdk1.7.0_80"
set THIRDPARTY_HOME=C:/Users/aretter/code
cmake -G "Visual Studio 14 Win64" -DJNI=1 -DGFLAGS=1 -DSNAPPY=1 -DLZ4=1 -DZLIB=1 -DZSTD=1 -DXPRESS=1 ..
msbuild rocksdb.sln /p:Configuration=Release