address various issues in USER-MDI.cmake for downloaded MDI library
This commit is contained in:
@ -12,37 +12,88 @@ if(DOWNLOAD_MDI)
|
||||
set(MDI_MD5 "ddfa46d6ee15b4e59cfd527ec7212184" CACHE STRING "MD5 checksum for MDI tarball")
|
||||
mark_as_advanced(MDI_URL)
|
||||
mark_as_advanced(MDI_MD5)
|
||||
enable_language(C)
|
||||
|
||||
set(LAMMPS_LIB_MDI_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/mdi)
|
||||
# only ON/OFF are allowed for "mpi" flag when building MDI library
|
||||
# so translate boolean value of BUILD_MPI
|
||||
# always disable MPI when cross-compiling to Windows.
|
||||
if((BUILD_MPI) AND NOT((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING))
|
||||
set(MDI_USE_MPI ON)
|
||||
else()
|
||||
set(MDI_USE_MPI OFF)
|
||||
endif()
|
||||
|
||||
# detect if we have python development support and thus can enable python plugins
|
||||
set(MDI_USE_PYTHON_PLUGINS OFF)
|
||||
if(CMAKE_VERSION VERSION_LESS 3.12)
|
||||
find_package(PythonLibs QUIET) # Deprecated since version 3.12
|
||||
if (PYTHONLIBS_FOUND)
|
||||
set(MDI_USE_PYTHON_PLUGINS ON)
|
||||
endif()
|
||||
else()
|
||||
find_package(Python QUIET COMPONENTS Development)
|
||||
if (Python_Development_FOUND)
|
||||
set(MDI_USE_PYTHON_PLUGINS ON)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# download/ build MDI library
|
||||
# always build static library with -fpic
|
||||
# support cross-compilation and ninja-build
|
||||
include(ExternalProject)
|
||||
message(STATUS "Building mdi.")
|
||||
ExternalProject_Add(mdi_external
|
||||
URL ${MDI_URL}
|
||||
URL_MD5 ${MDI_MD5}
|
||||
UPDATE_COMMAND ""
|
||||
CMAKE_ARGS ${CMAKE_REQUEST_PIC}
|
||||
-DCMAKE_INSTALL_PREFIX=${LAMMPS_LIB_MDI_BIN_DIR}
|
||||
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
|
||||
-DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR}
|
||||
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
|
||||
-Dlanguage=C
|
||||
CMAKE_CACHE_ARGS -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
|
||||
-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
|
||||
-DTargetOpenMP_FIND_COMPONENTS:STRING=C;CXX)
|
||||
ExternalProject_Add(mdi_build
|
||||
URL ${MDI_URL}
|
||||
URL_MD5 ${MDI_MD5}
|
||||
CMAKE_ARGS ${CMAKE_REQUEST_PIC}
|
||||
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
|
||||
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
|
||||
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
||||
-Dlanguage=C
|
||||
-Dlibtype=STATIC
|
||||
-Dmpi=${MDI_USE_MPI}
|
||||
-Dpython_plugins=${MDI_USE_PYTHON_PLUGINS}
|
||||
UPDATE_COMMAND ""
|
||||
INSTALL_COMMAND ""
|
||||
BUILD_BYPRODUCTS "<BINARY_DIR>/MDI_Library/libmdi.a"
|
||||
)
|
||||
|
||||
# Link the lammps library against MDI
|
||||
target_include_directories(lammps PRIVATE ${LAMMPS_LIB_MDI_BIN_DIR}/${CMAKE_INSTALL_INCLUDEDIR}/mdi)
|
||||
target_link_directories(lammps PRIVATE ${LAMMPS_LIB_MDI_BIN_DIR}/${CMAKE_INSTALL_LIBDIR}/mdi)
|
||||
target_link_libraries(lammps PRIVATE mdi)
|
||||
add_dependencies(lammps mdi_external)
|
||||
# where is the compiled library?
|
||||
ExternalProject_get_property(mdi_build BINARY_DIR)
|
||||
# workaround for older CMake versions
|
||||
file(MAKE_DIRECTORY "${BINARY_DIR}/MDI_Library")
|
||||
|
||||
# Link the lammps executable against MDI
|
||||
target_include_directories(lmp PRIVATE ${LAMMPS_LIB_MDI_BIN_DIR}/${CMAKE_INSTALL_INCLUDEDIR}/mdi)
|
||||
target_link_directories(lmp PRIVATE ${LAMMPS_LIB_MDI_BIN_DIR}/${CMAKE_INSTALL_LIBDIR}/mdi)
|
||||
target_link_libraries(lmp PRIVATE mdi)
|
||||
add_dependencies(lmp mdi_external)
|
||||
# create imported target for the MDI library
|
||||
add_library(LAMMPS::MDI UNKNOWN IMPORTED)
|
||||
add_dependencies(LAMMPS::MDI mdi_build)
|
||||
set_target_properties(LAMMPS::MDI PROPERTIES
|
||||
IMPORTED_LOCATION "${BINARY_DIR}/MDI_Library/libmdi.a"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${BINARY_DIR}/MDI_Library"
|
||||
)
|
||||
|
||||
# need to add support for dlopen/dlsym, except when compiling for Windows.
|
||||
set(MDI_DL_LIBS "")
|
||||
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||
set(MDI_DL_LIBS "${CMAKE_DL_LIBS}")
|
||||
endif()
|
||||
|
||||
# if compiling with python plugins we need to add python libraries as dependency.
|
||||
if(MDI_USE_PYTHON_PLUGINS)
|
||||
if(CMAKE_VERSION VERSION_LESS 3.12)
|
||||
set_target_properties(LAMMPS::MDI PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LIBRARIES "${PYTHON_LIBRARIES};${MDI_DL_LIBS}")
|
||||
else()
|
||||
set_target_properties(LAMMPS::MDI PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LIBRARIES "Python::Python;${MDI_DL_LIBS}")
|
||||
endif()
|
||||
else()
|
||||
set_target_properties(LAMMPS::MDI PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LIBRARIES ${MDI_DL_LIBS})
|
||||
endif()
|
||||
|
||||
target_link_libraries(lammps PRIVATE LAMMPS::MDI)
|
||||
target_link_libraries(lmp PRIVATE LAMMPS::MDI)
|
||||
|
||||
else()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user