Skip to content

Commit 4edf529

Browse files
[cmake] encapsulate target and dependencies
1 parent 3cf91fc commit 4edf529

File tree

6 files changed

+113
-69
lines changed

6 files changed

+113
-69
lines changed

CMakeLists.txt

-24
Original file line numberDiff line numberDiff line change
@@ -54,30 +54,6 @@ include(CTest)
5454
include(FetchContent)
5555
include(GNUInstallDirs)
5656

57-
FetchContent_Declare(
58-
eigen
59-
GIT_REPOSITORY "https://gitlab.com/libeigen/eigen.git"
60-
FIND_PACKAGE_ARGS NAMES Eigen3)
61-
62-
FetchContent_Declare(
63-
fmt
64-
GIT_REPOSITORY "https://github.com/fmtlib/fmt.git"
65-
FIND_PACKAGE_ARGS NAMES FMT)
66-
67-
FetchContent_Declare(
68-
google_benchmark
69-
GIT_REPOSITORY "https://github.com/google/benchmark.git"
70-
GIT_TAG "main"
71-
FIND_PACKAGE_ARGS NAMES benchmark)
72-
73-
FetchContent_Declare(
74-
google_test
75-
GIT_REPOSITORY "https://github.com/google/googletest.git"
76-
GIT_TAG "main"
77-
FIND_PACKAGE_ARGS NAMES GTest)
78-
79-
FetchContent_MakeAvailable(fmt google_test google_benchmark eigen)
80-
8157
add_subdirectory(benchmark)
8258
add_subdirectory(include)
8359
add_subdirectory(sample)

INSTALL.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ cmake --build "build" --parallel
1111
sudo cmake --install "build"
1212
```
1313

14-
# Build & Run
14+
# Development Build & Run
1515

1616
## Tests & Samples
1717

18-
Build and run the tests and samples on all platforms:
18+
Build and run the tests and samples:
1919

2020
```shell
2121
git clone --depth 1 "https://github.com/FrancoisCarouge/Kalman.git" "kalman"

benchmark/CMakeLists.txt

+57-16
Original file line numberDiff line numberDiff line change
@@ -38,30 +38,71 @@ For more information, please refer to <https://unlicense.org> ]]
3838

3939
set(PROCESSOR_AFFINITY TRUE)
4040

41-
set(SOURCES "baseline.cpp" "predict_1x1x0.cpp" "predict_1x1x1.cpp"
42-
"update_1x1x0.cpp" "update_1x1x1.cpp")
41+
FetchContent_Declare(
42+
google_benchmark
43+
GIT_REPOSITORY "https://github.com/google/benchmark.git"
44+
GIT_TAG "main"
45+
FIND_PACKAGE_ARGS NAMES benchmark)
46+
47+
FetchContent_Declare(
48+
google_test
49+
GIT_REPOSITORY "https://github.com/google/googletest.git"
50+
GIT_TAG "main"
51+
FIND_PACKAGE_ARGS NAMES GTest)
52+
53+
FetchContent_MakeAvailable(google_test google_benchmark)
54+
55+
foreach(BENCHMARK "baseline.cpp" "predict_1x1x0.cpp" "predict_1x1x1.cpp"
56+
"update_1x1x0.cpp" "update_1x1x1.cpp")
57+
get_filename_component(NAME ${BENCHMARK} NAME_WE)
58+
add_executable(kalman_benchmark_${NAME}_driver ${BENCHMARK})
59+
target_include_directories(kalman_benchmark_${NAME}_driver PRIVATE "."
60+
"include")
61+
target_link_libraries(
62+
kalman_benchmark_${NAME}_driver PRIVATE benchmark::benchmark
63+
benchmark::benchmark_main kalman)
64+
add_test(kalman_benchmark_${NAME} kalman_benchmark_${NAME}_driver
65+
"--benchmark_out=${NAME}.json")
66+
endforeach()
67+
68+
FetchContent_Declare(
69+
eigen
70+
GIT_REPOSITORY "https://gitlab.com/libeigen/eigen.git"
71+
FIND_PACKAGE_ARGS NAMES Eigen3)
72+
73+
FetchContent_MakeAvailable(eigen)
4374

4475
foreach(STATE_SIZE RANGE 1 2)
4576
foreach(OUTPUT_SIZE RANGE 1 2)
4677
configure_file(eigen_update_xx0.cpp
4778
eigen_update_${STATE_SIZE}x${OUTPUT_SIZE}x0.cpp)
48-
list(APPEND SOURCES eigen_update_${STATE_SIZE}x${OUTPUT_SIZE}x0.cpp)
79+
get_filename_component(NAME eigen_update_${STATE_SIZE}x${OUTPUT_SIZE}x0.cpp
80+
NAME_WE)
81+
add_executable(kalman_benchmark_${NAME}_driver
82+
eigen_update_${STATE_SIZE}x${OUTPUT_SIZE}x0.cpp)
83+
target_include_directories(kalman_benchmark_${NAME}_driver
84+
PRIVATE "." "include")
85+
target_link_libraries(
86+
kalman_benchmark_${NAME}_driver
87+
PRIVATE benchmark::benchmark benchmark::benchmark_main Eigen3::Eigen
88+
kalman)
89+
add_test(kalman_benchmark_${NAME} kalman_benchmark_${NAME}_driver
90+
"--benchmark_out=${NAME}.json")
4991
endforeach()
5092
foreach(INPUT_SIZE RANGE 1 2)
5193
configure_file(eigen_predict_x1x.cpp
5294
eigen_predict_${STATE_SIZE}x1x${INPUT_SIZE}.cpp)
53-
list(APPEND SOURCES eigen_predict_${STATE_SIZE}x1x${INPUT_SIZE}.cpp)
95+
get_filename_component(NAME eigen_predict_${STATE_SIZE}x1x${INPUT_SIZE}.cpp
96+
NAME_WE)
97+
add_executable(kalman_benchmark_${NAME}_driver
98+
eigen_predict_${STATE_SIZE}x1x${INPUT_SIZE}.cpp)
99+
target_include_directories(kalman_benchmark_${NAME}_driver
100+
PRIVATE "." "include")
101+
target_link_libraries(
102+
kalman_benchmark_${NAME}_driver
103+
PRIVATE benchmark::benchmark benchmark::benchmark_main Eigen3::Eigen
104+
kalman)
105+
add_test(kalman_benchmark_${NAME} kalman_benchmark_${NAME}_driver
106+
"--benchmark_out=${NAME}.json")
54107
endforeach()
55108
endforeach()
56-
57-
foreach(BENCHMARK ${SOURCES})
58-
get_filename_component(NAME ${BENCHMARK} NAME_WE)
59-
add_executable(kalman_benchmark_${NAME}_driver ${BENCHMARK})
60-
target_include_directories(kalman_benchmark_${NAME}_driver PRIVATE "."
61-
"include")
62-
target_link_libraries(
63-
kalman_benchmark_${NAME}_driver
64-
PRIVATE benchmark::benchmark benchmark::benchmark_main Eigen3::Eigen kalman)
65-
add_test(kalman_benchmark_${NAME} kalman_benchmark_${NAME}_driver
66-
"--benchmark_out=${NAME}.json")
67-
endforeach()

sample/CMakeLists.txt

+20-12
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,27 @@ OTHER DEALINGS IN THE SOFTWARE.
3636
3737
For more information, please refer to <https://unlicense.org> ]]
3838

39-
set(SOURCES
40-
"ekf_4x1x0_soaring.cpp"
41-
"kf_1x1x0_building_height.cpp"
42-
"kf_1x1x0_liquid_temperature.cpp"
43-
"kf_1x1x1_dog_position.cpp"
44-
"kf_2x1x1_rocket_altitude.cpp"
45-
"kf_6x2x0_vehicle_location.cpp"
46-
"kf_8x4x0_deep_sort_bounding_box.cpp")
47-
48-
foreach(SAMPLE ${SOURCES})
39+
foreach(SAMPLE "kf_1x1x0_building_height.cpp" "kf_1x1x0_liquid_temperature.cpp"
40+
"kf_1x1x1_dog_position.cpp")
4941
get_filename_component(NAME ${SAMPLE} NAME_WE)
5042
add_executable(kalman_sample_${NAME}_driver ${SAMPLE})
51-
target_link_libraries(kalman_sample_${NAME}_driver PRIVATE Eigen3::Eigen
52-
kalman main)
43+
target_link_libraries(kalman_sample_${NAME}_driver PRIVATE kalman main)
5344
add_test(kalman_sample_${NAME} kalman_sample_${NAME}_driver)
5445
endforeach()
46+
47+
FetchContent_Declare(
48+
eigen
49+
GIT_REPOSITORY "https://gitlab.com/libeigen/eigen.git"
50+
FIND_PACKAGE_ARGS NAMES Eigen3)
51+
52+
FetchContent_MakeAvailable(eigen)
53+
54+
foreach(SAMPLE_EIGEN
55+
"ekf_4x1x0_soaring.cpp" "kf_2x1x1_rocket_altitude.cpp"
56+
"kf_6x2x0_vehicle_location.cpp" "kf_8x4x0_deep_sort_bounding_box.cpp")
57+
get_filename_component(NAME ${SAMPLE_EIGEN} NAME_WE)
58+
add_executable(kalman_sample_eigen_${NAME}_driver ${SAMPLE_EIGEN})
59+
target_link_libraries(kalman_sample_eigen_${NAME}_driver PRIVATE Eigen3::Eigen
60+
kalman main)
61+
add_test(kalman_sample_eigen_${NAME} kalman_sample_eigen_${NAME}_driver)
62+
endforeach()

support/CMakeLists.txt

+17-3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,20 @@ OTHER DEALINGS IN THE SOFTWARE.
3636
3737
For more information, please refer to <https://unlicense.org> ]]
3838

39-
add_library(format INTERFACE)
40-
target_include_directories(format INTERFACE ".")
41-
target_link_libraries(format INTERFACE fmt::fmt)
39+
if(WIN32)
40+
# Microsoft Windows MSVC CL toolchain supports C++'s standard format library.
41+
# Other compilers don't support it yet. TODO: This platform check is not ideal
42+
# and should be replaced with a check for the compiler library support.
43+
else()
44+
FetchContent_Declare(
45+
fmt
46+
GIT_REPOSITORY "https://github.com/fmtlib/fmt.git"
47+
FIND_PACKAGE_ARGS NAMES FMT)
48+
49+
FetchContent_MakeAvailable(fmt)
50+
51+
add_library(format INTERFACE)
52+
target_sources(format INTERFACE FILE_SET "format_headers" TYPE "HEADERS"
53+
FILES "format")
54+
target_link_libraries(format INTERFACE fmt::fmt)
55+
endif()

test/CMakeLists.txt

+17-12
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,24 @@ OTHER DEALINGS IN THE SOFTWARE.
3636
3737
For more information, please refer to <https://unlicense.org> ]]
3838

39-
set(SOURCES
40-
"eigen_f.cpp"
41-
"eigen_h.cpp"
42-
"eigen_initialization.cpp"
43-
"f.cpp"
44-
"format.cpp"
45-
"h.cpp"
46-
"initialization.cpp")
47-
48-
foreach(TEST ${SOURCES})
39+
foreach(TEST "f.cpp" "format.cpp" "h.cpp" "initialization.cpp")
4940
get_filename_component(NAME ${TEST} NAME_WE)
5041
add_executable(kalman_test_${NAME}_driver ${TEST})
51-
target_link_libraries(kalman_test_${NAME}_driver PRIVATE Eigen3::Eigen kalman
52-
main)
42+
target_link_libraries(kalman_test_${NAME}_driver PRIVATE kalman main)
5343
add_test(kalman_test_${NAME} kalman_test_${NAME}_driver)
5444
endforeach()
45+
46+
FetchContent_Declare(
47+
eigen
48+
GIT_REPOSITORY "https://gitlab.com/libeigen/eigen.git"
49+
FIND_PACKAGE_ARGS NAMES Eigen3)
50+
51+
FetchContent_MakeAvailable(eigen)
52+
53+
foreach(TEST_EIGEN "eigen_f.cpp" "eigen_h.cpp" "eigen_initialization.cpp")
54+
get_filename_component(NAME ${TEST_EIGEN} NAME_WE)
55+
add_executable(kalman_test_eigen_${NAME}_driver ${TEST_EIGEN})
56+
target_link_libraries(kalman_test_eigen_${NAME}_driver PRIVATE Eigen3::Eigen
57+
kalman main)
58+
add_test(kalman_test_eigen_${NAME} kalman_test_eigen_${NAME}_driver)
59+
endforeach()

0 commit comments

Comments
 (0)