Skip to content

Commit 617f579

Browse files
committed
Fix static builds and optimize test compilation
Signed-off-by: Addisu Z. Taddese <addisu@openrobotics.org>
1 parent 284c8ad commit 617f579

File tree

1 file changed

+42
-70
lines changed

1 file changed

+42
-70
lines changed

src/CMakeLists.txt

Lines changed: 42 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ ign_get_libsources_and_unittests(sources gtest_sources)
55
# Add the source file auto-generated into the build folder from sdf/CMakeLists.txt
66
list(APPEND sources EmbeddedSdf.cc)
77

8-
# Use interface library to deduplicate cmake logic for URDF linking
9-
add_library(using_parser_urdf INTERFACE)
8+
# When using the internal URDF parser, we build its sources with the core library
109
if (USE_INTERNAL_URDF)
11-
set(sources ${sources}
10+
set(urdf_internal_sources
1211
urdf/urdf_parser/model.cpp
1312
urdf/urdf_parser/link.cpp
1413
urdf/urdf_parser/joint.cpp
@@ -17,14 +16,7 @@ if (USE_INTERNAL_URDF)
1716
urdf/urdf_parser/urdf_model_state.cpp
1817
urdf/urdf_parser/urdf_sensor.cpp
1918
urdf/urdf_parser/world.cpp)
20-
target_include_directories(using_parser_urdf INTERFACE
21-
${CMAKE_CURRENT_SOURCE_DIR}/urdf)
22-
if (WIN32)
23-
target_compile_definitions(using_parser_urdf INTERFACE -D_USE_MATH_DEFINES)
24-
endif()
25-
else()
26-
target_link_libraries(using_parser_urdf INTERFACE
27-
IgnURDFDOM::IgnURDFDOM)
19+
set(sources ${sources} ${urdf_internal_sources})
2820
endif()
2921

3022
ign_create_core_library(SOURCES ${sources}
@@ -37,8 +29,18 @@ target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME}
3729
ignition-math${IGN_MATH_VER}::ignition-math${IGN_MATH_VER}
3830
ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER}
3931
PRIVATE
40-
TINYXML2::TINYXML2
41-
using_parser_urdf)
32+
TINYXML2::TINYXML2)
33+
34+
if (USE_INTERNAL_URDF)
35+
target_include_directories(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE
36+
${CMAKE_CURRENT_SOURCE_DIR}/urdf)
37+
if (WIN32)
38+
target_compile_definitions(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE -D_USE_MATH_DEFINES)
39+
endif()
40+
else()
41+
target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE
42+
IgnURDFDOM::IgnURDFDOM)
43+
endif()
4244

4345
if (WIN32)
4446
target_compile_definitions(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE URDFDOM_STATIC)
@@ -55,43 +57,7 @@ if (BUILD_TESTING)
5557
list(REMOVE_ITEM gtest_sources ign_TEST.cc)
5658
endif()
5759

58-
# Skip tests that don't work on Windows
59-
if (WIN32)
60-
list(REMOVE_ITEM gtest_sources Converter_TEST.cc)
61-
list(REMOVE_ITEM gtest_sources FrameSemantics_TEST.cc)
62-
list(REMOVE_ITEM gtest_sources ParamPassing_TEST.cc)
63-
list(REMOVE_ITEM gtest_sources Utils_TEST.cc)
64-
list(REMOVE_ITEM gtest_sources XmlUtils_TEST.cc)
65-
list(REMOVE_ITEM gtest_sources parser_urdf_TEST.cc)
66-
endif()
67-
68-
ign_build_tests(
69-
TYPE UNIT
70-
SOURCES ${gtest_sources}
71-
INCLUDE_DIRS
72-
${CMAKE_CURRENT_SOURCE_DIR}
73-
${PROJECT_SOURCE_DIR}/test
74-
)
75-
76-
if (TARGET UNIT_Converter_TEST)
77-
target_link_libraries(UNIT_Converter_TEST
78-
TINYXML2::TINYXML2)
79-
target_sources(UNIT_Converter_TEST PRIVATE
80-
Converter.cc
81-
EmbeddedSdf.cc
82-
XmlUtils.cc)
83-
endif()
84-
85-
if (TARGET UNIT_FrameSemantics_TEST)
86-
target_sources(UNIT_FrameSemantics_TEST PRIVATE FrameSemantics.cc Utils.cc)
87-
target_link_libraries(UNIT_FrameSemantics_TEST TINYXML2::TINYXML2)
88-
endif()
89-
90-
if (TARGET UNIT_ParamPassing_TEST)
91-
target_link_libraries(UNIT_ParamPassing_TEST
92-
TINYXML2::TINYXML2
93-
using_parser_urdf)
94-
target_sources(UNIT_ParamPassing_TEST PRIVATE
60+
add_library(library_for_tests STATIC
9561
Converter.cc
9662
EmbeddedSdf.cc
9763
FrameSemantics.cc
@@ -100,29 +66,35 @@ if (BUILD_TESTING)
10066
Utils.cc
10167
XmlUtils.cc
10268
parser.cc
103-
parser_urdf.cc)
104-
endif()
69+
parser_urdf.cc
70+
)
10571

106-
if (TARGET UNIT_Utils_TEST)
107-
target_sources(UNIT_Utils_TEST PRIVATE Utils.cc)
108-
target_link_libraries(UNIT_Utils_TEST TINYXML2::TINYXML2)
109-
endif()
72+
target_link_libraries(library_for_tests PUBLIC
73+
${PROJECT_LIBRARY_TARGET_NAME}
74+
# Also link against the privately linked libraries of the core library
75+
$<TARGET_PROPERTY:${PROJECT_LIBRARY_TARGET_NAME},LINK_LIBRARIES>
76+
)
11077

111-
if (TARGET UNIT_XmlUtils_TEST)
112-
target_link_libraries(UNIT_XmlUtils_TEST
113-
TINYXML2::TINYXML2)
114-
target_sources(UNIT_XmlUtils_TEST PRIVATE XmlUtils.cc)
115-
endif()
78+
# Use the private include flags from the core library
79+
target_include_directories(library_for_tests PUBLIC
80+
$<TARGET_PROPERTY:${PROJECT_LIBRARY_TARGET_NAME},INCLUDE_DIRECTORIES>
81+
)
82+
83+
# Use the private comopile flags from the core library
84+
target_compile_definitions(library_for_tests PUBLIC
85+
$<TARGET_PROPERTY:${PROJECT_LIBRARY_TARGET_NAME},COMPILE_DEFINITIONS>
86+
)
87+
88+
ign_build_tests(
89+
TYPE UNIT
90+
SOURCES ${gtest_sources}
91+
INCLUDE_DIRS
92+
${CMAKE_CURRENT_SOURCE_DIR}
93+
${PROJECT_SOURCE_DIR}/test
94+
LIB_DEPS
95+
library_for_tests
96+
)
11697

117-
if (TARGET UNIT_parser_urdf_TEST)
118-
target_link_libraries(UNIT_parser_urdf_TEST
119-
TINYXML2::TINYXML2
120-
using_parser_urdf)
121-
target_sources(UNIT_parser_urdf_TEST PRIVATE
122-
SDFExtension.cc
123-
XmlUtils.cc
124-
parser_urdf.cc)
125-
endif()
12698
endif()
12799

128100
if(NOT WIN32)

0 commit comments

Comments
 (0)