1# Copyright (c) Meta Platforms, Inc. and affiliates. 2# All rights reserved. 3# 4# This source code is licensed under the BSD-style license found in the 5# LICENSE file in the root directory of this source tree. 6 7# ### Editing this file ### 8# 9# This file should be formatted with 10# ~~~ 11# cmake-format -i CMakeLists.txt 12# ~~~ 13# It should also be cmake-lint clean. 14# 15# The targets in this file will be built if EXECUTORCH_BUILD_VULKAN is ON 16 17cmake_minimum_required(VERSION 3.19) 18project(executorch) 19 20find_package(executorch CONFIG REQUIRED COMPONENTS vulkan_backend) 21find_package(GTest CONFIG REQUIRED) 22 23# Only build tests if Vulkan was compiled 24find_library(LIB_VULKAN_BACKEND vulkan_backend) 25 26if(LIB_VULKAN_BACKEND) 27 28 if(NOT EXECUTORCH_ROOT) 29 set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) 30 endif() 31 32 if(NOT PYTHON_EXECUTABLE) 33 set(PYTHON_EXECUTABLE python3) 34 endif() 35 36 # Include this file to access target_link_options_shared_lib This is required 37 # to provide access to target_link_options_shared_lib which allows libraries 38 # to be linked with the --whole-archive flag. This is required for libraries 39 # that perform dynamic registration via static initialization. 40 include(${EXECUTORCH_ROOT}/build/Utils.cmake) 41 42 include(../cmake/ShaderLibrary.cmake) 43 44 # Third party include paths 45 46 set(VULKAN_THIRD_PARTY_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../third-party) 47 48 set(GTEST_INCLUDE_PATH 49 ${EXECUTORCH_ROOT}/third-party/googletest/googletest/include set 50 (PYTORCH_PATH ${EXECUTORCH_ROOT}/third-party/pytorch) 51 ) 52 set(VULKAN_HEADERS_PATH ${VULKAN_THIRD_PARTY_PATH}/Vulkan-Headers/include) 53 set(VOLK_PATH ${VULKAN_THIRD_PARTY_PATH}/volk) 54 set(VMA_PATH ${VULKAN_THIRD_PARTY_PATH}/VulkanMemoryAllocator) 55 56 set(COMMON_INCLUDES ${EXECUTORCH_ROOT}/.. ${VULKAN_HEADERS_PATH} ${VOLK_PATH} 57 ${VMA_PATH} ${GTEST_INCLUDE_PATH} ${PYTORCH_PATH} 58 ) 59 60 # Test Utility files 61 62 set(TEST_UTILS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/utils) 63 file(GLOB TEST_UTILS_CPP ${CMAKE_CURRENT_SOURCE_DIR}/utils/*.cpp) 64 65 # Test shaders 66 67 set(TEST_SHADERS_PATH ${CMAKE_CURRENT_SOURCE_DIR}/glsl) 68 gen_vulkan_shader_lib_cpp(${TEST_SHADERS_PATH}) 69 vulkan_shader_lib(test_shaderlib ${generated_spv_cpp}) 70 71 # API Test binary 72 73 set(COMPUTE_API_TEST_CPP 74 ${CMAKE_CURRENT_SOURCE_DIR}/vulkan_compute_api_test.cpp 75 ) 76 77 target_link_options_shared_lib(vulkan_backend) 78 79 add_executable( 80 vulkan_compute_api_test ${COMPUTE_API_TEST_CPP} ${TEST_UTILS_CPP} 81 ) 82 target_include_directories(vulkan_compute_api_test PRIVATE ${COMMON_INCLUDES}) 83 target_link_libraries( 84 vulkan_compute_api_test PRIVATE GTest::gtest_main vulkan_backend executorch 85 test_shaderlib 86 ) 87 target_compile_options(vulkan_compute_api_test PRIVATE ${VULKAN_CXX_FLAGS}) 88 89 set_property(TARGET vulkan_compute_api_test PROPERTY CXX_STANDARD 17) 90 91endif() 92