Skip to content

Commit 967f094

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 967f094

File tree

5 files changed

+50
-54
lines changed

5 files changed

+50
-54
lines changed

CHANGELOG.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
- Made ProjectionOperator `device` input case-insensitive (#1990)
77
- Fix `recon.FBP` `split_processing` methods for `ASTRA` backend (#2114)
88
- Copy geometry in the creation of a DataContainer (#2108)
9-
- Documentation
9+
- Documentation:
1010
- Updated documentation for the ChannelWiseOperator including new example (#2096)
1111
- Updated documentation for LADMM (#2015)
1212
- Updated Contributor's Guide to include an example of parametrized tests, using `unittest-parametrize` (#1990)
@@ -19,15 +19,18 @@
1919
- Renamed Sampler's `get_samples` to `view_samples` (deprecating `get_samples`) #2128
2020
- PDHG 'check_convergence' updated for new literature (#2084)
2121
- Make install local env script work on windows (#2144)
22-
- Testing
22+
- Testing:
2323
- Developers can now add `#all-tests` to their commit message on a PR to run the full matrix of GitHub actions tests (#2081)
2424
- Added tests for ProjectionOperator inputs that use `unittest-parametrize` module (#1990)
2525
- Added tests for Normaliser processor
2626
- Update minimum cmake version to 3.5
27-
- Dependencies
27+
- Dependencies:
2828
- matplotlib-base is an optional dependency, instead of required (#2093)
2929
- `unittest-parametrize has been added as a dependency for tests (#1990)
3030
- zenodo_get is an optional dependency, instead of required (#2146)
31+
- `FindIPP.cmake` fallback (#2148)
32+
- enable `find_package` using `*_ROOT` hints
33+
- simplified `cilacc` build logic for optional dependencies
3134

3235

3336
* 24.3.0

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)