1*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Meta Platforms, Inc. and affiliates. 2*523fa7a6SAndroid Build Coastguard Worker# All rights reserved. 3*523fa7a6SAndroid Build Coastguard Worker# 4*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the 5*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 6*523fa7a6SAndroid Build Coastguard Worker 7*523fa7a6SAndroid Build Coastguard Worker# ### Editing this file ### 8*523fa7a6SAndroid Build Coastguard Worker# 9*523fa7a6SAndroid Build Coastguard Worker# This file should be formatted with 10*523fa7a6SAndroid Build Coastguard Worker# ~~~ 11*523fa7a6SAndroid Build Coastguard Worker# cmake-format -i ATenVulkan.cmake 12*523fa7a6SAndroid Build Coastguard Worker# ~~~ 13*523fa7a6SAndroid Build Coastguard Worker# It should also be cmake-lint clean. 14*523fa7a6SAndroid Build Coastguard Worker# 15*523fa7a6SAndroid Build Coastguard Worker# The targets in this file will be built if EXECUTORCH_BUILD_VULKAN is ON 16*523fa7a6SAndroid Build Coastguard Worker 17*523fa7a6SAndroid Build Coastguard Workerif(NOT PYTHON_EXECUTABLE) 18*523fa7a6SAndroid Build Coastguard Worker message( 19*523fa7a6SAndroid Build Coastguard Worker "WARNING: PYTHON_EXECUTABLE is not set! A failure is likely imminent." 20*523fa7a6SAndroid Build Coastguard Worker ) 21*523fa7a6SAndroid Build Coastguard Workerendif() 22*523fa7a6SAndroid Build Coastguard Worker 23*523fa7a6SAndroid Build Coastguard Workerif(NOT EXECUTORCH_ROOT) 24*523fa7a6SAndroid Build Coastguard Worker message("WARNING: EXECUTORCH_ROOT is not set! A failure is likely imminent.") 25*523fa7a6SAndroid Build Coastguard Workerendif() 26*523fa7a6SAndroid Build Coastguard Worker 27*523fa7a6SAndroid Build Coastguard Workerif(ANDROID) 28*523fa7a6SAndroid Build Coastguard Worker if(NOT ANDROID_NDK) 29*523fa7a6SAndroid Build Coastguard Worker message(FATAL_ERROR "ANDROID_NDK not set") 30*523fa7a6SAndroid Build Coastguard Worker endif() 31*523fa7a6SAndroid Build Coastguard Worker 32*523fa7a6SAndroid Build Coastguard Worker set(GLSLC_PATH 33*523fa7a6SAndroid Build Coastguard Worker "${ANDROID_NDK}/shader-tools/${ANDROID_NDK_HOST_SYSTEM_NAME}/glslc" 34*523fa7a6SAndroid Build Coastguard Worker ) 35*523fa7a6SAndroid Build Coastguard Workerelse() 36*523fa7a6SAndroid Build Coastguard Worker find_program(GLSLC_PATH glslc PATHS $ENV{PATH}) 37*523fa7a6SAndroid Build Coastguard Worker 38*523fa7a6SAndroid Build Coastguard Worker if(NOT GLSLC_PATH) 39*523fa7a6SAndroid Build Coastguard Worker message(FATAL_ERROR "USE_VULKAN glslc not found") 40*523fa7a6SAndroid Build Coastguard Worker endif() 41*523fa7a6SAndroid Build Coastguard Workerendif() 42*523fa7a6SAndroid Build Coastguard Worker 43*523fa7a6SAndroid Build Coastguard Worker# Required to enable linking with --whole-archive 44*523fa7a6SAndroid Build Coastguard Workerinclude(${EXECUTORCH_ROOT}/build/Utils.cmake) 45*523fa7a6SAndroid Build Coastguard Worker 46*523fa7a6SAndroid Build Coastguard Workerfunction(gen_vulkan_shader_lib_cpp shaders_path) 47*523fa7a6SAndroid Build Coastguard Worker set(VULKAN_SHADERGEN_ENV "") 48*523fa7a6SAndroid Build Coastguard Worker set(VULKAN_SHADERGEN_OUT_PATH ${CMAKE_BINARY_DIR}/${ARGV1}) 49*523fa7a6SAndroid Build Coastguard Worker 50*523fa7a6SAndroid Build Coastguard Worker execute_process( 51*523fa7a6SAndroid Build Coastguard Worker COMMAND 52*523fa7a6SAndroid Build Coastguard Worker "${PYTHON_EXECUTABLE}" 53*523fa7a6SAndroid Build Coastguard Worker ${EXECUTORCH_ROOT}/backends/vulkan/runtime/gen_vulkan_spv.py --glsl-path 54*523fa7a6SAndroid Build Coastguard Worker ${shaders_path} --output-path ${VULKAN_SHADERGEN_OUT_PATH} 55*523fa7a6SAndroid Build Coastguard Worker --glslc-path=${GLSLC_PATH} --tmp-dir-path=${VULKAN_SHADERGEN_OUT_PATH} 56*523fa7a6SAndroid Build Coastguard Worker --env ${VULKAN_GEN_ARG_ENV} 57*523fa7a6SAndroid Build Coastguard Worker RESULT_VARIABLE error_code 58*523fa7a6SAndroid Build Coastguard Worker ) 59*523fa7a6SAndroid Build Coastguard Worker 60*523fa7a6SAndroid Build Coastguard Worker set(generated_spv_cpp 61*523fa7a6SAndroid Build Coastguard Worker ${VULKAN_SHADERGEN_OUT_PATH}/spv.cpp 62*523fa7a6SAndroid Build Coastguard Worker PARENT_SCOPE 63*523fa7a6SAndroid Build Coastguard Worker ) 64*523fa7a6SAndroid Build Coastguard Workerendfunction() 65*523fa7a6SAndroid Build Coastguard Worker 66*523fa7a6SAndroid Build Coastguard Workerfunction(vulkan_shader_lib library_name generated_spv_cpp) 67*523fa7a6SAndroid Build Coastguard Worker add_library(${library_name} STATIC ${generated_spv_cpp}) 68*523fa7a6SAndroid Build Coastguard Worker target_include_directories( 69*523fa7a6SAndroid Build Coastguard Worker ${library_name} 70*523fa7a6SAndroid Build Coastguard Worker PRIVATE 71*523fa7a6SAndroid Build Coastguard Worker ${EXECUTORCH_ROOT}/.. 72*523fa7a6SAndroid Build Coastguard Worker ${EXECUTORCH_ROOT}/backends/vulkan/third-party/Vulkan-Headers/include 73*523fa7a6SAndroid Build Coastguard Worker ${EXECUTORCH_ROOT}/backends/vulkan/third-party/volk 74*523fa7a6SAndroid Build Coastguard Worker ) 75*523fa7a6SAndroid Build Coastguard Worker target_link_libraries(${library_name} vulkan_backend) 76*523fa7a6SAndroid Build Coastguard Worker target_compile_options(${library_name} PRIVATE ${VULKAN_CXX_FLAGS}) 77*523fa7a6SAndroid Build Coastguard Worker # Link this library with --whole-archive due to dynamic shader registrations 78*523fa7a6SAndroid Build Coastguard Worker target_link_options_shared_lib(${library_name}) 79*523fa7a6SAndroid Build Coastguard Workerendfunction() 80*523fa7a6SAndroid Build Coastguard Worker 81*523fa7a6SAndroid Build Coastguard Worker# Convenience macro to generate a SPIR-V shader library target. Given the path 82*523fa7a6SAndroid Build Coastguard Worker# to the shaders to compile and the name of the library, it will create a static 83*523fa7a6SAndroid Build Coastguard Worker# library containing the generated SPIR-V shaders. The generated_spv_cpp 84*523fa7a6SAndroid Build Coastguard Worker# variable can be used to reference the generated CPP file outside the macro. 85*523fa7a6SAndroid Build Coastguard Workermacro(vulkan_shader_library shaders_path library_name) 86*523fa7a6SAndroid Build Coastguard Worker set(VULKAN_SHADERGEN_ENV "") 87*523fa7a6SAndroid Build Coastguard Worker set(VULKAN_SHADERGEN_OUT_PATH ${CMAKE_BINARY_DIR}/${library_name}) 88*523fa7a6SAndroid Build Coastguard Worker 89*523fa7a6SAndroid Build Coastguard Worker # execute_process( COMMAND "${PYTHON_EXECUTABLE}" 90*523fa7a6SAndroid Build Coastguard Worker # ${EXECUTORCH_ROOT}/backends/vulkan/runtime/gen_vulkan_spv.py --glsl-path 91*523fa7a6SAndroid Build Coastguard Worker # ${shaders_path} --output-path ${VULKAN_SHADERGEN_OUT_PATH} 92*523fa7a6SAndroid Build Coastguard Worker # --glslc-path=${GLSLC_PATH} --tmp-dir-path=${VULKAN_SHADERGEN_OUT_PATH} --env 93*523fa7a6SAndroid Build Coastguard Worker # ${VULKAN_GEN_ARG_ENV} RESULT_VARIABLE error_code ) set(ENV{PYTHONPATH} 94*523fa7a6SAndroid Build Coastguard Worker # ${PYTHONPATH}) 95*523fa7a6SAndroid Build Coastguard Worker 96*523fa7a6SAndroid Build Coastguard Worker set(generated_spv_cpp ${VULKAN_SHADERGEN_OUT_PATH}/spv.cpp) 97*523fa7a6SAndroid Build Coastguard Worker 98*523fa7a6SAndroid Build Coastguard Worker add_library(${library_name} STATIC ${generated_spv_cpp}) 99*523fa7a6SAndroid Build Coastguard Worker target_include_directories( 100*523fa7a6SAndroid Build Coastguard Worker ${library_name} 101*523fa7a6SAndroid Build Coastguard Worker PRIVATE 102*523fa7a6SAndroid Build Coastguard Worker ${EXECUTORCH_ROOT}/.. 103*523fa7a6SAndroid Build Coastguard Worker ${EXECUTORCH_ROOT}/backends/vulkan/third-party/Vulkan-Headers/include 104*523fa7a6SAndroid Build Coastguard Worker ${EXECUTORCH_ROOT}/backends/vulkan/third-party/volk 105*523fa7a6SAndroid Build Coastguard Worker ) 106*523fa7a6SAndroid Build Coastguard Worker target_link_libraries(${library_name} vulkan_backend) 107*523fa7a6SAndroid Build Coastguard Worker target_compile_options(${library_name} PRIVATE ${VULKAN_CXX_FLAGS}) 108*523fa7a6SAndroid Build Coastguard Worker # Link this library with --whole-archive due to dynamic shader registrations 109*523fa7a6SAndroid Build Coastguard Worker target_link_options_shared_lib(${library_name}) 110*523fa7a6SAndroid Build Coastguard Worker 111*523fa7a6SAndroid Build Coastguard Worker unset(VULKAN_SHADERGEN_ENV) 112*523fa7a6SAndroid Build Coastguard Worker unset(VULKAN_SHADERGEN_OUT_PATH) 113*523fa7a6SAndroid Build Coastguard Workerendmacro() 114