Provide a catch-all target for library modules.
authorM. Eric Irrgang <mei2n@virginia.edu>
Fri, 13 Nov 2020 07:39:20 +0000 (07:39 +0000)
committerPaul Bauer <paul.bauer.q@gmail.com>
Fri, 13 Nov 2020 07:39:20 +0000 (07:39 +0000)
Prepare to remove `src/` from global build tree include path.
Existing module headers are accessible through the new `legacy_modules`
target.

Ref #3288

12 files changed:
api/gmxapi/cpp/CMakeLists.txt
api/nblib/CMakeLists.txt
api/nblib/tests/CMakeLists.txt
share/template/CMakeLists.txt
src/gromacs/CMakeLists.txt
src/gromacs/linearalgebra/CMakeLists.txt
src/gromacs/modularsimulator/CMakeLists.txt
src/gromacs/selection/CMakeLists.txt
src/gromacs/trajectoryanalysis/tests/CMakeLists.txt
src/gromacs/utility/tests/CMakeLists.txt
src/programs/CMakeLists.txt
src/programs/mdrun/tests/CMakeLists.txt

index 54e61dbfb76acbec53442b7713e46bc975c81103..1e07928a83f3b2fb18977bccf75060539a3a7e93 100644 (file)
@@ -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)
 
 
 ################################################
index a514d910770c75a6c69c1ef0e7873d723003191c..c62efde351f7a22f819c71db4dd443fa2a52c9a0 100644 (file)
@@ -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
index 67cf8a51dc401e97758140adf72f34857879fc12..05af36c7932ef427ef0467d4acd92351d8a027c6 100644 (file)
@@ -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")
index 47b14d0ef62d6e2187695b6b7f01a4a563803390..00828e711cdf8d63a1116c7e1c11a15ef5ac0e3a 100644 (file)
@@ -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)
index df2147579d1f87d32f273b382ffd7dacdfa62a85..97aca444db2b2a2fc3e9f7e0c368e19273476f6d 100644 (file)
@@ -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
index 75c7ac1037e986db0cfed86c1cf40e8a27b4d03d..449b45f3bac262a8ca3af6ad43f639e7db612b27 100644 (file)
@@ -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)
index 30614ffac87ece02862f1a4f137d244fc2439e10..f3beef27ffcc7d81eb90a283b134bcd5beeeb9b5 100644 (file)
@@ -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
index a0c5e11170737a368f2367866807944b9a8d09cc..63aa3ce35ed392cd876b0e08be65f91ef3f8b407 100644 (file)
@@ -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)
index 0cf63094614388f1d0210730f30ab3acd0101f42..20c5b9386eaa9498f76acae0f33eb840339a92f8 100644 (file)
@@ -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})
index 8bbbc308f2b4e8959d50dffc9d3335befc1274d1..6c9f47a028da308137b694f12b9ce11265cb5535 100644 (file)
@@ -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
index 343202ca15ff561ca68d4fdc79df48ca0b83b332..1b29eb711b6517b1baa10f2c8a6e6e9d5a030912 100644 (file)
@@ -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
index 7c0a67a76338a2a80a11f88ced44d27e30d29148..4a7774237f16fb8d09fbae753fc90c7beb4b1dd9 100644 (file)
@@ -231,4 +231,6 @@ gmx_add_gtest_executable(${exename}
         $<TARGET_OBJECTS:mdrun_objlib>
 )
 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)