Skip to content

Commit 311719c

Browse files
committed
unify vulkan-shaders-gen build process
1 parent 0bd487b commit 311719c

File tree

2 files changed

+46
-27
lines changed

2 files changed

+46
-27
lines changed

ggml/src/ggml-vulkan/CMakeLists.txt

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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}

ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,15 @@ add_executable(${TARGET} vulkan-shaders-gen.cpp)
1616
install(TARGETS ${TARGET} RUNTIME)
1717
target_compile_features(${TARGET} PRIVATE cxx_std_17)
1818
target_link_libraries(vulkan-shaders-gen PUBLIC Threads::Threads)
19+
20+
# Configure output directories for MSVC builds
21+
if(MSVC)
22+
# Get the main project's runtime output directory if possible
23+
if(DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
24+
foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES})
25+
string(TOUPPER ${CONFIG} CONFIG)
26+
set_target_properties(${TARGET} PROPERTIES
27+
RUNTIME_OUTPUT_DIRECTORY_${CONFIG} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
28+
endforeach()
29+
endif()
30+
endif()

0 commit comments

Comments
 (0)