Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions source/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# new in 3.25: RUN_OUTPUT_STDOUT_VARIABLE
cmake_minimum_required(VERSION 3.25.2)
project(DeePMD)
include(CMakePackageConfigHelpers)

option(ENABLE_TENSORFLOW "Enable TensorFlow interface" OFF)
option(ENABLE_PYTORCH "Enable PyTorch interface" OFF)
Expand Down Expand Up @@ -584,34 +585,35 @@ add_custom_target(lammps COMMAND ${CMAKE_COMMAND} -P
${CMAKE_CURRENT_BINARY_DIR}/cmake_lammps.cmake)

# add configure file
if(BUILD_CPP_IF
AND NOT BUILD_PY_IF
AND NOT DEEPMD_C_ROOT)
include(CMakePackageConfigHelpers)
if(BUILD_CPP_IF AND NOT BUILD_PY_IF)
set(targets_export_name
${CMAKE_PROJECT_NAME}Targets
CACHE INTERNAL "")
set(generated_dir
"${CMAKE_CURRENT_BINARY_DIR}/generated"
CACHE INTERNAL "")
set(cmake_files_install_dir
"${CMAKE_INSTALL_PREFIX}/lib/cmake/${CMAKE_PROJECT_NAME}")
set(cmake_files_install_dir "lib/cmake/${CMAKE_PROJECT_NAME}")
set(version_file "${generated_dir}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake")
write_basic_package_version_file(
${version_file}
VERSION $<IF:${GIT_SUMM}?${GIT_SUMM}:0.0.0>
COMPATIBILITY AnyNewerVersion)
install(
EXPORT ${targets_export_name}
NAMESPACE ${CMAKE_PROJECT_NAME}::
DESTINATION ${cmake_files_install_dir})
set(config_file "${generated_dir}/${CMAKE_PROJECT_NAME}Config.cmake")
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in" "${config_file}"
INSTALL_DESTINATION ${cmake_files_install_dir})
install(FILES ${version_file} ${config_file}
DESTINATION ${cmake_files_install_dir})
endif(
BUILD_CPP_IF
AND NOT BUILD_PY_IF
AND NOT DEEPMD_C_ROOT)
if(DEEPMD_C_ROOT)
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/DeePMDImportedTargets.cmake.in"
"${generated_dir}/${targets_export_name}.cmake" @ONLY)
install(FILES "${generated_dir}/${targets_export_name}.cmake"
DESTINATION ${cmake_files_install_dir})
else()
install(
EXPORT ${targets_export_name}
NAMESPACE ${CMAKE_PROJECT_NAME}::
DESTINATION ${cmake_files_install_dir})
endif()
endif()
21 changes: 21 additions & 0 deletions source/api_c/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,27 @@ if(PACKAGE_C)
install(TARGETS ${libname} DESTINATION ${CMAKE_BINARY_DIR}/libdeepmd_c/lib)
install(TARGETS ${LIB_DEEPMD_OP}
DESTINATION ${CMAKE_BINARY_DIR}/libdeepmd_c/lib)

set(cmake_files_install_dir
"${CMAKE_BINARY_DIR}/libdeepmd_c/lib/cmake/${CMAKE_PROJECT_NAME}")
set(targets_export_name ${CMAKE_PROJECT_NAME}Targets)
set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
set(version_file "${generated_dir}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake")
write_basic_package_version_file(
${version_file}
VERSION $<IF:${GIT_SUMM}?${GIT_SUMM}:0.0.0>
COMPATIBILITY AnyNewerVersion)
set(config_file "${generated_dir}/${CMAKE_PROJECT_NAME}Config.cmake")
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/../cmake/Config.cmake.in" "${config_file}"
INSTALL_DESTINATION "lib/cmake/${CMAKE_PROJECT_NAME}")
install(FILES ${version_file} ${config_file}
DESTINATION "${cmake_files_install_dir}")
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/../cmake/DeePMDPackagedTargets.cmake.in"
"${generated_dir}/${targets_export_name}.cmake" @ONLY)
install(FILES "${generated_dir}/${targets_export_name}.cmake"
DESTINATION "${cmake_files_install_dir}")
endif()

if(CMAKE_TESTING_ENABLED)
Expand Down
2 changes: 1 addition & 1 deletion source/cmake/Config.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
include(CMakeFindDependencyMacro)

include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake")
check_required_components("@project_name@")
check_required_components("@CMAKE_PROJECT_NAME@")
7 changes: 7 additions & 0 deletions source/cmake/DeePMDImportedTargets.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
if(NOT TARGET @CMAKE_PROJECT_NAME@::@LIB_DEEPMD_C@)
add_library(@CMAKE_PROJECT_NAME@::@LIB_DEEPMD_C@ SHARED IMPORTED)
set_target_properties(
@CMAKE_PROJECT_NAME@::@LIB_DEEPMD_C@
PROPERTIES IMPORTED_LOCATION "@deepmd_c@" INTERFACE_INCLUDE_DIRECTORIES
"@DEEPMD_INCLUDE_C_DIR@")
endif()
9 changes: 9 additions & 0 deletions source/cmake/DeePMDPackagedTargets.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
if(NOT TARGET @CMAKE_PROJECT_NAME@::@LIB_DEEPMD_C@)
add_library(@CMAKE_PROJECT_NAME@::@LIB_DEEPMD_C@ SHARED IMPORTED)
set_target_properties(
@CMAKE_PROJECT_NAME@::@LIB_DEEPMD_C@
PROPERTIES
IMPORTED_LOCATION
"${PACKAGE_PREFIX_DIR}/lib/@CMAKE_SHARED_LIBRARY_PREFIX@@LIB_DEEPMD_C@@CMAKE_SHARED_LIBRARY_SUFFIX@"
INTERFACE_INCLUDE_DIRECTORIES "${PACKAGE_PREFIX_DIR}/include")
endif()
41 changes: 32 additions & 9 deletions source/install/build_from_c.sh
Original file line number Diff line number Diff line change
@@ -1,21 +1,44 @@
set -e

SCRIPT_PATH=$(dirname $(realpath -s $0))
if [ -z "$INSTALL_PREFIX" ]; then
INSTALL_PREFIX=$(realpath -s ${SCRIPT_PATH}/../../dp)
SCRIPT_PATH=$(dirname "$(realpath -s "$0")")
if [ -z "${INSTALL_PREFIX}" ]; then
INSTALL_PREFIX=$(realpath -s "${SCRIPT_PATH}/../../dp")
fi
mkdir -p ${INSTALL_PREFIX}
mkdir -p "${INSTALL_PREFIX}"
echo "Installing DeePMD-kit to ${INSTALL_PREFIX}"
NPROC=$(nproc --all)

#------------------

BUILD_TMP_DIR=${SCRIPT_PATH}/../build
mkdir -p ${BUILD_TMP_DIR}
cd ${BUILD_TMP_DIR}
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DDEEPMD_C_ROOT=${DEEPMD_C_ROOT} -DLAMMPS_VERSION=stable_22Jul2025_update2 ..
cmake --build . -j${NPROC}
BUILD_TMP_DIR="${SCRIPT_PATH}/../build"
mkdir -p "${BUILD_TMP_DIR}"
cd "${BUILD_TMP_DIR}"
cmake -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" -DDEEPMD_C_ROOT="${DEEPMD_C_ROOT}" -DLAMMPS_VERSION=stable_22Jul2025_update2 ..
cmake --build . -j"${NPROC}"
cmake --install .

CONSUMER_TMP_DIR="${BUILD_TMP_DIR}/cmake-consumer"
rm -rf "${CONSUMER_TMP_DIR}"
mkdir -p "${CONSUMER_TMP_DIR}"
cat >"${CONSUMER_TMP_DIR}/CMakeLists.txt" <<'EOF'
cmake_minimum_required(VERSION 3.25)
project(deepmd_c_consumer LANGUAGES CXX)
find_package(DeePMD REQUIRED CONFIG)
find_package(DeePMD REQUIRED CONFIG)
if(NOT TARGET DeePMD::deepmd_c)
message(FATAL_ERROR "DeePMD::deepmd_c target is missing")
endif()
add_executable(deepmd_c_consumer main.cc)
target_link_libraries(deepmd_c_consumer PRIVATE DeePMD::deepmd_c)
EOF
cat >"${CONSUMER_TMP_DIR}/main.cc" <<'EOF'
#include <deepmd/c_api.h>

int main() { return 0; }
EOF
cmake -S "${CONSUMER_TMP_DIR}" -B "${CONSUMER_TMP_DIR}/build" -DCMAKE_PREFIX_PATH="${INSTALL_PREFIX}"
cmake --build "${CONSUMER_TMP_DIR}/build" -j"${NPROC}"

cmake --build . --target=lammps

#------------------
Expand Down
Loading