# This file is part of tblite. # SPDX-Identifier: LGPL-3.0-or-later # # tblite is free software: you can redistribute it and/or modify it under # the terms of the Lesser GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # tblite is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # Lesser GNU General Public License for more details. # # You should have received a copy of the Lesser GNU General Public License # along with tblite. If not, see . cmake_minimum_required(VERSION 3.14) project( "tblite" LANGUAGES "Fortran" "C" VERSION "0.5.0" DESCRIPTION "Light-weight tight-binding framework" ) # Follow GNU conventions for installing directories include(GNUInstallDirs) # General configuration information add_subdirectory("config") if(NOT TARGET "OpenMP::OpenMP_Fortran") if (WITH_OpenMP) find_package("OpenMP" REQUIRED) else() # Create dummy library add_library("OpenMP::OpenMP_Fortran" INTERFACE IMPORTED) endif() endif() if(NOT TARGET "LAPACK::LAPACK") find_package("LAPACK" REQUIRED) endif() # Collect subprojects if(NOT TARGET "mctc-lib::mctc-lib") find_package("mctc-lib" REQUIRED) endif() if(NOT TARGET "mstore::mstore" AND WITH_TESTS) find_package("mstore" REQUIRED) endif() if(NOT TARGET "toml-f::toml-f") find_package("toml-f" REQUIRED) endif() if(NOT TARGET "dftd4::dftd4") find_package("dftd4" REQUIRED) endif() if(NOT TARGET "s-dftd3::s-dftd3") find_package("s-dftd3" REQUIRED) endif() set( lib-deps "OpenMP::OpenMP_Fortran" "LAPACK::LAPACK" "$<$:BLAS::BLAS>" "toml-f::toml-f" "mctc-lib::mctc-lib" "dftd4::dftd4" "s-dftd3::s-dftd3" ) # Collect source of the project set(srcs) add_subdirectory("src") # tight-binding library target add_library( "${PROJECT_NAME}-lib" "${srcs}" ) set_target_properties( "${PROJECT_NAME}-lib" PROPERTIES POSITION_INDEPENDENT_CODE TRUE OUTPUT_NAME "${PROJECT_NAME}" VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}" WINDOWS_EXPORT_ALL_SYMBOLS TRUE Fortran_MODULE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include" ) target_link_libraries( "${PROJECT_NAME}-lib" PUBLIC "${lib-deps}" ) target_include_directories( "${PROJECT_NAME}-lib" PUBLIC $ $ $ $ ) if(NOT EXISTS "${PROJECT_BINARY_DIR}/include") file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/include") endif() # Add example application add_subdirectory("app") # Export targets for other projects add_library("${PROJECT_NAME}" INTERFACE) target_link_libraries("${PROJECT_NAME}" INTERFACE "${PROJECT_NAME}-lib") install( TARGETS "${PROJECT_NAME}" "${PROJECT_NAME}-lib" EXPORT "${PROJECT_NAME}-targets" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" ) install( EXPORT "${PROJECT_NAME}-targets" NAMESPACE "${PROJECT_NAME}::" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" ) install( DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" ) install( DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${module-dir}" ) # Package license files install( FILES "COPYING" "COPYING.LESSER" DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/${PROJECT_NAME}" ) # add the testsuite if (WITH_TESTS) enable_testing() add_subdirectory("test") endif()