diff --git a/CMakeLists.txt b/CMakeLists.txt index 267d5819b..261c61cb6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,8 +15,6 @@ # # Authors: # CIL Developers, listed at: https://github.com/TomographicImaging/CIL/blob/master/NOTICE.txt -# Richard Brown (University College London) - if(APPLE) cmake_minimum_required(VERSION 3.16) else() @@ -25,6 +23,9 @@ endif() project(cil LANGUAGES CXX) +cmake_policy(PUSH) + +cmake_policy(SET CMP0074 NEW) if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.27) cmake_policy(SET CMP0148 OLD) endif() @@ -46,3 +47,5 @@ endif() add_subdirectory(src/Core) add_subdirectory(Wrappers/Python) + +cmake_policy(POP) diff --git a/src/Core/CMakeLists.txt b/src/Core/CMakeLists.txt index da824d83e..82f0c8e0b 100644 --- a/src/Core/CMakeLists.txt +++ b/src/Core/CMakeLists.txt @@ -15,8 +15,6 @@ # # Authors: # CIL Developers, listed at: https://github.com/TomographicImaging/CIL/blob/master/NOTICE.txt -# Richard Brown (UCL) - set (CMAKE_CXX_STANDARD 11) set (CMAKE_CXX_STANDARD_REQUIRED ON) if(NOT DEFINED CMAKE_BUILD_TYPE) @@ -27,7 +25,6 @@ message ("OpenMP_CXX_FLAGS ${OpenMP_CXX_FLAGS}") find_package(OpenMP REQUIRED) add_definitions(${OpenMP_CXX_FLAGS}) - if (WIN32) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Ddll_EXPORTS") endif() @@ -52,56 +49,24 @@ else() set (OpenMP_EXE_LINKER_FLAGS ${OpenMP_C_FLAGS}) endif() -if(NOT DEFINED IPP_LIBRARY) - if (UNIX) - set(IPP_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib) - elseif(WIN32) - set(IPP_LIBRARY ${CMAKE_INSTALL_PREFIX}/Library/lib) - endif() -endif() +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +find_package(IPP) -if(NOT DEFINED IPP_INCLUDE) - set(IPP_INCLUDE ${CMAKE_INSTALL_PREFIX}/include) -endif() +list(APPEND cilacc_SOURCES utilities.cpp axpby.cpp FiniteDifferenceLibrary.cpp) +list(APPEND cilacc_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include) +list(APPEND cilacc_LIBRARIES ${OpenMP_EXE_LINKER_FLAGS}) -if (UNIX) - find_library(IPP_CORE libippcore.so PATHS ${IPP_LIBRARY}) - find_library(IPP_S libipps.so PATHS ${IPP_LIBRARY}) - find_library(IPP_VM libippvm.so PATHS ${IPP_LIBRARY}) - find_library(IPP_I libippi.so PATHS ${IPP_LIBRARY}) -elseif(WIN32) - find_library(IPP_CORE ippcore PATHS ${IPP_LIBRARY}) - find_library(IPP_S ipps PATHS ${IPP_LIBRARY}) - find_library(IPP_VM ippvm PATHS ${IPP_LIBRARY}) - find_library(IPP_I ippi PATHS ${IPP_LIBRARY}) -endif() - -if(IPP_CORE AND IPP_S AND IPP_VM AND IPP_I) - set(USE_IPP TRUE) - message("IPP libraries found") +if(IPP_FOUND) + list(APPEND cilacc_SOURCES FBP_filtering.cpp Binning.cpp) + list(APPEND cilacc_INCLUDES ${IPP_INCLUDE_DIRS}) + list(APPEND cilacc_LIBRARIES ${IPP_LIBRARIES}) else() - set(USE_IPP FALSE) - message("IPP libraries not found, FBP_filtering not in build") + message(WARNING "IPP libraries not found, FBP_filtering not in build") endif() -if(USE_IPP) - add_library(cilacc SHARED ${CMAKE_CURRENT_SOURCE_DIR}/utilities.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/axpby.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/FiniteDifferenceLibrary.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/FBP_filtering.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/Binning.cpp) - - - target_link_libraries(cilacc ${OpenMP_EXE_LINKER_FLAGS} ${IPP_CORE} ${IPP_S} ${IPP_I} ${IPP_VM}) - include_directories(cilacc PUBLIC ${IPP_INCLUDE} ${CMAKE_CURRENT_SOURCE_DIR}/include) -else() - add_library(cilacc SHARED ${CMAKE_CURRENT_SOURCE_DIR}/utilities.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/axpby.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/FiniteDifferenceLibrary.cpp ) - - target_link_libraries(cilacc ${OpenMP_EXE_LINKER_FLAGS}) - include_directories(cilacc PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) -endif() +add_library(cilacc SHARED ${cilacc_SOURCES}) +target_link_libraries(cilacc ${cilacc_LIBRARIES}) +include_directories(cilacc PUBLIC ${cilacc_INCLUDES}) ## Install #include(GNUInstallDirs) diff --git a/src/Core/cmake/FindIPP.cmake b/src/Core/cmake/FindIPP.cmake new file mode 100644 index 000000000..b5c402d20 --- /dev/null +++ b/src/Core/cmake/FindIPP.cmake @@ -0,0 +1,25 @@ +# Outputs: IPP_FOUND, IPP_INCLUDE_DIRS, IPP_LIBRARIES + +find_path(IPP_ROOT_DIR include/ipp.h PATHS ${IPP_ROOT} $ENV{IPPROOT} $ENV{CONDA_PREFIX}) +find_path(IPP_INCLUDE_DIR ipp.h PATHS ${IPP_ROOT_DIR}/include) + +if(APPLE) + set(IPP_PRE "lib") + set(IPP_POST ".a") +elseif(NOT WIN32) + set(IPP_PRE "lib") + set(IPP_POST ".so") +endif() +find_library(IPP_CORE ${IPP_PRE}ippcore${IPP_POST} PATHS ${IPP_ROOT_DIR}) +find_library(IPP_S ${IPP_PRE}ipps${IPP_POST} PATHS ${IPP_ROOT_DIR}) +find_library(IPP_VM ${IPP_PRE}ippvm${IPP_POST} PATHS ${IPP_ROOT_DIR}) +find_library(IPP_I ${IPP_PRE}ippi${IPP_POST} PATHS ${IPP_ROOT_DIR}) + +if(IPP_INCLUDE_DIR AND IPP_CORE AND IPP_S AND IPP_VM AND IPP_I) + message(STATUS "IPP found in: ${IPP_ROOT_DIR}") + set(IPP_FOUND TRUE) + set(IPP_INCLUDE_DIRS "${IPP_INCLUDE_DIR}") + set(IPP_LIBRARIES "${IPP_CORE};${IPP_S};${IPP_VM};${IPP_I}") +else() + message(STATUS "IPP not found") +endif()