annotate src/fftw-3.3.8/CMakeLists.txt @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents bd3cc4d1df30
children
rev   line source
cannam@167 1 cmake_minimum_required (VERSION 3.0)
cannam@167 2
cannam@167 3 if (NOT DEFINED CMAKE_BUILD_TYPE)
cannam@167 4 set (CMAKE_BUILD_TYPE Release CACHE STRING "Build type")
cannam@167 5 endif ()
cannam@167 6
cannam@167 7 project (fftw)
cannam@167 8
cannam@167 9 if (POLICY CMP0042)
cannam@167 10 cmake_policy (SET CMP0042 NEW)
cannam@167 11 endif ()
cannam@167 12
cannam@167 13 option (BUILD_SHARED_LIBS "Build shared libraries" ON)
cannam@167 14 option (BUILD_TESTS "Build tests" ON)
cannam@167 15
cannam@167 16 option (ENABLE_OPENMP "Use OpenMP for multithreading" OFF)
cannam@167 17 option (ENABLE_THREADS "Use pthread for multithreading" OFF)
cannam@167 18 option (WITH_COMBINED_THREADS "Merge thread library" OFF)
cannam@167 19
cannam@167 20 option (ENABLE_FLOAT "single-precision" OFF)
cannam@167 21 option (ENABLE_LONG_DOUBLE "long-double precision" OFF)
cannam@167 22 option (ENABLE_QUAD_PRECISION "quadruple-precision" OFF)
cannam@167 23
cannam@167 24 option (ENABLE_SSE "Compile with SSE instruction set support" OFF)
cannam@167 25 option (ENABLE_SSE2 "Compile with SSE2 instruction set support" OFF)
cannam@167 26 option (ENABLE_AVX "Compile with AVX instruction set support" OFF)
cannam@167 27 option (ENABLE_AVX2 "Compile with AVX2 instruction set support" OFF)
cannam@167 28
cannam@167 29 option (DISABLE_FORTRAN "Disable Fortran wrapper routines" OFF)
cannam@167 30
cannam@167 31 include(GNUInstallDirs)
cannam@167 32
cannam@167 33
cannam@167 34 include (CheckIncludeFile)
cannam@167 35 check_include_file (alloca.h HAVE_ALLOCA_H)
cannam@167 36 check_include_file (altivec.h HAVE_ALTIVEC_H)
cannam@167 37 check_include_file (c_asm.h HAVE_C_ASM_H)
cannam@167 38 check_include_file (dlfcn.h HAVE_DLFCN_H)
cannam@167 39 check_include_file (intrinsics.h HAVE_INTRINSICS_H)
cannam@167 40 check_include_file (inttypes.h HAVE_INTTYPES_H)
cannam@167 41 check_include_file (libintl.h HAVE_LIBINTL_H)
cannam@167 42 check_include_file (limits.h HAVE_LIMITS_H)
cannam@167 43 check_include_file (mach/mach_time.h HAVE_MACH_MACH_TIME_H)
cannam@167 44 check_include_file (malloc.h HAVE_MALLOC_H)
cannam@167 45 check_include_file (memory.h HAVE_MEMORY_H)
cannam@167 46 check_include_file (stddef.h HAVE_STDDEF_H)
cannam@167 47 check_include_file (stdint.h HAVE_STDINT_H)
cannam@167 48 check_include_file (stdlib.h HAVE_STDLIB_H)
cannam@167 49 check_include_file (string.h HAVE_STRING_H)
cannam@167 50 check_include_file (strings.h HAVE_STRINGS_H)
cannam@167 51 check_include_file (sys/types.h HAVE_SYS_TYPES_H)
cannam@167 52 check_include_file (sys/time.h HAVE_SYS_TIME_H)
cannam@167 53 check_include_file (sys/stat.h HAVE_SYS_STAT_H)
cannam@167 54 check_include_file (sys/sysctl.h HAVE_SYS_SYSCTL_H)
cannam@167 55 check_include_file (time.h HAVE_TIME_H)
cannam@167 56 check_include_file (uintptr.h HAVE_UINTPTR_H)
cannam@167 57 check_include_file (unistd.h HAVE_UNISTD_H)
cannam@167 58 if (HAVE_TIME_H AND HAVE_SYS_TIME_H)
cannam@167 59 set (TIME_WITH_SYS_TIME TRUE)
cannam@167 60 endif ()
cannam@167 61
cannam@167 62 include (CheckPrototypeDefinition)
cannam@167 63 check_prototype_definition (drand48 "double drand48 (void)" "0" stdlib.h HAVE_DECL_DRAND48)
cannam@167 64 check_prototype_definition (srand48 "void srand48(long int seedval)" "0" stdlib.h HAVE_DECL_SRAND48)
cannam@167 65 check_prototype_definition (cosl "long double cosl( long double arg )" "0" math.h HAVE_DECL_COSL)
cannam@167 66 check_prototype_definition (sinl "long double sinl( long double arg )" "0" math.h HAVE_DECL_SINL)
cannam@167 67 check_prototype_definition (memalign "void *memalign(size_t alignment, size_t size)" "0" malloc.h HAVE_DECL_MEMALIGN)
cannam@167 68 check_prototype_definition (posix_memalign "int posix_memalign(void **memptr, size_t alignment, size_t size)" "0" stdlib.h HAVE_DECL_POSIX_MEMALIGN)
cannam@167 69
cannam@167 70 include (CheckSymbolExists)
cannam@167 71 check_symbol_exists (clock_gettime time.h HAVE_CLOCK_GETTIME)
cannam@167 72 check_symbol_exists (gettimeofday sys/time.h HAVE_GETTIMEOFDAY)
cannam@167 73 check_symbol_exists (getpagesize unistd.h HAVE_GETPAGESIZE)
cannam@167 74 check_symbol_exists (drand48 stdlib.h HAVE_DRAND48)
cannam@167 75 check_symbol_exists (srand48 stdlib.h HAVE_SRAND48)
cannam@167 76 check_symbol_exists (memalign malloc.h HAVE_MEMALIGN)
cannam@167 77 check_symbol_exists (posix_memalign stdlib.h HAVE_POSIX_MEMALIGN)
cannam@167 78 check_symbol_exists (mach_absolute_time mach/mach_time.h HAVE_MACH_ABSOLUTE_TIME)
cannam@167 79 check_symbol_exists (alloca alloca.h HAVE_ALLOCA)
cannam@167 80 if (NOT HAVE_ALLOCA)
cannam@167 81 unset (HAVE_ALLOCA CACHE)
cannam@167 82 check_symbol_exists (alloca malloc.h HAVE_ALLOCA)
cannam@167 83 endif ()
cannam@167 84 check_symbol_exists (isnan math.h HAVE_ISNAN)
cannam@167 85 check_symbol_exists (snprintf stdio.h HAVE_SNPRINTF)
cannam@167 86 check_symbol_exists (strchr string.h HAVE_STRCHR)
cannam@167 87 check_symbol_exists (sysctl unistd.h HAVE_SYSCTL)
cannam@167 88
cannam@167 89 if (UNIX)
cannam@167 90 set (CMAKE_REQUIRED_LIBRARIES m)
cannam@167 91 endif ()
cannam@167 92 check_symbol_exists (cosl math.h HAVE_COSL)
cannam@167 93 check_symbol_exists (sinl math.h HAVE_SINL)
cannam@167 94
cannam@167 95 include (CheckTypeSize)
cannam@167 96 check_type_size ("float" SIZEOF_FLOAT)
cannam@167 97 check_type_size ("double" SIZEOF_DOUBLE)
cannam@167 98 check_type_size ("int" SIZEOF_INT)
cannam@167 99 check_type_size ("long" SIZEOF_LONG)
cannam@167 100 check_type_size ("long long" SIZEOF_LONG_LONG)
cannam@167 101 check_type_size ("unsigned int" SIZEOF_UNSIGNED_INT)
cannam@167 102 check_type_size ("unsigned long" SIZEOF_UNSIGNED_LONG)
cannam@167 103 check_type_size ("unsigned long long" SIZEOF_UNSIGNED_LONG_LONG)
cannam@167 104 check_type_size ("size_t" SIZEOF_SIZE_T)
cannam@167 105 check_type_size ("ptrdiff_t" SIZEOF_PTRDIFF_T)
cannam@167 106 math (EXPR SIZEOF_INT_BITS "8 * ${SIZEOF_INT}")
cannam@167 107 set (C_FFTW_R2R_KIND "C_INT${SIZEOF_INT_BITS}_T")
cannam@167 108
cannam@167 109 find_library (LIBM_LIBRARY NAMES m)
cannam@167 110 if (LIBM_LIBRARY)
cannam@167 111 set (HAVE_LIBM TRUE)
cannam@167 112 endif ()
cannam@167 113
cannam@167 114
cannam@167 115 if (ENABLE_THREADS)
cannam@167 116 find_package (Threads)
cannam@167 117 endif ()
cannam@167 118 if (Threads_FOUND)
cannam@167 119 if(CMAKE_USE_PTHREADS_INIT)
cannam@167 120 set (USING_POSIX_THREADS 1)
cannam@167 121 endif ()
cannam@167 122 set (HAVE_THREADS TRUE)
cannam@167 123 endif ()
cannam@167 124
cannam@167 125 if (ENABLE_OPENMP)
cannam@167 126 find_package (OpenMP)
cannam@167 127 endif ()
cannam@167 128 if (OPENMP_FOUND)
cannam@167 129 set (HAVE_OPENMP TRUE)
cannam@167 130 endif ()
cannam@167 131
cannam@167 132 include (CheckCCompilerFlag)
cannam@167 133
cannam@167 134 if (ENABLE_SSE)
cannam@167 135 foreach (FLAG "-msse" "/arch:SSE")
cannam@167 136 unset (HAVE_SSE CACHE)
cannam@167 137 check_c_compiler_flag (${FLAG} HAVE_SSE)
cannam@167 138 if (HAVE_SSE)
cannam@167 139 set (SSE_FLAG ${FLAG})
cannam@167 140 break()
cannam@167 141 endif ()
cannam@167 142 endforeach ()
cannam@167 143 endif ()
cannam@167 144
cannam@167 145 if (ENABLE_SSE2)
cannam@167 146 foreach (FLAG "-msse2" "/arch:SSE2")
cannam@167 147 unset (HAVE_SSE2 CACHE)
cannam@167 148 check_c_compiler_flag (${FLAG} HAVE_SSE2)
cannam@167 149 if (HAVE_SSE2)
cannam@167 150 set (SSE2_FLAG ${FLAG})
cannam@167 151 break()
cannam@167 152 endif ()
cannam@167 153 endforeach ()
cannam@167 154 endif ()
cannam@167 155
cannam@167 156 if (ENABLE_AVX)
cannam@167 157 foreach (FLAG "-mavx" "/arch:AVX")
cannam@167 158 unset (HAVE_AVX CACHE)
cannam@167 159 check_c_compiler_flag (${FLAG} HAVE_AVX)
cannam@167 160 if (HAVE_AVX)
cannam@167 161 set (AVX_FLAG ${FLAG})
cannam@167 162 break()
cannam@167 163 endif ()
cannam@167 164 endforeach ()
cannam@167 165 endif ()
cannam@167 166
cannam@167 167 if (ENABLE_AVX2)
cannam@167 168 foreach (FLAG "-mavx2" "/arch:AVX2")
cannam@167 169 unset (HAVE_AVX2 CACHE)
cannam@167 170 check_c_compiler_flag (${FLAG} HAVE_AVX2)
cannam@167 171 if (HAVE_AVX2)
cannam@167 172 set (AVX2_FLAG ${FLAG})
cannam@167 173 break()
cannam@167 174 endif ()
cannam@167 175 endforeach ()
cannam@167 176 endif ()
cannam@167 177
cannam@167 178 # AVX2 codelets require FMA support as well
cannam@167 179 if (ENABLE_AVX2)
cannam@167 180 foreach (FLAG "-mfma" "/arch:FMA")
cannam@167 181 unset (HAVE_FMA CACHE)
cannam@167 182 check_c_compiler_flag (${FLAG} HAVE_FMA)
cannam@167 183 if (HAVE_FMA)
cannam@167 184 set (FMA_FLAG ${FLAG})
cannam@167 185 break()
cannam@167 186 endif ()
cannam@167 187 endforeach ()
cannam@167 188 endif ()
cannam@167 189
cannam@167 190 if (HAVE_SSE2 OR HAVE_AVX)
cannam@167 191 set (HAVE_SIMD TRUE)
cannam@167 192 endif ()
cannam@167 193 file(GLOB fftw_api_SOURCE api/*.c api/*.h)
cannam@167 194 file(GLOB fftw_dft_SOURCE dft/*.c dft/*.h)
cannam@167 195 file(GLOB fftw_dft_scalar_SOURCE dft/scalar/*.c dft/scalar/*.h)
cannam@167 196 file(GLOB fftw_dft_scalar_codelets_SOURCE dft/scalar/codelets/*.c dft/scalar/codelets/*.h)
cannam@167 197 file(GLOB fftw_dft_simd_SOURCE dft/simd/*.c dft/simd/*.h)
cannam@167 198
cannam@167 199 file(GLOB fftw_dft_simd_sse2_SOURCE dft/simd/sse2/*.c dft/simd/sse2/*.h)
cannam@167 200 file(GLOB fftw_dft_simd_avx_SOURCE dft/simd/avx/*.c dft/simd/avx/*.h)
cannam@167 201 file(GLOB fftw_dft_simd_avx2_SOURCE dft/simd/avx2/*.c dft/simd/avx2/*.h dft/simd/avx2-128/*.c dft/simd/avx2-128/*.h)
cannam@167 202 file(GLOB fftw_kernel_SOURCE kernel/*.c kernel/*.h)
cannam@167 203 file(GLOB fftw_rdft_SOURCE rdft/*.c rdft/*.h)
cannam@167 204 file(GLOB fftw_rdft_scalar_SOURCE rdft/scalar/*.c rdft/scalar/*.h)
cannam@167 205
cannam@167 206 file(GLOB fftw_rdft_scalar_r2cb_SOURCE rdft/scalar/r2cb/*.c
cannam@167 207 rdft/scalar/r2cb/*.h)
cannam@167 208 file(GLOB fftw_rdft_scalar_r2cf_SOURCE rdft/scalar/r2cf/*.c
cannam@167 209 rdft/scalar/r2cf/*.h)
cannam@167 210 file(GLOB fftw_rdft_scalar_r2r_SOURCE rdft/scalar/r2r/*.c
cannam@167 211 rdft/scalar/r2r/*.h)
cannam@167 212
cannam@167 213 file(GLOB fftw_rdft_simd_SOURCE rdft/simd/*.c rdft/simd/*.h)
cannam@167 214 file(GLOB fftw_rdft_simd_sse2_SOURCE rdft/simd/sse2/*.c rdft/simd/sse2/*.h)
cannam@167 215 file(GLOB fftw_rdft_simd_avx_SOURCE rdft/simd/avx/*.c rdft/simd/avx/*.h)
cannam@167 216 file(GLOB fftw_rdft_simd_avx2_SOURCE rdft/simd/avx2/*.c rdft/simd/avx2/*.h rdft/simd/avx2-128/*.c rdft/simd/avx2-128/*.h)
cannam@167 217
cannam@167 218 file(GLOB fftw_reodft_SOURCE reodft/*.c reodft/*.h)
cannam@167 219 file(GLOB fftw_simd_support_SOURCE simd-support/*.c simd-support/*.h)
cannam@167 220 file(GLOB fftw_libbench2_SOURCE libbench2/*.c libbench2/*.h)
cannam@167 221 list (REMOVE_ITEM fftw_libbench2_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/libbench2/useropt.c)
cannam@167 222
cannam@167 223 set(SOURCEFILES
cannam@167 224 ${fftw_api_SOURCE}
cannam@167 225 ${fftw_dft_SOURCE}
cannam@167 226 ${fftw_dft_scalar_SOURCE}
cannam@167 227 ${fftw_dft_scalar_codelets_SOURCE}
cannam@167 228 ${fftw_dft_simd_SOURCE}
cannam@167 229 ${fftw_kernel_SOURCE}
cannam@167 230 ${fftw_rdft_SOURCE}
cannam@167 231 ${fftw_rdft_scalar_SOURCE}
cannam@167 232
cannam@167 233 ${fftw_rdft_scalar_r2cb_SOURCE}
cannam@167 234 ${fftw_rdft_scalar_r2cf_SOURCE}
cannam@167 235 ${fftw_rdft_scalar_r2r_SOURCE}
cannam@167 236
cannam@167 237 ${fftw_rdft_simd_SOURCE}
cannam@167 238 ${fftw_reodft_SOURCE}
cannam@167 239 ${fftw_simd_support_SOURCE}
cannam@167 240 ${fftw_threads_SOURCE}
cannam@167 241 )
cannam@167 242
cannam@167 243 set(fftw_par_SOURCE
cannam@167 244 threads/api.c
cannam@167 245 threads/conf.c
cannam@167 246 threads/ct.c
cannam@167 247 threads/dft-vrank-geq1.c
cannam@167 248 threads/f77api.c
cannam@167 249 threads/hc2hc.c
cannam@167 250 threads/rdft-vrank-geq1.c
cannam@167 251 threads/vrank-geq1-rdft2.c)
cannam@167 252
cannam@167 253 set (fftw_threads_SOURCE ${fftw_par_SOURCE} threads/threads.c)
cannam@167 254 set (fftw_omp_SOURCE ${fftw_par_SOURCE} threads/openmp.c)
cannam@167 255
cannam@167 256
cannam@167 257 include_directories (.)
cannam@167 258
cannam@167 259
cannam@167 260 if (WITH_COMBINED_THREADS)
cannam@167 261 list (APPEND SOURCEFILES ${fftw_threads_SOURCE})
cannam@167 262 endif ()
cannam@167 263
cannam@167 264
cannam@167 265 if (HAVE_SSE2)
cannam@167 266 list (APPEND SOURCEFILES ${fftw_dft_simd_sse2_SOURCE} ${fftw_rdft_simd_sse2_SOURCE})
cannam@167 267 endif ()
cannam@167 268
cannam@167 269 if (HAVE_AVX)
cannam@167 270 list (APPEND SOURCEFILES ${fftw_dft_simd_avx_SOURCE} ${fftw_rdft_simd_avx_SOURCE})
cannam@167 271 endif ()
cannam@167 272
cannam@167 273 if (HAVE_AVX2)
cannam@167 274 list (APPEND SOURCEFILES ${fftw_dft_simd_avx2_SOURCE} ${fftw_rdft_simd_avx2_SOURCE})
cannam@167 275 endif ()
cannam@167 276
cannam@167 277 set (FFTW_VERSION 3.3.7)
cannam@167 278
cannam@167 279 set (PREC_SUFFIX)
cannam@167 280 if (ENABLE_FLOAT)
cannam@167 281 set (FFTW_SINGLE TRUE)
cannam@167 282 set (BENCHFFT_SINGLE TRUE)
cannam@167 283 set (PREC_SUFFIX f)
cannam@167 284 endif ()
cannam@167 285
cannam@167 286 if (ENABLE_LONG_DOUBLE)
cannam@167 287 set (FFTW_LDOUBLE TRUE)
cannam@167 288 set (BENCHFFT_LDOUBLE TRUE)
cannam@167 289 set (PREC_SUFFIX l)
cannam@167 290 endif ()
cannam@167 291
cannam@167 292 if (ENABLE_QUAD_PRECISION)
cannam@167 293 set (FFTW_QUAD TRUE)
cannam@167 294 set (BENCHFFT_QUAD TRUE)
cannam@167 295 set (PREC_SUFFIX q)
cannam@167 296 endif ()
cannam@167 297 set (fftw3_lib fftw3${PREC_SUFFIX})
cannam@167 298
cannam@167 299 configure_file (cmake.config.h.in config.h @ONLY)
cannam@167 300 include_directories (${CMAKE_CURRENT_BINARY_DIR})
cannam@167 301
cannam@167 302 if (BUILD_SHARED_LIBS)
cannam@167 303 add_definitions (-DFFTW_DLL)
cannam@167 304 endif ()
cannam@167 305
cannam@167 306 add_library (${fftw3_lib} ${SOURCEFILES})
cannam@167 307 target_include_directories (${fftw3_lib} INTERFACE $<INSTALL_INTERFACE:include>)
cannam@167 308 if (MSVC)
cannam@167 309 target_compile_definitions (${fftw3_lib} PRIVATE /bigobj)
cannam@167 310 endif ()
cannam@167 311 if (HAVE_SSE)
cannam@167 312 target_compile_options (${fftw3_lib} PRIVATE ${SSE_FLAG})
cannam@167 313 endif ()
cannam@167 314 if (HAVE_SSE2)
cannam@167 315 target_compile_options (${fftw3_lib} PRIVATE ${SSE2_FLAG})
cannam@167 316 endif ()
cannam@167 317 if (HAVE_AVX)
cannam@167 318 target_compile_options (${fftw3_lib} PRIVATE ${AVX_FLAG})
cannam@167 319 endif ()
cannam@167 320 if (HAVE_AVX2)
cannam@167 321 target_compile_options (${fftw3_lib} PRIVATE ${AVX2_FLAG})
cannam@167 322 endif ()
cannam@167 323 if (HAVE_FMA)
cannam@167 324 target_compile_options (${fftw3_lib} PRIVATE ${FMA_FLAG})
cannam@167 325 endif ()
cannam@167 326 if (HAVE_LIBM)
cannam@167 327 target_link_libraries (${fftw3_lib} m)
cannam@167 328 endif ()
cannam@167 329
cannam@167 330 set (subtargets ${fftw3_lib})
cannam@167 331
cannam@167 332 if (Threads_FOUND)
cannam@167 333 if (WITH_COMBINED_THREADS)
cannam@167 334 target_link_libraries (${fftw3_lib} ${CMAKE_THREAD_LIBS_INIT})
cannam@167 335 else ()
cannam@167 336 add_library (${fftw3_lib}_threads ${fftw_threads_SOURCE})
cannam@167 337 target_include_directories (${fftw3_lib}_threads INTERFACE $<INSTALL_INTERFACE:include>)
cannam@167 338 target_link_libraries (${fftw3_lib}_threads ${fftw3_lib})
cannam@167 339 target_link_libraries (${fftw3_lib}_threads ${CMAKE_THREAD_LIBS_INIT})
cannam@167 340 list (APPEND subtargets ${fftw3_lib}_threads)
cannam@167 341 endif ()
cannam@167 342 endif ()
cannam@167 343
cannam@167 344 if (OPENMP_FOUND)
cannam@167 345 add_library (${fftw3_lib}_omp ${fftw_omp_SOURCE})
cannam@167 346 target_include_directories (${fftw3_lib}_omp INTERFACE $<INSTALL_INTERFACE:include>)
cannam@167 347 target_link_libraries (${fftw3_lib}_omp ${fftw3_lib})
cannam@167 348 target_link_libraries (${fftw3_lib}_omp ${CMAKE_THREAD_LIBS_INIT})
cannam@167 349 list (APPEND subtargets ${fftw3_lib}_omp)
cannam@167 350 target_compile_options (${fftw3_lib}_omp PRIVATE ${OpenMP_C_FLAGS})
cannam@167 351 endif ()
cannam@167 352
cannam@167 353 foreach(subtarget ${subtargets})
cannam@167 354 set_target_properties (${subtarget} PROPERTIES SOVERSION 3.5.7 VERSION 3)
cannam@167 355 install (TARGETS ${subtarget}
cannam@167 356 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
cannam@167 357 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
cannam@167 358 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
cannam@167 359 endforeach ()
cannam@167 360 install(TARGETS ${fftw3_lib}
cannam@167 361 EXPORT FFTW3LibraryDepends
cannam@167 362 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
cannam@167 363 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
cannam@167 364 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
cannam@167 365
cannam@167 366 install (FILES api/fftw3.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
cannam@167 367 if (EXISTS ${CMAKE_SOURCE_DIR}/api/fftw3.f)
cannam@167 368 install (FILES api/fftw3.f api/fftw3l.f03 api/fftw3q.f03 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
cannam@167 369 endif ()
cannam@167 370 if (EXISTS ${CMAKE_SOURCE_DIR}/api/fftw3.f03.in)
cannam@167 371 file (READ api/fftw3.f03.in FFTW3_F03_IN OFFSET 42)
cannam@167 372 file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/fftw3.f03 "! Generated automatically. DO NOT EDIT!\n\n")
cannam@167 373 file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/fftw3.f03 " integer, parameter :: C_FFTW_R2R_KIND = ${C_FFTW_R2R_KIND}\n\n")
cannam@167 374 file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/fftw3.f03 "${FFTW3_F03_IN}")
cannam@167 375 install (FILES ${CMAKE_CURRENT_BINARY_DIR}/fftw3.f03 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
cannam@167 376 endif ()
cannam@167 377
cannam@167 378 if (BUILD_TESTS)
cannam@167 379
cannam@167 380 add_executable (bench ${fftw_libbench2_SOURCE} tests/bench.c tests/hook.c tests/fftw-bench.c)
cannam@167 381
cannam@167 382 if (ENABLE_THREADS AND NOT WITH_COMBINED_THREADS)
cannam@167 383 target_link_libraries (bench ${fftw3_lib}_threads)
cannam@167 384 else ()
cannam@167 385 target_link_libraries (bench ${fftw3_lib})
cannam@167 386 endif ()
cannam@167 387
cannam@167 388
cannam@167 389 enable_testing ()
cannam@167 390
cannam@167 391 if (Threads_FOUND)
cannam@167 392
cannam@167 393 macro (fftw_add_test problem)
cannam@167 394 add_test (NAME ${problem} COMMAND bench -s ${problem})
cannam@167 395 endmacro ()
cannam@167 396
cannam@167 397 fftw_add_test (32x64)
cannam@167 398 fftw_add_test (ib256)
cannam@167 399
cannam@167 400 endif ()
cannam@167 401 endif ()
cannam@167 402
cannam@167 403 # pkgconfig file
cannam@167 404 set (prefix ${CMAKE_INSTALL_PREFIX})
cannam@167 405 set (exec_prefix ${CMAKE_INSTALL_PREFIX})
cannam@167 406 set (libdir ${CMAKE_INSTALL_FULL_LIBDIR})
cannam@167 407 set (includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
cannam@167 408 set (VERSION ${FFTW_VERSION})
cannam@167 409 configure_file (fftw.pc.in fftw${PREC_SUFFIX}.pc @ONLY)
cannam@167 410 install (FILES
cannam@167 411 ${CMAKE_CURRENT_BINARY_DIR}/fftw${PREC_SUFFIX}.pc
cannam@167 412 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
cannam@167 413 COMPONENT Development)
cannam@167 414
cannam@167 415 # cmake file
cannam@167 416 set (FFTW3_LIBRARIES "FFTW3::${fftw3_lib}")
cannam@167 417 configure_file (FFTW3Config.cmake.in FFTW3${PREC_SUFFIX}Config.cmake @ONLY)
cannam@167 418 configure_file (FFTW3ConfigVersion.cmake.in FFTW3${PREC_SUFFIX}ConfigVersion.cmake @ONLY)
cannam@167 419 install (FILES
cannam@167 420 ${CMAKE_CURRENT_BINARY_DIR}/FFTW3${PREC_SUFFIX}Config.cmake
cannam@167 421 ${CMAKE_CURRENT_BINARY_DIR}/FFTW3${PREC_SUFFIX}ConfigVersion.cmake
cannam@167 422 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/fftw3${PREC_SUFFIX}
cannam@167 423 COMPONENT Development)
cannam@167 424
cannam@167 425 export (TARGETS ${fftw3_lib} NAMESPACE FFTW3:: FILE ${PROJECT_BINARY_DIR}/FFTW3LibraryDepends.cmake)
cannam@167 426 install(EXPORT FFTW3LibraryDepends
cannam@167 427 NAMESPACE FFTW3::
cannam@167 428 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/fftw3${PREC_SUFFIX}
cannam@167 429 COMPONENT Development)