@@ -757,13 +757,36 @@ if(NCNN_VULKAN)
757757 find_package (Threads )
758758 find_package (SPIRV-Tools QUIET )
759759 find_package (SPIRV-Tools-opt QUIET )
760- find_package (glslang )
760+ find_package (glslang QUIET )
761761
762- if (TARGET glslang::glslang)
763- get_property (glslang_location TARGET glslang::glslang PROPERTY LOCATION )
762+ if (glslang_FOUND)
763+ add_library (glslang ALIAS glslang::glslang )
764+ add_library (SPIRV ALIAS glslang::SPIRV )
765+ else ()
766+ set (GLSLANG_TARGET_DIR "GLSLANG-NOTFOUND" CACHE PATH "Absolute path to glslangTargets.cmake directory" )
767+ if (NOT GLSLANG_TARGET_DIR AND NOT DEFINED ENV{GLSLANG_TARGET_DIR})
768+ message (WARNING "set glslang_DIR to glslang-config.cmake directory for using system glslang." )
769+ message (WARNING "GLSLANG_TARGET_DIR must be defined! NCNN_SYSTEM_GLSLANG will be turned off." )
770+ set (NCNN_SYSTEM_GLSLANG OFF )
771+ else ()
772+ include ("${GLSLANG_TARGET_DIR} /OSDependentTargets.cmake" )
773+ include ("${GLSLANG_TARGET_DIR} /OGLCompilerTargets.cmake" )
774+ if (EXISTS "${GLSLANG_TARGET_DIR} /HLSLTargets.cmake" )
775+ # hlsl support can be optional
776+ include ("${GLSLANG_TARGET_DIR} /HLSLTargets.cmake" )
777+ endif ()
778+ include ("${GLSLANG_TARGET_DIR} /glslangTargets.cmake" )
779+ include ("${GLSLANG_TARGET_DIR} /SPIRVTargets.cmake" )
780+ endif ()
781+ endif ()
782+
783+ if (TARGET glslang AND TARGET SPIRV)
784+ get_property (glslang_location TARGET glslang PROPERTY LOCATION )
785+ get_property (SPIRV_location TARGET SPIRV PROPERTY LOCATION )
764786 message (STATUS "Found glslang: ${glslang_location} (found version \" ${glslang_VERSION} \" )" )
787+ message (STATUS "Found SPIRV: ${SPIRV_location} (found version \" ${glslang_VERSION} \" )" )
765788 else ()
766- message (WARNING "glslang target not found! NCNN_SYSTEM_GLSLANG will be turned off." )
789+ message (WARNING "glslang or SPIRV target not found! NCNN_SYSTEM_GLSLANG will be turned off." )
767790 set (NCNN_SYSTEM_GLSLANG OFF )
768791 endif ()
769792 endif ()
0 commit comments