Skip to content

Commit 0dbcabd

Browse files
authored
cmake: clean up external project logic for vulkan-shaders-gen (#14179)
* Remove install step for vulkan-shaders-gen * Add install step to normalize msvc with make * Regenerate modified shaders at build-time
1 parent ad590be commit 0dbcabd

File tree

3 files changed

+22
-41
lines changed

3 files changed

+22
-41
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ jobs:
693693
- build: 'openblas-x64'
694694
defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/x64-windows-llvm.cmake -DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DGGML_OPENMP=OFF -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS -DBLAS_INCLUDE_DIRS="$env:RUNNER_TEMP/openblas/include" -DBLAS_LIBRARIES="$env:RUNNER_TEMP/openblas/lib/openblas.lib"'
695695
- build: 'vulkan-x64'
696-
defines: '-DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DGGML_VULKAN=ON'
696+
defines: '-DCMAKE_BUILD_TYPE=Release -DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DGGML_VULKAN=ON'
697697
- build: 'llvm-arm64'
698698
defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake -DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON'
699699
- build: 'llvm-arm64-opencl-adreno'

ggml/src/ggml-vulkan/CMakeLists.txt

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,7 @@ if (Vulkan_FOUND)
4949
../../include/ggml-vulkan.h
5050
)
5151

52-
set(VULKAN_SHADER_GEN_CMAKE_ARGS
53-
-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
54-
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
55-
)
56-
57-
set(VULKAN_SHADER_GEN_CMAKE_BUILD_ARGS "")
58-
if (CMAKE_BUILD_TYPE AND CMAKE_BUILD_TYPE MATCHES "Debug|Release|MinSizeRel|RelWithDebInfo")
59-
list(APPEND VULKAN_SHADER_GEN_CMAKE_BUILD_ARGS --config=${CMAKE_BUILD_TYPE})
60-
endif()
52+
set(VULKAN_SHADER_GEN_CMAKE_ARGS "")
6153

6254
# Test all shader extensions
6355
test_shader_extension_support(
@@ -136,42 +128,39 @@ if (Vulkan_FOUND)
136128
set(HOST_CMAKE_TOOLCHAIN_FILE "")
137129
endif()
138130

139-
# Always use ExternalProject_Add approach
140131
include(ExternalProject)
141132

142-
# Add toolchain file if cross-compiling
143133
if (CMAKE_CROSSCOMPILING)
144134
list(APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE})
145135
message(STATUS "vulkan-shaders-gen toolchain file: ${HOST_CMAKE_TOOLCHAIN_FILE}")
146136
endif()
147137

148-
# Native build through ExternalProject_Add
149138
ExternalProject_Add(
150139
vulkan-shaders-gen
151140
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders
152-
CMAKE_ARGS ${VULKAN_SHADER_GEN_CMAKE_ARGS}
153-
BUILD_COMMAND ${CMAKE_COMMAND} --build . ${VULKAN_SHADER_GEN_CMAKE_BUILD_ARGS}
154-
INSTALL_COMMAND ${CMAKE_COMMAND} --install .
155-
INSTALL_DIR ${CMAKE_BINARY_DIR}
141+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/$<CONFIG>
142+
-DCMAKE_INSTALL_BINDIR=.
143+
-DCMAKE_BUILD_TYPE=$<CONFIG>
144+
${VULKAN_SHADER_GEN_CMAKE_ARGS}
145+
146+
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
147+
INSTALL_COMMAND ${CMAKE_COMMAND} --install . --config $<CONFIG>
156148
)
157149
ExternalProject_Add_StepTargets(vulkan-shaders-gen build install)
158150

159151
set (_ggml_vk_host_suffix $<IF:$<STREQUAL:${CMAKE_HOST_SYSTEM_NAME},Windows>,.exe,>)
160-
set (_ggml_vk_genshaders_cmd ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/vulkan-shaders-gen${_ggml_vk_host_suffix})
161-
set (_ggml_vk_header ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp)
162-
set (_ggml_vk_source ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp)
163-
set (_ggml_vk_input_dir ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders)
164-
set (_ggml_vk_output_dir ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders.spv)
165-
166-
file(GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir}/*.comp")
167-
set (_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen)
152+
set (_ggml_vk_genshaders_dir "${CMAKE_BINARY_DIR}/$<CONFIG>")
153+
set (_ggml_vk_genshaders_cmd "${_ggml_vk_genshaders_dir}/vulkan-shaders-gen${_ggml_vk_host_suffix}")
154+
set (_ggml_vk_header "${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp")
155+
set (_ggml_vk_source "${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp")
156+
set (_ggml_vk_input_dir "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders")
157+
set (_ggml_vk_output_dir "${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders.spv")
168158

169-
# Add build and install dependencies for all builds
170-
set(_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen-build vulkan-shaders-gen-install)
159+
file(GLOB _ggml_vk_shader_files CONFIGURE_DEPENDS "${_ggml_vk_input_dir}/*.comp")
171160

172161
add_custom_command(
173162
OUTPUT ${_ggml_vk_header}
174-
${_ggml_vk_source}
163+
${_ggml_vk_source}
175164

176165
COMMAND ${_ggml_vk_genshaders_cmd}
177166
--glslc ${Vulkan_GLSLC_EXECUTABLE}
@@ -181,7 +170,11 @@ if (Vulkan_FOUND)
181170
--target-cpp ${_ggml_vk_source}
182171
--no-clean
183172

184-
DEPENDS ${_ggml_vk_shader_deps}
173+
DEPENDS ${_ggml_vk_shader_files}
174+
vulkan-shaders-gen
175+
vulkan-shaders-gen-build
176+
vulkan-shaders-gen-install
177+
185178
COMMENT "Generate vulkan shaders"
186179
)
187180

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,3 @@ add_executable(${TARGET} vulkan-shaders-gen.cpp)
2525
install(TARGETS ${TARGET} RUNTIME)
2626
target_compile_features(${TARGET} PRIVATE cxx_std_17)
2727
target_link_libraries(vulkan-shaders-gen PUBLIC Threads::Threads)
28-
29-
# Configure output directories for MSVC builds
30-
if(MSVC)
31-
# Get the main project's runtime output directory if possible
32-
if(DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
33-
foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES})
34-
string(TOUPPER ${CONFIG} CONFIG)
35-
set_target_properties(${TARGET} PROPERTIES
36-
RUNTIME_OUTPUT_DIRECTORY_${CONFIG} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
37-
endforeach()
38-
endif()
39-
endif()

0 commit comments

Comments
 (0)