From 312e89c3c81f60aa576c64d098cd2c26f417d3d1 Mon Sep 17 00:00:00 2001 From: "M. Eric Irrgang" Date: Fri, 13 Nov 2020 07:39:20 +0000 Subject: [PATCH] Provide a catch-all target for library modules. Prepare to remove `src/` from global build tree include path. Existing module headers are accessible through the new `legacy_modules` target. Ref #3288 --- api/gmxapi/cpp/CMakeLists.txt | 2 ++ api/nblib/CMakeLists.txt | 2 ++ api/nblib/tests/CMakeLists.txt | 2 ++ share/template/CMakeLists.txt | 2 +- src/gromacs/CMakeLists.txt | 6 ++++++ src/gromacs/linearalgebra/CMakeLists.txt | 3 +++ src/gromacs/modularsimulator/CMakeLists.txt | 2 ++ src/gromacs/selection/CMakeLists.txt | 2 ++ src/gromacs/trajectoryanalysis/tests/CMakeLists.txt | 3 ++- src/gromacs/utility/tests/CMakeLists.txt | 2 ++ src/programs/CMakeLists.txt | 12 ++++++++---- src/programs/mdrun/tests/CMakeLists.txt | 2 ++ 12 files changed, 34 insertions(+), 6 deletions(-) diff --git a/api/gmxapi/cpp/CMakeLists.txt b/api/gmxapi/cpp/CMakeLists.txt index 54e61dbfb7..1e07928a83 100644 --- a/api/gmxapi/cpp/CMakeLists.txt +++ b/api/gmxapi/cpp/CMakeLists.txt @@ -85,6 +85,8 @@ set_target_properties(gmxapi PROPERTIES target_link_libraries(gmxapi PRIVATE libgromacs) target_link_libraries(gmxapi PRIVATE common) +# TODO: Explicitly link specific modules: mdlib, mdtypes, utility, commandline +target_link_libraries(gmxapi PRIVATE legacy_modules) ################################################ diff --git a/api/nblib/CMakeLists.txt b/api/nblib/CMakeLists.txt index a514d91077..c62efde351 100644 --- a/api/nblib/CMakeLists.txt +++ b/api/nblib/CMakeLists.txt @@ -125,6 +125,8 @@ include_directories(BEFORE ${CMAKE_SOURCE_DIR}/api) target_link_libraries(nblib PRIVATE common) # There are transitive dependencies on the legacy GROMACS headers. target_link_libraries(nblib PUBLIC legacy_api) +# TODO: Explicitly link specific modules. +target_link_libraries(nblib PRIVATE legacy_modules) install(TARGETS nblib EXPORT nblib diff --git a/api/nblib/tests/CMakeLists.txt b/api/nblib/tests/CMakeLists.txt index 67cf8a51dc..05af36c793 100644 --- a/api/nblib/tests/CMakeLists.txt +++ b/api/nblib/tests/CMakeLists.txt @@ -47,6 +47,8 @@ gmx_add_unit_test_library(nblib_test_infrastructure target_include_directories(nblib_test_infrastructure PRIVATE ${PROJECT_SOURCE_DIR}/api) target_include_directories(nblib_test_infrastructure SYSTEM PRIVATE ${PROJECT_SOURCE_DIR}/src/external) target_link_libraries(nblib_test_infrastructure PRIVATE legacy_api) +# TODO: Explicitly link specific modules: math, +target_link_libraries(nblib_test_infrastructure PRIVATE legacy_modules) set(testname "NbLibSetupTests") set(exename "nblib-setup-test") diff --git a/share/template/CMakeLists.txt b/share/template/CMakeLists.txt index 47b14d0ef6..00828e711c 100644 --- a/share/template/CMakeLists.txt +++ b/share/template/CMakeLists.txt @@ -41,7 +41,7 @@ endif() # This should be removable once object libraries can directly use target_link_libraries # with CMake 3.12, #3290 target_include_directories(template SYSTEM PRIVATE ${PROJECT_SOURCE_DIR}/src/external) -target_link_libraries(template libgromacs ${GMX_EXE_LINKER_FLAGS}) +target_link_libraries(template libgromacs legacy_modules ${GMX_EXE_LINKER_FLAGS}) set(DOCUMENTATION_HTTP_URL_BASE http://jenkins.gromacs.org/job/Documentation_Nightly_master/javadoc) diff --git a/src/gromacs/CMakeLists.txt b/src/gromacs/CMakeLists.txt index df2147579d..97aca444db 100644 --- a/src/gromacs/CMakeLists.txt +++ b/src/gromacs/CMakeLists.txt @@ -187,6 +187,12 @@ else() add_library(libgromacs ${LIBGROMACS_SOURCES}) endif() target_link_libraries(libgromacs PRIVATE common) +# As long as the libgromacs target has source files that reference headers from +# modules that don't provide CMake targets, libgromacs needs to use `src/` +# amongst its include directories (to support `#include "gromacs/module/header.h"`). +add_library(legacy_modules INTERFACE) +target_include_directories(legacy_modules INTERFACE ${CMAKE_SOURCE_DIR}/src) +target_link_libraries(libgromacs PRIVATE legacy_modules) # Add these contents first because linking their tests can take a lot # of time, so we want lots of parallel work still available after diff --git a/src/gromacs/linearalgebra/CMakeLists.txt b/src/gromacs/linearalgebra/CMakeLists.txt index 75c7ac1037..449b45f3ba 100644 --- a/src/gromacs/linearalgebra/CMakeLists.txt +++ b/src/gromacs/linearalgebra/CMakeLists.txt @@ -67,5 +67,8 @@ else() gmx_target_warning_suppression(linearalgebra -Wno-stringop-truncation HAS_NO_STRINGOP_TRUNCATION) endif() target_link_libraries(linearalgebra PRIVATE legacy_api) +target_link_libraries(linearalgebra PRIVATE common) +# TODO: Link specific modules. +target_link_libraries(linearalgebra PRIVATE legacy_modules) list(APPEND libgromacs_object_library_dependencies linearalgebra) set(libgromacs_object_library_dependencies ${libgromacs_object_library_dependencies} PARENT_SCOPE) diff --git a/src/gromacs/modularsimulator/CMakeLists.txt b/src/gromacs/modularsimulator/CMakeLists.txt index 30614ffac8..f3beef27ff 100644 --- a/src/gromacs/modularsimulator/CMakeLists.txt +++ b/src/gromacs/modularsimulator/CMakeLists.txt @@ -41,6 +41,8 @@ target_compile_definitions(modularsimulator PRIVATE HAVE_CONFIG_H) # Should be possible to remove this when resolving #3290 target_include_directories(modularsimulator SYSTEM BEFORE PRIVATE ${PROJECT_SOURCE_DIR}/src/external/thread_mpi/include) target_link_libraries(modularsimulator PRIVATE legacy_api) +# TODO: Use explicit module dependencies. +target_link_libraries(modularsimulator PRIVATE legacy_modules) if(GMX_OPENMP) # Explicitly set properties for modular simulator module to compile with openmp diff --git a/src/gromacs/selection/CMakeLists.txt b/src/gromacs/selection/CMakeLists.txt index a0c5e11170..63aa3ce35e 100644 --- a/src/gromacs/selection/CMakeLists.txt +++ b/src/gromacs/selection/CMakeLists.txt @@ -57,6 +57,8 @@ else() gmx_target_warning_suppression(scanner -Wno-null-conversion HAS_NO_NULL_CONVERSIONS) endif() target_link_libraries(scanner PRIVATE legacy_api) +# TODO: Use explicit module dependencies. +target_link_libraries(scanner PRIVATE legacy_modules) list(APPEND libgromacs_object_library_dependencies scanner) set(libgromacs_object_library_dependencies ${libgromacs_object_library_dependencies} PARENT_SCOPE) diff --git a/src/gromacs/trajectoryanalysis/tests/CMakeLists.txt b/src/gromacs/trajectoryanalysis/tests/CMakeLists.txt index 0cf6309461..20c5b9386e 100644 --- a/src/gromacs/trajectoryanalysis/tests/CMakeLists.txt +++ b/src/gromacs/trajectoryanalysis/tests/CMakeLists.txt @@ -59,4 +59,5 @@ target_link_libraries(trajectoryanalysis-test PRIVATE analysisdata-test-shared) target_link_libraries(trajectoryanalysis-test PRIVATE common) add_executable(test_selection ${UNITTEST_TARGET_OPTIONS} test_selection.cpp) -target_link_libraries(test_selection PRIVATE common libgromacs ${GMX_EXE_LINKER_FLAGS}) +# TODO: Explicitly link to module dependencies. +target_link_libraries(test_selection PRIVATE common libgromacs legacy_modules ${GMX_EXE_LINKER_FLAGS}) diff --git a/src/gromacs/utility/tests/CMakeLists.txt b/src/gromacs/utility/tests/CMakeLists.txt index 8bbbc308f2..6c9f47a028 100644 --- a/src/gromacs/utility/tests/CMakeLists.txt +++ b/src/gromacs/utility/tests/CMakeLists.txt @@ -59,6 +59,8 @@ gmx_add_unit_test(UtilityUnitTests utility-test textwriter.cpp typetraits.cpp ) +# TODO: Explicitly link specific modules. +target_link_libraries(utility-test PRIVATE legacy_modules) gmx_add_mpi_unit_test(UtilityMpiUnitTests utility-mpi-test 4 CPP_SOURCE_FILES diff --git a/src/programs/CMakeLists.txt b/src/programs/CMakeLists.txt index 343202ca15..1b29eb711b 100644 --- a/src/programs/CMakeLists.txt +++ b/src/programs/CMakeLists.txt @@ -43,6 +43,8 @@ target_include_directories(mdrun_objlib SYSTEM BEFORE PRIVATE ${PROJECT_SOURCE_D target_include_directories(mdrun_objlib SYSTEM PRIVATE ${PROJECT_SOURCE_DIR}/src/external) target_link_libraries(mdrun_objlib PRIVATE common) target_link_libraries(mdrun_objlib PRIVATE legacy_api) +# TODO: Explicitly link specific modules. +target_link_libraries(mdrun_objlib PRIVATE common legacy_modules) if(GMX_FAHCORE) # The lack of a real source file here alongside the object library @@ -76,11 +78,13 @@ else() gmx_target_compile_options(view_objlib) target_compile_definitions(view_objlib PRIVATE HAVE_CONFIG_H) target_include_directories(view_objlib SYSTEM PRIVATE ${PROJECT_SOURCE_DIR}/src/external) - target_link_libraries(view_objlib PRIVATE common) - target_link_libraries(view_objlib PRIVATE legacy_api) + target_link_libraries(view_objlib PRIVATE common legacy_api) + # TODO: Explicitly link specific modules. + target_link_libraries(view_objlib PRIVATE legacy_modules) add_library(gmx_objlib OBJECT ${GMX_MAIN_SOURCES}) - target_link_libraries(gmx_objlib PRIVATE common) - target_link_libraries(gmx_objlib PRIVATE legacy_api) + target_link_libraries(gmx_objlib PRIVATE common legacy_api) + # TODO: Explicitly link specific modules. + target_link_libraries(gmx_objlib PRIVATE legacy_modules) target_include_directories(gmx_objlib SYSTEM PRIVATE ${PROJECT_SOURCE_DIR}/src/external) target_include_directories(gmx_objlib SYSTEM BEFORE PRIVATE ${PROJECT_SOURCE_DIR}/src/external/thread_mpi/include) add_executable(gmx diff --git a/src/programs/mdrun/tests/CMakeLists.txt b/src/programs/mdrun/tests/CMakeLists.txt index 7c0a67a763..4a7774237f 100644 --- a/src/programs/mdrun/tests/CMakeLists.txt +++ b/src/programs/mdrun/tests/CMakeLists.txt @@ -231,4 +231,6 @@ gmx_add_gtest_executable(${exename} $ ) target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure) +# TODO: Link specific modules: topology +target_link_libraries(${exename} PRIVATE legacy_modules) gmx_register_gtest_test(${testname} ${exename} OPENMP_THREADS 2 INTEGRATION_TEST IGNORE_LEAKS) -- 2.22.0