Prepare to remove `src/` from global build tree include path.
Existing module headers are accessible through the new `legacy_modules`
target.
Ref #3288
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)
################################################
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
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")
# 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)
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
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)
# 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
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)
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})
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
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
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
$<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)