Skip to content

Commit 2176e06

Browse files
committed
Add CMake find scripts for nlohmann_json, tinygltf, VulkanHpp, Vulkan-Profiles, and GLM libraries, enabling automated detection and integration of dependencies.
1 parent 37cb78e commit 2176e06

File tree

8 files changed

+2164
-0
lines changed

8 files changed

+2164
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# FindKTX.cmake
2+
#
3+
# Finds the KTX library
4+
#
5+
# This will define the following variables
6+
#
7+
# KTX_FOUND
8+
# KTX_INCLUDE_DIRS
9+
# KTX_LIBRARIES
10+
#
11+
# and the following imported targets
12+
#
13+
# KTX::ktx
14+
#
15+
16+
# Check if we're on Linux - if so, we'll skip the search and directly use FetchContent
17+
if(UNIX AND NOT APPLE)
18+
# On Linux, we assume KTX is not installed and proceed directly to fetching it
19+
set(KTX_FOUND FALSE)
20+
else()
21+
# On non-Linux platforms, try to find KTX using pkg-config first
22+
find_package(PkgConfig QUIET)
23+
if(PKG_CONFIG_FOUND)
24+
pkg_check_modules(PC_KTX QUIET ktx libktx ktx2 libktx2)
25+
endif()
26+
27+
# Try to find KTX using standard find_package
28+
find_path(KTX_INCLUDE_DIR
29+
NAMES ktx.h
30+
PATH_SUFFIXES include ktx KTX ktx2 KTX2
31+
HINTS
32+
${PC_KTX_INCLUDEDIR}
33+
/usr/include
34+
/usr/local/include
35+
$ENV{KTX_DIR}/include
36+
$ENV{VULKAN_SDK}/include
37+
${CMAKE_SOURCE_DIR}/external/ktx/include
38+
)
39+
40+
find_library(KTX_LIBRARY
41+
NAMES ktx ktx2 libktx libktx2
42+
PATH_SUFFIXES lib lib64
43+
HINTS
44+
${PC_KTX_LIBDIR}
45+
/usr/lib
46+
/usr/lib64
47+
/usr/local/lib
48+
/usr/local/lib64
49+
$ENV{KTX_DIR}/lib
50+
$ENV{VULKAN_SDK}/lib
51+
${CMAKE_SOURCE_DIR}/external/ktx/lib
52+
)
53+
54+
include(FindPackageHandleStandardArgs)
55+
find_package_handle_standard_args(KTX
56+
REQUIRED_VARS KTX_INCLUDE_DIR KTX_LIBRARY
57+
FAIL_MESSAGE "" # Suppress the error message to allow our fallback
58+
)
59+
60+
# Debug output if KTX is not found (only on non-Linux platforms)
61+
if(NOT KTX_FOUND)
62+
message(STATUS "KTX include directory search paths: ${PC_KTX_INCLUDEDIR}, /usr/include, /usr/local/include, $ENV{KTX_DIR}/include, $ENV{VULKAN_SDK}/include, ${CMAKE_SOURCE_DIR}/external/ktx/include")
63+
message(STATUS "KTX library search paths: ${PC_KTX_LIBDIR}, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64, $ENV{KTX_DIR}/lib, $ENV{VULKAN_SDK}/lib, ${CMAKE_SOURCE_DIR}/external/ktx/lib")
64+
endif()
65+
endif()
66+
67+
if(KTX_FOUND)
68+
set(KTX_INCLUDE_DIRS ${KTX_INCLUDE_DIR})
69+
set(KTX_LIBRARIES ${KTX_LIBRARY})
70+
71+
if(NOT TARGET KTX::ktx)
72+
add_library(KTX::ktx UNKNOWN IMPORTED)
73+
set_target_properties(KTX::ktx PROPERTIES
74+
IMPORTED_LOCATION "${KTX_LIBRARIES}"
75+
INTERFACE_INCLUDE_DIRECTORIES "${KTX_INCLUDE_DIRS}"
76+
)
77+
endif()
78+
else()
79+
# If not found, use FetchContent to download and build
80+
include(FetchContent)
81+
82+
# Only show the message on non-Linux platforms
83+
if(NOT (UNIX AND NOT APPLE))
84+
message(STATUS "KTX not found, fetching from GitHub...")
85+
endif()
86+
87+
FetchContent_Declare(
88+
ktx
89+
GIT_REPOSITORY https://github.com/KhronosGroup/KTX-Software.git
90+
GIT_TAG v4.3.1 # Use a specific tag for stability
91+
)
92+
93+
# Set options to minimize build time and dependencies
94+
set(KTX_FEATURE_TOOLS OFF CACHE BOOL "Build KTX tools" FORCE)
95+
set(KTX_FEATURE_DOC OFF CACHE BOOL "Build KTX documentation" FORCE)
96+
set(KTX_FEATURE_TESTS OFF CACHE BOOL "Build KTX tests" FORCE)
97+
98+
FetchContent_MakeAvailable(ktx)
99+
100+
# Create an alias to match the expected target name
101+
if(NOT TARGET KTX::ktx)
102+
add_library(KTX::ktx ALIAS ktx)
103+
endif()
104+
105+
set(KTX_FOUND TRUE)
106+
endif()

0 commit comments

Comments
 (0)