diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 676f85a369bc6e..8b52405e8db028 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -652,9 +652,32 @@ if (GGML_VULKAN) add_compile_definitions(GGML_VULKAN_RUN_TESTS) endif() - add_subdirectory(vulkan-shaders) - - set (_ggml_vk_genshaders_cmd vulkan-shaders-gen) + if (NOT CMAKE_CROSSCOMPILING) + add_subdirectory(vulkan-shaders) + else() + include(ExternalProject) + # Native build through ExternalProject_Add + ExternalProject_Add( + vulkan-shaders-gen + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders + CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} + -DCMAKE_TOOLCHAIN_FILE= + -DCMAKE_SYSROOT= + -DCMAKE_C_FLAGS=-O2 + -DCMAKE_CXX_FLAGS=-O2 + -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER + -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=NEVER + -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=NEVER + -DCMAKE_C_COMPILER=gcc + -DCMAKE_CXX_COMPILER=g++ + BUILD_COMMAND ${CMAKE_COMMAND} --build . + INSTALL_COMMAND ${CMAKE_COMMAND} --install . + INSTALL_DIR ${CMAKE_BINARY_DIR} + ) + ExternalProject_Add_StepTargets(vulkan-shaders-gen build install) + endif() + set (_ggml_vk_genshaders_cmd ${CMAKE_BINARY_DIR}/bin/vulkan-shaders-gen) set (_ggml_vk_header ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp) set (_ggml_vk_source ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp) set (_ggml_vk_input_dir ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders) @@ -662,6 +685,10 @@ if (GGML_VULKAN) file(GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir}/*.comp") + if (CMAKE_CROSSCOMPILING) + set(_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen-build vulkan-shaders-gen-install) + endif() + add_custom_command( OUTPUT ${_ggml_vk_header} ${_ggml_vk_source} diff --git a/ggml/src/vulkan-shaders/CMakeLists.txt b/ggml/src/vulkan-shaders/CMakeLists.txt index 10075db337737b..20fe132d9b01ee 100644 --- a/ggml/src/vulkan-shaders/CMakeLists.txt +++ b/ggml/src/vulkan-shaders/CMakeLists.txt @@ -1,7 +1,14 @@ +cmake_minimum_required(VERSION 3.12) +project(vulkan-shaders-gen C CXX) + find_package (Threads REQUIRED) set(TARGET vulkan-shaders-gen) add_executable(${TARGET} vulkan-shaders-gen.cpp) -install(TARGETS ${TARGET} RUNTIME) +if (${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) + install(TARGETS ${TARGET} RUNTIME) +else() + install(TARGETS ${TARGET} RUNTIME DESTINATION bin) +endif() target_compile_features(${TARGET} PRIVATE cxx_std_11) target_link_libraries(vulkan-shaders-gen PUBLIC Threads::Threads)