annotate src/fftw-3.3.8/CMakeLists.txt @ 83:ae30d91d2ffe

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