@@ -652,16 +652,43 @@ if (GGML_VULKAN)
652
652
add_compile_definitions (GGML_VULKAN_RUN_TESTS )
653
653
endif ()
654
654
655
- add_subdirectory (vulkan-shaders )
656
-
657
- set (_ggml_vk_genshaders_cmd vulkan-shaders-gen )
655
+ if (NOT CMAKE_CROSSCOMPILING )
656
+ add_subdirectory (vulkan-shaders )
657
+ else ()
658
+ include (ExternalProject )
659
+ # Native build through ExternalProject_Add
660
+ ExternalProject_Add (
661
+ vulkan-shaders-gen
662
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /vulkan-shaders
663
+ CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
664
+ -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
665
+ -DCMAKE_TOOLCHAIN_FILE=
666
+ -DCMAKE_SYSROOT=
667
+ -DCMAKE_C_FLAGS=-O2
668
+ -DCMAKE_CXX_FLAGS=-O2
669
+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
670
+ -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=NEVER
671
+ -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=NEVER
672
+ -DCMAKE_C_COMPILER=gcc
673
+ -DCMAKE_CXX_COMPILER=g++
674
+ BUILD_COMMAND ${CMAKE_COMMAND} --build .
675
+ INSTALL_COMMAND ${CMAKE_COMMAND} --install .
676
+ INSTALL_DIR ${CMAKE_BINARY_DIR}
677
+ )
678
+ ExternalProject_Add_StepTargets (vulkan-shaders-gen build install )
679
+ endif ()
680
+ set (_ggml_vk_genshaders_cmd ${CMAKE_BINARY_DIR} /bin/vulkan-shaders-gen )
658
681
set (_ggml_vk_header ${CMAKE_CURRENT_BINARY_DIR} /ggml-vulkan-shaders.hpp )
659
682
set (_ggml_vk_source ${CMAKE_CURRENT_BINARY_DIR} /ggml-vulkan-shaders.cpp )
660
683
set (_ggml_vk_input_dir ${CMAKE_CURRENT_SOURCE_DIR} /vulkan-shaders )
661
684
set (_ggml_vk_output_dir ${CMAKE_CURRENT_BINARY_DIR} /vulkan-shaders.spv )
662
685
663
686
file (GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir} /*.comp" )
664
687
688
+ if (CMAKE_CROSSCOMPILING )
689
+ set (_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen-build vulkan-shaders-gen-install )
690
+ endif ()
691
+
665
692
add_custom_command (
666
693
OUTPUT ${_ggml_vk_header}
667
694
${_ggml_vk_source}
0 commit comments