blob: b44736d20ddc38b81355e796f36742b69131c030 [file]
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
# ### Editing this file ###
#
# This file should be formatted with
# ~~~
# cmake-format -i ATenVulkan.cmake
# ~~~
# It should also be cmake-lint clean.
#
# The targets in this file will be built if EXECUTORCH_BUILD_VULKAN is ON
if(NOT PYTHON_EXECUTABLE)
message(
"WARNING: PYTHON_EXECUTABLE is not set! A failure is likely imminent."
)
endif()
if(NOT EXECUTORCH_ROOT)
message("WARNING: EXECUTORCH_ROOT is not set! A failure is likely imminent.")
endif()
if(ANDROID)
if(NOT ANDROID_NDK)
message(FATAL_ERROR "ANDROID_NDK not set")
endif()
set(GLSLC_PATH
"${ANDROID_NDK}/shader-tools/${ANDROID_NDK_HOST_SYSTEM_NAME}/glslc"
)
else()
find_program(GLSLC_PATH glslc PATHS $ENV{PATH})
if(NOT GLSLC_PATH)
message(FATAL_ERROR "USE_VULKAN glslc not found")
endif()
endif()
# Required to enable linking with --whole-archive
include(${EXECUTORCH_ROOT}/build/Utils.cmake)
function(gen_vulkan_shader_lib_cpp shaders_path)
set(VULKAN_SHADERGEN_ENV "")
set(VULKAN_SHADERGEN_OUT_PATH ${CMAKE_BINARY_DIR}/${ARGV1})
execute_process(
COMMAND
"${PYTHON_EXECUTABLE}"
${EXECUTORCH_ROOT}/backends/vulkan/runtime/gen_vulkan_spv.py --glsl-path
${shaders_path} --output-path ${VULKAN_SHADERGEN_OUT_PATH}
--glslc-path=${GLSLC_PATH} --tmp-dir-path=${VULKAN_SHADERGEN_OUT_PATH}
--env ${VULKAN_GEN_ARG_ENV}
RESULT_VARIABLE error_code
)
set(generated_spv_cpp
${VULKAN_SHADERGEN_OUT_PATH}/spv.cpp
PARENT_SCOPE
)
endfunction()
function(vulkan_shader_lib library_name generated_spv_cpp)
add_library(${library_name} STATIC ${generated_spv_cpp})
target_include_directories(
${library_name}
PRIVATE
${EXECUTORCH_ROOT}/..
${EXECUTORCH_ROOT}/backends/vulkan/third-party/Vulkan-Headers/include
${EXECUTORCH_ROOT}/backends/vulkan/third-party/volk
)
target_link_libraries(${library_name} vulkan_backend)
target_compile_options(${library_name} PRIVATE ${VULKAN_CXX_FLAGS})
# Link this library with --whole-archive due to dynamic shader registrations
target_link_options_shared_lib(${library_name})
endfunction()
# Convenience macro to generate a SPIR-V shader library target. Given the path
# to the shaders to compile and the name of the library, it will create a static
# library containing the generated SPIR-V shaders. The generated_spv_cpp
# variable can be used to reference the generated CPP file outside the macro.
macro(vulkan_shader_library shaders_path library_name)
set(VULKAN_SHADERGEN_ENV "")
set(VULKAN_SHADERGEN_OUT_PATH ${CMAKE_BINARY_DIR}/${library_name})
# execute_process( COMMAND "${PYTHON_EXECUTABLE}"
# ${EXECUTORCH_ROOT}/backends/vulkan/runtime/gen_vulkan_spv.py --glsl-path
# ${shaders_path} --output-path ${VULKAN_SHADERGEN_OUT_PATH}
# --glslc-path=${GLSLC_PATH} --tmp-dir-path=${VULKAN_SHADERGEN_OUT_PATH} --env
# ${VULKAN_GEN_ARG_ENV} RESULT_VARIABLE error_code ) set(ENV{PYTHONPATH}
# ${PYTHONPATH})
set(generated_spv_cpp ${VULKAN_SHADERGEN_OUT_PATH}/spv.cpp)
add_library(${library_name} STATIC ${generated_spv_cpp})
target_include_directories(
${library_name}
PRIVATE
${EXECUTORCH_ROOT}/..
${EXECUTORCH_ROOT}/backends/vulkan/third-party/Vulkan-Headers/include
${EXECUTORCH_ROOT}/backends/vulkan/third-party/volk
)
target_link_libraries(${library_name} vulkan_backend)
target_compile_options(${library_name} PRIVATE ${VULKAN_CXX_FLAGS})
# Link this library with --whole-archive due to dynamic shader registrations
target_link_options_shared_lib(${library_name})
unset(VULKAN_SHADERGEN_ENV)
unset(VULKAN_SHADERGEN_OUT_PATH)
endmacro()