From e154ee08639baa0eddf952201655f6d1313b9b5d Mon Sep 17 00:00:00 2001 From: Dmitri Smirnov Date: Tue, 20 Oct 2015 13:35:08 -0700 Subject: [PATCH] Do not build test only code and unit tests in Release builds Test code errors are currently blocking Windows Release builew We do not want spend time building in Release what we can not run We want to eliminate a source of most frequent errors when people check-in test only code which can not be built in Release. This feature will work only if you invoke msbuild against rocksdb.sln Invoking it against ALL_BUILD target will attempt to build everything. --- CMakeLists.txt | 59 +++++++++++++++++++++++++++++++++++------- appveyor.yml | 2 +- appveyordailytests.yml | 2 +- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 98efe3892..a05e7c887 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,10 +14,15 @@ # 3. Run cmake to generate project files for Windows, add more options to enable required third-party libraries. # See thirdparty.inc for more information. # sample command: cmake -G "Visual Studio 12 Win64" -DGFLAGS=1 -DSNAPPY=1 -DJEMALLOC=1 .. -# 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 +# 4. Then build the project in debug mode (you may want to add /m[:] flag to run msbuild in parallel threads +# or simply /m ot use all avail cores) +# msbuild rocksdb.sln +# +# rocksdb.sln build features exclusions of test only code in Release. If you build ALL_BUILD then everything +# will be attempted but test only code does not build in Release mode. +# # 5. And release mode (/m[:] is also supported) -# msbuild ALL_BUILD.vcxproj /p:Configuration=Release +# msbuild rocksdb.sln /p:Configuration=Release # cmake_minimum_required(VERSION 2.6) @@ -83,6 +88,7 @@ set(LIBS ${ROCKSDB_LIBS} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest) +# Main library source code set(SOURCES db/builder.cc db/c.cc @@ -100,7 +106,6 @@ set(SOURCES db/db_impl_experimental.cc db/db_impl_readonly.cc db/db_iter.cc - db/db_test_util.cc db/event_helpers.cc db/experimental.cc db/filename.cc @@ -252,6 +257,12 @@ set(SOURCES utilities/write_batch_with_index/write_batch_with_index_internal.cc ) +# For test util library that is build only in DEBUG mode +# and linked to tests. Add test only code that is not #ifdefed for Release here. +set(TESTUTIL_SOURCE + db/db_test_util.cc +) + add_library(rocksdblib${ARTIFACT_SUFFIX} ${SOURCES}) set_target_properties(rocksdblib${ARTIFACT_SUFFIX} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/rocksdblib${ARTIFACT_SUFFIX}.pdb") add_dependencies(rocksdblib${ARTIFACT_SUFFIX} GenerateBuildVersion) @@ -367,7 +378,7 @@ set(TESTS utilities/write_batch_with_index/write_batch_with_index_test.cc ) -set(EXES ${APPS} ${TESTS}) +set(EXES ${APPS}) foreach(sourcefile ${EXES}) string(REPLACE ".cc" "" exename ${sourcefile}) @@ -376,12 +387,42 @@ foreach(sourcefile ${EXES}) target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${LIBS}) endforeach(sourcefile ${EXES}) +# test utilities are only build in debug +set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX}) +add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE}) +set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb") +set_target_properties(${TESTUTILLIB} + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1 + EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1 + EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1 + ) + +# Tests are excluded from Release builds +set(TEST_EXES ${TESTS}) + +foreach(sourcefile ${TEST_EXES}) + string(REPLACE ".cc" "" exename ${sourcefile}) + string(REGEX REPLACE "^((.+)/)+" "" exename ${exename}) + add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}) + set_target_properties(${exename}${ARTIFACT_SUFFIX} + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1 + EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1 + EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1 + ) + target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${LIBS} testutillib${ARTIFACT_SUFFIX}) +endforeach(sourcefile ${TEST_EXES}) + # C executables must link to a shared object -set(C_EXES ${C_TESTS}) +set(C_TEST_EXES ${C_TESTS}) -foreach(sourcefile ${C_EXES}) +foreach(sourcefile ${C_TEST_EXES}) string(REPLACE ".c" "" exename ${sourcefile}) string(REGEX REPLACE "^((.+)/)+" "" exename ${exename}) add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}) - target_link_libraries(${exename}${ARTIFACT_SUFFIX} rocksdb${ARTIFACT_SUFFIX}) -endforeach(sourcefile ${C_TESTS}) + set_target_properties(${exename}${ARTIFACT_SUFFIX} + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1 + EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1 + EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1 + ) + target_link_libraries(${exename}${ARTIFACT_SUFFIX} rocksdb${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX}) +endforeach(sourcefile ${C_TEST_EXES}) diff --git a/appveyor.yml b/appveyor.yml index e13e2d226..eb2f63172 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -5,7 +5,7 @@ before_build: - cmake -G "Visual Studio 12 Win64" .. - cd .. build: - project: build\ALL_BUILD.vcxproj + project: build\rocksdb.sln parallel: true verbosity: minimal test: off diff --git a/appveyordailytests.yml b/appveyordailytests.yml index a8b4af60c..0a35ac68b 100644 --- a/appveyordailytests.yml +++ b/appveyordailytests.yml @@ -5,7 +5,7 @@ before_build: - cmake -G "Visual Studio 12 Win64" -DOPTDBG=1 .. - cd .. build: - project: build\ALL_BUILD.vcxproj + project: build\rocksdb.sln parallel: true verbosity: minimal test: -- GitLab