From 54d124a388e0145fbfb5f38f2f4e16dd344f3cb8 Mon Sep 17 00:00:00 2001 From: Alexander Zinoviev Date: Thu, 9 Jul 2015 14:42:41 -0700 Subject: [PATCH] Conditional use of third-party libraries --- CMakeLists.txt | 10 +-- thirdparty.inc | 169 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 140 insertions(+), 39 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 679ac13721..b879717efc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,19 @@ -# This cmake build is for Windows only. +# This cmake build is for Windows 64-bit only. # # Prerequisites: # You must have Visual Studio 2013 Update 4 installed. Start the Developer Command Prompt window that is a part of Visual Studio installation. # Run the build commands from within the Developer Command Prompt window to have paths to the compiler and runtime libraries set. +# You must have git.exe in your %PATH% environment variable. # # To build Rocksdb for Windows is as easy as 1-2-3-4-5: # -# 1. Update paths to thirdparty libraries in thirdparty.cmake file +# 1. Update paths to third-party libraries in thirdparty.inc file # 2. Create a new directory for build artifacts # mkdir build # cd build -# 3. Run cmake to generate project files for Windows -# cmake -G "Visual Studio 12 Win64" .. +# 3. Run cmake to generate project files for Windows, add more options to enable required third-party libraries. +# See thirdparty.inc for more information. +# cmake -G "Visual Studio 12 Win64" .. # 4. Then build the project in debug mode (you may want to add /m: flag to run msbuild in parallel threads) # msbuild ALL_BUILD.vcxproj # 5. And release mode (/m: is also supported) diff --git a/thirdparty.inc b/thirdparty.inc index dd43e0c5f7..38422b6f68 100644 --- a/thirdparty.inc +++ b/thirdparty.inc @@ -1,12 +1,20 @@ # Edit definitions below to specify paths to include files and libraries of all 3rd party libraries -# This example assumes all the libraries locate in the same directory tree under THIRDPARTY_HOME environment variable -# Set environment variable THIRDPARTY_HOME to point to your third party libraries home (Unix style dir separators) +# +# Edit these lines to set defaults for use of external libraries +# +set(USE_GFLAGS_DEFAULT 0) # GFLAGS is disabled by default, enable with -DGFLAGS=1 cmake command line agrument +set(USE_SNAPPY_DEFAULT 0) # SNAPPY is disabled by default, enable with -DSNAPPY=1 cmake command line agrument +set(USE_LZ4_DEFAULT 0) # LZ4 is disabled by default, enable with -DLZ4=1 cmake command line agrument +set(USE_ZLIB_DEFAULT 0) # ZLIB is disabled by default, enable with -DZLIB=1 cmake command line agrument +set(USE_JEMALLOC_DEFAULT 0) # JEMALLOC is disabled by default, enable with -DJEMALLOC=1 cmake command line agrument -# Edit these lines to enable/disable external libraries use -set(USE_GFLAGS 1) -set(USE_SNAPPY 1) -set(USE_JEMALLOC 1) +# +# This example assumes all the libraries locate in directories under THIRDPARTY_HOME environment variable +# Set environment variable THIRDPARTY_HOME to point to your third party libraries home (Unix style dir separators) +# or change the paths below to reflect where the libraries actually reside +# +set (THIRDPARTY_LIBS "") # Initialization, don't touch # # Edit these 4 lines to define paths to GFLAGS @@ -16,10 +24,29 @@ set(GFLAGS_INCLUDE ${GFLAGS_HOME}/inc/include) set(GFLAGS_LIB_DEBUG ${GFLAGS_HOME}/bin/debug/amd64/gflags.lib) set(GFLAGS_LIB_RELEASE ${GFLAGS_HOME}/bin/retail/amd64/gflags.lib) +# ================================================== GFLAGS ================================================== +# # Don't touch these lines -set(GFLAGS_CXX_FLAGS -DGFLAGS=gflags) -set(GFLAGS_LIBS debug ${GFLAGS_LIB_DEBUG} optimized ${GFLAGS_LIB_RELEASE}) +# +if (DEFINED GFLAGS) + set(USE_GFLAGS ${GFLAGS}) +else () + set(USE_GFLAGS ${USE_GFLAGS_DEFAULT}) +endif () +if (${USE_GFLAGS} EQUAL 1) + message("GFLAGS library is enabled") + set(GFLAGS_CXX_FLAGS -DGFLAGS=gflags) + set(GFLAGS_LIBS debug ${GFLAGS_LIB_DEBUG} optimized ${GFLAGS_LIB_RELEASE}) + + add_definitions(${GFLAGS_CXX_FLAGS}) + include_directories(${GFLAGS_INCLUDE}) + set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${GFLAGS_LIBS}) +else () + message("GFLAGS library is disabled") +endif () + +# ================================================== SNAPPY ================================================== # # Edit these 4 lines to define paths to Snappy # @@ -28,9 +55,86 @@ set(SNAPPY_INCLUDE ${SNAPPY_HOME}/inc/inc) set(SNAPPY_LIB_DEBUG ${SNAPPY_HOME}/bin/debug/amd64/snappy.lib) set(SNAPPY_LIB_RELEASE ${SNAPPY_HOME}/bin/retail/amd64/snappy.lib) +# # Don't touch these lines -set(SNAPPY_CXX_FLAGS -DSNAPPY) -set(SNAPPY_LIBS debug ${SNAPPY_LIB_DEBUG} optimized ${SNAPPY_LIB_RELEASE}) +# +if (DEFINED SNAPPY) + set(USE_SNAPPY ${SNAPPY}) +else () + set(USE_SNAPPY ${USE_SNAPPY_DEFAULT}) +endif () + +if (${USE_SNAPPY} EQUAL 1) + message("SNAPPY library is enabled") + set(SNAPPY_CXX_FLAGS -DSNAPPY) + set(SNAPPY_LIBS debug ${SNAPPY_LIB_DEBUG} optimized ${SNAPPY_LIB_RELEASE}) + + add_definitions(${SNAPPY_CXX_FLAGS}) + include_directories(${SNAPPY_INCLUDE}) + set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${SNAPPY_LIBS}) +else () + message("SNAPPY library is disabled") +endif () + +# ================================================== LZ4 ================================================== +# +# Edit these 4 lines to define paths to LZ4 +# +set(LZ4_HOME $ENV{THIRDPARTY_HOME}/LZ4.Library) +set(LZ4_INCLUDE ${LZ4_HOME}/inc/include) +set(LZ4_LIB_DEBUG ${LZ4_HOME}/bin/debug/amd64/lz4.lib) +set(LZ4_LIB_RELEASE ${LZ4_HOME}/bin/retail/amd64/lz4.lib) + +# +# Don't touch these lines +# +if (DEFINED LZ4) + set(USE_LZ4 ${LZ4}) +else () + set(USE_LZ4 ${USE_LZ4_DEFAULT}) +endif () + +if (${USE_LZ4} EQUAL 1) + message("LZ4 library is enabled") + set(LZ4_CXX_FLAGS -DLZ4) + set(LZ4_LIBS debug ${LZ4_LIB_DEBUG} optimized ${LZ4_LIB_RELEASE}) + + add_definitions(${LZ4_CXX_FLAGS}) + include_directories(${LZ4_INCLUDE}) + set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${LZ4_LIBS}) +else () + message("LZ4 library is disabled") +endif () + +# ================================================== ZLIB ================================================== +# +# Edit these 4 lines to define paths to ZLIB +# +set(ZLIB_HOME $ENV{THIRDPARTY_HOME}/ZLIB.Library) +set(ZLIB_INCLUDE ${ZLIB_HOME}/inc/include) +set(ZLIB_LIB_DEBUG ${ZLIB_HOME}/bin/debug/amd64/zlib.lib) +set(ZLIB_LIB_RELEASE ${ZLIB_HOME}/bin/retail/amd64/zlib.lib) + +# +# Don't touch these lines +# +if (DEFINED ZLIB) + set(USE_ZLIB ${ZLIB}) +else () + set(USE_ZLIB ${USE_ZLIB_DEFAULT}) +endif () + +if (${USE_ZLIB} EQUAL 1) + message("ZLIB library is enabled") + set(ZLIB_CXX_FLAGS -DZLIB) + set(ZLIB_LIBS debug ${ZLIB_LIB_DEBUG} optimized ${ZLIB_LIB_RELEASE}) + + add_definitions(${ZLIB_CXX_FLAGS}) + include_directories(${ZLIB_INCLUDE}) + set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${ZLIB_LIBS}) +else () + message("ZLIB library is disabled") +endif () # # Edit these 4 lines to define paths to Jemalloc @@ -40,31 +144,26 @@ set(JEMALLOC_INCLUDE ${JEMALLOC_HOME}/inc/include) set(JEMALLOC_LIB_DEBUG ${JEMALLOC_HOME}/bin/debug/amd64/jemalloc.lib) set(JEMALLOC_LIB_RELEASE ${JEMALLOC_HOME}/bin/retail/amd64/jemalloc.lib) +# ================================================== JEMALLOC ================================================== +# # Don't touch these lines -set(JEMALLOC_CXX_FLAGS -DJEMALLOC) -set(JEMALLOC_LIBS debug ${JEMALLOC_LIB_DEBUG} optimized ${JEMALLOC_LIB_RELEASE}) - - -# Aggregate all third-party dependencies - -set (THIRDPARTY_LIBS "") -set (ARTIFACT_SUFFIX "") - -if (${USE_GFLAGS} EQUAL 1) -set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${GFLAGS_LIBS}) -add_definitions(${GFLAGS_CXX_FLAGS}) -include_directories(${GFLAGS_INCLUDE}) -endif (${USE_GFLAGS} EQUAL 1) - -if (${USE_SNAPPY} EQUAL 1) -set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${SNAPPY_LIBS}) -add_definitions(${SNAPPY_CXX_FLAGS}) -include_directories(${SNAPPY_INCLUDE}) -endif (${USE_SNAPPY} EQUAL 1) +# +if (DEFINED JEMALLOC) + set(USE_JEMALLOC ${JEMALLOC}) +else () + set(USE_JEMALLOC ${USE_JEMALLOC_DEFAULT}) +endif () if (${USE_JEMALLOC} EQUAL 1) -set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${JEMALLOC_LIBS}) -add_definitions(${JEMALLOC_CXX_FLAGS}) -include_directories(${JEMALLOC_INCLUDE}) -set (ARTIFACT_SUFFIX "_je") -endif (${USE_JEMALLOC} EQUAL 1) + message("JEMALLOC library is enabled") + set(JEMALLOC_CXX_FLAGS -DJEMALLOC) + set(JEMALLOC_LIBS debug ${JEMALLOC_LIB_DEBUG} optimized ${JEMALLOC_LIB_RELEASE}) + + add_definitions(${JEMALLOC_CXX_FLAGS}) + include_directories(${JEMALLOC_INCLUDE}) + set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${JEMALLOC_LIBS}) + set (ARTIFACT_SUFFIX "_je") +else () + set (ARTIFACT_SUFFIX "") + message("JEMALLOC library is disabled") +endif ()