Skip to content

Commit 9bcd786

Browse files
dj2danakj
authored andcommitted
Add cmake notes; make tests optional.
This CL adds some documentation on integrating subspace with CMake. In order to make the integration simpler the test files have been moved inside a `SUBSPACE_BUILD_TESTS` cmake option. This allows disabling the subspace tests when integrating. Issue #226
1 parent bf0cb52 commit 9bcd786

File tree

5 files changed

+171
-115
lines changed

5 files changed

+171
-115
lines changed

CMakeLists.txt

+7-4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ endif()
3333

3434
include(OptionIf)
3535

36+
option_if_not_defined(SUBSPACE_BUILD_TESTS "Build subspace tests" ON)
3637
option_if_not_defined(SUBSPACE_BUILD_CIR "Build CIR (requires LLVM)" ON)
3738
option_if_not_defined(SUBSPACE_BUILD_SUBDOC "Build subdoc (requires LLVM)" ON)
3839

@@ -67,10 +68,12 @@ function(subspace_test_default_compile_options TARGET)
6768
target_link_libraries(${TARGET} gtest_main)
6869
endfunction()
6970

70-
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
71-
add_subdirectory(third_party/googletest)
72-
include(GoogleTest)
73-
enable_testing()
71+
if(${SUBSPACE_BUILD_TESTS})
72+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
73+
add_subdirectory(third_party/googletest)
74+
include(GoogleTest)
75+
enable_testing()
76+
endif()
7477

7578
add_subdirectory(subspace)
7679

README.md

+46-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[![CI](https://github.com/chromium/subspace/actions/workflows/ci.yml/badge.svg)](https://github.com/chromium/subspace/actions/workflows/ci.yml)
22
[![hdoc](https://github.com/chromium/subspace/actions/workflows/hdoc.yml/badge.svg)](https://docs.hdoc.io/danakj/subspace/)
33
[![sub-doc](https://github.com/chromium/subspace/actions/workflows/subdoc.yml/badge.svg)](https://danakj.github.io/subspace-docs/sus.html)
4-
<!---
4+
<!---
55
[![clang-doc](https://github.com/chromium/subspace/actions/workflows/clang-doc.yml/badge.svg)](https://danakj.github.io/subspace-docs/sus/#Namespaces)
66
-->
77
# Subspace Library
@@ -86,6 +86,51 @@ Then use VSCode to choose a build configuration and run the "CMake: Build" and
8686
On windows, set the environment variable `LLVM_DEBUG=1` if the LLVM build was a
8787
debug build in order for CIR to link the appropriate runtime.
8888

89+
# Using Subspace with CMake
90+
91+
If you're looking to use Subspace in a project, CMake and `git submodules` can be used to help
92+
integrate the subspace library.
93+
94+
## Add `subspace` as a submodule
95+
* `git submodule add https://github.com/chromium/subspace third_party/subspace`
96+
97+
## CMakeLists.txt
98+
99+
```
100+
cmake_minimum_required(VERSION 3.25)
101+
102+
project(subspace-example VERSION 0.1.0)
103+
104+
set(CMAKE_CXX_STANDARD 20)
105+
set(CMAKE_CXX_STANDARD_REQUIRED True)
106+
107+
SET(SUBSPACE_BUILD_CIR OFF)
108+
SET(SUBSPACE_BUILD_SUBDOC OFF)
109+
SET(SUBSPACE_BUILD_TESTS OFF)
110+
add_subdirectory(third_party/subspace)
111+
112+
add_executable(subspace-example src/main.cc)
113+
target_link_libraries(subspace-example PRIVATE subspace::lib)
114+
```
115+
116+
## src/main.cc
117+
```
118+
#include "subspace/assertions/check.h"
119+
120+
int main() {
121+
sus::assertions::check(false);
122+
return 0;
123+
}
124+
```
125+
126+
## Building
127+
```
128+
mkdir -p out/Debug
129+
cd out/Debug
130+
CXX=clang++ cmake -GNinja ../..
131+
ninja
132+
```
133+
89134
# Copyright
90135

91136
All source files must include this header:

cir/CMakeLists.txt

+13-11
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,6 @@ add_executable(cir
3535
"cir_main.cc"
3636
)
3737

38-
add_executable(cir_unittests
39-
"tests/cir_test.h"
40-
"tests/smoke_unittest.cc"
41-
)
42-
4338
# cir_lib
4439
subspace_default_compile_options(cir_lib)
4540

@@ -95,13 +90,20 @@ target_link_libraries(cir_lib
9590
clangTransformer
9691
)
9792

98-
# cir_unittests
99-
subspace_test_default_compile_options(cir_unittests)
100-
target_link_libraries(cir_unittests cir::lib)
101-
102-
gtest_discover_tests(cir_unittests)
103-
10493
# cir binary
10594
subspace_default_compile_options(cir)
10695
target_link_libraries(cir cir::lib)
10796

97+
if(${SUBSPACE_BUILD_TESTS})
98+
add_executable(cir_unittests
99+
"tests/cir_test.h"
100+
"tests/smoke_unittest.cc"
101+
)
102+
103+
# cir_unittests
104+
subspace_test_default_compile_options(cir_unittests)
105+
target_link_libraries(cir_unittests cir::lib)
106+
107+
gtest_discover_tests(cir_unittests)
108+
endif()
109+

subdoc/CMakeLists.txt

+25-22
Original file line numberDiff line numberDiff line change
@@ -46,22 +46,6 @@ add_executable(subdoc
4646
"subdoc_main.cc"
4747
)
4848

49-
add_executable(subdoc_unittests
50-
"gen_tests/gen_tests.cc"
51-
"tests/fields_unittest.cc"
52-
"tests/functions_unittest.cc"
53-
"tests/include_exclude_unittest.cc"
54-
"tests/inherit_unittest.cc"
55-
"tests/macros_unittest.cc"
56-
"tests/markdown_unittest.cc"
57-
"tests/methods_unittest.cc"
58-
"tests/records_unittest.cc"
59-
"tests/styles_unittest.cc"
60-
"tests/types_unittest.cc"
61-
"tests/subdoc_gen_test.h"
62-
"tests/subdoc_test.h"
63-
)
64-
6549
# subdoc_lib
6650
subspace_default_compile_options(subdoc_lib)
6751

@@ -117,12 +101,31 @@ target_link_libraries(subdoc_lib
117101
clangTransformer
118102
)
119103

120-
# subdoc_unittests
121-
subspace_test_default_compile_options(subdoc_unittests)
122-
target_link_libraries(subdoc_unittests subdoc::lib)
123-
124-
gtest_discover_tests(subdoc_unittests)
125-
126104
# subdoc binary
127105
subspace_default_compile_options(subdoc)
128106
target_link_libraries(subdoc subdoc::lib)
107+
108+
if(${SUBSPACE_BUILD_TESTS})
109+
add_executable(subdoc_unittests
110+
"gen_tests/gen_tests.cc"
111+
"tests/fields_unittest.cc"
112+
"tests/functions_unittest.cc"
113+
"tests/include_exclude_unittest.cc"
114+
"tests/inherit_unittest.cc"
115+
"tests/macros_unittest.cc"
116+
"tests/markdown_unittest.cc"
117+
"tests/methods_unittest.cc"
118+
"tests/records_unittest.cc"
119+
"tests/styles_unittest.cc"
120+
"tests/types_unittest.cc"
121+
"tests/subdoc_gen_test.h"
122+
"tests/subdoc_test.h"
123+
)
124+
125+
# subdoc_unittests
126+
subspace_test_default_compile_options(subdoc_unittests)
127+
target_link_libraries(subdoc_unittests subdoc::lib)
128+
129+
gtest_discover_tests(subdoc_unittests)
130+
endif()
131+

subspace/CMakeLists.txt

+80-77
Original file line numberDiff line numberDiff line change
@@ -152,73 +152,6 @@ target_sources(subspace PUBLIC
152152
"lib/lib.cc"
153153
)
154154

155-
add_library(subspace_test_support STATIC "")
156-
add_library(subspace::test_support ALIAS subspace_test_support)
157-
target_sources(subspace_test_support PUBLIC
158-
"test/from_i32.h"
159-
"test/behaviour_types.h"
160-
"test/behaviour_types_unittest.cc"
161-
"test/ensure_use.cc"
162-
"test/ensure_use.h"
163-
"test/no_copy_move.h"
164-
)
165-
166-
add_executable(subspace_unittests
167-
"assertions/check_unittest.cc"
168-
"assertions/endian_unittest.cc"
169-
"assertions/panic_unittest.cc"
170-
"assertions/unreachable_unittest.cc"
171-
"choice/choice_types_unittest.cc"
172-
"choice/choice_unittest.cc"
173-
"convert/subclass_unittest.cc"
174-
"containers/array_unittest.cc"
175-
"containers/slice_unittest.cc"
176-
"containers/vec_unittest.cc"
177-
"construct/from_unittest.cc"
178-
"construct/into_unittest.cc"
179-
"construct/default_unittest.cc"
180-
"fn/fn_box_unittest.cc"
181-
"fn/fn_concepts_unittest.cc"
182-
"fn/fn_ref_unittest.cc"
183-
"iter/compat_ranges_unittest.cc"
184-
"iter/generator_unittest.cc"
185-
"iter/iterator_unittest.cc"
186-
"mem/addressof_unittest.cc"
187-
"mem/clone_unittest.cc"
188-
"mem/move_unittest.cc"
189-
"mem/nonnull_unittest.cc"
190-
"mem/nonnull_types_unittest.cc"
191-
"mem/relocate_unittest.cc"
192-
"mem/replace_unittest.cc"
193-
"mem/size_of_unittest.cc"
194-
"mem/swap_unittest.cc"
195-
"mem/take_unittest.cc"
196-
"num/__private/literals_unittest.cc"
197-
"num/cmath_macros_unittest.cc"
198-
"num/f32_unittest.cc"
199-
"num/f64_unittest.cc"
200-
"num/i8_unittest.cc"
201-
"num/i16_unittest.cc"
202-
"num/i32_unittest.cc"
203-
"num/i64_unittest.cc"
204-
"num/isize_unittest.cc"
205-
"num/u8_unittest.cc"
206-
"num/u16_unittest.cc"
207-
"num/u32_unittest.cc"
208-
"num/u64_unittest.cc"
209-
"num/usize_unittest.cc"
210-
"option/option_unittest.cc"
211-
"option/option_types_unittest.cc"
212-
"ops/eq_unittest.cc"
213-
"ops/ord_unittest.cc"
214-
"ops/range_unittest.cc"
215-
"ptr/swap_unittest.cc"
216-
"result/result_unittest.cc"
217-
"result/result_types_unittest.cc"
218-
"tuple/tuple_types_unittest.cc"
219-
"tuple/tuple_unittest.cc"
220-
)
221-
222155
# Subspace library
223156
subspace_default_compile_options(subspace)
224157

@@ -230,15 +163,85 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
230163
target_compile_options(subspace PUBLIC /D_CRT_USE_BUILTIN_OFFSETOF)
231164
endif()
232165

233-
# Subspace test support
234-
subspace_test_default_compile_options(subspace_test_support)
235-
target_link_libraries(subspace_test_support subspace::lib)
166+
if(${SUBSPACE_BUILD_TESTS})
167+
add_library(subspace_test_support STATIC "")
168+
add_library(subspace::test_support ALIAS subspace_test_support)
169+
target_sources(subspace_test_support PUBLIC
170+
"test/from_i32.h"
171+
"test/behaviour_types.h"
172+
"test/behaviour_types_unittest.cc"
173+
"test/ensure_use.cc"
174+
"test/ensure_use.h"
175+
"test/no_copy_move.h"
176+
)
236177

237-
# Subspace unittests
238-
subspace_test_default_compile_options(subspace_unittests)
239-
target_link_libraries(subspace_unittests
240-
subspace::lib
241-
subspace::test_support
242-
)
178+
add_executable(subspace_unittests
179+
"assertions/check_unittest.cc"
180+
"assertions/endian_unittest.cc"
181+
"assertions/panic_unittest.cc"
182+
"assertions/unreachable_unittest.cc"
183+
"choice/choice_types_unittest.cc"
184+
"choice/choice_unittest.cc"
185+
"convert/subclass_unittest.cc"
186+
"containers/array_unittest.cc"
187+
"containers/slice_unittest.cc"
188+
"containers/vec_unittest.cc"
189+
"construct/from_unittest.cc"
190+
"construct/into_unittest.cc"
191+
"construct/default_unittest.cc"
192+
"fn/fn_box_unittest.cc"
193+
"fn/fn_concepts_unittest.cc"
194+
"fn/fn_ref_unittest.cc"
195+
"iter/compat_ranges_unittest.cc"
196+
"iter/generator_unittest.cc"
197+
"iter/iterator_unittest.cc"
198+
"mem/addressof_unittest.cc"
199+
"mem/clone_unittest.cc"
200+
"mem/move_unittest.cc"
201+
"mem/nonnull_unittest.cc"
202+
"mem/nonnull_types_unittest.cc"
203+
"mem/relocate_unittest.cc"
204+
"mem/replace_unittest.cc"
205+
"mem/size_of_unittest.cc"
206+
"mem/swap_unittest.cc"
207+
"mem/take_unittest.cc"
208+
"num/__private/literals_unittest.cc"
209+
"num/cmath_macros_unittest.cc"
210+
"num/f32_unittest.cc"
211+
"num/f64_unittest.cc"
212+
"num/i8_unittest.cc"
213+
"num/i16_unittest.cc"
214+
"num/i32_unittest.cc"
215+
"num/i64_unittest.cc"
216+
"num/isize_unittest.cc"
217+
"num/u8_unittest.cc"
218+
"num/u16_unittest.cc"
219+
"num/u32_unittest.cc"
220+
"num/u64_unittest.cc"
221+
"num/usize_unittest.cc"
222+
"option/option_unittest.cc"
223+
"option/option_types_unittest.cc"
224+
"ops/eq_unittest.cc"
225+
"ops/ord_unittest.cc"
226+
"ops/range_unittest.cc"
227+
"ptr/swap_unittest.cc"
228+
"result/result_unittest.cc"
229+
"result/result_types_unittest.cc"
230+
"tuple/tuple_types_unittest.cc"
231+
"tuple/tuple_unittest.cc"
232+
)
233+
234+
# Subspace test support
235+
subspace_test_default_compile_options(subspace_test_support)
236+
target_link_libraries(subspace_test_support subspace::lib)
237+
238+
# Subspace unittests
239+
subspace_test_default_compile_options(subspace_unittests)
240+
target_link_libraries(subspace_unittests
241+
subspace::lib
242+
subspace::test_support
243+
)
244+
245+
gtest_discover_tests(subspace_unittests)
246+
endif()
243247

244-
gtest_discover_tests(subspace_unittests)

0 commit comments

Comments
 (0)