From fc2090b60ed6be9859b2dca5507593ae176eda59 Mon Sep 17 00:00:00 2001 From: "Addisu Z. Taddese" Date: Wed, 1 Nov 2023 18:30:13 -0500 Subject: [PATCH] Fix static builds and optimize test compilation Signed-off-by: Addisu Z. Taddese --- src/CMakeLists.txt | 104 +++++++++++++++------------------------------ 1 file changed, 34 insertions(+), 70 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e0d6ef245..fc4801fa8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,10 +5,9 @@ ign_get_libsources_and_unittests(sources gtest_sources) # Add the source file auto-generated into the build folder from sdf/CMakeLists.txt list(APPEND sources EmbeddedSdf.cc) -# Use interface library to deduplicate cmake logic for URDF linking -add_library(using_parser_urdf INTERFACE) +# When using the internal URDF parser, we build its sources with the core library if (USE_INTERNAL_URDF) - set(sources ${sources} + set(urdf_internal_sources urdf/urdf_parser/model.cpp urdf/urdf_parser/link.cpp urdf/urdf_parser/joint.cpp @@ -17,14 +16,7 @@ if (USE_INTERNAL_URDF) urdf/urdf_parser/urdf_model_state.cpp urdf/urdf_parser/urdf_sensor.cpp urdf/urdf_parser/world.cpp) - target_include_directories(using_parser_urdf INTERFACE - ${CMAKE_CURRENT_SOURCE_DIR}/urdf) - if (WIN32) - target_compile_definitions(using_parser_urdf INTERFACE -D_USE_MATH_DEFINES) - endif() -else() - target_link_libraries(using_parser_urdf INTERFACE - IgnURDFDOM::IgnURDFDOM) + set(sources ${sources} ${urdf_internal_sources}) endif() ign_create_core_library(SOURCES ${sources} @@ -37,8 +29,15 @@ target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} ignition-math${IGN_MATH_VER}::ignition-math${IGN_MATH_VER} ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} PRIVATE - TINYXML2::TINYXML2 - using_parser_urdf) + TINYXML2::TINYXML2) + + if (NOT USE_INTERNAL_URDF) + target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE + IgnURDFDOM::IgnURDFDOM) + else() + target_include_directories(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/urdf) + endif() if (WIN32) target_compile_definitions(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE URDFDOM_STATIC) @@ -55,43 +54,7 @@ if (BUILD_TESTING) list(REMOVE_ITEM gtest_sources ign_TEST.cc) endif() - # Skip tests that don't work on Windows - if (WIN32) - list(REMOVE_ITEM gtest_sources Converter_TEST.cc) - list(REMOVE_ITEM gtest_sources FrameSemantics_TEST.cc) - list(REMOVE_ITEM gtest_sources ParamPassing_TEST.cc) - list(REMOVE_ITEM gtest_sources Utils_TEST.cc) - list(REMOVE_ITEM gtest_sources XmlUtils_TEST.cc) - list(REMOVE_ITEM gtest_sources parser_urdf_TEST.cc) - endif() - - ign_build_tests( - TYPE UNIT - SOURCES ${gtest_sources} - INCLUDE_DIRS - ${CMAKE_CURRENT_SOURCE_DIR} - ${PROJECT_SOURCE_DIR}/test - ) - - if (TARGET UNIT_Converter_TEST) - target_link_libraries(UNIT_Converter_TEST - TINYXML2::TINYXML2) - target_sources(UNIT_Converter_TEST PRIVATE - Converter.cc - EmbeddedSdf.cc - XmlUtils.cc) - endif() - - if (TARGET UNIT_FrameSemantics_TEST) - target_sources(UNIT_FrameSemantics_TEST PRIVATE FrameSemantics.cc Utils.cc) - target_link_libraries(UNIT_FrameSemantics_TEST TINYXML2::TINYXML2) - endif() - - if (TARGET UNIT_ParamPassing_TEST) - target_link_libraries(UNIT_ParamPassing_TEST - TINYXML2::TINYXML2 - using_parser_urdf) - target_sources(UNIT_ParamPassing_TEST PRIVATE + add_library(library_for_tests STATIC Converter.cc EmbeddedSdf.cc FrameSemantics.cc @@ -100,29 +63,30 @@ if (BUILD_TESTING) Utils.cc XmlUtils.cc parser.cc - parser_urdf.cc) - endif() + parser_urdf.cc + ) - if (TARGET UNIT_Utils_TEST) - target_sources(UNIT_Utils_TEST PRIVATE Utils.cc) - target_link_libraries(UNIT_Utils_TEST TINYXML2::TINYXML2) - endif() + target_link_libraries(library_for_tests PUBLIC + ${PROJECT_LIBRARY_TARGET_NAME} + # Also link against the privately linked libraries of the core library + $ + ) - if (TARGET UNIT_XmlUtils_TEST) - target_link_libraries(UNIT_XmlUtils_TEST - TINYXML2::TINYXML2) - target_sources(UNIT_XmlUtils_TEST PRIVATE XmlUtils.cc) - endif() + # Use the private include flags from the core library + target_include_directories(library_for_tests PUBLIC + $ + ) + + ign_build_tests( + TYPE UNIT + SOURCES ${gtest_sources} + INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${PROJECT_SOURCE_DIR}/test + LIB_DEPS + library_for_tests + ) - if (TARGET UNIT_parser_urdf_TEST) - target_link_libraries(UNIT_parser_urdf_TEST - TINYXML2::TINYXML2 - using_parser_urdf) - target_sources(UNIT_parser_urdf_TEST PRIVATE - SDFExtension.cc - XmlUtils.cc - parser_urdf.cc) - endif() endif() if(NOT WIN32)