Skip to content
Snippets Groups Projects
CMakeLists.txt 3.22 KiB
Newer Older
mkirsz's avatar
mkirsz committed
cmake_minimum_required(VERSION 3.12)
project(Tadah.MLIP)

mkirsz's avatar
mkirsz committed
# Guard against in-source builds
# Also, make sure user does not accidently invoke cmake .. from the source dir
# of the module in case module is added as a submodule.
get_filename_component(MODULE_TEST ${CMAKE_BINARY_DIR} NAME)
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}
        OR ${MODULE_TEST} STREQUAL "MLIP"
mkirsz's avatar
mkirsz committed
)
  message(FATAL_ERROR "
mkirsz's avatar
mkirsz committed
    In-source builds not allowed.
    Please make a new directory (called a build directory) and run CMake from there.
    You may need to remove CMakeCache.txt and CMakeFiles dir. ")
endif()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

mkirsz's avatar
mkirsz committed
if(BUILD_SHARED_LIBS)
mkirsz's avatar
mkirsz committed
  set(CMAKE_POSITION_INDEPENDENT_CODE ON)
mkirsz's avatar
mkirsz committed
endif()

if (BUILD_SHARED_LIBS)
mkirsz's avatar
mkirsz committed
  # Always full RPATH
  # use, i.e. don't skip the full RPATH for the build tree
  set(CMAKE_SKIP_BUILD_RPATH FALSE)
mkirsz's avatar
mkirsz committed

mkirsz's avatar
mkirsz committed
  # when building, don't use the install RPATH already
  # (but later on when installing)
  set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
mkirsz's avatar
mkirsz committed

mkirsz's avatar
mkirsz committed
  set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
mkirsz's avatar
mkirsz committed

mkirsz's avatar
mkirsz committed
  # add the automatically determined parts of the RPATH
  # which point to directories outside the build tree to the install RPATH
  set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
mkirsz's avatar
mkirsz committed

mkirsz's avatar
mkirsz committed
  # the RPATH to be used when installing, but only if it's not a system directory
  list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
  if("${isSystemDir}" STREQUAL "-1")
    set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
  endif("${isSystemDir}" STREQUAL "-1")
mkirsz's avatar
mkirsz committed
endif()

mkirsz's avatar
mkirsz committed
include(FetchContent)
Marcin Kirsz's avatar
Marcin Kirsz committed

if(DEFINED ENV{CI_COMMIT_REF_NAME})
mkirsz's avatar
mkirsz committed
  set(GIT_BRANCH "$ENV{CI_COMMIT_REF_NAME}")
Marcin Kirsz's avatar
Marcin Kirsz committed
else()
mkirsz's avatar
mkirsz committed
  execute_process(
mkirsz's avatar
mkirsz committed
    COMMAND bash -c "git status | grep origin | sed -e 's/.*origin\\///' -e 's/[^a-zA-Z].*//'" 
Marcin Kirsz's avatar
Marcin Kirsz committed
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
mkirsz's avatar
mkirsz committed
    OUTPUT_VARIABLE GIT_BRANCH
Marcin Kirsz's avatar
Marcin Kirsz committed
    OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
mkirsz's avatar
mkirsz committed
message(STATUS "${TADAH}.MLIP Using GIT_BRANCH:  ${GIT_BRANCH}.")
Marcin Kirsz's avatar
Marcin Kirsz committed

mkirsz's avatar
mkirsz committed
FetchContent_Declare(
    Tadah.MODELS
mkirsz's avatar
mkirsz committed
    GIT_REPOSITORY https://git.ecdf.ed.ac.uk/tadah/models.git
mkirsz's avatar
mkirsz committed
    GIT_TAG origin/${GIT_BRANCH}
mkirsz's avatar
mkirsz committed
)
mkirsz's avatar
mkirsz committed

FetchContent_MakeAvailable(Tadah.MODELS)

mkirsz's avatar
mkirsz committed
file(GLOB MLIP_SRC CONFIGURE_DEPENDS "src/*.cpp")
add_library(tadah.mlip ${MLIP_SRC})
target_link_libraries(tadah.mlip PRIVATE config::rc)
mkirsz's avatar
mkirsz committed
target_link_libraries(tadah.mlip PUBLIC tadah.models)
mkirsz's avatar
mkirsz committed
target_include_directories(tadah.mlip PUBLIC include)
target_include_directories(tadah.mlip PUBLIC external)
mkirsz's avatar
mkirsz committed
target_include_directories(tadah.mlip PUBLIC ${Tadah.MODELS_SOURCE_DIR}/include)
target_include_directories(tadah.mlip PUBLIC ${Tadah.CORE_SOURCE_DIR}/include)
target_include_directories(tadah.mlip PUBLIC ${Tadah.CORE_SOURCE_DIR}/external/toml11)
mkirsz's avatar
mkirsz committed

mkirsz's avatar
mkirsz committed
if(TADAH_ENABLE_OPENMP)
mkirsz's avatar
mkirsz committed
  find_package(OpenMP REQUIRED)
  target_link_libraries(tadah.mlip PUBLIC OpenMP::OpenMP_CXX)
mkirsz's avatar
mkirsz committed
endif()

Marcin Kirsz's avatar
Marcin Kirsz committed
if (TADAH_BUILD_MPI)
mkirsz's avatar
mkirsz committed
  find_package(MPI REQUIRED)
  target_link_libraries(tadah.mlip PUBLIC MPI::MPI_CXX)
  add_compile_definitions(TADAH_BUILD_MPI)
Marcin Kirsz's avatar
Marcin Kirsz committed
endif()
Marcin Kirsz's avatar
Marcin Kirsz committed

mkirsz's avatar
mkirsz committed
if(TADAH_BUILD_TESTS)
mkirsz's avatar
mkirsz committed
  include(CTest) 
  add_subdirectory(tests)
mkirsz's avatar
mkirsz committed
endif()
mkirsz's avatar
mkirsz committed

mkirsz's avatar
mkirsz committed
# Installation rules
install(TARGETS tadah.mlip
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib)
install(DIRECTORY include/
    DESTINATION include
)