-
Notifications
You must be signed in to change notification settings - Fork 6.3k
Building on Windows
This is a simple step-by-step explanation of how I was able to build RocksDB (or RocksJava) and all of the 3rd-party libraries on Microsoft Windows 10. The Windows build system was already in place, however it took some trial-and-error for me to be able to build the 3rd-party libraries and incorporate them into the build.
- Microsoft Visual Studio 2015 (Community) with "Desktop development with C++" installed
- CMake
- Git - I used the Windows Git Bash.
- Mercurial - I used the 64bit MSI installer
- wget
Create a directory somewhere on your machine that will be used a container for both the RocksDB source code and that of its 3rd-party dependencies. On my machine I used C:\Users\aretter\code
, from hereon in I will just refer to it as %CODE_HOME%
; which can be set as an environment variable, i.e. SET CODE_HOME=C:\Users\aretter\code
.
All of the following is executed from the "Developer Command Prompt for VS2015":
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" ..
Open the project in Visual Studio, create a new x64 Platform by copying the Win32 platform and selecting x64 CPU. Close Visual Studio.
msbuild gflags.sln /p:Configuration=Debug /p:Platform=x64
msbuild gflags.sln /p:Configuration=Release /p:Platform=x64
The resultant static library can be found in %CODE_HOME%\gflags-2.2.0\target\lib\Debug\gflags_static.lib
or %CODE_HOME%\gflags-2.2.0\target\lib\Release\gflags_static.lib
.
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 ..
msbuild Snappy.sln /p:Configuration=Debug /p:Platform=x64
msbuild Snappy.sln /p:Configuration=Release /p:Platform=x64
The resultant static library can be found in %CODE_HOME%\snappy-1.1.7\build\Debug\snappy.lib
or %CODE_HOME%\snappy-1.1.7\build\Release\snappy.lib
.
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
The resultant static library can be found in %CODE_HOME%\lz4-1.7.5\visual\VS2010\bin\x64_Debug\liblz4_static.lib
or %CODE_HOME%\lz4-1.7.5\visual\VS2010\bin\x64_Release\liblz4_static.lib
.
cd %CODE_HOME%
wget http://zlib.net/zlib1211.zip
unzip zlib1211.zip
cd zlib-1.2.11\contrib\vstudio\vc14
Edit the file zlibvc.vcxproj
, changing <command>cd ..\..\contrib\masmx64 bld_ml64.bat</command>
to <command>cd ..\..\masmx64 bld_ml64.bat</command>
.
Add a new line after 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\
The resultant static library can be found in %CODE_HOME%\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibStatDebug\zlibstat.lib
or %CODE_HOME%\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibStatRelease\zlibstat.lib
.
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
The resultant static library can be found in %CODE_HOME%\zstd-1.3.7\build\VS2010\bin\x64_Debug\libzstd_static.lib
or %CODE_HOME%\zstd-1.3.7\build\VS2010\bin\x64_Release\libzstd_static.lib
.
cd %CODE_HOME%
git clone https://github.com/facebook/rocksdb.git
cd rocksdb
Edit the file %CODE_HOME%\rocksdb\thirdparty.inc
to have these changes:
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)
And then finally to compile RocksDB:
-
NOTE: The default CMake build will generate MSBuild project files which include the
/arch:AVX2
flag. If you have this CPU extension instruction set, then the generated binaries will also only work on other CPU's with AVX2. If you want to create a build which has no specific CPU extensions, then you should also pass the-DPORTABLE=1
flag in thecmake
arguments below.
mkdir build
cd build
set THIRDPARTY_HOME=%CODE_HOME%
set JAVA_HOME="C:\Program Files\Java\jdk1.7.0_80"
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
Contents
- RocksDB Wiki
- Overview
- RocksDB FAQ
- Terminology
- Requirements
- Contributors' Guide
- Release Methodology
- RocksDB Users and Use Cases
- RocksDB Public Communication and Information Channels
-
Basic Operations
- Iterator
- Prefix seek
- SeekForPrev
- Tailing Iterator
- Compaction Filter
- Multi Column Family Iterator (Experimental)
- Read-Modify-Write (Merge) Operator
- Column Families
- Creating and Ingesting SST files
- Single Delete
- Low Priority Write
- Time to Live (TTL) Support
- Transactions
- Snapshot
- DeleteRange
- Atomic flush
- Read-only and Secondary instances
- Approximate Size
- User-defined Timestamp
- Wide Columns
- BlobDB
- Online Verification
- Options
- MemTable
- Journal
- Cache
- Write Buffer Manager
- Compaction
- SST File Formats
- IO
- Compression
- Full File Checksum and Checksum Handoff
- Background Error Handling
- Huge Page TLB Support
- Tiered Storage (Experimental)
- Logging and Monitoring
- Known Issues
- Troubleshooting Guide
- Tests
- Tools / Utilities
-
Implementation Details
- Delete Stale Files
- Partitioned Index/Filters
- WritePrepared-Transactions
- WriteUnprepared-Transactions
- How we keep track of live SST files
- How we index SST
- Merge Operator Implementation
- RocksDB Repairer
- Write Batch With Index
- Two Phase Commit
- Iterator's Implementation
- Simulation Cache
- [To Be Deprecated] Persistent Read Cache
- DeleteRange Implementation
- unordered_write
- Extending RocksDB
- RocksJava
- Lua
- Performance
- Projects Being Developed
- Misc