Skip to content

Commit 3d0ccd4

Browse files
committed
cmake: FindIPP fallback (#2148)
* simple `FindIPP` fallback * enable `find_package` using `*_ROOT` hints * simplified `cilacc` build logic for optional dependencies
1 parent a5def19 commit 3d0ccd4

File tree

4 files changed

+44
-51
lines changed

4 files changed

+44
-51
lines changed

CMakeLists.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
#
1616
# Authors:
1717
# CIL Developers, listed at: https://github.com/TomographicImaging/CIL/blob/master/NOTICE.txt
18-
# Richard Brown (University College London)
19-
2018
if(APPLE)
2119
cmake_minimum_required(VERSION 3.16)
2220
else()
@@ -25,6 +23,9 @@ endif()
2523

2624
project(cil LANGUAGES CXX)
2725

26+
cmake_policy(PUSH)
27+
28+
cmake_policy(SET CMP0074 NEW)
2829
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.27)
2930
cmake_policy(SET CMP0148 OLD)
3031
endif()
@@ -46,3 +47,5 @@ endif()
4647

4748
add_subdirectory(src/Core)
4849
add_subdirectory(Wrappers/Python)
50+
51+
cmake_policy(POP)

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ If not installing to a conda environment then the user will also need to set the
164164
By default the location of the IPP library and includes is `${CMAKE_INSTALL_PREFIX}/lib` and `${CMAKE_INSTALL_PREFIX}/include` respectively. To pass the location of the IPP library and headers please pass the following parameters:
165165

166166
```sh
167-
cmake -S . -B ./build -DCMAKE_INSTALL_PREFIX=<install_directory> -DPython_EXECUTABLE=<path_to_python_executable> -DIPP_LIBRARY=<path_to_ipp_library> -DIPP_INCLUDE=<path_to_ipp_includes>
167+
cmake -S . -B ./build -DCMAKE_INSTALL_PREFIX=<install_directory> -DPython_EXECUTABLE=<path_to_python_executable> -DIPP_ROOT=<path_to_ipp>
168168
```
169169

170170
The user will then need to add the path `<install_directory>/lib` to the environment variable `PATH` or `LD_LIBRARY_PATH`, depending on system OS.

src/Core/CMakeLists.txt

Lines changed: 13 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
#
1616
# Authors:
1717
# CIL Developers, listed at: https://github.com/TomographicImaging/CIL/blob/master/NOTICE.txt
18-
# Richard Brown (UCL)
19-
2018
set (CMAKE_CXX_STANDARD 11)
2119
set (CMAKE_CXX_STANDARD_REQUIRED ON)
2220
if(NOT DEFINED CMAKE_BUILD_TYPE)
@@ -27,7 +25,6 @@ message ("OpenMP_CXX_FLAGS ${OpenMP_CXX_FLAGS}")
2725
find_package(OpenMP REQUIRED)
2826
add_definitions(${OpenMP_CXX_FLAGS})
2927

30-
3128
if (WIN32)
3229
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Ddll_EXPORTS")
3330
endif()
@@ -52,56 +49,24 @@ else()
5249
set (OpenMP_EXE_LINKER_FLAGS ${OpenMP_C_FLAGS})
5350
endif()
5451

55-
if(NOT DEFINED IPP_LIBRARY)
56-
if (UNIX)
57-
set(IPP_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib)
58-
elseif(WIN32)
59-
set(IPP_LIBRARY ${CMAKE_INSTALL_PREFIX}/Library/lib)
60-
endif()
61-
endif()
52+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
53+
find_package(IPP)
6254

63-
if(NOT DEFINED IPP_INCLUDE)
64-
set(IPP_INCLUDE ${CMAKE_INSTALL_PREFIX}/include)
65-
endif()
55+
list(APPEND cilacc_SOURCES utilities.cpp axpby.cpp FiniteDifferenceLibrary.cpp)
56+
list(APPEND cilacc_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include)
57+
list(APPEND cilacc_LIBRARIES ${OpenMP_EXE_LINKER_FLAGS})
6658

67-
if (UNIX)
68-
find_library(IPP_CORE libippcore.so PATHS ${IPP_LIBRARY})
69-
find_library(IPP_S libipps.so PATHS ${IPP_LIBRARY})
70-
find_library(IPP_VM libippvm.so PATHS ${IPP_LIBRARY})
71-
find_library(IPP_I libippi.so PATHS ${IPP_LIBRARY})
72-
elseif(WIN32)
73-
find_library(IPP_CORE ippcore PATHS ${IPP_LIBRARY})
74-
find_library(IPP_S ipps PATHS ${IPP_LIBRARY})
75-
find_library(IPP_VM ippvm PATHS ${IPP_LIBRARY})
76-
find_library(IPP_I ippi PATHS ${IPP_LIBRARY})
77-
endif()
78-
79-
if(IPP_CORE AND IPP_S AND IPP_VM AND IPP_I)
80-
set(USE_IPP TRUE)
81-
message("IPP libraries found")
59+
if(IPP_FOUND)
60+
list(APPEND cilacc_SOURCES FBP_filtering.cpp Binning.cpp)
61+
list(APPEND cilacc_INCLUDES ${IPP_INCLUDE_DIRS})
62+
list(APPEND cilacc_LIBRARIES ${IPP_LIBRARIES})
8263
else()
83-
set(USE_IPP FALSE)
84-
message("IPP libraries not found, FBP_filtering not in build")
64+
message(WARNING "IPP libraries not found, FBP_filtering not in build")
8565
endif()
8666

87-
if(USE_IPP)
88-
add_library(cilacc SHARED ${CMAKE_CURRENT_SOURCE_DIR}/utilities.cpp
89-
${CMAKE_CURRENT_SOURCE_DIR}/axpby.cpp
90-
${CMAKE_CURRENT_SOURCE_DIR}/FiniteDifferenceLibrary.cpp
91-
${CMAKE_CURRENT_SOURCE_DIR}/FBP_filtering.cpp
92-
${CMAKE_CURRENT_SOURCE_DIR}/Binning.cpp)
93-
94-
95-
target_link_libraries(cilacc ${OpenMP_EXE_LINKER_FLAGS} ${IPP_CORE} ${IPP_S} ${IPP_I} ${IPP_VM})
96-
include_directories(cilacc PUBLIC ${IPP_INCLUDE} ${CMAKE_CURRENT_SOURCE_DIR}/include)
97-
else()
98-
add_library(cilacc SHARED ${CMAKE_CURRENT_SOURCE_DIR}/utilities.cpp
99-
${CMAKE_CURRENT_SOURCE_DIR}/axpby.cpp
100-
${CMAKE_CURRENT_SOURCE_DIR}/FiniteDifferenceLibrary.cpp )
101-
102-
target_link_libraries(cilacc ${OpenMP_EXE_LINKER_FLAGS})
103-
include_directories(cilacc PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
104-
endif()
67+
add_library(cilacc SHARED ${cilacc_SOURCES})
68+
target_link_libraries(cilacc ${cilacc_LIBRARIES})
69+
include_directories(cilacc PUBLIC ${cilacc_INCLUDES})
10570

10671
## Install
10772
#include(GNUInstallDirs)

src/Core/cmake/FindIPP.cmake

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Outputs: IPP_FOUND, IPP_INCLUDE_DIRS, IPP_LIBRARIES
2+
3+
find_path(IPP_ROOT_DIR include/ipp.h PATHS ${IPP_ROOT} $ENV{IPPROOT} $ENV{CONDA_PREFIX})
4+
find_path(IPP_INCLUDE_DIR ipp.h PATHS ${IPP_ROOT_DIR}/include)
5+
6+
if(APPLE)
7+
set(IPP_PRE "lib")
8+
set(IPP_POST ".a")
9+
elseif(NOT WIN32)
10+
set(IPP_PRE "lib")
11+
set(IPP_POST ".so")
12+
endif()
13+
find_library(IPP_CORE ${IPP_PRE}ippcore${IPP_POST} PATHS ${IPP_ROOT_DIR})
14+
find_library(IPP_S ${IPP_PRE}ipps${IPP_POST} PATHS ${IPP_ROOT_DIR})
15+
find_library(IPP_VM ${IPP_PRE}ippvm${IPP_POST} PATHS ${IPP_ROOT_DIR})
16+
find_library(IPP_I ${IPP_PRE}ippi${IPP_POST} PATHS ${IPP_ROOT_DIR})
17+
18+
if(IPP_INCLUDE_DIR AND IPP_CORE AND IPP_S AND IPP_VM AND IPP_I)
19+
message(STATUS "IPP found in: ${IPP_ROOT_DIR}")
20+
set(IPP_FOUND TRUE)
21+
set(IPP_INCLUDE_DIRS "${IPP_INCLUDE_DIR}")
22+
set(IPP_LIBRARIES "${IPP_CORE};${IPP_S};${IPP_VM};${IPP_I}")
23+
else()
24+
message(STATUS "IPP not found")
25+
endif()

0 commit comments

Comments
 (0)