Skip to content

Commit 1343224

Browse files
SS-JIAfacebook-github-bot
authored andcommitted
Fix OSS build + separate test build into its own CMakeLists.txt (#3724)
Summary: Pull Request resolved: #3724 ## Context As title. In the next diff, the vulkan test binary will be added to CI. imported-using-ghimport Test Plan: Imported from OSS Reviewed By: kirklandsign Differential Revision: D57747739 Pulled By: SS-JIA fbshipit-source-id: 0829abb08849d5349751c63d2c0c5a5dc39ca553
1 parent 377c750 commit 1343224

File tree

8 files changed

+178
-63
lines changed

8 files changed

+178
-63
lines changed

backends/vulkan/CMakeLists.txt

Lines changed: 14 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -40,52 +40,43 @@ include(${EXECUTORCH_ROOT}/build/Utils.cmake)
4040

4141
include(cmake/ShaderLibrary.cmake)
4242

43-
# Third party libs
43+
# Third party include paths
4444

4545
set(VULKAN_THIRD_PARTY_PATH ${CMAKE_CURRENT_SOURCE_DIR}/third-party)
4646

4747
set(VULKAN_HEADERS_PATH ${VULKAN_THIRD_PARTY_PATH}/Vulkan-Headers/include)
4848
set(VOLK_PATH ${VULKAN_THIRD_PARTY_PATH}/volk)
4949
set(VMA_PATH ${VULKAN_THIRD_PARTY_PATH}/VulkanMemoryAllocator)
5050

51+
set(COMMON_INCLUDES ${EXECUTORCH_ROOT}/.. ${VULKAN_HEADERS_PATH} ${VOLK_PATH}
52+
${VMA_PATH}
53+
)
54+
5155
# Compile settings
5256

5357
set(VULKAN_CXX_FLAGS "")
5458
list(APPEND VULKAN_CXX_FLAGS "-DUSE_VULKAN_WRAPPER")
5559
list(APPEND VULKAN_CXX_FLAGS "-DUSE_VULKAN_VOLK")
5660

57-
# Vulkan Compute API
61+
# vulkan API files
5862

59-
file(GLOB vulkan_api_cpp ${RUNTIME_PATH}/api/*.cpp)
63+
file(GLOB_RECURSE vulkan_api_cpp ${RUNTIME_PATH}/api/*)
6064
list(APPEND vulkan_api_cpp ${VOLK_PATH}/volk.c)
6165

62-
set(COMMON_INCLUDES ${EXECUTORCH_ROOT}/.. ${VULKAN_HEADERS_PATH} ${VOLK_PATH}
63-
${VMA_PATH}
64-
)
65-
66-
# vulkan_graph_lib
66+
# vulkan ComputeGraph files
6767

6868
file(GLOB_RECURSE vulkan_graph_cpp ${RUNTIME_PATH}/graph/*)
6969
list(APPEND vulkan_graph_cpp ${vulkan_api_cpp})
7070

71-
add_library(vulkan_graph_lib STATIC ${vulkan_graph_cpp})
72-
target_include_directories(vulkan_graph_lib PRIVATE ${COMMON_INCLUDES})
73-
target_compile_options(vulkan_graph_lib PRIVATE ${VULKAN_CXX_FLAGS})
74-
# Link this library with --whole-archive due to dynamic operator registrations
75-
target_link_options_shared_lib(vulkan_graph_lib)
76-
77-
# vulkan_standard_shaders
71+
# Standard GLSL shader library
7872

7973
set(VULKAN_GRAPH_SHADERS_PATH ${RUNTIME_PATH}/graph/ops/glsl/)
80-
# Declares a vulkan_standard_shaders library containing compiled SPIR-V shaders
81-
# from the above path
82-
vulkan_shader_library(${VULKAN_GRAPH_SHADERS_PATH} vulkan_standard_shaders)
83-
# preserve the path of the generated cpp file
84-
set(vulkan_standard_shaders_cpp
85-
${CMAKE_BINARY_DIR}/vulkan_standard_shaders/spv.cpp
86-
)
74+
# Generates a spv.cpp file containing compiled GLSL shaders
75+
gen_vulkan_shader_lib_cpp(${VULKAN_GRAPH_SHADERS_PATH})
76+
# Save the path of the generated cpp file
77+
set(vulkan_standard_shaders_cpp ${generated_spv_cpp})
8778

88-
# Generate Files from flatc
79+
# Generate Vulkan Delegate Schema Files from flatc
8980

9081
set(SCHEMA_INCLUDE_DIR ${CMAKE_BINARY_DIR}/schema/include)
9182

@@ -151,31 +142,6 @@ endif()
151142

152143
# Test targets
153144

154-
if(EXECUTORCH_BUILD_GTESTS)
155-
set(TEST_UTILS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/test/utils)
156-
file(GLOB TEST_UTILS_CPP ${CMAKE_CURRENT_SOURCE_DIR}/test/utils/*.cpp)
157-
158-
set(TEST_SHADERS_PATH ${CMAKE_CURRENT_SOURCE_DIR}/test/glsl)
159-
vulkan_shader_library(${TEST_SHADERS_PATH} test_shaderlib)
160-
161-
# vulkan_compute_api_test
162-
set(COMPUTE_API_TEST_CPP
163-
${CMAKE_CURRENT_SOURCE_DIR}/test/vulkan_compute_api_test.cpp
164-
)
165-
166-
add_executable(
167-
vulkan_compute_api_test ${COMPUTE_API_TEST_CPP} ${TEST_UTILS_CPP}
168-
)
169-
target_include_directories(
170-
vulkan_compute_api_test PRIVATE ${COMMON_INCLUDES} ${TEST_UTILS_HEADERS}
171-
)
172-
target_link_libraries(
173-
vulkan_compute_api_test PRIVATE gtest_main vulkan_graph_lib
174-
vulkan_standard_shaders test_shaderlib
175-
)
176-
target_compile_options(vulkan_compute_api_test PRIVATE ${VULKAN_CXX_FLAGS})
177-
endif()
178-
179145
install(
180146
TARGETS vulkan_backend
181147
DESTINATION lib

backends/vulkan/cmake/ShaderLibrary.cmake

Lines changed: 58 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@
1414
#
1515
# The targets in this file will be built if EXECUTORCH_BUILD_VULKAN is ON
1616

17+
if(NOT PYTHON_EXECUTABLE)
18+
message(
19+
"WARNING: PYTHON_EXECUTABLE is not set! A failure is likely imminent."
20+
)
21+
endif()
22+
23+
if(NOT EXECUTORCH_ROOT)
24+
message("WARNING: EXECUTORCH_ROOT is not set! A failure is likely imminent.")
25+
endif()
26+
1727
if(ANDROID)
1828
if(NOT ANDROID_NDK)
1929
message(FATAL_ERROR "ANDROID_NDK not set")
@@ -37,30 +47,67 @@ endif()
3747
# Required to enable linking with --whole-archive
3848
include(${EXECUTORCH_ROOT}/build/Utils.cmake)
3949

40-
# Convenience macro to generate a SPIR-V shader library target. Given the path
41-
# to the shaders to compile and the name of the library, it will create a static
42-
# library containing the generated SPIR-V shaders. The generated_spv_cpp
43-
# variable can be used to reference the generated CPP file outside the macro.
44-
macro(VULKAN_SHADER_LIBRARY shaders_path library_name)
50+
function(gen_vulkan_shader_lib_cpp shaders_path)
4551
set(VULKAN_SHADERGEN_ENV "")
46-
set(VULKAN_SHADERGEN_OUT_PATH ${CMAKE_BINARY_DIR}/${library_name})
52+
set(VULKAN_SHADERGEN_OUT_PATH ${CMAKE_BINARY_DIR}/${ARGV1})
4753

4854
execute_process(
4955
COMMAND
5056
"${PYTHON_EXECUTABLE}"
51-
${CMAKE_CURRENT_SOURCE_DIR}/runtime/api/gen_vulkan_spv.py --glsl-path
52-
${shaders_path} --output-path ${VULKAN_SHADERGEN_OUT_PATH}
57+
${EXECUTORCH_ROOT}/backends/vulkan/runtime/api/gen_vulkan_spv.py
58+
--glsl-path ${shaders_path} --output-path ${VULKAN_SHADERGEN_OUT_PATH}
5359
--glslc-path=${GLSLC_PATH} --tmp-dir-path=${VULKAN_SHADERGEN_OUT_PATH}
5460
--env ${VULKAN_GEN_ARG_ENV}
5561
RESULT_VARIABLE error_code
5662
)
57-
set(ENV{PYTHONPATH} ${PYTHONPATH})
63+
64+
set(generated_spv_cpp
65+
${VULKAN_SHADERGEN_OUT_PATH}/spv.cpp
66+
PARENT_SCOPE
67+
)
68+
endfunction()
69+
70+
function(vulkan_shader_lib library_name generated_spv_cpp)
71+
add_library(${library_name} STATIC ${generated_spv_cpp})
72+
target_include_directories(
73+
${library_name}
74+
PRIVATE
75+
${EXECUTORCH_ROOT}/..
76+
${EXECUTORCH_ROOT}/backends/vulkan/third-party/Vulkan-Headers/include
77+
${EXECUTORCH_ROOT}/backends/vulkan/third-party/volk
78+
)
79+
target_link_libraries(${library_name} vulkan_backend)
80+
target_compile_options(${library_name} PRIVATE ${VULKAN_CXX_FLAGS})
81+
# Link this library with --whole-archive due to dynamic shader registrations
82+
target_link_options_shared_lib(${library_name})
83+
endfunction()
84+
85+
# Convenience macro to generate a SPIR-V shader library target. Given the path
86+
# to the shaders to compile and the name of the library, it will create a static
87+
# library containing the generated SPIR-V shaders. The generated_spv_cpp
88+
# variable can be used to reference the generated CPP file outside the macro.
89+
macro(vulkan_shader_library shaders_path library_name)
90+
set(VULKAN_SHADERGEN_ENV "")
91+
set(VULKAN_SHADERGEN_OUT_PATH ${CMAKE_BINARY_DIR}/${library_name})
92+
93+
# execute_process( COMMAND "${PYTHON_EXECUTABLE}"
94+
# ${EXECUTORCH_ROOT}/backends/vulkan/runtime/api/gen_vulkan_spv.py --glsl-path
95+
# ${shaders_path} --output-path ${VULKAN_SHADERGEN_OUT_PATH}
96+
# --glslc-path=${GLSLC_PATH} --tmp-dir-path=${VULKAN_SHADERGEN_OUT_PATH} --env
97+
# ${VULKAN_GEN_ARG_ENV} RESULT_VARIABLE error_code ) set(ENV{PYTHONPATH}
98+
# ${PYTHONPATH})
5899

59100
set(generated_spv_cpp ${VULKAN_SHADERGEN_OUT_PATH}/spv.cpp)
60101

61102
add_library(${library_name} STATIC ${generated_spv_cpp})
62-
target_include_directories(${library_name} PRIVATE ${COMMON_INCLUDES})
63-
target_link_libraries(${library_name} vulkan_graph_lib)
103+
target_include_directories(
104+
${library_name}
105+
PRIVATE
106+
${EXECUTORCH_ROOT}/..
107+
${EXECUTORCH_ROOT}/backends/vulkan/third-party/Vulkan-Headers/include
108+
${EXECUTORCH_ROOT}/backends/vulkan/third-party/volk
109+
)
110+
target_link_libraries(${library_name} vulkan_backend)
64111
target_compile_options(${library_name} PRIVATE ${VULKAN_CXX_FLAGS})
65112
# Link this library with --whole-archive due to dynamic shader registrations
66113
target_link_options_shared_lib(${library_name})

backends/vulkan/runtime/api/Pipeline.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,10 @@ bool operator==(const SpecVar& lhs, const SpecVar& rhs) {
159159
return false;
160160
}
161161

162+
bool operator!=(const SpecVar& lhs, const SpecVar& rhs) {
163+
return !(lhs == rhs);
164+
}
165+
162166
SpecVarList::SpecVarList() {}
163167

164168
SpecVarList::SpecVarList(std::initializer_list<SpecVar> init_list) {

backends/vulkan/runtime/api/Pipeline.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ struct SpecVar final {
5555

5656
bool operator==(const SpecVar& lhs, const SpecVar& rhs);
5757

58+
bool operator!=(const SpecVar& lhs, const SpecVar& rhs);
59+
5860
class SpecVarList final {
5961
std::vector<SpecVar> vars;
6062

backends/vulkan/test/CMakeLists.txt

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
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+
17+
cmake_minimum_required(VERSION 3.19)
18+
project(executorch)
19+
20+
find_package(executorch CONFIG REQUIRED COMPONENTS vulkan_backend)
21+
find_package(GTest CONFIG REQUIRED)
22+
23+
# Only build tests if Vulkan was compiled
24+
find_library(LIB_VULKAN_BACKEND vulkan_backend)
25+
26+
if(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 to
37+
# provide access to target_link_options_shared_lib which allows libraries to be
38+
# linked with the --whole-archive flag. This is required for libraries that
39+
# 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+
endif()

backends/vulkan/test/vulkan_compute_api_test.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <utility>
1212
#include <vector>
1313

14-
#include <c10/util/Half.h>
14+
#include <executorch/runtime/core/portable_type/half.h>
1515

1616
#include <executorch/backends/vulkan/runtime/api/api.h>
1717

@@ -120,6 +120,7 @@ std::vector<int64_t> get_reference_strides(
120120
return {};
121121
}
122122
}
123+
return {};
123124
}
124125

125126
TEST_F(VulkanComputeAPITest, calculate_tensor_strides_test) {
@@ -347,7 +348,7 @@ TEST_F(VulkanComputeAPITest, test_buffer_float16) {
347348
if (!api::context()->adapter_ptr()->has_full_float16_buffers_support()) {
348349
GTEST_SKIP();
349350
}
350-
test_storage_buffer_type<c10::Half, api::kHalf>(16);
351+
test_storage_buffer_type<torch::executor::Half, api::kHalf>(16);
351352
}
352353

353354
TEST_F(VulkanComputeAPITest, test_buffer_int8) {
@@ -1628,7 +1629,7 @@ TEST(VulkanToFromGPUShaderTest, to_gpu_and_from_gpu_test_texture) {
16281629

16291630
for (auto& sizes : to_test) {
16301631
RUN_TESTS(float, api::kFloat)
1631-
RUN_TESTS(c10::Half, api::kHalf)
1632+
RUN_TESTS(torch::executor::Half, api::kHalf)
16321633
}
16331634
#undef RUN_TESTS
16341635
}

runtime/core/portable_type/targets.bzl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def define_common_targets():
2424
# Only should be depended on by kernel_types:kernel_types, but various suffixes like Android and Static
2525
# mean I cant just expose visibility to a single rule.
2626
visibility = [
27+
"//executorch/backends/...",
2728
"//executorch/runtime/core/exec_aten/...",
2829
"//executorch/runtime/core/portable_type/test/...",
2930
],

test/run_oss_cpp_tests.sh

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@ build_and_run_test() {
2727
local test_dir=$1
2828
cmake "${test_dir}" -Bcmake-out/"${test_dir}" -DCMAKE_INSTALL_PREFIX=cmake-out
2929
cmake --build cmake-out/"${test_dir}" -j9
30-
for t in cmake-out/"${test_dir}"/*test; do ./"$t"; done
30+
31+
for t in cmake-out/"${test_dir}"/*test; do
32+
if [ -e "$t" ]; then
33+
./"$t";
34+
fi
35+
done
3136
}
3237

3338
probe_tests() {

0 commit comments

Comments
 (0)