Windows上的构建

  1. 这是一个简单的一步步的解释,说明我们如何能够在Microsoft Windows 10 上构建RocksDB(或RocksJava)和所有第三方库。
  2. Windows构建系统已经准备好了,但是我需要反复试验才能构建第三方库并将它们合并到构建中。

必备条件

  1. 1、微软Visual Studio 2015(社区)与"桌面开发与c++"安装
  2. 2CMake 安装
  3. 3、我使用的是Windows Git Bash
  4. 4Mercurial - 我使用64MSI安装程序
  5. 5wget

步骤

  1. 在机器上某个地方创建一个目录,该目录将用作RocksDB源代码及其第三方依赖项的容器。在我的机器上我用C:\\Users\aretter\code,在此的我只会把它作为%CODE_HOME%;可以将其设置为环境变量,即set CODE_HOME=C:\Users\aretter\code
  2. 以下所有操作均在"Developer Command Prompt for VS2015"

构建 GFlags

  1. cd %CODE_HOME%
  2. wget https://github.com/gflags/gflags/archive/v2.2.0.zip
  3. unzip v2.2.0.zip
  4. cd gflags-2.2.0
  5. mkdir target
  6. cd target
  7. cmake -G "Visual Studio 14 Win64" ..
  8. Visual Studio中打开项目,复制Win32平台并选择x64 CPU,创建一个新的x64平台。关闭Visual Studio
  9. msbuild gflags.sln /p:Configuration=Debug /p:Platform=x64
  10. msbuild gflags.sln /p:Configuration=Release /p:Platform=x64
  11. 生成的静态库可以在
  12. %CODE_HOME%\gflags-2.2.0\target\lib\Debug\gflags_static.lib
  13. %CODE_HOME%\gflags-2.2.0\target\lib\Release\gflags_static.lib. 中找到

构建 Snappy

  1. cd %CODE_HOME%
  2. wget https://github.com/google/snappy/archive/1.1.7.zip
  3. unzip 1.1.7.zip
  4. cd snappy-1.1.7
  5. mkdir build
  6. cd build
  7. cmake -DCMAKE_GENERATOR_PLATFORM=x64 ..
  8. msbuild Snappy.sln /p:Configuration=Debug /p:Platform=x64
  9. msbuild Snappy.sln /p:Configuration=Release /p:Platform=x64
  10. 生成的静态库可以在
  11. %CODE_HOME%\snappy-1.1.7\build\Debug\snappy.lib
  12. %CODE_HOME%\snappy-1.1.7\build\Release\snappy.lib. 中找到

构建 LZ4

  1. cd %CODE_HOME%
  2. wget https://github.com/lz4/lz4/archive/v1.7.5.zip
  3. unzip v1.7.5.zip
  4. cd lz4-1.7.5
  5. cd visual\VS2010
  6. devenv lz4.sln /upgrade
  7. msbuild lz4.sln /p:Configuration=Debug /p:Platform=x64
  8. msbuild lz4.sln /p:Configuration=Release /p:Platform=x64
  9. 生成的静态库可以在
  10. %CODE_HOME%\lz4-1.7.5\visual\VS2010\bin\x64_Debug\liblz4_static.lib
  11. %CODE_HOME%\lz4-1.7.5\visual\VS2010\bin\x64_Release\liblz4_static.lib. 中找到

构建 Zlib

  1. cd %CODE_HOME%
  2. wget http://zlib.net/zlib1211.zip
  3. unzip zlib1211.zip
  4. cd zlib-1.2.11\contrib\vstudio\vc14
  5. 编辑文件zlibvc.vcxproj, 更改 <command>cd ..\..\contrib\masmx64 bld_ml64.bat</command> 变为 <command>cd ..\..\masmx64 bld_ml64.bat</command>. masmx64之后添加新行。
  6. "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64_x86\vcvarsamd64_x86.bat"
  7. msbuild zlibvc.sln /p:Configuration=Debug /p:Platform=x64
  8. msbuild zlibvc.sln /p:Configuration=Release /p:Platform=x64
  9. copy x64\ZlibDllDebug\zlibwapi.lib x64\ZlibStatDebug\
  10. copy x64\ZlibDllRelease\zlibwapi.lib x64\ZlibStatRelease\
  11. 生成的静态库可以在
  12. %CODE_HOME%\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibStatDebug\zlibstat.lib
  13. %CODE_HOME%\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibStatRelease\zlibstat.lib. 中找到

构建 ZStd

  1. wget https://github.com/facebook/zstd/archive/v1.3.7.zip
  2. unzip v1.3.7.zip
  3. cd zstd-1.3.7/build/VS2010
  4. devenv zstd.sln /upgrade
  5. msbuild zstd.sln /p:Configuration=Debug /p:Platform=x64
  6. msbuild zstd.sln /p:Configuration=Release /p:Platform=x64
  7. 生成的静态库可以在
  8. %CODE_HOME%\zstd-1.3.7\build\VS2010\bin\x64_Debug\libzstd_static.lib
  9. %CODE_HOME%\zstd-1.3.7\build\VS2010\bin\x64_Release\libzstd_static.lib. 中找到

构建 RocksDB

  1. cd %CODE_HOME%
  2. git clone https://github.com/facebook/rocksdb.git
  3. cd rocksdb
  4. 编辑 %CODE_HOME%\rocksdb\thirdparty.inc 文件 作出如下更改:
  5. set(GFLAGS_HOME $ENV{THIRDPARTY_HOME}/gflags-2.2.0)
  6. set(GFLAGS_INCLUDE ${GFLAGS_HOME}/target/include)
  7. set(GFLAGS_LIB_DEBUG ${GFLAGS_HOME}/target/lib/Debug/gflags_static.lib)
  8. set(GFLAGS_LIB_RELEASE ${GFLAGS_HOME}/target/lib/Release/gflags_static.lib)
  9. set(SNAPPY_HOME $ENV{THIRDPARTY_HOME}/snappy-1.1.7)
  10. set(SNAPPY_INCLUDE ${SNAPPY_HOME} ${SNAPPY_HOME}/build)
  11. set(SNAPPY_LIB_DEBUG ${SNAPPY_HOME}/build/Debug/snappy.lib)
  12. set(SNAPPY_LIB_RELEASE ${SNAPPY_HOME}/build/Release/snappy.lib)
  13. set(LZ4_HOME $ENV{THIRDPARTY_HOME}/lz4-1.7.5)
  14. set(LZ4_INCLUDE ${LZ4_HOME}/lib)
  15. set(LZ4_LIB_DEBUG ${LZ4_HOME}/visual/VS2010/bin/x64_Debug/liblz4_static.lib)
  16. set(LZ4_LIB_RELEASE ${LZ4_HOME}/visual/VS2010/bin/x64_Release/liblz4_static.lib)
  17. set(ZLIB_HOME $ENV{THIRDPARTY_HOME}/zlib-1.2.11)
  18. set(ZLIB_INCLUDE ${ZLIB_HOME})
  19. set(ZLIB_LIB_DEBUG ${ZLIB_HOME}/contrib/vstudio/vc14/x64/ZlibStatDebug/zlibstat.lib)
  20. set(ZLIB_LIB_RELEASE ${ZLIB_HOME}/contrib/vstudio/vc14/x64/ZlibStatRelease/zlibstat.lib)
  21. set(ZSTD_HOME $ENV{THIRDPARTY_HOME}/zstd-1.3.7)
  22. set(ZSTD_INCLUDE ${ZSTD_HOME}/lib ${ZSTD_HOME}/lib/dictBuilder)
  23. set(ZSTD_LIB_DEBUG ${ZSTD_HOME}/build/VS2010/bin/x64_Debug/libzstd_static.lib)
  24. set(ZSTD_LIB_RELEASE ${ZSTD_HOME}/build/VS2010/bin/x64_Release/libzstd_static.lib)
  25. 最后编译RocksDB:
  26. 注意: 默认的CMake构建将生成包含/arch:AVX2标志的MSBuild项目文件。
  27. 如果您有这个CPU扩展指令集,那么生成的二进制文件也只能在其他使用AVX2CPU上运行。
  28. 如果您想创建一个没有特定CPU扩展的构建,那么您还应该在下面的cmake参数中传递-DPORTABLE=1标志。
  29. 注意: 下面的构建选项包括-DXPRESS=1,它支持Microsoft XPRESS压缩。
  30. 这要求Windows 10或更新版本能够可靠地工作,并且不与旧版本的Windows向后兼容。
  31. 目前,我们构建的RocksJava版本没有XPRESS
  32. mkdir build
  33. cd build
  34. set JAVA_HOME="C:\Program Files\Java\jdk1.7.0_80"
  35. set THIRDPARTY_HOME=C:/Users/aretter/code
  36. cmake -G "Visual Studio 14 Win64" -DJNI=1 -DGFLAGS=1 -DSNAPPY=1 -DLZ4=1 -DZLIB=1 -DZSTD=1 -DXPRESS=1 ..
  37. msbuild rocksdb.sln /p:Configuration=Release