89 lines
3.3 KiB
CMake
89 lines
3.3 KiB
CMake
# -*- CMake -*- file for simple examples using the LAMMPS library interface
|
|
|
|
cmake_minimum_required(VERSION 3.16)
|
|
|
|
# enforce out-of-source build
|
|
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
|
|
message(FATAL_ERROR "In-source builds are not allowed. You must create and use a build directory. "
|
|
"Please remove CMakeCache.txt and CMakeFiles first.")
|
|
endif()
|
|
|
|
project(couple-simple VERSION 1.0 LANGUAGES C CXX)
|
|
|
|
# by default, install into $HOME/.local (not /usr/local),
|
|
# so that no root access (and sudo) is needed
|
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
|
set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local" CACHE PATH "Default install path" FORCE)
|
|
endif()
|
|
|
|
# ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro
|
|
# and prints lots of pointless warnings about "unsafe" functions
|
|
if(MSVC)
|
|
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
|
|
add_compile_options(/EHsc)
|
|
endif()
|
|
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
|
|
endif()
|
|
|
|
# do not include the (obsolete) MPI C++ bindings which makes
|
|
# for leaner object files and avoids namespace conflicts
|
|
set(MPI_CXX_SKIP_MPICXX TRUE)
|
|
find_package(MPI QUIET COMPONENTS C CXX)
|
|
|
|
##########################
|
|
|
|
# build within LAMMPS build system
|
|
if(NOT LAMMPS_SOURCE_DIR)
|
|
find_package(LAMMPS REQUIRED)
|
|
endif()
|
|
|
|
add_executable(simpleCC simple.cpp)
|
|
target_link_libraries(simpleCC PRIVATE LAMMPS::lammps MPI::MPI_CXX)
|
|
|
|
add_executable(simpleC simple.c)
|
|
target_link_libraries(simpleC PRIVATE LAMMPS::lammps MPI::MPI_C)
|
|
|
|
if(LAMMPS_SOURCE_DIR)
|
|
include(CheckGeneratorSupport)
|
|
if(NOT CMAKE_GENERATOR_SUPPORT_FORTRAN)
|
|
message(STATUS "Skipping Test for the LAMMPS Fortran Module Coupling: no Fortran support in build tool")
|
|
return()
|
|
endif()
|
|
|
|
include(CheckLanguage)
|
|
check_language(Fortran)
|
|
if(CMAKE_Fortran_COMPILER)
|
|
enable_language(Fortran)
|
|
# need to check for MPI again to include Fortran components, since Fortran wasn't enabled before
|
|
find_package(MPI QUIET COMPONENTS Fortran)
|
|
|
|
if(NOT (MPI_Fortran_FOUND AND MPI_Fortran_HAVE_F90_MODULE))
|
|
message(STATUS "Insufficient MPI Fortran support. Skipping building simpleF90")
|
|
return()
|
|
endif()
|
|
|
|
# GNU Fortran 4.8.x on RHEL/CentOS 7.x is not sufficient to compile the Fortran module.
|
|
# GNU Fortran 7.x on Ubuntu 18.04LTS fails as well.
|
|
# Work around flang being detected as GNU
|
|
get_filename_component(_tmp_fc ${CMAKE_Fortran_COMPILER} NAME)
|
|
if((CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") AND (CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 9.0) AND NOT (_tmp_fc STREQUAL "flang"))
|
|
message(STATUS "Need GNU Fortran compiler version 9.x or later for LAMMPS Fortran module")
|
|
return()
|
|
endif()
|
|
|
|
get_filename_component(LAMMPS_FORTRAN_MODULE ${LAMMPS_SOURCE_DIR}/../fortran/lammps.f90 ABSOLUTE)
|
|
add_executable(simpleF90 ${LAMMPS_FORTRAN_MODULE} simple.f90)
|
|
target_link_libraries(simpleF90 PRIVATE MPI::MPI_Fortran LAMMPS::lammps)
|
|
|
|
get_filename_component(_tmp_fc ${CMAKE_Fortran_COMPILER} NAME)
|
|
if (_tmp_fc STREQUAL "flang")
|
|
target_link_libraries(simpleF90 PRIVATE gfortran)
|
|
endif()
|
|
include(CheckFortranCompilerFlag)
|
|
check_fortran_compiler_flag(-fallow-argument-mismatch HAS_MISMATCH)
|
|
if(HAS_MISMATCH)
|
|
target_compile_options(simpleF90 PRIVATE -fallow-argument-mismatch)
|
|
endif()
|
|
endif()
|
|
endif()
|