File: SCAFACOS.cmake

package info (click to toggle)
lammps 20250204%2Bdfsg.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 474,368 kB
  • sloc: cpp: 1,060,070; python: 27,785; ansic: 8,956; f90: 7,254; sh: 6,044; perl: 4,171; fortran: 2,442; xml: 1,714; makefile: 1,352; objc: 238; lisp: 188; yacc: 58; csh: 16; awk: 14; tcl: 6; javascript: 2
file content (76 lines) | stat: -rw-r--r-- 3,952 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
enable_language(Fortran)
enable_language(C)

find_package(GSL REQUIRED)
find_package(PkgConfig QUIET)
find_package(MPI REQUIRED)
set(DOWNLOAD_SCAFACOS_DEFAULT ON)
if(PKG_CONFIG_FOUND)
  pkg_check_modules(SCAFACOS QUIET scafacos)
  if(SCAFACOS_FOUND)
    set(DOWNLOAD_SCAFACOS_DEFAULT OFF)
  endif()
endif()
option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" ${DOWNLOAD_SCAFACOS_DEFAULT})
if(DOWNLOAD_SCAFACOS)
  message(STATUS "ScaFaCoS download requested - we will build our own")
  set(SCAFACOS_URL "https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz" CACHE STRING "URL for SCAFACOS tarball")
  set(SCAFACOS_MD5 "bd46d74e3296bd8a444d731bb10c1738" CACHE STRING "MD5 checksum of SCAFACOS tarball")
  mark_as_advanced(SCAFACOS_URL)
  mark_as_advanced(SCAFACOS_MD5)
  GetFallbackURL(SCAFACOS_URL SCAFACOS_FALLBACK)


  # version 1.0.1 needs a patch to compile and linke cleanly with GCC 10 and later.
  file(DOWNLOAD ${LAMMPS_THIRDPARTY_URL}/scafacos-1.0.1-fix.diff ${CMAKE_CURRENT_BINARY_DIR}/scafacos-1.0.1.fix.diff
          EXPECTED_HASH MD5=4baa1333bb28fcce102d505e1992d032)

  find_program(HAVE_PATCH patch)
  if(NOT HAVE_PATCH)
    message(FATAL_ERROR "The 'patch' program is required to build the ScaFaCoS library")
  endif()

  include(ExternalProject)
  ExternalProject_Add(scafacos_build
    URL     ${SCAFACOS_URL} ${SCAFACOS_FALLBACK}
    URL_MD5 ${SCAFACOS_MD5}
    PATCH_COMMAND patch -p1 < ${CMAKE_CURRENT_BINARY_DIR}/scafacos-1.0.1.fix.diff
    CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --disable-doc
                                             --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m
                                             --with-internal-fftw --with-internal-pfft
                                             --with-internal-pnfft ${CONFIGURE_REQUEST_PIC}
                                             FC=${CMAKE_MPI_Fortran_COMPILER}
                                             CXX=${CMAKE_MPI_CXX_COMPILER}
                                             CC=${CMAKE_MPI_C_COMPILER}
                                             F77=
    BUILD_BYPRODUCTS
      <INSTALL_DIR>/lib/libfcs.a
      <INSTALL_DIR>/lib/libfcs_direct.a
      <INSTALL_DIR>/lib/libfcs_ewald.a
      <INSTALL_DIR>/lib/libfcs_fmm.a
      <INSTALL_DIR>/lib/libfcs_p2nfft.a
      <INSTALL_DIR>/lib/libfcs_p3m.a
      <INSTALL_DIR>/lib/libfcs_near.a
      <INSTALL_DIR>/lib/libfcs_gridsort.a
      <INSTALL_DIR>/lib/libfcs_resort.a
      <INSTALL_DIR>/lib/libfcs_redist.a
      <INSTALL_DIR>/lib/libfcs_common.a
      <INSTALL_DIR>/lib/libfcs_pnfft.a
      <INSTALL_DIR>/lib/libfcs_pfft.a
      <INSTALL_DIR>/lib/libfcs_fftw3_mpi.a
      <INSTALL_DIR>/lib/libfcs_fftw3.a
  )
  ExternalProject_get_property(scafacos_build INSTALL_DIR)
  file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
  add_library(LAMMPS::SCAFACOS UNKNOWN IMPORTED)
  set_target_properties(LAMMPS::SCAFACOS PROPERTIES
    IMPORTED_LOCATION "${INSTALL_DIR}/lib/libfcs.a"
    INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include"
    INTERFACE_LINK_LIBRARIES "${INSTALL_DIR}/lib/libfcs.a;${INSTALL_DIR}/lib/libfcs_direct.a;${INSTALL_DIR}/lib/libfcs_ewald.a;${INSTALL_DIR}/lib/libfcs_fmm.a;${INSTALL_DIR}/lib/libfcs_p2nfft.a;${INSTALL_DIR}/lib/libfcs_p3m.a;GSL::gsl;${INSTALL_DIR}/lib/libfcs_near.a;${INSTALL_DIR}/lib/libfcs_gridsort.a;${INSTALL_DIR}/lib/libfcs_resort.a;${INSTALL_DIR}/lib/libfcs_redist.a;${INSTALL_DIR}/lib/libfcs_common.a;${INSTALL_DIR}/lib/libfcs_pnfft.a;${INSTALL_DIR}/lib/libfcs_pfft.a;${INSTALL_DIR}/lib/libfcs_fftw3_mpi.a;${INSTALL_DIR}/lib/libfcs_fftw3.a;MPI::MPI_Fortran;MPI::MPI_C")
  target_link_libraries(lammps PRIVATE LAMMPS::SCAFACOS)
  add_dependencies(LAMMPS::SCAFACOS scafacos_build)
else()
  find_package(PkgConfig REQUIRED)
  pkg_check_modules(SCAFACOS REQUIRED IMPORTED_TARGET scafacos)
  target_link_libraries(lammps PRIVATE PkgConfig::SCAFACOS)
endif()