Skip to content

Commit bb6981f

Browse files
committed
CMake: Fixed duplicate compilation of source files
When the option LITECORE_BUILD_TESTS is on (as it is by default), all the LiteCore source files were compiled twice: once in the regular LiteCoreObjects target and once in LiteCoreUnitTesting. The latter target has the preprocessor symbol `LITECORE_CPPTEST` defined. I've removed the LiteCoreUnitTesting target. Instead, LITECORE_CPPTEST is now defined whenever LITECORE_BUILD_TESTS is on. This means that release builds should use LITECORE_BUILD_TESTS=OFF. If they don't, CMake will issue a warning. I also made LITECORE_BUILD_TESTS default to OFF in release builds. On my MacBook Pro this improved debug build times by ~30%.
1 parent 57962fe commit bb6981f

File tree

8 files changed

+94
-117
lines changed

8 files changed

+94
-117
lines changed

CMakeLists.txt

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ CppTests - A test runner that runs test based on the static library
1111
FleeceObjects - The Fleece serialization library for saving data to a binary format
1212
FleeceBase - A subset of the above for linking into non LiteCore targets
1313
LiteCoreObjects - The precompiled object files containing the logic of LiteCore
14-
LiteCoreUnitTesting - The precompiled object files containing the logic of LiteCore for unit testing.
1514
LiteCoreStatic - The static LiteCore library (LiteCoreObjects linked statically)
1615
LiteCore - The shared LiteCore library (LiteCoreObjects linked dynamically)
1716
LiteCoreREST - A simple library used for enabling testing of the shared library (not used in production)
@@ -88,7 +87,13 @@ option(LITECORE_PERF_TESTING_MODE "Build LiteCore with more things public than i
8887
option(BUILD_ENTERPRISE "Set whether or not to build enterprise edition" OFF)
8988
option(LITECORE_DISABLE_ICU "Disables ICU linking" OFF)
9089
option(DISABLE_LTO_BUILD "Disable build with Link-time optimization" OFF)
91-
option(LITECORE_BUILD_TESTS "Builds C4Tests and CppTests" ON)
90+
91+
if (CMAKE_BUILD_TYPE MATCHES "Debug")
92+
option(LITECORE_BUILD_TESTS "Builds C4Tests and CppTests and defines 'LITECORE_CPPTEST'" ON)
93+
else()
94+
option(LITECORE_BUILD_TESTS "Builds C4Tests and CppTests and defines 'LITECORE_CPPTEST'" OFF)
95+
endif ()
96+
9297
set(LITECORE_PREBUILT_LIB "" CACHE STRING "If set, C4Tests will use the prebuilt LiteCore instead of building it from source")
9398

9499
option(LITECORE_MAINTAINER_MODE "Build the library with official options, disable this to reveal additional options" ON)
@@ -198,7 +203,6 @@ target_compile_definitions(
198203

199204
set_litecore_source(RESULT ALL_SRC_FILES)
200205
add_library(LiteCoreObjects OBJECT ${ALL_SRC_FILES})
201-
add_library(LiteCoreUnitTesting OBJECT ${ALL_SRC_FILES})
202206
set(LiteCoreObjectsDefines
203207
LITECORE_IMPL
204208
LITECORE_CPP_API=1
@@ -208,17 +212,22 @@ target_compile_definitions(
208212
LiteCoreObjects PRIVATE
209213
${LiteCoreObjectsDefines}
210214
)
211-
target_compile_definitions(
212-
LiteCoreUnitTesting PRIVATE
213-
${LiteCoreObjectsDefines}
214-
PUBLIC LITECORE_CPPTEST
215-
)
215+
216+
if (LITECORE_BUILD_TESTS)
217+
if (CMAKE_BUILD_TYPE MATCHES "Rel")
218+
message(WARNING "Release builds should not use LITECORE_BUILD_TESTS!")
219+
endif ()
220+
target_compile_definitions(
221+
LiteCoreObjects PUBLIC
222+
LITECORE_CPPTEST # Some test-specific code is enabled with `#ifdef LITECORE_CPPTEST`
223+
)
224+
endif ()
216225

217226

218227
if(BUILD_ENTERPRISE)
219228
target_compile_definitions(CouchbaseSqlite3
220-
PRIVATE
221-
-DSQLITE_HAS_CODEC # Enables SQLite encryption extension (SEE)
229+
PRIVATE
230+
SQLITE_HAS_CODEC # Enables SQLite encryption extension (SEE)
222231
)
223232
endif()
224233

@@ -260,10 +269,6 @@ target_include_directories(
260269
LiteCoreObjects PRIVATE
261270
${LiteCoreObjectsIncludes}
262271
)
263-
target_include_directories(
264-
LiteCoreUnitTesting PRIVATE
265-
${LiteCoreObjectsIncludes}
266-
)
267272

268273
add_library(LiteCore SHARED $<TARGET_OBJECTS:LiteCoreObjects>)
269274

@@ -300,23 +305,12 @@ target_link_libraries(
300305
mbedtls
301306
mbedx509
302307
)
303-
target_link_libraries(
304-
LiteCoreUnitTesting INTERFACE
305-
SQLite3_UnicodeSN
306-
mbedcrypto
307-
mbedtls
308-
mbedx509
309-
)
310308

311309
if(USE_COUCHBASE_SQLITE)
312310
target_link_libraries(
313311
LiteCoreObjects PUBLIC
314312
CouchbaseSqlite3
315313
)
316-
target_link_libraries(
317-
LiteCoreUnitTesting PUBLIC
318-
CouchbaseSqlite3
319-
)
320314
endif()
321315

322316
install (

LiteCore/tests/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ target_include_directories(
159159

160160
target_link_libraries(
161161
CppTests PRIVATE
162-
LiteCoreUnitTesting
162+
LiteCoreObjects
163163
FleeceObjects
164164
BLIPObjects
165165
LiteCoreREST_Static

cmake/platform_android.cmake

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,20 @@ endfunction()
4848
function(setup_litecore_build)
4949
setup_litecore_build_linux()
5050

51-
foreach(liteCoreVariant LiteCoreObjects LiteCoreUnitTesting)
52-
target_compile_definitions(
53-
${liteCoreVariant} PRIVATE
54-
-DLITECORE_USES_ICU=1
55-
)
56-
57-
target_include_directories(
58-
${liteCoreVariant} PRIVATE
59-
LiteCore/Android
60-
)
61-
62-
target_link_libraries(
63-
${liteCoreVariant} INTERFACE
64-
zlibstatic
65-
)
66-
endforeach()
51+
target_compile_definitions(
52+
LiteCoreObjects PRIVATE
53+
-DLITECORE_USES_ICU=1
54+
)
55+
56+
target_include_directories(
57+
LiteCoreObjects PRIVATE
58+
LiteCore/Android
59+
)
60+
61+
target_link_libraries(
62+
LiteCoreObjects INTERFACE
63+
zlibstatic
64+
)
6765

6866
target_compile_options(
6967
CouchbaseSqlite3 PRIVATE

cmake/platform_apple.cmake

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,17 @@ endfunction()
3434
function(setup_litecore_build)
3535
setup_litecore_build_unix()
3636

37-
foreach(liteCoreVariant LiteCoreObjects LiteCoreUnitTesting)
38-
target_compile_definitions(
39-
${liteCoreVariant} PUBLIC
40-
-DPERSISTENT_PRIVATE_KEY_AVAILABLE
41-
)
42-
target_link_libraries(
43-
${liteCoreVariant} INTERFACE
44-
"-framework Security"
45-
"-framework SystemConfiguration"
46-
)
47-
endforeach()
37+
target_compile_definitions(
38+
LiteCoreObjects PUBLIC
39+
-DPERSISTENT_PRIVATE_KEY_AVAILABLE
40+
)
41+
target_link_libraries(
42+
LiteCoreObjects INTERFACE
43+
"-framework Security"
44+
"-framework SystemConfiguration"
45+
)
4846

49-
foreach(platform LiteCoreObjects LiteCoreUnitTesting BLIPObjects)
47+
foreach(platform LiteCoreObjects BLIPObjects)
5048
target_compile_options(
5149
${platform} PRIVATE
5250
"-Wformat"

cmake/platform_linux.cmake

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -58,39 +58,32 @@ function(setup_litecore_build_linux)
5858
setup_litecore_build_unix()
5959

6060
if(LITECORE_DYNAMIC_ICU)
61-
foreach(liteCoreVariant LiteCoreObjects LiteCoreUnitTesting)
62-
target_compile_definitions(
63-
${liteCoreVariant} PRIVATE
64-
-DCBL_USE_ICU_SHIM
65-
-DLITECORE_USES_ICU=1
66-
)
67-
endforeach()
61+
target_compile_definitions(
62+
LiteCoreObjects PRIVATE
63+
-DCBL_USE_ICU_SHIM
64+
-DLITECORE_USES_ICU=1
65+
)
6866
elseif(NOT LITECORE_DISABLE_ICU)
69-
foreach(liteCoreVariant LiteCoreObjects LiteCoreUnitTesting)
70-
target_compile_definitions(
71-
${liteCoreVariant} PRIVATE
72-
-DLITECORE_USES_ICU=1
73-
)
67+
target_compile_definitions(
68+
LiteCoreObjects PRIVATE
69+
-DLITECORE_USES_ICU=1
70+
)
7471

75-
target_link_libraries(
76-
${liteCoreVariant} INTERFACE
77-
${ICU_LIBS}
78-
)
79-
endforeach()
72+
target_link_libraries(
73+
LiteCoreObjects INTERFACE
74+
${ICU_LIBS}
75+
)
8076
endif()
8177

82-
foreach(liteCoreVariant LiteCoreObjects LiteCoreUnitTesting)
83-
target_include_directories(
84-
${liteCoreVariant} PRIVATE
85-
LiteCore/Unix
86-
)
87-
endforeach()
78+
target_include_directories(
79+
LiteCoreObjects PRIVATE
80+
LiteCore/Unix
81+
)
8882

89-
foreach(platform LiteCoreObjects LiteCoreUnitTesting BLIPObjects)
83+
foreach(platform LiteCoreObjects BLIPObjects)
9084
target_compile_options(
9185
${platform} PRIVATE
9286
"-Wformat=2"
9387
)
9488
endforeach()
9589
endfunction()
96-

cmake/platform_linux_desktop.cmake

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,10 @@ function(setup_litecore_build)
8787
)
8888
endforeach()
8989

90-
foreach(liteCoreVariant LiteCoreObjects LiteCoreUnitTesting)
91-
target_link_libraries(
92-
${liteCoreVariant} INTERFACE
93-
Threads::Threads
94-
)
95-
endforeach()
90+
target_link_libraries(
91+
LiteCoreObjects INTERFACE
92+
Threads::Threads
93+
)
9694
endfunction()
9795

9896
function(setup_rest_build)

cmake/platform_unix.cmake

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ function(setup_litecore_build_unix)
3535
if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
3636
# GNU and Linux clang LTO can't seem to handle any of this...at least not with the versions I tried.
3737
# Unexplained linker errors occur.
38-
set_property(TARGET LiteCoreObjects LiteCoreUnitTesting PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
39-
set_property(TARGET FleeceStatic PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
38+
set_property(TARGET LiteCoreObjects PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
39+
set_property(TARGET FleeceStatic PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
4040
endif()
4141

4242
set_property(TARGET LiteCore PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
@@ -75,17 +75,15 @@ function(setup_litecore_build_unix)
7575
-Werror=strict-prototypes
7676
)
7777

78-
foreach(liteCoreVariant LiteCoreObjects LiteCoreUnitTesting)
79-
target_compile_options(${liteCoreVariant} PRIVATE
80-
${LITECORE_WARNINGS}
81-
-Wformat=2
82-
-fstack-protector
83-
-D_FORTIFY_SOURCE=2
84-
$<$<COMPILE_LANGUAGE:CXX>:-Wno-psabi;-Wno-odr>
85-
$<$<COMPILE_LANGUAGE:CXX>:${LITECORE_CXX_WARNINGS}>
86-
$<$<COMPILE_LANGUAGE:C>:${LITECORE_C_WARNINGS}>
87-
)
88-
endforeach()
78+
target_compile_options(LiteCoreObjects PRIVATE
79+
${LITECORE_WARNINGS}
80+
-Wformat=2
81+
-fstack-protector
82+
-D_FORTIFY_SOURCE=2
83+
$<$<COMPILE_LANGUAGE:CXX>:-Wno-psabi;-Wno-odr>
84+
$<$<COMPILE_LANGUAGE:CXX>:${LITECORE_CXX_WARNINGS}>
85+
$<$<COMPILE_LANGUAGE:C>:${LITECORE_C_WARNINGS}>
86+
)
8987

9088
target_compile_options(BLIPObjects PRIVATE
9189
${LITECORE_WARNINGS}

cmake/platform_win.cmake

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -50,25 +50,23 @@ function(setup_globals)
5050
endfunction()
5151

5252
function(setup_litecore_build_win)
53-
foreach(liteCoreVariant LiteCoreObjects LiteCoreUnitTesting)
54-
target_compile_definitions(
55-
${liteCoreVariant} PRIVATE
56-
-DUNICODE # Use wide string variants for Win32 calls
57-
-D_UNICODE # Ditto
58-
-D_USE_MATH_DEFINES # Define math constants like PI
59-
-DWIN32 # Identify as WIN32
60-
-DNOMINMAX # Disable min/max macros (they interfere with std::min and max)
61-
PUBLIC
62-
-DLITECORE_EXPORTS # Export functions marked CBL_CORE_API, etc
63-
-DPERSISTENT_PRIVATE_KEY_AVAILABLE
64-
)
53+
target_compile_definitions(
54+
LiteCoreObjects PRIVATE
55+
-DUNICODE # Use wide string variants for Win32 calls
56+
-D_UNICODE # Ditto
57+
-D_USE_MATH_DEFINES # Define math constants like PI
58+
-DWIN32 # Identify as WIN32
59+
-DNOMINMAX # Disable min/max macros (they interfere with std::min and max)
60+
PUBLIC
61+
-DLITECORE_EXPORTS # Export functions marked CBL_CORE_API, etc
62+
-DPERSISTENT_PRIVATE_KEY_AVAILABLE
63+
)
6564

66-
target_include_directories(
67-
${liteCoreVariant} PRIVATE
68-
MSVC
69-
vendor/fleece/MSVC
70-
)
71-
endforeach()
65+
target_include_directories(
66+
LiteCoreObjects PRIVATE
67+
MSVC
68+
vendor/fleece/MSVC
69+
)
7270

7371
target_include_directories(
7472
LiteCore PRIVATE
@@ -77,7 +75,7 @@ function(setup_litecore_build_win)
7775
)
7876

7977
# Link with subproject libz and Windows sockets lib
80-
foreach(liteCoreVariant LiteCoreObjects LiteCoreUnitTesting)
78+
foreach(liteCoreVariant LiteCoreObjects)
8179
target_link_libraries(
8280
${liteCoreVariant} INTERFACE
8381
zlibstatic

0 commit comments

Comments
 (0)