mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-07 19:58:32 +09:00
[Refactor] (buildsystem): use FindXXX.cmake to find 3rdparty libraries
This commit is contained in:
@@ -4,6 +4,9 @@ project(MobileGLTest)
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
# Add the directory containing our custom Find modules
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../../buildsystem/cmake")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
googletest
|
||||
@@ -18,6 +21,11 @@ enable_testing()
|
||||
|
||||
set(MGL_ROOT ${CMAKE_CURRENT_LIST_DIR}/../..)
|
||||
|
||||
# Find the required libraries using our custom Find modules
|
||||
find_package(glslang REQUIRED)
|
||||
find_package(SPIRVTools REQUIRED)
|
||||
find_package(SPIRVCross REQUIRED)
|
||||
|
||||
add_executable(
|
||||
SanityTest
|
||||
SanityTest.cpp
|
||||
@@ -27,56 +35,16 @@ target_link_libraries(
|
||||
GTest::gtest_main
|
||||
)
|
||||
|
||||
# Vulkan SDK's cmake config is fundamentally broken. Directly find libs instead
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
find_package(Vulkan REQUIRED)
|
||||
get_filename_component(VULKAN_LIB_DIR ${Vulkan_LIBRARY} PATH)
|
||||
message(STATUS "glslang_LIBRARIES: ${glslang_LIBRARIES}")
|
||||
message(STATUS "SPIRVTools_LIBRARIES: ${SPIRVTools_LIBRARIES}")
|
||||
message(STATUS "SPIRVCross_LIBRARIES: ${SPIRVCross_LIBRARIES}")
|
||||
|
||||
# Set the libraries to link against
|
||||
set(LINK_LIBRARIES
|
||||
${VULKAN_LIB_DIR}/libglslang.a
|
||||
${VULKAN_LIB_DIR}/libspirv-cross-c-shared.dylib
|
||||
${VULKAN_LIB_DIR}/libGenericCodeGen.a
|
||||
${VULKAN_LIB_DIR}/libglslang-default-resource-limits.a
|
||||
${VULKAN_LIB_DIR}/libMachineIndependent.a
|
||||
${VULKAN_LIB_DIR}/libOSDependent.a
|
||||
${VULKAN_LIB_DIR}/libSPIRV-Tools-diff.a
|
||||
${VULKAN_LIB_DIR}/libSPIRV-Tools-link.a
|
||||
${VULKAN_LIB_DIR}/libSPIRV-Tools-lint.a
|
||||
${VULKAN_LIB_DIR}/libSPIRV-Tools-opt.a
|
||||
${VULKAN_LIB_DIR}/libSPIRV-Tools-reduce.a
|
||||
${VULKAN_LIB_DIR}/libSPIRV-Tools.a
|
||||
${VULKAN_LIB_DIR}/libSPIRV.a
|
||||
${VULKAN_LIB_DIR}/libSPVRemapper.a)
|
||||
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
find_package(Vulkan REQUIRED)
|
||||
get_filename_component(VULKAN_LIB_DIR ${Vulkan_LIBRARY} PATH)
|
||||
|
||||
set(LINK_LIBRARIES
|
||||
${VULKAN_LIB_DIR}/glslang$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/spirv-cross-c-shared$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/GenericCodeGen$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/glslang-default-resource-limits$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/MachineIndependent$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/OSDependent$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/SPIRV-Tools-diff$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/SPIRV-Tools-link$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/SPIRV-Tools-lint$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/SPIRV-Tools-opt$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/SPIRV-Tools-reduce$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/SPIRV-Tools$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/SPIRV$<$<CONFIG:Debug>:d>.lib
|
||||
${VULKAN_LIB_DIR}/SPVRemapper$<$<CONFIG:Debug>:d>.lib)
|
||||
else ()
|
||||
find_package(glslang CONFIG REQUIRED)
|
||||
find_package(spirv_cross_core CONFIG REQUIRED)
|
||||
find_package(spirv_cross_glsl CONFIG REQUIRED)
|
||||
find_package(spirv_cross_hlsl CONFIG REQUIRED)
|
||||
find_package(spirv_cross_msl CONFIG REQUIRED)
|
||||
find_package(spirv_cross_cpp CONFIG REQUIRED)
|
||||
find_package(spirv_cross_reflect CONFIG REQUIRED)
|
||||
find_package(spirv_cross_c CONFIG REQUIRED)
|
||||
set(LINK_LIBRARIES glslang::glslang spirv-cross-c)
|
||||
endif()
|
||||
${glslang_LIBRARIES}
|
||||
${SPIRVTools_LIBRARIES}
|
||||
${SPIRVCross_LIBRARIES}
|
||||
)
|
||||
|
||||
include(GoogleTest)
|
||||
gtest_discover_tests(SanityTest)
|
||||
|
||||
@@ -0,0 +1,297 @@
|
||||
# FindSPIRVCross.cmake
|
||||
# --------------------
|
||||
#
|
||||
# Find SPIRV-Cross library
|
||||
#
|
||||
# This module defines the following variables:
|
||||
# SPIRVCross_FOUND - True if SPIRV-Cross library is found
|
||||
# SPIRVCross_INCLUDE_DIRS - Include directories for SPIRV-Cross
|
||||
# SPIRVCross_LIBRARIES - Libraries for SPIRV-Cross
|
||||
#
|
||||
# This module reads hints about search locations from:
|
||||
# SPIRVCross_ROOT - Preferred installation prefix
|
||||
|
||||
# First try to find SPIRV-Cross using CONFIG mode (for vcpkg, conan, etc.)
|
||||
if (NOT SPIRVCross_FOUND)
|
||||
find_package(spirv_cross_core CONFIG QUIET)
|
||||
if (spirv_cross_core_FOUND)
|
||||
message(STATUS "Found SPIRV-Cross via CONFIG mode")
|
||||
# Try to find all components
|
||||
find_package(spirv_cross_glsl CONFIG QUIET)
|
||||
find_package(spirv_cross_hlsl CONFIG QUIET)
|
||||
find_package(spirv_cross_msl CONFIG QUIET)
|
||||
find_package(spirv_cross_cpp CONFIG QUIET)
|
||||
find_package(spirv_cross_reflect CONFIG QUIET)
|
||||
find_package(spirv_cross_c CONFIG QUIET)
|
||||
|
||||
# Set the libraries (using the CONFIG mode variables)
|
||||
set(SPIRVCross_LIBRARIES
|
||||
spirv-cross-core
|
||||
spirv-cross-glsl
|
||||
spirv-cross-hlsl
|
||||
spirv-cross-msl
|
||||
spirv-cross-cpp
|
||||
spirv-cross-reflect
|
||||
spirv-cross-c
|
||||
)
|
||||
|
||||
# Set the include directories
|
||||
set(SPIRVCross_INCLUDE_DIRS ${spirv_cross_core_INCLUDE_DIRS})
|
||||
|
||||
# Mark as found
|
||||
set(SPIRVCross_FOUND TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# If CONFIG mode failed, try to find Vulkan SDK
|
||||
if (NOT SPIRVCross_FOUND)
|
||||
find_package(Vulkan QUIET)
|
||||
if (Vulkan_FOUND)
|
||||
get_filename_component(VULKAN_SDK_DIR ${Vulkan_INCLUDE_DIRS} DIRECTORY)
|
||||
message(STATUS "Found Vulkan SDK: ${VULKAN_SDK_DIR}")
|
||||
|
||||
# Try to find headers in Vulkan SDK
|
||||
find_path(SPIRVCross_INCLUDE_DIR
|
||||
NAMES spirv_cross/spirv_cross.hpp
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES include
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
# Try to find libraries in Vulkan SDK (separate debug/release searches)
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
find_library(SPIRVCross_c_LIBRARY
|
||||
NAMES spirv-cross-cd libspirv-cross-cd spirv-cross-c-sharedd libspirv-cross-c-sharedd
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_cpp_LIBRARY
|
||||
NAMES spirv-cross-cppd libspirv-cross-cppd spirv-cross-cpp-sharedd libspirv-cross-cpp-sharedd
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_core_LIBRARY
|
||||
NAMES spirv-cross-cored libspirv-cross-cored
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_reflect_LIBRARY
|
||||
NAMES spirv-cross-reflectd libspirv-cross-reflectd
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_glsl_LIBRARY
|
||||
NAMES spirv-cross-glsld libspirv-cross-glsld
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_hlsl_LIBRARY
|
||||
NAMES spirv-cross-hlsld libspirv-cross-hlsld
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_msl_LIBRARY
|
||||
NAMES spirv-cross-msld libspirv-cross-msld
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
else()
|
||||
find_library(SPIRVCross_c_LIBRARY
|
||||
NAMES spirv-cross-c libspirv-cross-c spirv-cross-c-shared libspirv-cross-c-shared
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_cpp_LIBRARY
|
||||
NAMES spirv-cross-cpp libspirv-cross-cpp spirv-cross-cpp-shared libspirv-cross-cpp-shared
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_core_LIBRARY
|
||||
NAMES spirv-cross-core libspirv-cross-core
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_reflect_LIBRARY
|
||||
NAMES spirv-cross-reflect libspirv-cross-reflect
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_glsl_LIBRARY
|
||||
NAMES spirv-cross-glsl libspirv-cross-glsl
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_hlsl_LIBRARY
|
||||
NAMES spirv-cross-hlsl libspirv-cross-hlsl
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_msl_LIBRARY
|
||||
NAMES spirv-cross-msl libspirv-cross-msl
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# If Vulkan SDK search failed, try standard search
|
||||
if (NOT SPIRVCross_FOUND)
|
||||
# Look for the header file
|
||||
find_path(SPIRVCross_INCLUDE_DIR
|
||||
NAMES spirv_cross/spirv_cross.hpp
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES include
|
||||
)
|
||||
|
||||
# Look for the libraries (separate debug/release searches)
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
find_library(SPIRVCross_c_LIBRARY
|
||||
NAMES spirv-cross-cd libspirv-cross-cd spirv-cross-c-sharedd libspirv-cross-c-sharedd
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_cpp_LIBRARY
|
||||
NAMES spirv-cross-cppd libspirv-cross-cppd spirv-cross-cpp-sharedd libspirv-cross-cpp-sharedd
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_core_LIBRARY
|
||||
NAMES spirv-cross-cored libspirv-cross-cored
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_reflect_LIBRARY
|
||||
NAMES spirv-cross-reflectd libspirv-cross-reflectd
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_glsl_LIBRARY
|
||||
NAMES spirv-cross-glsld libspirv-cross-glsld
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_hlsl_LIBRARY
|
||||
NAMES spirv-cross-hlsld libspirv-cross-hlsld
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_msl_LIBRARY
|
||||
NAMES spirv-cross-msld libspirv-cross-msld
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
else()
|
||||
find_library(SPIRVCross_c_LIBRARY
|
||||
NAMES spirv-cross-c libspirv-cross-c spirv-cross-c-shared libspirv-cross-c-shared
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_core_LIBRARY
|
||||
NAMES spirv-cross-core libspirv-cross-core
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_reflect_LIBRARY
|
||||
NAMES spirv-cross-reflect libspirv-cross-reflect
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_glsl_LIBRARY
|
||||
NAMES spirv-cross-glsl libspirv-cross-glsl
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_hlsl_LIBRARY
|
||||
NAMES spirv-cross-hlsl libspirv-cross-hlsl
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVCross_msl_LIBRARY
|
||||
NAMES spirv-cross-msl libspirv-cross-msl
|
||||
HINTS ${SPIRVCross_ROOT} ENV SPIRVCross_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# If we found the main library, mark as found
|
||||
if (SPIRVCross_c_LIBRARY OR SPIRVCross_cpp_LIBRARY AND SPIRVCross_INCLUDE_DIR)
|
||||
set(SPIRVCross_FOUND TRUE)
|
||||
endif()
|
||||
|
||||
# Set the include directory and libraries
|
||||
if (SPIRVCross_FOUND)
|
||||
# If we already found the libraries through CONFIG mode, don't override them
|
||||
if (NOT SPIRVCross_LIBRARIES)
|
||||
set(SPIRVCross_INCLUDE_DIRS ${SPIRVCross_INCLUDE_DIR})
|
||||
set(SPIRVCross_LIBRARIES
|
||||
${SPIRVCross_c_LIBRARY}
|
||||
${SPIRVCross_cpp_LIBRARY}
|
||||
${SPIRVCross_core_LIBRARY}
|
||||
${SPIRVCross_reflect_LIBRARY}
|
||||
${SPIRVCross_glsl_LIBRARY}
|
||||
${SPIRVCross_hlsl_LIBRARY}
|
||||
${SPIRVCross_msl_LIBRARY}
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
# If we didn't find anything, set the variables from standard search
|
||||
set(SPIRVCross_INCLUDE_DIRS ${SPIRVCross_INCLUDE_DIR})
|
||||
set(SPIRVCross_LIBRARIES
|
||||
${SPIRVCross_c_LIBRARY}
|
||||
${SPIRVCross_cpp_LIBRARY}
|
||||
${SPIRVCross_core_LIBRARY}
|
||||
${SPIRVCross_reflect_LIBRARY}
|
||||
${SPIRVCross_glsl_LIBRARY}
|
||||
${SPIRVCross_hlsl_LIBRARY}
|
||||
${SPIRVCross_msl_LIBRARY}
|
||||
)
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(SPIRVCross
|
||||
REQUIRED_VARS SPIRVCross_INCLUDE_DIR SPIRVCross_LIBRARIES
|
||||
)
|
||||
|
||||
mark_as_advanced(
|
||||
SPIRVCross_INCLUDE_DIR
|
||||
SPIRVCross_LIBRARIES
|
||||
)
|
||||
@@ -0,0 +1,153 @@
|
||||
# FindSPIRVTools.cmake
|
||||
# --------------------
|
||||
#
|
||||
# Find SPIRV-Tools library
|
||||
#
|
||||
# This module defines the following variables:
|
||||
# SPIRVTools_FOUND - True if SPIRV-Tools library is found
|
||||
# SPIRVTools_INCLUDE_DIRS - Include directories for SPIRV-Tools
|
||||
# SPIRVTools_LIBRARIES - Libraries for SPIRV-Tools
|
||||
#
|
||||
# This module reads hints about search locations from:
|
||||
# SPIRVTools_ROOT - Preferred installation prefix
|
||||
|
||||
# First try to find SPIRV-Tools using CONFIG mode (for vcpkg, conan, etc.)
|
||||
if (NOT SPIRVTools_FOUND)
|
||||
find_package(SPIRV-Tools CONFIG QUIET)
|
||||
if (SPIRVTools_FOUND)
|
||||
message(STATUS "Found SPIRV-Tools via CONFIG mode: ${SPIRV-Tools_DIR}")
|
||||
set(SPIRVTools_INCLUDE_DIRS ${SPIRV-Tools_INCLUDE_DIRS})
|
||||
set(SPIRVTools_LIBRARIES ${SPIRV-Tools_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# If CONFIG mode failed, try to find Vulkan SDK
|
||||
if (NOT SPIRVTools_FOUND)
|
||||
find_package(Vulkan QUIET)
|
||||
if (Vulkan_FOUND)
|
||||
get_filename_component(VULKAN_SDK_DIR ${Vulkan_INCLUDE_DIRS} DIRECTORY)
|
||||
message(STATUS "Found Vulkan SDK: ${VULKAN_SDK_DIR}")
|
||||
|
||||
# Try to find headers in Vulkan SDK
|
||||
find_path(SPIRVTools_INCLUDE_DIR
|
||||
NAMES spirv-tools/libspirv.h
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES include
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
# Try to find libraries in Vulkan SDK (separate debug/release searches)
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
find_library(SPIRVTools_LIBRARY
|
||||
NAMES SPIRV-Toolsd libSPIRV-Toolsd
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVTools_opt_LIBRARY
|
||||
NAMES SPIRV-Tools-optd libSPIRV-Tools-optd
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVTools_link_LIBRARY
|
||||
NAMES SPIRV-Tools-linkd libSPIRV-Tools-linkd
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
else()
|
||||
find_library(SPIRVTools_LIBRARY
|
||||
NAMES SPIRV-Tools libSPIRV-Tools
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVTools_opt_LIBRARY
|
||||
NAMES SPIRV-Tools-opt libSPIRV-Tools-opt
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(SPIRVTools_link_LIBRARY
|
||||
NAMES SPIRV-Tools-link libSPIRV-Tools-link
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# If Vulkan SDK search failed, try standard search
|
||||
if (NOT SPIRVTools_FOUND)
|
||||
# Look for the header file
|
||||
find_path(SPIRVTools_INCLUDE_DIR
|
||||
NAMES spirv-tools/libspirv.h
|
||||
HINTS ${SPIRVTools_ROOT} ENV SPIRVTools_ROOT
|
||||
PATH_SUFFIXES include
|
||||
)
|
||||
|
||||
# Look for the libraries (separate debug/release searches)
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
find_library(SPIRVTools_LIBRARY
|
||||
NAMES SPIRV-Toolsd libSPIRV-Toolsd
|
||||
HINTS ${SPIRVTools_ROOT} ENV SPIRVTools_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVTools_opt_LIBRARY
|
||||
NAMES SPIRV-Tools-optd libSPIRV-Tools-optd
|
||||
HINTS ${SPIRVTools_ROOT} ENV SPIRVTools_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVTools_link_LIBRARY
|
||||
NAMES SPIRV-Tools-linkd libSPIRV-Tools-linkd
|
||||
HINTS ${SPIRVTools_ROOT} ENV SPIRVTools_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
else()
|
||||
find_library(SPIRVTools_LIBRARY
|
||||
NAMES SPIRV-Tools libSPIRV-Tools
|
||||
HINTS ${SPIRVTools_ROOT} ENV SPIRVTools_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVTools_opt_LIBRARY
|
||||
NAMES SPIRV-Tools-opt libSPIRV-Tools-opt
|
||||
HINTS ${SPIRVTools_ROOT} ENV SPIRVTools_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(SPIRVTools_link_LIBRARY
|
||||
NAMES SPIRV-Tools-link libSPIRV-Tools-link
|
||||
HINTS ${SPIRVTools_ROOT} ENV SPIRVTools_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Set the include directory and libraries
|
||||
set(SPIRVTools_INCLUDE_DIRS ${SPIRVTools_INCLUDE_DIR})
|
||||
set(SPIRVTools_LIBRARIES
|
||||
${SPIRVTools_LIBRARY}
|
||||
${SPIRVTools_opt_LIBRARY}
|
||||
${SPIRVTools_link_LIBRARY}
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(SPIRVTools
|
||||
REQUIRED_VARS SPIRVTools_INCLUDE_DIR SPIRVTools_LIBRARY
|
||||
)
|
||||
|
||||
mark_as_advanced(
|
||||
SPIRVTools_INCLUDE_DIR
|
||||
SPIRVTools_LIBRARY
|
||||
SPIRVTools_opt_LIBRARY
|
||||
SPIRVTools_link_LIBRARY
|
||||
)
|
||||
@@ -0,0 +1,237 @@
|
||||
# Findglslang.cmake
|
||||
# ------------------
|
||||
#
|
||||
# Find glslang library
|
||||
#
|
||||
# This module defines the following variables:
|
||||
# glslang_FOUND - True if glslang library is found
|
||||
# glslang_INCLUDE_DIRS - Include directories for glslang
|
||||
# glslang_LIBRARIES - Libraries for glslang
|
||||
#
|
||||
# This module reads hints about search locations from:
|
||||
# glslang_ROOT - Preferred installation prefix
|
||||
|
||||
# First try to find glslang using CONFIG mode (for vcpkg, conan, etc.)
|
||||
if (NOT glslang_FOUND)
|
||||
find_package(glslang CONFIG QUIET)
|
||||
if (glslang_FOUND)
|
||||
message(STATUS "Found glslang via CONFIG mode: ${glslang_DIR}")
|
||||
set(glslang_INCLUDE_DIRS ${glslang_INCLUDE_DIRS} ${glslang_INCLUDE_DIR})
|
||||
set(glslang_LIBRARIES ${glslang_LIBRARIES} ${glslang_LIBRARY})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# If CONFIG mode failed, try to find Vulkan SDK
|
||||
if (NOT glslang_FOUND)
|
||||
find_package(Vulkan QUIET)
|
||||
if (Vulkan_FOUND)
|
||||
get_filename_component(VULKAN_SDK_DIR ${Vulkan_INCLUDE_DIRS} DIRECTORY)
|
||||
message(STATUS "Found Vulkan SDK: ${VULKAN_SDK_DIR}")
|
||||
|
||||
# Try to find headers in Vulkan SDK
|
||||
find_path(glslang_INCLUDE_DIR
|
||||
NAMES glslang/Public/ShaderLang.h
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES include
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
# Try to find libraries in Vulkan SDK (separate debug/release searches)
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
find_library(glslang_LIBRARY
|
||||
NAMES glslangd libglslangd
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(glslang_OSDependent_LIBRARY
|
||||
NAMES OSDependentd libOSDependentd
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(glslang_MachineIndependent_LIBRARY
|
||||
NAMES MachineIndependentd libMachineIndependentd
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(glslang_GenericCodeGen_LIBRARY
|
||||
NAMES GenericCodeGend libGenericCodeGend
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(glslang_SPIRV_LIBRARY
|
||||
NAMES SPIRVd libSPIRVd
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(glslang_glslang_default_resource_limits_LIBRARY
|
||||
NAMES glslang-default-resource-limitsd libglslang-default-resource-limitsd
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
else()
|
||||
find_library(glslang_LIBRARY
|
||||
NAMES glslang libglslang
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(glslang_OSDependent_LIBRARY
|
||||
NAMES OSDependent libOSDependent
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(glslang_MachineIndependent_LIBRARY
|
||||
NAMES MachineIndependent libMachineIndependent
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(glslang_GenericCodeGen_LIBRARY
|
||||
NAMES GenericCodeGen libGenericCodeGen
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(glslang_SPIRV_LIBRARY
|
||||
NAMES SPIRV libSPIRV
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(glslang_glslang_default_resource_limits_LIBRARY
|
||||
NAMES glslang-default-resource-limits libglslang-default-resource-limits
|
||||
HINTS ${VULKAN_SDK_DIR}
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# If Vulkan SDK search failed, try standard search
|
||||
if (NOT glslang_FOUND)
|
||||
# Look for the header file
|
||||
find_path(glslang_INCLUDE_DIR
|
||||
NAMES glslang/Public/ShaderLang.h
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES include
|
||||
)
|
||||
|
||||
# Look for the libraries (separate debug/release searches)
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
find_library(glslang_LIBRARY
|
||||
NAMES glslangd libglslangd
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(glslang_OSDependent_LIBRARY
|
||||
NAMES OSDependentd libOSDependentd
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(glslang_MachineIndependent_LIBRARY
|
||||
NAMES MachineIndependentd libMachineIndependentd
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(glslang_GenericCodeGen_LIBRARY
|
||||
NAMES GenericCodeGend libGenericCodeGend
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(glslang_SPIRV_LIBRARY
|
||||
NAMES SPIRVd libSPIRVd
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(glslang_glslang_default_resource_limits_LIBRARY
|
||||
NAMES glslang-default-resource-limitsd libglslang-default-resource-limitsd
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
else()
|
||||
find_library(glslang_LIBRARY
|
||||
NAMES glslang libglslang
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(glslang_OSDependent_LIBRARY
|
||||
NAMES OSDependent libOSDependent
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(glslang_MachineIndependent_LIBRARY
|
||||
NAMES MachineIndependent libMachineIndependent
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(glslang_GenericCodeGen_LIBRARY
|
||||
NAMES GenericCodeGen libGenericCodeGen
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(glslang_SPIRV_LIBRARY
|
||||
NAMES SPIRV libSPIRV
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
|
||||
find_library(glslang_glslang_default_resource_limits_LIBRARY
|
||||
NAMES glslang-default-resource-limits libglslang-default-resource-limits
|
||||
HINTS ${glslang_ROOT} ENV glslang_ROOT
|
||||
PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Set the include directory and libraries
|
||||
set(glslang_INCLUDE_DIRS ${glslang_INCLUDE_DIR})
|
||||
set(glslang_LIBRARIES
|
||||
${glslang_LIBRARY}
|
||||
${glslang_OSDependent_LIBRARY}
|
||||
${glslang_MachineIndependent_LIBRARY}
|
||||
${glslang_GenericCodeGen_LIBRARY}
|
||||
${glslang_SPIRV_LIBRARY}
|
||||
${glslang_glslang_default_resource_limits_LIBRARY}
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(glslang
|
||||
REQUIRED_VARS glslang_INCLUDE_DIR glslang_LIBRARY
|
||||
)
|
||||
|
||||
mark_as_advanced(
|
||||
glslang_INCLUDE_DIR
|
||||
glslang_LIBRARY
|
||||
glslang_OSDependent_LIBRARY
|
||||
glslang_MachineIndependent_LIBRARY
|
||||
glslang_GenericCodeGen_LIBRARY
|
||||
glslang_SPIRV_LIBRARY
|
||||
glslang_glslang_default_resource_limits_LIBRARY
|
||||
)
|
||||
Reference in New Issue
Block a user