107 lines
3.1 KiB
CMake
107 lines
3.1 KiB
CMake
# FindKTX.cmake
|
|
#
|
|
# Finds the KTX library
|
|
#
|
|
# This will define the following variables
|
|
#
|
|
# KTX_FOUND
|
|
# KTX_INCLUDE_DIRS
|
|
# KTX_LIBRARIES
|
|
#
|
|
# and the following imported targets
|
|
#
|
|
# KTX::ktx
|
|
#
|
|
|
|
# Check if we're on Linux - if so, we'll skip the search and directly use FetchContent
|
|
if(UNIX AND NOT APPLE)
|
|
# On Linux, we assume KTX is not installed and proceed directly to fetching it
|
|
set(KTX_FOUND FALSE)
|
|
else()
|
|
# On non-Linux platforms, try to find KTX using pkg-config first
|
|
find_package(PkgConfig QUIET)
|
|
if(PKG_CONFIG_FOUND)
|
|
pkg_check_modules(PC_KTX QUIET ktx libktx ktx2 libktx2)
|
|
endif()
|
|
|
|
# Try to find KTX using standard find_package
|
|
find_path(KTX_INCLUDE_DIR
|
|
NAMES ktx.h
|
|
PATH_SUFFIXES include ktx KTX ktx2 KTX2
|
|
HINTS
|
|
${PC_KTX_INCLUDEDIR}
|
|
/usr/include
|
|
/usr/local/include
|
|
$ENV{KTX_DIR}/include
|
|
$ENV{VULKAN_SDK}/include
|
|
${CMAKE_SOURCE_DIR}/external/ktx/include
|
|
)
|
|
|
|
find_library(KTX_LIBRARY
|
|
NAMES ktx ktx2 libktx libktx2
|
|
PATH_SUFFIXES lib lib64
|
|
HINTS
|
|
${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
|
|
)
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(KTX
|
|
REQUIRED_VARS KTX_INCLUDE_DIR KTX_LIBRARY
|
|
FAIL_MESSAGE "" # Suppress the error message to allow our fallback
|
|
)
|
|
|
|
# Debug output if KTX is not found (only on non-Linux platforms)
|
|
if(NOT KTX_FOUND)
|
|
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")
|
|
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")
|
|
endif()
|
|
endif()
|
|
|
|
if(KTX_FOUND)
|
|
set(KTX_INCLUDE_DIRS ${KTX_INCLUDE_DIR})
|
|
set(KTX_LIBRARIES ${KTX_LIBRARY})
|
|
|
|
if(NOT TARGET KTX::ktx)
|
|
add_library(KTX::ktx UNKNOWN IMPORTED)
|
|
set_target_properties(KTX::ktx PROPERTIES
|
|
IMPORTED_LOCATION "${KTX_LIBRARIES}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${KTX_INCLUDE_DIRS}"
|
|
)
|
|
endif()
|
|
else()
|
|
# If not found, use FetchContent to download and build
|
|
include(FetchContent)
|
|
|
|
# Only show the message on non-Linux platforms
|
|
if(NOT (UNIX AND NOT APPLE))
|
|
message(STATUS "KTX not found, fetching from GitHub...")
|
|
endif()
|
|
|
|
FetchContent_Declare(
|
|
ktx
|
|
GIT_REPOSITORY https://github.com/KhronosGroup/KTX-Software.git
|
|
GIT_TAG v4.3.1 # Use a specific tag for stability
|
|
)
|
|
|
|
# Set options to minimize build time and dependencies
|
|
set(KTX_FEATURE_TOOLS OFF CACHE BOOL "Build KTX tools" FORCE)
|
|
set(KTX_FEATURE_DOC OFF CACHE BOOL "Build KTX documentation" FORCE)
|
|
set(KTX_FEATURE_TESTS OFF CACHE BOOL "Build KTX tests" FORCE)
|
|
|
|
FetchContent_MakeAvailable(ktx)
|
|
|
|
# Create an alias to match the expected target name
|
|
if(NOT TARGET KTX::ktx)
|
|
add_library(KTX::ktx ALIAS ktx)
|
|
endif()
|
|
|
|
set(KTX_FOUND TRUE)
|
|
endif()
|