diff --git a/rdkit_extensions/CMakeLists.txt b/rdkit_extensions/CMakeLists.txt index ab0fcd6b..4e896735 100644 --- a/rdkit_extensions/CMakeLists.txt +++ b/rdkit_extensions/CMakeLists.txt @@ -44,7 +44,7 @@ target_link_libraries(mmff_optimize INTERFACE ${RDKit_LIBS} CUDA::cudart add_library(rdkit_dist_geom_flattened dist_geom_flattened_builder.cpp) target_link_libraries( rdkit_dist_geom_flattened - PRIVATE ${RDKit_LIBS} device_vector + PRIVATE ${RDKit_LIBS} device_vector nvmolkit_versions PUBLIC dist_geom) add_library(rdkit_bounds_matrix bounds_matrix.cpp) diff --git a/rdkit_extensions/dist_geom_flattened_builder.cpp b/rdkit_extensions/dist_geom_flattened_builder.cpp index 1225ff5e..44605456 100644 --- a/rdkit_extensions/dist_geom_flattened_builder.cpp +++ b/rdkit_extensions/dist_geom_flattened_builder.cpp @@ -9,6 +9,8 @@ #include #include +#include "versions.h" + // No clang-tidy for 1:1 RDKit ports. // NOLINTBEGIN @@ -444,8 +446,8 @@ void addLongRangeDistanceConstraints(nvMolKit::DistGeom::Energy3DForceContribsHo for (unsigned int i = 1; i < numAtoms; ++i) { for (unsigned int j = 0; j < i; ++j) { if (!atomPairs[j * numAtoms + i]) { - const double l = mmat.getLowerBound(i, j); - const double u = mmat.getUpperBound(i, j); + double l = mmat.getLowerBound(i, j); + double u = mmat.getUpperBound(i, j); #if RDKIT_NEW_FLAG_API double fdist = etkdgDetails.boundsMatForceScaling * 10.0; if (!etkdgDetails.constrainedAtoms.empty() && etkdgDetails.constrainedAtoms[i] && diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6f96c791..3debde60 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -96,6 +96,7 @@ target_link_libraries( ff_kernel_utils dist_geom rdkit_dist_geom_flattened + nvmolkit_versions etkdg) add_library(etkdg etkdg.cpp) diff --git a/src/etkdg_stage_stereochem_checks.cu b/src/etkdg_stage_stereochem_checks.cu index 56455dec..3f84b1eb 100644 --- a/src/etkdg_stage_stereochem_checks.cu +++ b/src/etkdg_stage_stereochem_checks.cu @@ -15,6 +15,7 @@ #include "src/etkdg_stage_stereochem_checks.h" #include "src/forcefields/kernel_utils.cuh" +#include "versions.h" namespace nvMolKit { namespace detail { @@ -466,7 +467,7 @@ void ETKDGChiralCheckBase::loadChiralDataset(const ETKDGContext& ctx, idx2Host.push_back(check->d_idx2 + atomIndexOffset); idx3Host.push_back(check->d_idx3 + atomIndexOffset); idx4Host.push_back(check->d_idx4 + atomIndexOffset); -#if (RDKIT_VERSION_MAJOR > 2024 || (RDKIT_VERSION_MAJOR == 2024 && RDKIT_VERSION_MINOR >= 9)) +#if RDKIT_NEW_FLAG_API structureFlagsHost.push_back(check->d_structureFlags); #else structureFlagsHost.push_back(0); diff --git a/src/versions.h.in b/src/versions.h.in index 686d4745..844963d2 100644 --- a/src/versions.h.in +++ b/src/versions.h.in @@ -6,13 +6,11 @@ #define RDKIT_VERSION_PATCH @RDKit_VERSION_PATCH@ -namespace nvMolKit { // Account for API break adding d_structureFlags. Our GPU codepath always includes it, but // for an earlier version we pass in 1.0 to not change results. The CPU API must be adapted here and in -// chiralty ETKDG code. -constexpr bool RDKIT_NEW_FLAG_API = (RDKIT_VERSION_MAJOR > 2024 || (RDKIT_VERSION_MAJOR == 2024 && RDKIT_VERSION_MINOR >= 9)); - - -} // namespace nvMolKit +// chiralty ETKDG code. This must be a preprocessor macro: it gates calls to the ChiralSet structureFlags +// constructor overload, which only exists on RDKit >= 2024.09, so the branch cannot be compiled on older +// versions. Consumers select the codepath with `#if RDKIT_NEW_FLAG_API`. +#define RDKIT_NEW_FLAG_API (RDKIT_VERSION_MAJOR > 2024 || (RDKIT_VERSION_MAJOR == 2024 && RDKIT_VERSION_MINOR >= 9)) #endif // NVMOLKIT_VERSIONS_H \ No newline at end of file