@@ -121,16 +121,8 @@ if (Vulkan_FOUND)
121121 add_compile_definitions (GGML_VULKAN_RUN_TESTS)
122122 endif ()
123123
124- if (NOT CMAKE_CROSSCOMPILING )
125- add_subdirectory (vulkan-shaders)
126- if (MSVC )
127- foreach (CONFIG ${CMAKE_CONFIGURATION_TYPES} )
128- string (TOUPPER ${CONFIG} CONFIG)
129- set_target_properties (vulkan-shaders-gen PROPERTIES
130- RUNTIME_OUTPUT_DIRECTORY_${CONFIG} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} )
131- endforeach ()
132- endif ()
133- else ()
124+ # Set up toolchain for host compilation whether cross-compiling or not
125+ if (CMAKE_CROSSCOMPILING )
134126 if (GGML_VULKAN_SHADERS_GEN_TOOLCHAIN)
135127 set (HOST_CMAKE_TOOLCHAIN_FILE ${GGML_VULKAN_SHADERS_GEN_TOOLCHAIN} )
136128 else ()
@@ -143,22 +135,38 @@ if (Vulkan_FOUND)
143135 configure_file (${CMAKE_CURRENT_SOURCE_DIR} /cmake/host-toolchain.cmake.in ${CMAKE_BINARY_DIR} /host-toolchain.cmake @ONLY)
144136 set (HOST_CMAKE_TOOLCHAIN_FILE ${CMAKE_BINARY_DIR} /host-toolchain.cmake)
145137 endif ()
146- message (STATUS "vulkan-shaders-gen toolchain file: ${HOST_CMAKE_TOOLCHAIN_FILE} " )
138+ else ()
139+ # For non-cross-compiling, use empty toolchain (use host compiler)
140+ set (HOST_CMAKE_TOOLCHAIN_FILE "" )
141+ endif ()
142+
143+ # Always use ExternalProject_Add approach
144+ include (ExternalProject)
145+
146+ # Construct CMake arguments
147+ set (VULKAN_SHADER_GEN_CMAKE_ARGS
148+ -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
149+ -DVULKAN_SHADER_EXTENSIONS_FILE=${CMAKE_CURRENT_BINARY_DIR} /vulkan-shader-extension-defs.cmake
150+ -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
151+ )
147152
148- include (ExternalProject)
149- # Native build through ExternalProject_Add
150- ExternalProject_Add(
151- vulkan-shaders-gen
152- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /vulkan-shaders
153- CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE}
154- -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
155- -DVULKAN_SHADER_EXTENSIONS_FILE=${CMAKE_CURRENT_BINARY_DIR} /vulkan-shader-extension-defs.cmake
156- BUILD_COMMAND ${CMAKE_COMMAND} --build .
157- INSTALL_COMMAND ${CMAKE_COMMAND} --install .
158- INSTALL_DIR ${CMAKE_BINARY_DIR}
159- )
160- ExternalProject_Add_StepTargets(vulkan-shaders-gen build install )
153+ # Add toolchain file if cross-compiling
154+ if (CMAKE_CROSSCOMPILING )
155+ list (APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE} )
156+ message (STATUS "vulkan-shaders-gen toolchain file: ${HOST_CMAKE_TOOLCHAIN_FILE} " )
161157 endif ()
158+
159+ # Native build through ExternalProject_Add
160+ ExternalProject_Add(
161+ vulkan-shaders-gen
162+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /vulkan-shaders
163+ CMAKE_ARGS ${VULKAN_SHADER_GEN_CMAKE_ARGS}
164+ BUILD_COMMAND ${CMAKE_COMMAND} --build .
165+ INSTALL_COMMAND ${CMAKE_COMMAND} --install .
166+ INSTALL_DIR ${CMAKE_BINARY_DIR}
167+ )
168+ ExternalProject_Add_StepTargets(vulkan-shaders-gen build install )
169+
162170 set (_ggml_vk_host_suffix $<IF:$<STREQUAL :${CMAKE_HOST_SYSTEM_NAME} ,Windows>,.exe,>)
163171 set (_ggml_vk_genshaders_cmd ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /vulkan-shaders-gen${_ggml_vk_host_suffix} )
164172 set (_ggml_vk_header ${CMAKE_CURRENT_BINARY_DIR} /ggml-vulkan-shaders.hpp)
@@ -169,9 +177,8 @@ if (Vulkan_FOUND)
169177 file (GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir} /*.comp" )
170178 set (_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen)
171179
172- if (CMAKE_CROSSCOMPILING )
173- set (_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen-build vulkan-shaders-gen-install )
174- endif ()
180+ # Add build and install dependencies for all builds
181+ set (_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen-build vulkan-shaders-gen-install )
175182
176183 add_custom_command (
177184 OUTPUT ${_ggml_vk_header}
0 commit comments