bandoti commited on
Commit
bc8b1f7
·
1 Parent(s): f95736f

cmake: clean up external project logic for vulkan-shaders-gen (llama/14179)

Browse files

* Remove install step for vulkan-shaders-gen

* Add install step to normalize msvc with make

* Regenerate modified shaders at build-time

ggml/src/ggml-vulkan/CMakeLists.txt CHANGED
@@ -49,15 +49,7 @@ if (Vulkan_FOUND)
49
  ../../include/ggml-vulkan.h
50
  )
51
 
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()
61
 
62
  # Test all shader extensions
63
  test_shader_extension_support(
@@ -136,42 +128,39 @@ if (Vulkan_FOUND)
136
  set(HOST_CMAKE_TOOLCHAIN_FILE "")
137
  endif()
138
 
139
- # Always use ExternalProject_Add approach
140
  include(ExternalProject)
141
 
142
- # Add toolchain file if cross-compiling
143
  if (CMAKE_CROSSCOMPILING)
144
  list(APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE})
145
  message(STATUS "vulkan-shaders-gen toolchain file: ${HOST_CMAKE_TOOLCHAIN_FILE}")
146
  endif()
147
 
148
- # Native build through ExternalProject_Add
149
  ExternalProject_Add(
150
  vulkan-shaders-gen
151
  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}
 
 
 
156
  )
157
  ExternalProject_Add_StepTargets(vulkan-shaders-gen build install)
158
 
159
  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)
168
 
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)
171
 
172
  add_custom_command(
173
  OUTPUT ${_ggml_vk_header}
174
- ${_ggml_vk_source}
175
 
176
  COMMAND ${_ggml_vk_genshaders_cmd}
177
  --glslc ${Vulkan_GLSLC_EXECUTABLE}
@@ -181,7 +170,11 @@ if (Vulkan_FOUND)
181
  --target-cpp ${_ggml_vk_source}
182
  --no-clean
183
 
184
- DEPENDS ${_ggml_vk_shader_deps}
 
 
 
 
185
  COMMENT "Generate vulkan shaders"
186
  )
187
 
 
49
  ../../include/ggml-vulkan.h
50
  )
51
 
52
+ set(VULKAN_SHADER_GEN_CMAKE_ARGS "")
 
 
 
 
 
 
 
 
53
 
54
  # Test all shader extensions
55
  test_shader_extension_support(
 
128
  set(HOST_CMAKE_TOOLCHAIN_FILE "")
129
  endif()
130
 
 
131
  include(ExternalProject)
132
 
 
133
  if (CMAKE_CROSSCOMPILING)
134
  list(APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE})
135
  message(STATUS "vulkan-shaders-gen toolchain file: ${HOST_CMAKE_TOOLCHAIN_FILE}")
136
  endif()
137
 
 
138
  ExternalProject_Add(
139
  vulkan-shaders-gen
140
  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders
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>
148
  )
149
  ExternalProject_Add_StepTargets(vulkan-shaders-gen build install)
150
 
151
  set (_ggml_vk_host_suffix $<IF:$<STREQUAL:${CMAKE_HOST_SYSTEM_NAME},Windows>,.exe,>)
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")
 
 
158
 
159
+ file(GLOB _ggml_vk_shader_files CONFIGURE_DEPENDS "${_ggml_vk_input_dir}/*.comp")
 
160
 
161
  add_custom_command(
162
  OUTPUT ${_ggml_vk_header}
163
+ ${_ggml_vk_source}
164
 
165
  COMMAND ${_ggml_vk_genshaders_cmd}
166
  --glslc ${Vulkan_GLSLC_EXECUTABLE}
 
170
  --target-cpp ${_ggml_vk_source}
171
  --no-clean
172
 
173
+ DEPENDS ${_ggml_vk_shader_files}
174
+ vulkan-shaders-gen
175
+ vulkan-shaders-gen-build
176
+ vulkan-shaders-gen-install
177
+
178
  COMMENT "Generate vulkan shaders"
179
  )
180
 
ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt CHANGED
@@ -25,15 +25,3 @@ add_executable(${TARGET} vulkan-shaders-gen.cpp)
25
  install(TARGETS ${TARGET} RUNTIME)
26
  target_compile_features(${TARGET} PRIVATE cxx_std_17)
27
  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()
 
25
  install(TARGETS ${TARGET} RUNTIME)
26
  target_compile_features(${TARGET} PRIVATE cxx_std_17)
27
  target_link_libraries(vulkan-shaders-gen PUBLIC Threads::Threads)