Files
lammps/examples/COUPLE/simple/CMakeLists.txt

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()