-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
150 lines (122 loc) · 4.53 KB
/
Copy pathCMakeLists.txt
File metadata and controls
150 lines (122 loc) · 4.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
cmake_minimum_required(VERSION 3.16)
project(relight VERSION 1.0.0 LANGUAGES CXX)
# Set C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Embed absolute source dir for locating runtime assets (e.g., ICC profiles)
add_compile_definitions(RELIGHT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
# Enable position independent code for shared libraries
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Find framework last on macOS
set(CMAKE_FIND_FRAMEWORK LAST)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
message(STATUS "CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}")
# Build options
option(MACOSX_MAKE_BUNDLE "If using macOS, all targets will be placed in a relight macOS app bundle" ON)
# Qt6 detection
find_package(Qt6 COMPONENTS Core Gui Widgets Concurrent Xml REQUIRED)
set(RELIGHT_QT Qt6)
message(STATUS "Using Qt6")
# Find dependencies
find_package(Eigen3 QUIET)
find_package(OpenMP QUIET)
# Bundle configuration for macOS
if(MACOSX_MAKE_BUNDLE)
set(MACOSX_EXE_TARGET_OPTION MACOSX_BUNDLE)
else()
set(MACOSX_EXE_TARGET_OPTION "")
endif()
# Eigen3 setup
if(NOT Eigen3_FOUND)
message(STATUS "Using bundled Eigen3")
set(EIGEN3_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/eigen-3.3.9)
else()
message(STATUS "Using system Eigen3")
endif()
# JPEG setup
if(MSVC)
set(JPEGTURBO_HOME ${CMAKE_CURRENT_SOURCE_DIR}/external/libjpeg-turbo-2.0.6)
set(JPEG_INCLUDE_DIR ${JPEGTURBO_HOME}/include)
set(JPEG_LIBRARIES ${JPEGTURBO_HOME}/lib/jpeg.lib)
message(STATUS "Using bundled libjpeg-turbo for MSVC")
else()
find_package(JPEG REQUIRED)
message(STATUS "Using system JPEG")
endif()
# TIFF setup
find_package(TIFF QUIET)
if(NOT TIFF_FOUND)
message(STATUS "Using bundled TIFF library")
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/external/tiff-4.7.0)
add_library(TIFF::TIFF ALIAS tiff)
else()
message(STATUS "Using system TIFF library")
endif()
# PNG setup
find_package(PNG REQUIRED)
message(STATUS "Using PNG library: ${PNG_LIBRARIES}")
# OpenCV setup, not needed for the moment,.
#if(NOT APPLE)
# find_package(OpenCV REQUIRED)
# message(STATUS "OpenCV include dirs: ${OpenCV_INCLUDE_DIRS}")
#endif()
# LittleCMS2 setup (mandatory)
find_package(LCMS2 REQUIRED)
message(STATUS "Using LittleCMS2 include dirs: ${LCMS2_INCLUDE_DIRS}")
# 1. Force CMake to accept 'exiv2' as the identity, but look for both filename casings
find_package(exiv2 CONFIG QUIET NAMES exiv2 Exiv2)
# 2. Map targets based on what succeeded
if(TARGET exiv2::exiv2)
set(EXIV2_FOUND_TARGET exiv2::exiv2)
elseif(TARGET Exiv2::exiv2)
set(EXIV2_FOUND_TARGET Exiv2::exiv2)
elseif(TARGET Exiv2::Exiv2)
set(EXIV2_FOUND_TARGET Exiv2::Exiv2)
else()
# 3. Fall back to pkg-config for traditional Linux packages
if(NOT WIN32)
message(STATUS "Exiv2 CMake config not found. Falling back to pkg-config...")
find_package(PkgConfig REQUIRED)
pkg_check_modules(EXIV2_PKG REQUIRED IMPORTED_TARGET exiv2)
set(EXIV2_FOUND_TARGET PkgConfig::EXIV2_PKG)
else()
# Direct fallback for stubborn vcpkg windows deployments
message(STATUS "vcpkg config parsing error. Forcing direct target map...")
add_library(exiv2::exiv2 UNKNOWN IMPORTED)
set_target_properties(exiv2::exiv2 PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "C:/vcpkg/installed/x64-windows/include"
IMPORTED_LOCATION "C:/vcpkg/installed/x64-windows/lib/exiv2.lib"
)
set(EXIV2_FOUND_TARGET exiv2::exiv2)
endif()
endif()
message(STATUS "Selected Exiv2 Target: ${EXIV2_FOUND_TARGET}")
# Create your global wrapper and link it to the found target
add_library(project_exiv2 INTERFACE)
target_link_libraries(project_exiv2 INTERFACE ${EXIV2_FOUND_TARGET})
# Version information
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/RELIGHT_VERSION")
# Version is read from RELIGHT_VERSION file
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/RELIGHT_VERSION" RELIGHT_VERSION)
string(STRIP "${RELIGHT_VERSION}" RELIGHT_VERSION)
else()
# Fallback version
set(RELIGHT_VERSION "dev")
endif()
message(STATUS "Relight Version: ${RELIGHT_VERSION}")
# Include custom CMake tools
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/relight_tools.cmake)
# Installation options
if(WIN32 OR APPLE)
set(INSTALL_TO_UNIX_LAYOUT OFF)
else()
set(INSTALL_TO_UNIX_LAYOUT ON)
endif()
include(GNUInstallDirs)
# Add subdirectories
add_subdirectory(relightlab)
add_subdirectory(relight-cli)
add_subdirectory(relight-deepzoom)
add_subdirectory(relight-merge)
add_subdirectory(relight-normals)