Skip to content

Commit 0d9a251

Browse files
committed
Fix cmake
1 parent 3d9491b commit 0d9a251

6 files changed

Lines changed: 132 additions & 302 deletions

.gitignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
build/
2+
flann
3+
HDILibflann.tgz
4+
aql_out.txt
5+
HDILib.tgz
6+
HDILib/
7+
flann.tgz
8+
lz4.tgz
9+
lz4_Debug.tgz
10+
lz4_Release.tgz
11+
*.bak

CMakeLists.txt

Lines changed: 67 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,20 @@
1-
cmake_minimum_required(VERSION 3.15.0)
1+
cmake_minimum_required(VERSION 3.17.0)
2+
3+
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.27.0")
4+
cmake_policy(SET CMP0144 NEW) # Remove once we set min cmake version accordingly
5+
endif()
26

37
set(PROJECT "DualAnalysisPlugin")
48
PROJECT(${PROJECT})
59

6-
include(FetchContent)
7-
FetchContent_Declare(cmakesupport
8-
GIT_REPOSITORY https://github.com/ManiVaultStudio/github-actions
9-
GIT_TAG main
10-
GIT_SHALLOW TRUE
11-
SOURCE_SUBDIR CMakeSupport
12-
)
13-
FetchContent_MakeAvailable(cmakesupport)
1410

1511
# -----------------------------------------------------------------------------
1612
# User options
1713
# -----------------------------------------------------------------------------
18-
option(USE_ARTIFACTORY_LIBS "Use the prebuilt libraries from artifactory" ON)
19-
option(ENABLE_AVX "Enable AVX support" OFF)
14+
option(MV_SNE_USE_ARTIFACTORY_LIBS "Use the prebuilt libraries from artifactory" ON)
15+
option(MV_SNE_USE_AVX "Enable AVX support" OFF)
2016
option(MV_UNITY_BUILD "Combine target source files into batches for faster compilation" OFF)
21-
set(OPTIMIZATION_LEVEL "2" CACHE STRING "Optimization level for all targets in release builds, e.g. 0, 1, 2")
17+
set(MV_SNE_OPTIMIZATION_LEVEL "2" CACHE STRING "Optimization level for all targets in release builds, e.g. 0, 1, 2")
2218

2319
# -----------------------------------------------------------------------------
2420
# CMake options
@@ -33,10 +29,9 @@ set(CMAKE_AUTOUIC ON)
3329
# macros for linking both prebuilt artifactory libraries and locally built ones
3430
include(CMakeLinkUtilities)
3531

36-
# Test hardware avx capabilities
37-
include(CMakeSetOptimizationAndAVX)
3832

39-
include(InstallArtifactoryPackage)
33+
# set optimization in release mode
34+
include(CMakeSetOptimizationLevel)
4035

4136
if(MSVC)
4237
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DWIN32 /EHsc /MP /permissive- /Zc:__cplusplus")
@@ -49,20 +44,22 @@ endif(MSVC)
4944
# -----------------------------------------------------------------------------
5045

5146
set(LIBRARY_INSTALL_DIR ${PROJECT_BINARY_DIR})
52-
message(status "FetchContent: ${cmakesupport_SOURCE_DIR} ${cmakesupport_BINARY_DIR}")
53-
include("${cmakesupport_SOURCE_DIR}/CMakeSupport/InstallArtifactoryPackage.cmake")
5447
if (USE_ARTIFACTORY_LIBS AND NOT DUAL_ANALYSIS_ARTIFACTORY_LIBS_INSTALLED)
5548
message(STATUS "Installing artifactory packages to: ${LIBRARY_INSTALL_DIR}")
5649

57-
set(HDILib_VERSION 1.2.7)
50+
set(HDILib_VERSION 1.2.9)
5851
set(flann_VERSION 1.9.2)
59-
set(lz4_VERSION 1.9.3)
52+
set(lz4_VERSION 1.10.0)
6053

6154
# Both HDILib and flann are available prebuilt in the lkeb-artifactory as combined Debug/Release packages
6255
# lz4 is also available in the lkb-artifactory in separate Debug and |Release packages
6356
install_artifactory_package(HDILib ${HDILib_VERSION} biovault TRUE)
6457
install_artifactory_package(flann ${flann_VERSION} lkeb TRUE)
65-
install_artifactory_package(lz4 ${lz4_VERSION} _ FALSE)
58+
install_artifactory_package(lz4 ${lz4_VERSION} lkeb TRUE)
59+
60+
set(lz4_ROOT "${LIBRARY_INSTALL_DIR}/lz4/lib/cmake/lz4" CACHE PATH "Location of lz4 cmake file")
61+
set(flann_ROOT "${LIBRARY_INSTALL_DIR}/flann/lib/cmake/flann" CACHE PATH "Location of flann cmake file")
62+
set(HDILIB_ROOT "${LIBRARY_INSTALL_DIR}/HDILib/lib/cmake/HDILib" CACHE PATH "Location of HDILib cmake file")
6663

6764
message(STATUS "module path ${CMAKE_MODULE_PATH}")
6865
message(STATUS "Call find_package HDILib search ${CMAKE_SOURCE_DIR}/HDILib/lib/cmake/HDILib")
@@ -74,22 +71,51 @@ endif()
7471
# -----------------------------------------------------------------------------
7572
# Dependencies
7673
# -----------------------------------------------------------------------------
74+
find_package(lz4 CONFIG)
75+
if(NOT ${lz4_FOUND})
76+
find_package(PkgConfig REQUIRED)
77+
78+
pkg_check_modules(lz4 REQUIRED IMPORTED_TARGET liblz4)
79+
set(LZ4_TARGET PkgConfig::lz4)
80+
endif()
81+
82+
if(NOT ${lz4_FOUND})
83+
message (FATAL_ERROR "lz4 NOT found")
84+
endif()
85+
message (STATUS "Found lz4 version ${lz4_VERSION}")
86+
87+
find_package(flann CONFIG)
88+
if(NOT ${flann_FOUND})
89+
find_package(PkgConfig REQUIRED)
90+
91+
pkg_check_modules(flann REQUIRED flann)
92+
set(FLANN_TARGET flann_cpp)
93+
set(flann_INCLUDE_DIR "${flann_INCLUDE_DIRS}/flann")
94+
endif()
95+
96+
if(NOT ${flann_FOUND})
97+
message (FATAL_ERROR "flann NOT found")
98+
endif()
99+
message (STATUS "Found flann version ${flann_VERSION}")
77100

78-
if(USE_ARTIFACTORY_LIBS AND DUAL_ANALYSIS_ARTIFACTORY_LIBS_INSTALLED)
79-
# If the HDILib_VERSION is not a x.y.z version number
80-
# omit the version argument from find package
81-
find_package(HDILib COMPONENTS hdidimensionalityreduction hdiutils hdidata PATHS "${LIBRARY_INSTALL_DIR}/HDILib" CONFIG REQUIRED)
82-
else()
83-
if(NOT HDILIB_ROOT)
84-
message(FATAL_ERROR "Define HDILIB_ROOT")
85-
endif()
101+
if(NOT HDILIB_ROOT)
102+
message(FATAL_ERROR "Define HDILIB_ROOT")
103+
endif()
104+
105+
find_package(HDILib COMPONENTS hdidimensionalityreduction hdiutils hdidata CONFIG REQUIRED PATHS ${HDILIB_ROOT})
106+
107+
if(${HDILib_FOUND})
108+
message(STATUS "HDILib found at ${HDILIB_ROOT} with ${HDILib_LINK_LIBS}")
109+
endif()
86110

87-
find_package(flann CONFIG REQUIRED)
88-
find_package(HDILib COMPONENTS hdidimensionalityreduction hdiutils hdidata PATHS "${HDILIB_ROOT}" CONFIG REQUIRED)
111+
find_package(OpenGL REQUIRED)
112+
find_package(OpenMP)
89113

90-
message(STATUS "HDILib found at ${HDILIB_ROOT} with ${HDILib_LINK_LIBS}")
114+
if(OpenMP_CXX_FOUND)
115+
message(STATUS "Found OpenMP")
91116
endif()
92117

118+
93119
find_package(Qt6 6.3.1 COMPONENTS Widgets WebEngineWidgets REQUIRED)
94120

95121
find_package(ManiVault COMPONENTS Core PointData ImageData CONFIG)
@@ -198,14 +224,14 @@ target_include_directories(${PROJECT} PRIVATE "src/Common")
198224
target_include_directories(${PROJECT} PRIVATE "third_party/json")
199225

200226
set_HDILib_project_includes(${PROJECT})
201-
set_flann_project_includes(${PROJECT})
202-
set_lz4_project_includes(${PROJECT})
203227

204228
# -----------------------------------------------------------------------------
205229
# Target properties
206230
# -----------------------------------------------------------------------------
207231
# Request C++17
208-
target_compile_features(${PROJECT} PRIVATE cxx_std_17)
232+
set_target_properties(${PROJECT} PROPERTIES CXX_STANDARD 17)
233+
234+
target_compile_definitions(${PROJECT} PRIVATE QT_MESSAGELOGCONTEXT)
209235

210236
# Enable unity build
211237
if(MV_UNITY_BUILD)
@@ -235,8 +261,8 @@ set_flann_project_link_libraries(${PROJECT})
235261
set_HDILib_project_link_libraries(${PROJECT})
236262
set_lz4_project_link_libraries(${PROJECT})
237263

238-
set_optimization_level(${PROJECT} ${OPTIMIZATION_LEVEL})
239-
check_and_set_AVX(${PROJECT} ${ENABLE_AVX})
264+
set_optimization_level(${PROJECT} ${MV_SNE_OPTIMIZATION_LEVEL})
265+
mv_check_and_set_AVX(${PROJECT} ${MV_SNE_USE_AVX})
240266

241267
silence_opengl_deprecation(${PROJECT})
242268

@@ -257,6 +283,11 @@ add_custom_command(TARGET ${PROJECT} POST_BUILD
257283
--prefix ${ManiVault_INSTALL_DIR}/$<CONFIGURATION>
258284
)
259285

286+
set_target_properties(${PROJECT}
287+
PROPERTIES
288+
FOLDER AnalysisPlugins
289+
)
290+
260291
# -----------------------------------------------------------------------------
261292
# Miscellaneous
262293
# -----------------------------------------------------------------------------

cmake/CMakeLinkUtilities.cmake

Lines changed: 34 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,26 @@
22
# libraries or the PREBUILT libraries for flann and HDILib from the LKEB
33
# artifactory.
44

5-
# TODO complete for MacOS and Linux
6-
7-
# Include flann includes via target_include_directories to the current project
8-
macro(set_flann_project_includes target)
9-
if(USE_ARTIFACTORY_LIBS)
10-
MESSAGE( STATUS "Including PREBUILT ARTIFACTORY flann ${LIBRARY_INSTALL_DIR}/flann")
11-
target_include_directories("${target}" PRIVATE "${LIBRARY_INSTALL_DIR}/flann/include")
12-
else()
13-
14-
endif()
15-
endmacro()
16-
175
# Link the flann libraries via target_link_library to the current project
186
macro(set_flann_project_link_libraries target)
19-
if(USE_ARTIFACTORY_LIBS)
20-
MESSAGE( STATUS "Linking PREBUILT flann libraries...")
21-
if(MSVC)
22-
target_link_libraries("${target}" PRIVATE debug "${LIBRARY_INSTALL_DIR}/flann/lib/Debug/flann.lib")
23-
target_link_libraries("${target}" PRIVATE optimized "${LIBRARY_INSTALL_DIR}/flann/lib/Release/flann.lib")
24-
endif()
25-
else()
26-
message (STATUS "Linking flann: " ${flann_DIR})
27-
if(WIN32)
28-
target_link_libraries("${target}" PRIVATE flann::flann_cpp_s)
7+
8+
# prefer static linking
9+
if(NOT FLANN_TARGET)
10+
if(TARGET flann::flann_cpp_s)
11+
set(FLANN_TARGET flann::flann_cpp_s)
12+
elseif(TARGET flann::flann_cpp)
13+
set(FLANN_TARGET flann::flann_cpp)
14+
elseif(TARGET flann::flann_s)
15+
set(FLANN_TARGET flann::flann_s)
16+
elseif(TARGET flann::flann)
17+
set(FLANN_TARGET flann::flann)
2918
else()
30-
target_link_libraries("${target}" PRIVATE flann::flann)
31-
endif()
19+
message(FATAL_ERROR "No Flann target found.")
20+
endif()
3221
endif()
22+
23+
message (STATUS "Linking Flann library " ${FLANN_TARGET})
24+
target_link_libraries(${target} PRIVATE ${FLANN_TARGET})
3325
endmacro()
3426

3527
# Include HDILib includes via target_include_directories to the current project
@@ -40,37 +32,34 @@ endmacro()
4032

4133
# Link the HDILib libraries via target_link_library to the current project
4234
macro(set_HDILib_project_link_libraries target)
43-
MESSAGE( STATUS "Linking HDILib libraries...")
35+
MESSAGE( STATUS "Linking HDILib libraries ${HDILib_LINK_LIBS}")
4436
target_link_libraries("${target}" PRIVATE ${HDILib_LINK_LIBS})
4537
endmacro()
4638

47-
# lz4 currently only with prebuilt libs - is used in flann 1.8.4 and greater.
48-
macro(set_lz4_project_includes target)
49-
if(USE_ARTIFACTORY_LIBS)
50-
if(MSVC)
51-
MESSAGE( STATUS "Including PREBUILT ARTIFACTORY lz4 ${LIBRARY_INSTALL_DIR}/lz4")
52-
target_include_directories("${target}" PRIVATE "${LIBRARY_INSTALL_DIR}/lz4/Release/include")
53-
endif()
54-
endif()
55-
endmacro()
56-
5739
macro(set_lz4_project_link_libraries target)
58-
if(USE_ARTIFACTORY_LIBS)
59-
MESSAGE( STATUS "Linking PREBUILT lz4 libraries...")
60-
if(MSVC)
61-
target_link_libraries("${target}" PRIVATE debug "${LIBRARY_INSTALL_DIR}/lz4/Debug/lib/lz4.lib")
62-
target_link_libraries("${target}" PRIVATE optimized "${LIBRARY_INSTALL_DIR}/lz4/Release/lib/lz4.lib")
63-
endif()
64-
if(APPLE)
65-
target_link_libraries("${target}" PRIVATE debug "${LIBRARY_INSTALL_DIR}/lz4/Debug/lib/liblz4.a")
66-
target_link_libraries("${target}" PRIVATE optimized "${LIBRARY_INSTALL_DIR}/lz4/Release/lib/liblz4.a")
40+
41+
# prefer static linking
42+
if(NOT LZ4_TARGET)
43+
if(TARGET LZ4::lz4_static)
44+
set(LZ4_TARGET LZ4::lz4_static)
45+
elseif(TARGET LZ4::lz4_shared)
46+
set(LZ4_TARGET LZ4::lz4_shared)
47+
elseif(TARGET lz4::lz4)
48+
set(LZ4_TARGET lz4::lz4)
49+
elseif(TARGET LZ4::lz4) # intentionally UPPERCASE::LOWERCASE
50+
set(LZ4_TARGET LZ4::lz4)
51+
else()
52+
message(FATAL_ERROR "No LZ4 target found.")
6753
endif()
6854
endif()
55+
56+
MESSAGE( STATUS "Linking lz4 library " ${LZ4_TARGET})
57+
target_link_libraries("${target}" PRIVATE ${LZ4_TARGET})
6958
endmacro()
7059

7160
# This silences OpenGL deprecation warnings on MacOS
7261
macro(silence_opengl_deprecation target)
7362
if (APPLE)
7463
target_compile_definitions("${target}" PRIVATE GL_SILENCE_DEPRECATION)
7564
endif()
76-
endmacro()
65+
endmacro()

cmake/CMakeSetOptimizationAndAVX.cmake

Lines changed: 0 additions & 53 deletions
This file was deleted.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# -----------------------------------------------------------------------------
2+
# Sets the optimization level
3+
# -----------------------------------------------------------------------------
4+
macro(set_optimization_level target level)
5+
message(STATUS "Set optimization level in release for ${target} to ${level}")
6+
7+
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
8+
set(OPTIMIZATION_LEVEL_FLAG "-O${level}")
9+
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
10+
if(${level} EQUAL 0)
11+
set(OPTIMIZATION_LEVEL_FLAG "/Od")
12+
else()
13+
set(OPTIMIZATION_LEVEL_FLAG "/O${level}")
14+
endif()
15+
endif()
16+
17+
target_compile_options(${target} PRIVATE "$<$<CONFIG:Release>:${OPTIMIZATION_LEVEL_FLAG}>")
18+
19+
message( STATUS "Optimization level for ${target} (release) is ${OPTIMIZATION_LEVEL_FLAG}")
20+
endmacro()

0 commit comments

Comments
 (0)