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 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
#
# Encapsulates building FFTW as an External Project.
include(ITK_CheckCCompilerFlag)
set(msg "ATTENTION: You have enabled the use of FFTW.")
set(msg "${msg} This library is distributed under a GPL license.")
set(msg "${msg} By enabling this option, the ITK libraries binary")
set(msg "${msg} that is built will be covered by a GPL license")
set(msg "${msg} and so will any executable that is linked against these libraries.")
message("${msg}")
#--check_c_compiler_flag(-fopenmp C_HAS_fopenmp)
#--if(${C_HAS_fopenmp} AND FALSE)
#-- set(FFTW_THREADS_CONFIGURATION --enable-openmp)
#-- set(OPENMP_FLAG "-fopenmp")
#-- else()
set(FFTW_THREADS_CONFIGURATION --enable-threads)
set(OPENMP_FLAG "")
#--endif()
# from FFTW's configure command:
#--Some influential environment variables:
#-- CC C compiler command
#-- CFLAGS C compiler flags
#-- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
#-- nonstandard directory <lib dir>
#-- LIBS libraries to pass to the linker, e.g. -l<library>
#-- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
#-- you have headers in a nonstandard directory <include dir>
set(_additional_configure_env)
set(_additional_external_project_args)
if (APPLE)
list(APPEND _additional_configure_env
"SDKROOT=${CMAKE_OSX_SYSROOT}"
"MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}"
)
list(APPEND _additional_external_project_args
BUILD_COMMAND
env
"SDKROOT=${CMAKE_OSX_SYSROOT}"
"MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}"
make
INSTALL_COMMAND
env
"SDKROOT=${CMAKE_OSX_SYSROOT}"
"MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}"
make
install
)
endif()
## Perhaps in the future a set of TryCompiles could be used here.
set(FFTW_OPTIMIZATION_CONFIGURATION "" CACHE INTERNAL "architecture flags: --enable-sse --enable-sse2 --enable-altivec --enable-mips-ps --enable-cell")
if(ITK_USE_SYSTEM_FFTW)
find_package( FFTW )
link_directories(${FFTW_LIBDIR})
else()
if(WIN32 AND NOT MINGW)
message("Can't build fftw as external project on Windows")
message(ERROR "install fftw and use ITK_USE_SYSTEM_FFTW")
else()
#
# fftw limitation -- can't be built in
# a directory with whitespace in its name.
if(${CMAKE_CURRENT_BINARY_DIR} MATCHES ".*[ \t].*")
message(FATAL_ERROR
"Can't build fftw in a directory with whitespace in its name")
endif()
#
# build fftw as an external project
if(BUILD_SHARED_LIBS)
set(FFTW_SHARED_FLAG --enable-shared)
endif()
#
# set fPIC flag if needed
set(GCC_POSITION_INDEPENDENT_CODE_FLAG "")
if(CMAKE_POSITION_INDEPENDENT_CODE)
set(GCC_POSITION_INDEPENDENT_CODE_FLAG "-fPIC")
endif()
set(_fftw_target_version 3.3.4)
set(_fftw_url_hash "1ee2c7bec3657f6846e63c6dfa71410563830d2b951966bf0123bd8f4f2f5d6b50f13b76d9a7b0eae70e44856f829ca6ceb3d080bb01649d1572c9f3f68e8eb1")
set(_fftw_url "https://data.kitware.com/api/v1/file/hashsum/sha512/${_fftw_url_hash}/download")
if(ITK_USE_FFTWF)
itk_download_attempt_check(FFTW)
ExternalProject_add(fftwf
PREFIX fftwf
URL "${_fftw_url}"
URL_HASH SHA512=${_fftw_url_hash}
DOWNLOAD_NAME "fftw-${_fftw_target_version}.tar.gz"
CONFIGURE_COMMAND
env
"CC=${CMAKE_C_COMPILER_LAUNCHER} ${CMAKE_C_COMPILER}"
"CFLAGS=${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE} ${GCC_POSITION_INDEPENDENT_CODE_FLAG}"
"LDFLAGS=$ENV{LDFLAGS}"
"LIBS=$ENV{LIBS}"
"CPP=$ENV{CPP}"
"CPPFLAGS=$ENV{CPPFLAGS}"
"CXXFLAGS=$ENV{CXXFLAGS} ${GCC_POSITION_INDEPENDENT_CODE_FLAG}"
${_additional_configure_env}
${ITK_BINARY_DIR}/fftwf/src/fftwf/configure
${FFTW_SHARED_FLAG}
${FFTW_OPTIMIZATION_CONFIGURATION}
${FFTW_THREADS_CONFIGURATION}
--disable-fortran
--enable-float
--prefix=${ITK_BINARY_DIR}/fftw
${_additional_external_project_args}
)
endif()
if(ITK_USE_FFTWD)
itk_download_attempt_check(FFTW)
ExternalProject_add(fftwd
PREFIX fftwd
URL "${_fftw_url}"
URL_HASH SHA512=${_fftw_url_hash}
DOWNLOAD_NAME "fftw-${_fftw_target_version}.tar.gz"
CONFIGURE_COMMAND
env
"CC=${CMAKE_C_COMPILER_LAUNCHER} ${CMAKE_C_COMPILER}"
"CFLAGS=${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE} ${GCC_POSITION_INDEPENDENT_CODE_FLAG}"
"LDFLAGS=$ENV{LDFLAGS}"
"LIBS=$ENV{LIBS}"
"CPP=$ENV{CPP}"
"CPPFLAGS=$ENV{CPPFLAGS}"
"CXXFLAGS=$ENV{CXXFLAGS} ${GCC_POSITION_INDEPENDENT_CODE_FLAG}"
${_additional_configure_env}
${ITK_BINARY_DIR}/fftwd/src/fftwd/configure
${FFTW_SHARED_FLAG}
${FFTW_OPTIMIZATION_CONFIGURATION}
${FFTW_THREADS_CONFIGURATION}
--disable-fortran
--disable-float
--prefix=${ITK_BINARY_DIR}/fftw
${_additional_external_project_args}
)
endif()
set(FFTW_INCLUDE_PATH ${ITK_BINARY_DIR}/fftw/include)
set(FFTW_LIBDIR ${ITK_BINARY_DIR}/fftw/lib)
link_directories(${FFTW_LIBDIR})
include_directories(${FFTW_INCLUDE_PATH})
#
# copy libraries into install tree
install(CODE
"file(GLOB FFTW_LIBS ${ITK_BINARY_DIR}/fftw/lib/*fftw3*)
file(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/lib/ITK-${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}\"
TYPE FILE FILES \${FFTW_LIBS})" COMPONENT Development)
#
# copy headers into install tree
install(CODE
"file(GLOB FFTW_INC ${ITK_BINARY_DIR}/fftw/include/*fftw3*)
file(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/include/ITK-${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}/Algorithms\"
TYPE FILE FILES \${FFTW_INC})" COMPONENT Development)
endif()
endif()
|