Skip to content

Commit 1eac779

Browse files
committed
fix: ggml: fix vulkan-shaders-gen build
The vulkan-shaders-gen target was not being built correctly in case of cross-compilation. Other outputs need to be built for the cross compile target, but vulkan-shaders-gen needs to be built for the host.
1 parent 60cfa72 commit 1eac779

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

ggml/src/ggml-vulkan/CMakeLists.txt

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
cmake_minimum_required(VERSION 3.19)
2+
cmake_policy(SET CMP0114 NEW)
3+
14
find_package(Vulkan COMPONENTS glslc REQUIRED)
25

36
if (Vulkan_FOUND)
@@ -59,16 +62,43 @@ if (Vulkan_FOUND)
5962
add_compile_definitions(GGML_VULKAN_RUN_TESTS)
6063
endif()
6164

62-
add_subdirectory(vulkan-shaders)
63-
64-
set (_ggml_vk_genshaders_cmd vulkan-shaders-gen)
65+
if (NOT CMAKE_CROSSCOMPILING)
66+
add_subdirectory(vulkan-shaders)
67+
else()
68+
include(ExternalProject)
69+
# Native build through ExternalProject_Add
70+
ExternalProject_Add(
71+
vulkan-shaders-gen
72+
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders
73+
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
74+
-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
75+
-DCMAKE_TOOLCHAIN_FILE=
76+
-DCMAKE_SYSROOT=
77+
-DCMAKE_C_FLAGS=-O2
78+
-DCMAKE_CXX_FLAGS=-O2
79+
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
80+
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=NEVER
81+
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=NEVER
82+
-DCMAKE_C_COMPILER=gcc
83+
-DCMAKE_CXX_COMPILER=g++
84+
BUILD_COMMAND ${CMAKE_COMMAND} --build .
85+
INSTALL_COMMAND ${CMAKE_COMMAND} --install .
86+
INSTALL_DIR ${CMAKE_BINARY_DIR}
87+
)
88+
ExternalProject_Add_StepTargets(vulkan-shaders-gen build install)
89+
endif()
90+
set (_ggml_vk_genshaders_cmd ${CMAKE_BINARY_DIR}/bin/vulkan-shaders-gen)
6591
set (_ggml_vk_header ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp)
6692
set (_ggml_vk_source ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp)
6793
set (_ggml_vk_input_dir ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders)
6894
set (_ggml_vk_output_dir ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders.spv)
6995

7096
file(GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir}/*.comp")
7197

98+
if (CMAKE_CROSSCOMPILING)
99+
set(_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen-build vulkan-shaders-gen-install)
100+
endif()
101+
72102
add_custom_command(
73103
OUTPUT ${_ggml_vk_header}
74104
${_ggml_vk_source}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@ find_package(Vulkan COMPONENTS glslc REQUIRED)
33

44
set(TARGET vulkan-shaders-gen)
55
add_executable(${TARGET} vulkan-shaders-gen.cpp)
6-
install(TARGETS ${TARGET} RUNTIME)
6+
if (${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
7+
install(TARGETS ${TARGET} RUNTIME)
8+
else()
9+
install(TARGETS ${TARGET} RUNTIME DESTINATION bin)
10+
endif()
711
target_compile_features(${TARGET} PRIVATE cxx_std_17)
812
target_link_libraries(vulkan-shaders-gen PUBLIC Threads::Threads)
913
target_link_libraries(vulkan-shaders-gen PRIVATE Vulkan::Vulkan)

0 commit comments

Comments
 (0)