File: FindFftw.cmake

package info (click to toggle)
cp2k 2025.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 372,060 kB
  • sloc: fortran: 963,262; ansic: 64,495; f90: 21,676; python: 14,419; sh: 11,382; xml: 2,173; makefile: 996; pascal: 845; perl: 492; cpp: 345; lisp: 297; csh: 16
file content (109 lines) | stat: -rw-r--r-- 3,701 bytes parent folder | download | duplicates (3)
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!-------------------------------------------------------------------------------------------------!
#!   CP2K: A general program to perform molecular dynamics simulations                             !
#!   Copyright 2000-2025 CP2K developers group <https://cp2k.org>                                  !
#!                                                                                                 !
#!   SPDX-License-Identifier: GPL-2.0-or-later                                                     !
#!-------------------------------------------------------------------------------------------------!

# Copyright (c) 2022- ETH Zurich
#
# authors : Mathieu Taillefumier

include(FindPackageHandleStandardArgs)
include(cp2k_utils)

cp2k_set_default_paths(FFTW3 "Fftw")
# Check if we can use PkgConfig
find_package(PkgConfig)

# First try with pkg
if(PKG_CONFIG_FOUND)
  pkg_search_module(CP2K_FFTW3 IMPORTED_TARGET GLOBAL fftw3)
  pkg_search_module(CP2K_FFTW3F IMPORTED_TARGET GLOBAL fftw3f)
  pkg_search_module(CP2K_FFTW3L IMPORTED_TARGET GLOBAL fftw3l)
  pkg_search_module(CP2K_FFTW3Q IMPORTED_TARGET GLOBAL fftw3q)
endif()

foreach(_lib fftw3 fftw3f fftw3l fftw3q)
  string(TOUPPER "${_lib}" __lib_up)
  if(NOT CP2K_${__lib_up}_FOUND)
    if(NOT ${_lib} MATCHES "fftw3")
      set(CP2K_${__lib_up}_ROOT "${CP2K_FFTW3_ROOT}")
    endif()
    cp2k_find_libraries("${__lib_up}" "${_lib}")
    if(NOT ${_lib} MATCHES "fftw3")
      unset(CP2K_${__lib_up}_ROOT CACHE)
    endif()
  endif()

  # OMP variant
  foreach(_subtype "mpi" "omp" "threads")
    string(TOUPPER "${_lib}_${_subtype}" _sub_lib)
    set(CP2K_${_sub_lib}_ROOT "${CP2K_FFTW3_ROOT}")
    cp2k_find_libraries("${_sub_lib}" "${_lib}_${_subtype}")
    unset(CP2K_${_sub_lib}_ROOT CACHE)
  endforeach()
endforeach()

if(NOT CP2K_FFTW3_INCLUDE_DIRS)
  cp2k_include_dirs(FFTW3 "fftw3.h;fftw3/fftw3.h")
endif()

if(CP2K_FFTW3_INCLUDE_DIRS)
  find_package_handle_standard_args(Fftw DEFAULT_MSG CP2K_FFTW3_INCLUDE_DIRS
                                    CP2K_FFTW3_LINK_LIBRARIES)
else()
  find_package_handle_standard_args(Fftw DEFAULT_MSG CP2K_FFTW3_LINK_LIBRARIES)
endif()

foreach(lib_name "fftw3" "fftw3l" "fftw3q" "fftw3f")
  string(TOUPPER "${lib_name}" __lib_name_up)

  if(CP2K_${__lib_name_up}_FOUND)
    if(NOT TARGET cp2k::FFTW3::${lib_name})
      add_library(cp2k::FFTW3::${lib_name} INTERFACE IMPORTED)
    endif()
    # we do not recheck if the libraries are found when pkg_config is
    # successful.
    set_target_properties(
      cp2k::FFTW3::${lib_name}
      PROPERTIES INTERFACE_LINK_LIBRARIES
                 "${CP2K_${__lib_name_up}_LINK_LIBRARIES}")

    if(CP2K_FFTW3_INCLUDE_DIRS)
      set_target_properties(
        cp2k::FFTW3::${lib_name} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
                                            "${CP2K_FFTW3_INCLUDE_DIRS}")
    endif()

    foreach(sub_type "threads" "mpi" "omp")
      string(TOUPPER "${lib_name}_${sub_type}" __libs)
      if(CP2K_${__libs}_FOUND)
        if(NOT TARGET cp2k::FFTW3::${lib_name}_${sub_type})
          add_library(cp2k::FFTW3::${lib_name}_${sub_type} INTERFACE IMPORTED)
        endif()
        set_target_properties(
          cp2k::FFTW3::${lib_name}_${sub_type}
          PROPERTIES INTERFACE_LINK_LIBRARIES
                     "${CP2K_${__libs}_LINK_LIBRARIES}")
      endif()
    endforeach()
  endif()
endforeach()

set(CP2K_FFTW3_FOUND ON)
mark_as_advanced(
  CP2K_FFTW3_FOUND
  CP2K_FFTW3_ROOT
  CP2K_FFTW3_INCLUDE_DIRS
  CP2K_FFTW3_MPI
  CP2K_FFTW3_OMP
  CP2K_FFTW3_THREADS
  CP2K_FFTW3Q_OMP
  CP2K_FFTW3Q_THREADS
  CP2K_FFTW3F_MPI
  CP2K_FFTW3_OMP
  CP2K_FFTW3F_THREADS
  CP2K_FFTW3L_MPI
  CP2K_FFTW3L_OMP
  CP2K_FFTW3L_THREADS)