diff --git a/Modules/Core/Convolution/CMakeLists.txt b/Modules/Core/Convolution/CMakeLists.txt index 4a79021d37ac4ea8f9577293913d40d63b380aa2..66dcee34743e4d1d32aee57803fcb6e689d52f23 100644 --- a/Modules/Core/Convolution/CMakeLists.txt +++ b/Modules/Core/Convolution/CMakeLists.txt @@ -19,4 +19,15 @@ # project(OTBConvolution) + +option(OTB_USE_FFTW "Download and compile FFTW third party (license change to GPLv2)" OFF) + +if (OTB_USE_FFTW) + message(NOTICE "/!\ /!\ /!\ You are actually compiling OTB with FFTW. As FFTW is distributed under GNU GPLv2, OTB is now provided with GNU GPLv2 license /!\ /!\ /!\ ") +else() + message(STATUS "Compiling with FFTW disabled, otbOverlapSaveConvolutionImageFilter will not be available") + add_compile_definitions(ITK_USE_FFTWD=0) + add_compile_definitions(ITK_USE_FFTWF=0) +endif() + otb_module_impl() diff --git a/Modules/Core/Convolution/test/CMakeLists.txt b/Modules/Core/Convolution/test/CMakeLists.txt index ebb6f84892b968f6c26feb23e22696a56c3f649d..e76c0e59fa69f5c06e41f7cfa59f54910b139dbf 100644 --- a/Modules/Core/Convolution/test/CMakeLists.txt +++ b/Modules/Core/Convolution/test/CMakeLists.txt @@ -23,11 +23,14 @@ otb_module_test() set(OTBConvolutionTests otbConvolutionTestDriver.cxx otbConvolutionImageFilter.cxx -otbOverlapSaveConvolutionImageFilter.cxx otbCompareOverlapSaveAndClassicalConvolutionWithGaborFilter.cxx otbGaborFilterGenerator.cxx ) +if (OTB_USE_FFTW) + list(APPEND OTBConvolutionTests otbOverlapSaveConvolutionImageFilter.cxx) +endif() + add_executable(otbConvolutionTestDriver ${OTBConvolutionTests}) target_link_libraries(otbConvolutionTestDriver ${OTBConvolution-Test_LIBRARIES}) otb_module_target_label(otbConvolutionTestDriver) @@ -43,35 +46,34 @@ otb_add_test(NAME bfTvConvolutionImageFilter COMMAND otbConvolutionTestDriver ${TEMP}/bfTvConvolutionImageFilter.tif ) -if(ITK_USE_FFTWD) - -if(MSVC AND (CMAKE_SIZEOF_VOID_P EQUAL "4")) - message(WARNING "Disable OverlapSaveConvolution tests") -else() -otb_add_test(NAME bfTvOverlapSaveConvolutionImageFilter COMMAND otbConvolutionTestDriver - --compare-image ${EPSILON_7} - ${BASELINE}/bfTvConvolutionImageFilter.tif - ${TEMP}/bfTvOverlapSaveConvolutionImageFilter.tif - otbOverlapSaveConvolutionImageFilter - ${INPUTDATA}/QB_Suburb.png - ${TEMP}/bfTvOverlapSaveConvolutionImageFilter.tif - ) +if(OTB_USE_FFTW) + if(MSVC AND (CMAKE_SIZEOF_VOID_P EQUAL "4")) + message(WARNING "Disable OverlapSaveConvolution tests") + else() + otb_add_test(NAME bfTvOverlapSaveConvolutionImageFilter COMMAND otbConvolutionTestDriver + --compare-image ${EPSILON_7} + ${BASELINE}/bfTvConvolutionImageFilter.tif + ${TEMP}/bfTvOverlapSaveConvolutionImageFilter.tif + otbOverlapSaveConvolutionImageFilter + ${INPUTDATA}/QB_Suburb.png + ${TEMP}/bfTvOverlapSaveConvolutionImageFilter.tif + ) -otb_add_test(NAME bfTvCompareOverlapSaveAndClassicalConvolutionWithGaborFilter COMMAND otbConvolutionTestDriver - --compare-image ${EPSILON_7} - ${TEMP}/bfTvCompareConvolutionOutput.tif - ${TEMP}/bfTvCompareOSConvolutionoutput.tif - otbCompareOverlapSaveAndClassicalConvolutionWithGaborFilter - ${INPUTDATA}/QB_PAN_ROI_1000_100.tif - ${TEMP}/bfTvCompareConvolutionOutput.tif - ${TEMP}/bfTvCompareOSConvolutionoutput.tif - 32 32 #Radius - 0.02 0.025 # a b - -45 # theta - 0.0125 0.0125 #u0 v0 - 0 - ) -endif() + otb_add_test(NAME bfTvCompareOverlapSaveAndClassicalConvolutionWithGaborFilter COMMAND otbConvolutionTestDriver + --compare-image ${EPSILON_7} + ${TEMP}/bfTvCompareConvolutionOutput.tif + ${TEMP}/bfTvCompareOSConvolutionoutput.tif + otbCompareOverlapSaveAndClassicalConvolutionWithGaborFilter + ${INPUTDATA}/QB_PAN_ROI_1000_100.tif + ${TEMP}/bfTvCompareConvolutionOutput.tif + ${TEMP}/bfTvCompareOSConvolutionoutput.tif + 32 32 #Radius + 0.02 0.025 # a b + -45 # theta + 0.0125 0.0125 #u0 v0 + 0 + ) + endif() endif() diff --git a/Modules/ThirdParty/ITK/CMakeLists.txt b/Modules/ThirdParty/ITK/CMakeLists.txt index 1efa7de0b4cba0490103d499fcf3d0e018dcae83..c40641a5c3b56651572ce9b864323e40f5e66557 100644 --- a/Modules/ThirdParty/ITK/CMakeLists.txt +++ b/Modules/ThirdParty/ITK/CMakeLists.txt @@ -23,7 +23,13 @@ project(OTBITK) set(OTBITK_SYSTEM_INCLUDE_DIRS ${ITK_INCLUDE_DIRS}) set(OTBITK_SYSTEM_LIBRARY_DIRS ${ITK_LIBRARY_DIRS}) list(REMOVE_DUPLICATES OTBITK_SYSTEM_LIBRARY_DIRS) -set(OTBITK_LIBRARIES "${ITK_LIBRARIES}" ${FFTWD_BASE_LIB} ${FFTWD_THREADS_LIB} ${FFTWF_BASE_LIB} ${FFTWF_THREADS_LIB}) + +if (OTB_USE_FFTW) + set(OTBITK_LIBRARIES "${ITK_LIBRARIES}" ${FFTWD_BASE_LIB} ${FFTWD_THREADS_LIB} ${FFTWF_BASE_LIB} ${FFTWF_THREADS_LIB}) +else() + set(OTBITK_LIBRARIES "${ITK_LIBRARIES}") +endif() + set(OTBITK_EXPORT_CODE_BUILD "find_package(ITK REQUIRED COMPONENTS ${OTBITK_ITK_REQUIRED_MODULE_LIST} HINTS ${ITK_DIR})") set(OTBITK_EXPORT_CODE_INSTALL ${OTBITK_EXPORT_CODE_BUILD}) diff --git a/SuperBuild/CMake/External_fftw.cmake b/SuperBuild/CMake/External_fftw.cmake index bcc242186ad369dcaccdf7ec0a14ed1b8f86abef..f3a0c3f7de0286ef28cd127dcc4259adb175044c 100644 --- a/SuperBuild/CMake/External_fftw.cmake +++ b/SuperBuild/CMake/External_fftw.cmake @@ -18,78 +18,83 @@ # limitations under the License. # -INCLUDE_ONCE_MACRO(FFTW) +if (OTB_USE_FFTW) + INCLUDE_ONCE_MACRO(FFTW) -SETUP_SUPERBUILD(FFTW) + SETUP_SUPERBUILD(FFTW) + message(AUTHOR_WARNING "/!\\/!\\/!\\ You are actually compiling OTB with FFTW. As FFTW is distributed under GNU GPLv2, OTB is now provided with GNU GPLv2 license /!\\/!\\/!\\") -set(FFTWF_SB_SRC ${CMAKE_BINARY_DIR}/FFTW/src/FFTWF) -set(FFTWD_SB_SRC ${CMAKE_BINARY_DIR}/FFTW/src/FFTWD) -set(FFTWF_SB_BUILD ${CMAKE_BINARY_DIR}/FFTW/build/FFTWF) -set(FFTWD_SB_BUILD ${CMAKE_BINARY_DIR}/FFTW/build/FFTWD) + set(FFTWF_SB_SRC ${CMAKE_BINARY_DIR}/FFTW/src/FFTWF) + set(FFTWD_SB_SRC ${CMAKE_BINARY_DIR}/FFTW/src/FFTWD) + set(FFTWF_SB_BUILD ${CMAKE_BINARY_DIR}/FFTW/build/FFTWF) + set(FFTWD_SB_BUILD ${CMAKE_BINARY_DIR}/FFTW/build/FFTWD) -if(WIN32) - set(FFTW_SB_CONFIG -DWITH_COMBINED_THREADS:BOOL=ON) -else() - set(FFTW_SB_CONFIG -DWITH_COMBINED_THREADS:BOOL=OFF) -endif() + if(WIN32) + set(FFTW_SB_CONFIG -DWITH_COMBINED_THREADS:BOOL=ON) + else() + set(FFTW_SB_CONFIG -DWITH_COMBINED_THREADS:BOOL=OFF) + endif() -# Compile the float version of FFTW -ExternalProject_Add(FFTWF - PREFIX FFTW/FFTWF - URL "https://fftw.org/fftw-3.3.10.tar.gz" - URL_MD5 8ccbf6a5ea78a16dbc3e1306e234cc5c - SOURCE_DIR ${FFTWF_SB_SRC} - BINARY_DIR ${FFTWF_SB_BUILD} - INSTALL_DIR ${SB_INSTALL_PREFIX} - DOWNLOAD_DIR ${DOWNLOAD_LOCATION} - CMAKE_CACHE_ARGS - ${SB_CMAKE_CACHE_ARGS} - -DCMAKE_INSTALL_LIBDIR:PATH=lib - -DBUILD_TESTS:BOOL=OFF - -DDISABLE_FORTRAN:BOOL=ON - -DENABLE_THREADS:BOOL=ON - -DENABLE_SSE2:BOOL=ON - -DENABLE_FLOAT:BOOL=ON - ${FFTW_SB_CONFIG} - DEPENDS ${FFTW_DEPENDENCIES} - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_INSTALL 1 - ) + # Compile the float version of FFTW + ExternalProject_Add(FFTWF + PREFIX FFTW/FFTWF + URL "https://fftw.org/fftw-3.3.10.tar.gz" + URL_MD5 8ccbf6a5ea78a16dbc3e1306e234cc5c + SOURCE_DIR ${FFTWF_SB_SRC} + BINARY_DIR ${FFTWF_SB_BUILD} + INSTALL_DIR ${SB_INSTALL_PREFIX} + DOWNLOAD_DIR ${DOWNLOAD_LOCATION} + CMAKE_CACHE_ARGS + ${SB_CMAKE_CACHE_ARGS} + -DCMAKE_INSTALL_LIBDIR:PATH=lib + -DBUILD_TESTS:BOOL=OFF + -DDISABLE_FORTRAN:BOOL=ON + -DENABLE_THREADS:BOOL=ON + -DENABLE_SSE2:BOOL=ON + -DENABLE_FLOAT:BOOL=ON + ${FFTW_SB_CONFIG} + DEPENDS ${FFTW_DEPENDENCIES} + LOG_DOWNLOAD 1 + LOG_CONFIGURE 1 + LOG_BUILD 1 + LOG_INSTALL 1 + ) -# Compile the double version of FFTW -ExternalProject_Add(FFTWD - PREFIX FFTW/FFTWD - URL "https://fftw.org/fftw-3.3.10.tar.gz" - URL_MD5 8ccbf6a5ea78a16dbc3e1306e234cc5c - SOURCE_DIR ${FFTWD_SB_SRC} - BINARY_DIR ${FFTWD_SB_BUILD} - INSTALL_DIR ${SB_INSTALL_PREFIX} - DOWNLOAD_DIR ${DOWNLOAD_LOCATION} - CMAKE_CACHE_ARGS - ${SB_CMAKE_CACHE_ARGS} - -DCMAKE_INSTALL_LIBDIR:PATH=lib - -DBUILD_TESTS:BOOL=OFF - -DDISABLE_FORTRAN:BOOL=ON - -DENABLE_THREADS:BOOL=ON - -DENABLE_SSE2:BOOL=ON - -DENABLE_FLOAT:BOOL=OFF - ${FFTW_SB_CONFIG} - DEPENDS FFTWF - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_INSTALL 1 - ) + # Compile the double version of FFTW + ExternalProject_Add(FFTWD + PREFIX FFTW/FFTWD + URL "https://fftw.org/fftw-3.3.10.tar.gz" + URL_MD5 8ccbf6a5ea78a16dbc3e1306e234cc5c + SOURCE_DIR ${FFTWD_SB_SRC} + BINARY_DIR ${FFTWD_SB_BUILD} + INSTALL_DIR ${SB_INSTALL_PREFIX} + DOWNLOAD_DIR ${DOWNLOAD_LOCATION} + CMAKE_CACHE_ARGS + ${SB_CMAKE_CACHE_ARGS} + -DCMAKE_INSTALL_LIBDIR:PATH=lib + -DBUILD_TESTS:BOOL=OFF + -DDISABLE_FORTRAN:BOOL=ON + -DENABLE_THREADS:BOOL=ON + -DENABLE_SSE2:BOOL=ON + -DENABLE_FLOAT:BOOL=OFF + ${FFTW_SB_CONFIG} + DEPENDS FFTWF + LOG_DOWNLOAD 1 + LOG_CONFIGURE 1 + LOG_BUILD 1 + LOG_INSTALL 1 + ) -ExternalProject_Add(FFTW - PREFIX FFTW - DOWNLOAD_COMMAND "" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - DEPENDS FFTWD - ) + ExternalProject_Add(FFTW + PREFIX FFTW + DOWNLOAD_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + DEPENDS FFTWD + ) -set(_SB_FFTW_INCLUDE_PATH ${SB_INSTALL_PREFIX}/include) + set(_SB_FFTW_INCLUDE_PATH ${SB_INSTALL_PREFIX}/include) +else() + message(STATUS "Compiling with FFTW disabled, otbOverlapSaveConvolutionImageFilter will not be available") +endif() diff --git a/SuperBuild/CMake/External_itk.cmake b/SuperBuild/CMake/External_itk.cmake index 8357ad767e70e167bee71f21f8ad6c98856d2d7b..a03dccb487c7bd1b5a73ed6cd6db296a7db3fa06 100644 --- a/SuperBuild/CMake/External_itk.cmake +++ b/SuperBuild/CMake/External_itk.cmake @@ -114,19 +114,29 @@ foreach(ITK_MODULE ${ITK_ENABLED_MODULES}) endforeach() # declare dependencies -ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(ITK ZLIB FFTW) +# by default we don't distribute otb with fftw as it implies a GPLv2 +# contamination +if (OTB_USE_FFTW) + ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(ITK ZLIB FFTW) +else() + ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(ITK ZLIB) + add_compile_definitions(ITK_USE_FFTWD=0) + add_compile_definitions(ITK_USE_FFTWF=0) +endif() ADD_SUPERBUILD_CMAKE_VAR(ITK ZLIB_INCLUDE_DIR) ADD_SUPERBUILD_CMAKE_VAR(ITK ZLIB_LIBRARY) -# These variables are used in ITK to initialize the value of the ITK_USE_FFTW_XXX options -list(APPEND ITK_SB_CONFIG - -DUSE_FFTWF:BOOL=ON - -DUSE_FFTWD:BOOL=ON - -DUSE_SYSTEM_FFTW:BOOL=ON - ) -ADD_SUPERBUILD_CMAKE_VAR(ITK FFTW_INCLUDE_PATH) -ADD_SUPERBUILD_CMAKE_VAR(ITK FFTW_LIBRARIES) -ADD_SUPERBUILD_CMAKE_VAR(ITK FFTWD_LIBRARIES) +if (OTB_USE_FFTW) + # These variables are used in ITK to initialize the value of the ITK_USE_FFTW_XXX options + list(APPEND ITK_SB_CONFIG + -DUSE_FFTWF:BOOL=ON + -DUSE_FFTWD:BOOL=ON + -DUSE_SYSTEM_FFTW:BOOL=ON + ) + ADD_SUPERBUILD_CMAKE_VAR(ITK FFTW_INCLUDE_PATH) + ADD_SUPERBUILD_CMAKE_VAR(ITK FFTW_LIBRARIES) + ADD_SUPERBUILD_CMAKE_VAR(ITK FFTWD_LIBRARIES) +endif() if (WIN32) list(APPEND ITK_SB_CONFIG @@ -169,4 +179,4 @@ ExternalProject_Add(ITK LOG_INSTALL 1 ) -SUPERBUILD_PATCH_SOURCE(ITK) \ No newline at end of file +SUPERBUILD_PATCH_SOURCE(ITK) diff --git a/SuperBuild/CMakeLists.txt b/SuperBuild/CMakeLists.txt index f1bcd99adb4be7a09150538b48556bd231230e22..579b767bbfe468915a2682583177006fd1cb0ae9 100644 --- a/SuperBuild/CMakeLists.txt +++ b/SuperBuild/CMakeLists.txt @@ -22,6 +22,15 @@ cmake_minimum_required(VERSION 3.10.2) project(OTB-SuperBuild) +if(POLICY CMP0135) + # avoid cmake warnings about missing DOWNLOAD_EXTRACT_TIMESTAMP + # when using ExternalProject_Add in External_<dep>.cmake files. + # As we also build on rhel and cmake version < 3.24 here, + # we need to use policy settings + cmake_policy(SET CMP0135 NEW) +endif() + + set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) @@ -276,6 +285,7 @@ option(OTB_USE_CURL "Enable module Curl in OTB" ON) option(OTB_USE_SIFTFAST "Enable module Siftfast in OTB" ON) option(OTB_USE_GSL "Enable module GSL in OTB" ON) option(OTB_USE_LIBKML "Enable module libKML in OTB" OFF) +option(OTB_USE_FFTW "Download and compile FFTW third party (license change to GPLv2)" OFF) #option() does not change the value in cache so we have to set the option via the set CACHE FORCE method if(OTB_BUILD_Learning MATCHES ON) set(OTB_USE_LIBSVM ON CACHE BOOL "Enable module LibSVM in OTB" FORCE)