|
1 | 1 | find_package(Vulkan COMPONENTS glslc REQUIRED) |
2 | 2 |
|
3 | 3 | if (Vulkan_FOUND) |
| 4 | + if(CMAKE_CROSSCOMPILING) |
| 5 | + if(DEFINED ENV{VULKAN_SDK}) |
| 6 | + set(Vulkan_GLSLC_EXECUTABLE "$ENV{VULKAN_SDK}/Bin/glslc.exe") |
| 7 | + else() |
| 8 | + message(FATAL_ERROR "VULKAN_SDK environment variable not set") |
| 9 | + endif() |
| 10 | + endif() |
| 11 | + |
4 | 12 | message(STATUS "Vulkan found") |
5 | 13 |
|
6 | 14 | ggml_add_backend_library(ggml-vulkan |
7 | 15 | ggml-vulkan.cpp |
8 | 16 | ../../include/ggml-vulkan.h |
9 | 17 | ) |
10 | 18 |
|
| 19 | + # Add NDK Vulkan includes for Android |
| 20 | + if(ANDROID) |
| 21 | + target_include_directories(ggml-vulkan PRIVATE |
| 22 | + $ENV{VULKAN_SDK}/Include |
| 23 | + ) |
| 24 | + target_compile_definitions(ggml-vulkan PRIVATE |
| 25 | + VK_USE_PLATFORM_ANDROID_KHR |
| 26 | + ) |
| 27 | + endif() |
| 28 | + |
11 | 29 | # Compile a test shader to determine whether GL_NV_cooperative_matrix2 is supported. |
12 | 30 | # If it's not, there will be an error to stderr. |
13 | 31 | # If it's supported, set a define to indicate that we should compile those shaders |
@@ -59,34 +77,37 @@ if (Vulkan_FOUND) |
59 | 77 | add_compile_definitions(GGML_VULKAN_RUN_TESTS) |
60 | 78 | endif() |
61 | 79 |
|
62 | | - add_subdirectory(vulkan-shaders) |
| 80 | + if(NOT CMAKE_CROSSCOMPILING) |
| 81 | + add_subdirectory(vulkan-shaders) |
63 | 82 |
|
64 | | - set (_ggml_vk_genshaders_cmd vulkan-shaders-gen) |
65 | | - set (_ggml_vk_header ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp) |
66 | | - set (_ggml_vk_source ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp) |
67 | | - set (_ggml_vk_input_dir ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders) |
68 | | - set (_ggml_vk_output_dir ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders.spv) |
| 83 | + set (_ggml_vk_genshaders_cmd "${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders-gen.exe") |
| 84 | + set (_ggml_vk_header ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp) |
| 85 | + set (_ggml_vk_source ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp) |
| 86 | + set (_ggml_vk_input_dir ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders) |
| 87 | + set (_ggml_vk_output_dir ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders.spv) |
69 | 88 |
|
70 | | - file(GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir}/*.comp") |
| 89 | + file(GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir}/*.comp") |
71 | 90 |
|
72 | | - add_custom_command( |
73 | | - OUTPUT ${_ggml_vk_header} |
| 91 | + add_custom_command( |
| 92 | + OUTPUT ${_ggml_vk_header} |
74 | 93 | ${_ggml_vk_source} |
75 | 94 |
|
76 | | - COMMAND ${_ggml_vk_genshaders_cmd} |
77 | | - --glslc ${Vulkan_GLSLC_EXECUTABLE} |
78 | | - --input-dir ${_ggml_vk_input_dir} |
79 | | - --output-dir ${_ggml_vk_output_dir} |
80 | | - --target-hpp ${_ggml_vk_header} |
81 | | - --target-cpp ${_ggml_vk_source} |
82 | | - --no-clean |
83 | | - |
84 | | - DEPENDS ${_ggml_vk_shader_deps} ${_ggml_vk_genshaders_cmd} |
85 | | - COMMENT "Generate vulkan shaders" |
86 | | - ) |
87 | | - |
88 | | - target_sources(ggml-vulkan PRIVATE ${_ggml_vk_source} ${_ggml_vk_header}) |
89 | | - |
| 95 | + COMMAND ${_ggml_vk_genshaders_cmd} |
| 96 | + --glslc ${Vulkan_GLSLC_EXECUTABLE} |
| 97 | + --input-dir ${_ggml_vk_input_dir} |
| 98 | + --output-dir ${_ggml_vk_output_dir} |
| 99 | + --target-hpp ${_ggml_vk_header} |
| 100 | + --target-cpp ${_ggml_vk_source} |
| 101 | + --no-clean |
| 102 | + |
| 103 | + DEPENDS ${_ggml_vk_shader_deps} ${_ggml_vk_genshaders_cmd} |
| 104 | + COMMENT "Generate vulkan shaders" |
| 105 | + ) |
| 106 | + |
| 107 | + target_sources(ggml-vulkan PRIVATE ${_ggml_vk_source} ${_ggml_vk_header}) |
| 108 | + else () |
| 109 | + target_sources(ggml-vulkan PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ggml-vulkan-shaders.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ggml-vulkan-shaders.hpp) |
| 110 | + endif () |
90 | 111 | else() |
91 | 112 | message(WARNING "Vulkan not found") |
92 | 113 | endif() |
0 commit comments