mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2024-12-26 11:24:35 +00:00
refactor: ggml: Improve vulkan-shaders-gen toolchain setup
- Add GGML_SHADERS_GEN_TOOLCHAIN CMake option. - Auto-detect host toolchain if not set.
This commit is contained in:
parent
1eac779fbe
commit
602295bb6d
@ -185,6 +185,9 @@ option(GGML_OPENCL_PROFILING "ggml: use OpenCL profiling (increas
|
|||||||
option(GGML_OPENCL_EMBED_KERNELS "ggml: embed kernels" ON)
|
option(GGML_OPENCL_EMBED_KERNELS "ggml: embed kernels" ON)
|
||||||
option(GGML_OPENCL_USE_ADRENO_KERNELS "ggml: use optimized kernels for Adreno" ON)
|
option(GGML_OPENCL_USE_ADRENO_KERNELS "ggml: use optimized kernels for Adreno" ON)
|
||||||
|
|
||||||
|
# toolchain for vulkan-shaders-gen
|
||||||
|
set (GGML_SHADERS_GEN_TOOLCHAIN "" CACHE FILEPATH "ggml: toolchain file for vulkan-shaders-gen")
|
||||||
|
|
||||||
# extra artifacts
|
# extra artifacts
|
||||||
option(GGML_BUILD_TESTS "ggml: build tests" ${GGML_STANDALONE})
|
option(GGML_BUILD_TESTS "ggml: build tests" ${GGML_STANDALONE})
|
||||||
option(GGML_BUILD_EXAMPLES "ggml: build examples" ${GGML_STANDALONE})
|
option(GGML_BUILD_EXAMPLES "ggml: build examples" ${GGML_STANDALONE})
|
||||||
|
@ -3,6 +3,39 @@ cmake_policy(SET CMP0114 NEW)
|
|||||||
|
|
||||||
find_package(Vulkan COMPONENTS glslc REQUIRED)
|
find_package(Vulkan COMPONENTS glslc REQUIRED)
|
||||||
|
|
||||||
|
function(detect_host_compiler)
|
||||||
|
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
|
||||||
|
find_program(MSVC_COMPILER cl)
|
||||||
|
find_program(GNU_C_COMPILER gcc)
|
||||||
|
find_program(GNU_CXX_COMPILER g++)
|
||||||
|
if (MSVC_COMPILER)
|
||||||
|
set(HOST_C_COMPILER "${MSVC_COMPILER}" PARENT_SCOPE)
|
||||||
|
set(HOST_CXX_COMPILER "${MSVC_COMPILER}" PARENT_SCOPE)
|
||||||
|
elseif (CLANG_C_COMPILER AND CLANG_CXX_COMPILER)
|
||||||
|
set(HOST_C_COMPILER "${CLANG_C_COMPILER}" PARENT_SCOPE)
|
||||||
|
set(HOST_CXX_COMPILER "${CLANG_CXX_COMPILER}" PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
message(WARNING "Neither MSVC nor clang found")
|
||||||
|
endif()
|
||||||
|
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
|
||||||
|
find_program(CLANG_C_COMPILER clang)
|
||||||
|
find_program(CLANG_CXX_COMPILER clang++)
|
||||||
|
find_program(GNU_C_COMPILER gcc)
|
||||||
|
find_program(GNU_CXX_COMPILER g++)
|
||||||
|
if (GNU_C_COMPILER AND GNU_CXX_COMPILER)
|
||||||
|
set(HOST_C_COMPILER "${GNU_C_COMPILER}" PARENT_SCOPE)
|
||||||
|
set(HOST_CXX_COMPILER "${GNU_CXX_COMPILER}" PARENT_SCOPE)
|
||||||
|
elseif (CLANG_C_COMPILER AND CLANG_CXX_COMPILER)
|
||||||
|
set(HOST_C_COMPILER "${CLANG_C_COMPILER}" PARENT_SCOPE)
|
||||||
|
set(HOST_CXX_COMPILER "${CLANG_CXX_COMPILER}" PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
message(WARNING "Neither clang nor gcc found")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(WARNING "Unsupported host system: ${CMAKE_HOST_SYSTEM_NAME}")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
if (Vulkan_FOUND)
|
if (Vulkan_FOUND)
|
||||||
message(STATUS "Vulkan found")
|
message(STATUS "Vulkan found")
|
||||||
|
|
||||||
@ -65,22 +98,36 @@ if (Vulkan_FOUND)
|
|||||||
if (NOT CMAKE_CROSSCOMPILING)
|
if (NOT CMAKE_CROSSCOMPILING)
|
||||||
add_subdirectory(vulkan-shaders)
|
add_subdirectory(vulkan-shaders)
|
||||||
else()
|
else()
|
||||||
|
if (GGML_SHADERS_GEN_TOOLCHAIN)
|
||||||
|
set(HOST_CMAKE_TOOLCHAIN_FILE ${GGML_SHADERS_GEN_TOOLCHAIN})
|
||||||
|
else()
|
||||||
|
detect_host_compiler()
|
||||||
|
if (NOT HOST_C_COMPILER OR NOT HOST_CXX_COMPILER)
|
||||||
|
message(FATAL_ERROR "Host compiler not found")
|
||||||
|
else()
|
||||||
|
message(STATUS "Host compiler: ${HOST_C_COMPILER} ${HOST_CXX_COMPILER}")
|
||||||
|
endif()
|
||||||
|
file(WRITE ${CMAKE_BINARY_DIR}/host_toolchain.cmake
|
||||||
|
"set(CMAKE_BUILD_TYPE Release)\n"
|
||||||
|
"set(CMAKE_C_FLAGS -O2)\n"
|
||||||
|
"set(CMAKE_CXX_FLAGS -O2)\n"
|
||||||
|
"set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)\n"
|
||||||
|
"set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)\n"
|
||||||
|
"set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)\n"
|
||||||
|
"set(CMAKE_C_COMPILER ${HOST_C_COMPILER})\n"
|
||||||
|
"set(CMAKE_CXX_COMPILER ${HOST_CXX_COMPILER})\n"
|
||||||
|
)
|
||||||
|
set(HOST_CMAKE_TOOLCHAIN_FILE ${CMAKE_BINARY_DIR}/host_toolchain.cmake)
|
||||||
|
endif()
|
||||||
|
message(STATUS "vulkan-shaders-gen toolchain file: ${HOST_CMAKE_TOOLCHAIN_FILE}")
|
||||||
|
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
# Native build through ExternalProject_Add
|
# Native build through ExternalProject_Add
|
||||||
ExternalProject_Add(
|
ExternalProject_Add(
|
||||||
vulkan-shaders-gen
|
vulkan-shaders-gen
|
||||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders
|
||||||
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
|
CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE}
|
||||||
-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
|
-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 .
|
BUILD_COMMAND ${CMAKE_COMMAND} --build .
|
||||||
INSTALL_COMMAND ${CMAKE_COMMAND} --install .
|
INSTALL_COMMAND ${CMAKE_COMMAND} --install .
|
||||||
INSTALL_DIR ${CMAKE_BINARY_DIR}
|
INSTALL_DIR ${CMAKE_BINARY_DIR}
|
||||||
|
Loading…
Reference in New Issue
Block a user