diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b242b1ded..3e1df22bc8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -200,8 +200,6 @@ option(EXECUTORCH_BUILD_EXTENSION_TENSOR "Build the Tensor extension" OFF) option(EXECUTORCH_BUILD_EXTENSION_TRAINING "Build the training extension" OFF) -option(EXECUTORCH_BUILD_GTESTS "Build googletest based test binaries" OFF) - option(EXECUTORCH_BUILD_MPS "Build the MPS backend" OFF) option(EXECUTORCH_BUILD_NEURON "Build the backends/mediatek directory" OFF) @@ -216,6 +214,8 @@ option(EXECUTORCH_BUILD_KERNELS_QUANTIZED "Build the quantized kernels" OFF) option(EXECUTORCH_BUILD_DEVTOOLS "Build the ExecuTorch Developer Tools") +option(EXECUTORCH_BUILD_TESTS "Build CMake-based unit tests" OFF) + option(EXECUTORCH_NNLIB_OPT "Build Cadence backend Hifi nnlib kernel" OFF) option(EXECUTORCH_CADENCE_CPU_RUNNER "Build Cadence backend CPU runner" OFF) @@ -330,6 +330,10 @@ if(EXECUTORCH_BUILD_PTHREADPOOL) ) endif() +if(EXECUTORCH_BUILD_TESTS) + include(CTest) +endif() + if(NOT PYTHON_EXECUTABLE) resolve_python_executable() endif() @@ -625,7 +629,7 @@ cmake_dependent_option( ) # Add googletest if any test targets should be built -if(EXECUTORCH_BUILD_GTESTS) +if(BUILD_TESTING) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third-party/googletest) endif() @@ -829,5 +833,7 @@ if(EXECUTORCH_BUILD_VULKAN) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/backends/vulkan) endif() +include(Test.cmake) + # Print all summary executorch_print_configuration_summary() diff --git a/Test.cmake b/Test.cmake new file mode 100644 index 0000000000..d4b5f6aa1d --- /dev/null +++ b/Test.cmake @@ -0,0 +1,29 @@ +# 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. + +# +# A helper CMake file to trigger C++ unit tests. +# + +if(BUILD_TESTING) + # This contains the list of tests which are always built + add_subdirectory(extension/evalue_util/test) + add_subdirectory(extension/kernel_util/test) + add_subdirectory(extension/memory_allocator/test) + add_subdirectory(extension/parallel/test) + add_subdirectory(extension/pytree/test) + add_subdirectory(kernels/portable/cpu/util/test) + add_subdirectory(kernels/prim_ops/test) + add_subdirectory(kernels/test) + add_subdirectory(runtime/core/exec_aten/testing_util/test) + add_subdirectory(runtime/core/exec_aten/util/test) + add_subdirectory(runtime/core/portable_type/test) + add_subdirectory(runtime/core/test) + add_subdirectory(runtime/executor/test) + add_subdirectory(runtime/kernel/test) + add_subdirectory(runtime/platform/test) + add_subdirectory(test/utils) +endif() diff --git a/backends/xnnpack/CMakeLists.txt b/backends/xnnpack/CMakeLists.txt index 002d351155..ed8cf8d8e1 100644 --- a/backends/xnnpack/CMakeLists.txt +++ b/backends/xnnpack/CMakeLists.txt @@ -140,3 +140,7 @@ install( INCLUDES DESTINATION ${_common_include_directories} ) + +if(BUILD_TESTING) + add_subdirectory(test) +endif() diff --git a/backends/xnnpack/test/CMakeLists.txt b/backends/xnnpack/test/CMakeLists.txt index 077b963540..0874775774 100644 --- a/backends/xnnpack/test/CMakeLists.txt +++ b/backends/xnnpack/test/CMakeLists.txt @@ -12,20 +12,13 @@ # cmake_minimum_required(VERSION 3.19) -project(backends_xnnpack_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) include(${EXECUTORCH_ROOT}/build/Test.cmake) -set(_test_srcs # We can't put runtime/test_runtime_utils.cpp because we don't - # build aten +set(_test_srcs runtime/test_xnnexecutor.cpp - ${EXECUTORCH_ROOT}/extension/threadpool/threadpool.cpp - ${EXECUTORCH_ROOT}/extension/threadpool/threadpool_guard.cpp ${EXECUTORCH_ROOT}/extension/threadpool/test/threadpool_test.cpp ) diff --git a/build/Test.cmake b/build/Test.cmake index d6ef124793..31e5aaf4d6 100644 --- a/build/Test.cmake +++ b/build/Test.cmake @@ -17,38 +17,6 @@ # It should also be cmake-lint clean. # -include(${EXECUTORCH_ROOT}/build/Utils.cmake) - -# Find prebuilt executorch library -find_package(executorch CONFIG REQUIRED) - -enable_testing() -find_package(GTest CONFIG REQUIRED) - -target_link_options_shared_lib(cpuinfo) -target_link_options_shared_lib(extension_data_loader) -target_link_options_shared_lib(portable_kernels) -target_link_options_shared_lib(portable_ops_lib) -target_link_options_shared_lib(pthreadpool) -target_link_options_shared_lib(quantized_ops_lib) - -# Add code coverage flags to supported compilers -if(EXECUTORCH_USE_CPP_CODE_COVERAGE) - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - string(APPEND CMAKE_C_FLAGS " --coverage -fprofile-abs-path") - string(APPEND CMAKE_CXX_FLAGS " --coverage -fprofile-abs-path") - elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - string(APPEND CMAKE_C_FLAGS " -fprofile-instr-generate -fcoverage-mapping") - string(APPEND CMAKE_CXX_FLAGS - " -fprofile-instr-generate -fcoverage-mapping" - ) - else() - message(ERROR - "Code coverage for compiler ${CMAKE_CXX_COMPILER_ID} is unsupported" - ) - endif() -endif() - # A helper function to generate a gtest cxx executable target @param # target_name: name for the executable @param SOURCES : test # sources to be compiled. Sometimes util sources are used as well @param EXTRA @@ -67,24 +35,14 @@ function(et_cxx_test target_name) set(multi_arg_names SOURCES EXTRA_LIBS) cmake_parse_arguments(ET_CXX_TEST "" "" "${multi_arg_names}" ${ARGN}) - # Let files say "include ". - target_include_directories(executorch INTERFACE ${EXECUTORCH_ROOT}/..) - - set(ET_TEST_UTIL_SOURCES - ${EXECUTORCH_ROOT}/runtime/core/exec_aten/testing_util/tensor_util.cpp - ) - - add_executable(${target_name} ${ET_CXX_TEST_SOURCES} ${ET_TEST_UTIL_SOURCES}) + add_executable(${target_name} ${ET_CXX_TEST_SOURCES} ${EXECUTORCH_ROOT}/runtime/core/exec_aten/testing_util/tensor_util.cpp) # Includes gtest, gmock, executorch by default target_link_libraries( ${target_name} GTest::gtest GTest::gtest_main GTest::gmock executorch ${ET_CXX_TEST_EXTRA_LIBS} ) - # add_test adds a test target to be used by ctest. We use `ExecuTorchTest` as - # the ctest target name for the test executable Usage: cd - # cmake-out/path/to/test/; ctest Note: currently we directly invoke the test - # target, without using ctest - add_test(ExecuTorchTest ${target_name}) + # add_test adds a test target to be used by ctest + add_test(NAME ${target_name} COMMAND ${target_name}) endfunction() diff --git a/devtools/CMakeLists.txt b/devtools/CMakeLists.txt index d814f44b3a..df4bacb802 100644 --- a/devtools/CMakeLists.txt +++ b/devtools/CMakeLists.txt @@ -218,3 +218,8 @@ install( INCLUDES DESTINATION ${_common_include_directories} ) + +if(BUILD_TESTING) + # TODO: This is currently not working! + # add_subdirectory(etdump/tests) +endif() diff --git a/devtools/etdump/tests/CMakeLists.txt b/devtools/etdump/tests/CMakeLists.txt index 1995088057..f8f19ed8d6 100644 --- a/devtools/etdump/tests/CMakeLists.txt +++ b/devtools/etdump/tests/CMakeLists.txt @@ -12,10 +12,6 @@ # cmake_minimum_required(VERSION 3.19) -project(sdk_etdump_tests) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) @@ -30,7 +26,7 @@ et_cxx_test( EXTRA_LIBS bundled_program etdump - flatccrt_d + flatccrt ) target_include_directories( sdk_etdump_tests PRIVATE ${CMAKE_INSTALL_PREFIX}/sdk/include diff --git a/examples/models/llama/tokenizer/test/CMakeLists.txt b/examples/models/llama/tokenizer/test/CMakeLists.txt index 12b046adcc..3ed57406b2 100644 --- a/examples/models/llama/tokenizer/test/CMakeLists.txt +++ b/examples/models/llama/tokenizer/test/CMakeLists.txt @@ -12,10 +12,6 @@ # cmake_minimum_required(VERSION 3.19) -project(tokenizer_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../../..) diff --git a/extension/data_loader/CMakeLists.txt b/extension/data_loader/CMakeLists.txt index c9503e78e2..0af3fbcc16 100644 --- a/extension/data_loader/CMakeLists.txt +++ b/extension/data_loader/CMakeLists.txt @@ -29,3 +29,7 @@ install( INCLUDES DESTINATION ${_common_include_directories} ) + +if(BUILD_TESTING) + add_subdirectory(test) +endif() diff --git a/extension/data_loader/test/CMakeLists.txt b/extension/data_loader/test/CMakeLists.txt index aac2b1978f..1ce1d5b15f 100644 --- a/extension/data_loader/test/CMakeLists.txt +++ b/extension/data_loader/test/CMakeLists.txt @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project(extension_data_loader_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) diff --git a/extension/evalue_util/test/CMakeLists.txt b/extension/evalue_util/test/CMakeLists.txt index f14383ed63..fe92778dda 100644 --- a/extension/evalue_util/test/CMakeLists.txt +++ b/extension/evalue_util/test/CMakeLists.txt @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project(extension_evalue_util_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) diff --git a/extension/kernel_util/test/CMakeLists.txt b/extension/kernel_util/test/CMakeLists.txt index 1d960062be..ee86c41d23 100644 --- a/extension/kernel_util/test/CMakeLists.txt +++ b/extension/kernel_util/test/CMakeLists.txt @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project(extension_kernel_util_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) diff --git a/extension/memory_allocator/test/CMakeLists.txt b/extension/memory_allocator/test/CMakeLists.txt index 625cdb9e6c..4153d76ffa 100644 --- a/extension/memory_allocator/test/CMakeLists.txt +++ b/extension/memory_allocator/test/CMakeLists.txt @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project(extension_memory_allocator_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) diff --git a/extension/module/CMakeLists.txt b/extension/module/CMakeLists.txt index 7d6c2485ee..70441265c6 100644 --- a/extension/module/CMakeLists.txt +++ b/extension/module/CMakeLists.txt @@ -51,3 +51,7 @@ install( INCLUDES DESTINATION ${_common_include_directories} ) + +if(BUILD_TESTING) + add_subdirectory(test) +endif() diff --git a/extension/module/test/CMakeLists.txt b/extension/module/test/CMakeLists.txt index ff8a5ee904..dbd0bccbda 100644 --- a/extension/module/test/CMakeLists.txt +++ b/extension/module/test/CMakeLists.txt @@ -4,8 +4,6 @@ # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. -# @generated by test/utils/generate_gtest_cmakelists.py -# # This file should be formatted with # ~~~ # cmake-format -i CMakeLists.txt @@ -14,10 +12,6 @@ # cmake_minimum_required(VERSION 3.19) -project(extension_module_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) @@ -36,3 +30,11 @@ et_cxx_test( portable_kernels portable_ops_lib ) + +set(test_env "RESOURCES_PATH=${EXECUTORCH_ROOT}/extension/module/test/resources") + +set_property( + TEST extension_module_test + PROPERTY ENVIRONMENT + "${test_env}" +) diff --git a/extension/pytree/test/CMakeLists.txt b/extension/pytree/test/CMakeLists.txt index 5411662635..a1514bc728 100644 --- a/extension/pytree/test/CMakeLists.txt +++ b/extension/pytree/test/CMakeLists.txt @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project(extension_pytree_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) diff --git a/extension/runner_util/CMakeLists.txt b/extension/runner_util/CMakeLists.txt index 66e03d3bcb..19aa884fd7 100644 --- a/extension/runner_util/CMakeLists.txt +++ b/extension/runner_util/CMakeLists.txt @@ -29,3 +29,7 @@ install( INCLUDES DESTINATION ${_common_include_directories} ) + +if(BUILD_TESTING) + add_subdirectory(test) +endif() diff --git a/extension/runner_util/test/CMakeLists.txt b/extension/runner_util/test/CMakeLists.txt index aefb3b0417..f42eeb5f24 100644 --- a/extension/runner_util/test/CMakeLists.txt +++ b/extension/runner_util/test/CMakeLists.txt @@ -4,8 +4,6 @@ # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. -# @generated by test/utils/generate_gtest_cmakelists.py -# # This file should be formatted with # ~~~ # cmake-format -i CMakeLists.txt @@ -14,10 +12,6 @@ # cmake_minimum_required(VERSION 3.19) -project(extension_runner_util_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) @@ -35,3 +29,7 @@ et_cxx_test( portable_kernels portable_ops_lib ) +set_property( + TEST extension_runner_util_test + PROPERTY ENVIRONMENT "ET_MODULE_ADD_PATH=${CMAKE_BINARY_DIR}/ModuleAdd.pte" +) diff --git a/extension/tensor/CMakeLists.txt b/extension/tensor/CMakeLists.txt index 31ee1b7fd4..51f955570d 100644 --- a/extension/tensor/CMakeLists.txt +++ b/extension/tensor/CMakeLists.txt @@ -29,3 +29,7 @@ install( INCLUDES DESTINATION ${_common_include_directories} ) + +if(BUILD_TESTING) + add_subdirectory(test) +endif() diff --git a/extension/tensor/test/CMakeLists.txt b/extension/tensor/test/CMakeLists.txt index 5c04664199..c6c3009be6 100644 --- a/extension/tensor/test/CMakeLists.txt +++ b/extension/tensor/test/CMakeLists.txt @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project(extension_tensor_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) diff --git a/kernels/portable/cpu/util/test/CMakeLists.txt b/kernels/portable/cpu/util/test/CMakeLists.txt index 7edb9cf458..5f81e4b6ae 100644 --- a/kernels/portable/cpu/util/test/CMakeLists.txt +++ b/kernels/portable/cpu/util/test/CMakeLists.txt @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project(kernels_portable_cpu_util_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../../..) diff --git a/kernels/portable/test/CMakeLists.txt b/kernels/portable/test/CMakeLists.txt deleted file mode 100644 index dbee126616..0000000000 --- a/kernels/portable/test/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -# 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. - -# This file should be formatted with -# ~~~ -# cmake-format -i CMakeLists.txt -# ~~~ -# It should also be cmake-lint clean. -# -# This file builds portable-specific tests - -cmake_minimum_required(VERSION 3.19) -project(kernels_portable_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) - -set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) - -include(${EXECUTORCH_ROOT}/build/Test.cmake) - -set(_kernels_portable_test_sources - # So far we can't generate custom_ops.yaml in OSS so we can't build op - # library with op_allclose. We disable the test for now. - # "op_allclose_test.cpp" - "op_div_test.cpp" "op_gelu_test.cpp" "op_mul_test.cpp" -) - -et_cxx_test( - kernels_portable_test SOURCES ${_kernels_portable_test_sources} EXTRA_LIBS - portable_kernels portable_ops_lib -) -target_include_directories( - kernels_portable_test PRIVATE "${CMAKE_INSTALL_PREFIX}/include" -) diff --git a/kernels/prim_ops/test/CMakeLists.txt b/kernels/prim_ops/test/CMakeLists.txt index a25e15acc4..46588c7b43 100644 --- a/kernels/prim_ops/test/CMakeLists.txt +++ b/kernels/prim_ops/test/CMakeLists.txt @@ -13,17 +13,11 @@ # cmake_minimum_required(VERSION 3.19) -project(prim_ops_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) include(${EXECUTORCH_ROOT}/build/Test.cmake) -target_link_options_shared_lib(executorch) - set(_test_srcs prim_ops_test.cpp) et_cxx_test(kernels_prim_ops_test SOURCES ${_test_srcs}) diff --git a/kernels/quantized/test/CMakeLists.txt b/kernels/quantized/test/CMakeLists.txt deleted file mode 100644 index 9605facbf6..0000000000 --- a/kernels/quantized/test/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -# 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. - -# This file should be formatted with -# ~~~ -# cmake-format -i CMakeLists.txt -# ~~~ -# It should also be cmake-lint clean. -# - -cmake_minimum_required(VERSION 3.19) -project(kernels_quantized_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) - -set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) - -include(${EXECUTORCH_ROOT}/build/Test.cmake) - -set(_kernels_quantized_test_sources - op_add_test.cpp - op_choose_qparams_test.cpp - op_dequantize_test.cpp - op_embedding2b_test.cpp - op_embedding4b_test.cpp - op_embedding_test.cpp - op_mixed_linear_test.cpp - op_mixed_mm_test.cpp - op_quantize_test.cpp -) - -et_cxx_test( - kernels_quantized_test - SOURCES - ${_kernels_quantized_test_sources} - EXTRA_LIBS - quantized_kernels - quantized_ops_lib - portable_kernels - portable_ops_lib -) -target_include_directories( - kernels_quantized_test PRIVATE "${CMAKE_INSTALL_PREFIX}/include" -) diff --git a/kernels/test/CMakeLists.txt b/kernels/test/CMakeLists.txt index 30ea8c79ab..f1f51e73fb 100644 --- a/kernels/test/CMakeLists.txt +++ b/kernels/test/CMakeLists.txt @@ -12,17 +12,12 @@ # cmake_minimum_required(VERSION 3.19) -project(kernels_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..) include(${EXECUTORCH_ROOT}/build/Test.cmake) -set(_kernels portable optimized) - +set(_kernels portable optimized quantized) foreach(kernel ${_kernels}) set(_wrapper_dir "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/test" @@ -33,6 +28,10 @@ foreach(kernel ${_kernels}) COMMAND mkdir -p ${_wrapper_dir} COMMAND echo "#include " > "${_wrapper_path}" + DEPENDS + "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/Functions.h" + "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/NativeFunctions.h" + "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/RegisterKernels.h" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" COMMENT "Generating ${_wrapper_path}" VERBATIM @@ -54,6 +53,21 @@ foreach(kernel ${_kernels}) COMMENT "Generating ${_wrapper_dir}/supported_features.cpp and header" VERBATIM ) + + add_custom_command( + OUTPUT + "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/Functions.h" + "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/NativeFunctions.h" + "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/RegisterKernels.h" + COMMAND + mkdir -p + "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/" + COMMAND + cp + "${CMAKE_CURRENT_BINARY_DIR}/../../kernels/${kernel}/${kernel}_ops_lib/*.h" + "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/" + DEPENDS "${kernel}_ops_lib" + ) endforeach() add_custom_target( @@ -65,6 +79,9 @@ add_custom_target( "${CMAKE_CURRENT_BINARY_DIR}/include/optimized/executorch/kernels/test/FunctionHeaderWrapper.h" "${CMAKE_CURRENT_BINARY_DIR}/include/optimized/executorch/kernels/test/supported_features.h" "${CMAKE_CURRENT_BINARY_DIR}/include/optimized/executorch/kernels/test/supported_features.cpp" + "${CMAKE_CURRENT_BINARY_DIR}/include/quantized/executorch/kernels/test/FunctionHeaderWrapper.h" + "${CMAKE_CURRENT_BINARY_DIR}/include/quantized/executorch/kernels/test/supported_features.h" + "${CMAKE_CURRENT_BINARY_DIR}/include/quantized/executorch/kernels/test/supported_features.cpp" ) set(all_test_sources @@ -213,11 +230,19 @@ set(all_test_sources "op_where_test.cpp" "op_zeros_test.cpp" "UnaryUfuncRealHBBF16ToFloatHBF16Test.cpp" - ) +) + +# These requires rtti and not working so far. +list(REMOVE_ITEM all_test_sources "op_to_copy_test.cpp" + "op__to_dim_order_copy_test.cpp" +) set(_portable_kernels_test_sources ${all_test_sources} ${CMAKE_CURRENT_BINARY_DIR}/include/portable/executorch/kernels/test/supported_features.cpp + "${EXECUTORCH_ROOT}/kernels/portable/test/op_div_test.cpp" + "${EXECUTORCH_ROOT}/kernels/portable/test/op_gelu_test.cpp" + "${EXECUTORCH_ROOT}/kernels/portable/test/op_mul_test.cpp" ) et_cxx_test( @@ -227,7 +252,6 @@ et_cxx_test( add_dependencies(portable_kernels_test generate_wrapper) target_include_directories( portable_kernels_test PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/include/portable" - "${CMAKE_INSTALL_PREFIX}/include" ) set(_optimized_kernels_test_sources @@ -269,3 +293,37 @@ target_include_directories( optimized_kernels_test PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/include/optimized" "${CMAKE_INSTALL_PREFIX}/include" ) + +if(TARGET quantized_kernels) + set(_quantized_kernels_test_sources + "${EXECUTORCH_ROOT}/kernels/quantized/test/op_add_test.cpp" + "${EXECUTORCH_ROOT}/kernels/quantized/test/op_choose_qparams_test.cpp" + "${EXECUTORCH_ROOT}/kernels/quantized/test/op_embedding2b_test.cpp" + "${EXECUTORCH_ROOT}/kernels/quantized/test/op_embedding4b_test.cpp" + "${EXECUTORCH_ROOT}/kernels/quantized/test/op_embedding_test.cpp" + "${EXECUTORCH_ROOT}/kernels/quantized/test/op_mixed_linear_test.cpp" + "${EXECUTORCH_ROOT}/kernels/quantized/test/op_mixed_mm_test.cpp" + "${EXECUTORCH_ROOT}/kernels/quantized/test/op_quantize_test.cpp" + ) + + et_cxx_test( + quantized_kernels_test + SOURCES + ${_quantized_kernels_test_sources} + EXTRA_LIBS + cpuinfo + extension_threadpool + quantized_kernels + quantized_ops_lib + portable_kernels + portable_ops_lib + pthreadpool + eigen_blas + ) + add_dependencies(quantized_kernels_test generate_wrapper) + target_include_directories( + quantized_kernels_test + PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/include/quantized" + "${CMAKE_CURRENT_BINARY_DIR}/include/portable" + ) +endif() diff --git a/runtime/core/exec_aten/testing_util/test/CMakeLists.txt b/runtime/core/exec_aten/testing_util/test/CMakeLists.txt index 78e7ad6d3c..b4c4cee0e1 100644 --- a/runtime/core/exec_aten/testing_util/test/CMakeLists.txt +++ b/runtime/core/exec_aten/testing_util/test/CMakeLists.txt @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project(runtime_core_exec_aten_testing_util_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../../..) diff --git a/runtime/core/exec_aten/util/test/CMakeLists.txt b/runtime/core/exec_aten/util/test/CMakeLists.txt index 123db7efd5..cf0d801a64 100644 --- a/runtime/core/exec_aten/util/test/CMakeLists.txt +++ b/runtime/core/exec_aten/util/test/CMakeLists.txt @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project(runtime_core_exec_aten_util_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../../..) diff --git a/runtime/core/portable_type/test/CMakeLists.txt b/runtime/core/portable_type/test/CMakeLists.txt index 58a69f656e..6922a8c8fa 100644 --- a/runtime/core/portable_type/test/CMakeLists.txt +++ b/runtime/core/portable_type/test/CMakeLists.txt @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project(runtime_core_portable_type_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../..) diff --git a/runtime/core/test/CMakeLists.txt b/runtime/core/test/CMakeLists.txt index cf0b3d67c1..b2da466193 100644 --- a/runtime/core/test/CMakeLists.txt +++ b/runtime/core/test/CMakeLists.txt @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project(runtime_core_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) diff --git a/runtime/executor/test/CMakeLists.txt b/runtime/executor/test/CMakeLists.txt index 408332ef09..298a796b7b 100644 --- a/runtime/executor/test/CMakeLists.txt +++ b/runtime/executor/test/CMakeLists.txt @@ -12,19 +12,57 @@ # cmake_minimum_required(VERSION 3.19) -project(runtime_executor_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) include(${EXECUTORCH_ROOT}/build/Test.cmake) +add_custom_command( + OUTPUT "${CMAKE_BINARY_DIR}/ModuleAddHalf.pte" + "${CMAKE_BINARY_DIR}/ModuleAdd.pte" + "${CMAKE_BINARY_DIR}/ModuleDynamicCatUnallocatedIO.pte" + "${CMAKE_BINARY_DIR}/ModuleIndex.pte" + "${CMAKE_BINARY_DIR}/ModuleLinear.pte" + "${CMAKE_BINARY_DIR}/ModuleMultipleEntry.pte" + "${CMAKE_BINARY_DIR}/ModuleSimpleTrain.pte" + COMMAND + python3 -m test.models.export_program --modules + "ModuleAdd,ModuleAddHalf,ModuleDynamicCatUnallocatedIO,ModuleIndex,ModuleLinear,ModuleMultipleEntry,ModuleSimpleTrain" + --outdir "${CMAKE_BINARY_DIR}" 2> /dev/null + COMMAND + python3 -m test.models.export_delegated_program --modules "ModuleAddMul" + --backend_id "StubBackend" --outdir "${CMAKE_BINARY_DIR}" || true + WORKING_DIRECTORY ${EXECUTORCH_ROOT} +) + +add_custom_target( + generated_pte_files + DEPENDS "${CMAKE_BINARY_DIR}/ModuleAddHalf.pte" + "${CMAKE_BINARY_DIR}/ModuleAdd.pte" + "${CMAKE_BINARY_DIR}/ModuleDynamicCatUnallocatedIO.pte" + "${CMAKE_BINARY_DIR}/ModuleIndex.pte" + "${CMAKE_BINARY_DIR}/ModuleLinear.pte" + "${CMAKE_BINARY_DIR}/ModuleMultipleEntry.pte" + "${CMAKE_BINARY_DIR}/ModuleSimpleTrain.pte" +) + +set(test_env + "DEPRECATED_ET_MODULE_LINEAR_CONSTANT_BUFFER_PATH=${EXECUTORCH_ROOT}/test/models/deprecated/ModuleLinear-no-constant-segment.pte" + "ET_MODULE_ADD_HALF_PATH=${CMAKE_BINARY_DIR}/ModuleAddHalf.pte" + "ET_MODULE_ADD_PATH=${CMAKE_BINARY_DIR}/ModuleAdd.pte" + "ET_MODULE_DYNAMIC_CAT_UNALLOCATED_IO_PATH=${CMAKE_BINARY_DIR}/ModuleDynamicCatUnallocatedIO.pte" + "ET_MODULE_INDEX_PATH=${CMAKE_BINARY_DIR}/ModuleIndex.pte" + "ET_MODULE_LINEAR_PATH=${CMAKE_BINARY_DIR}/ModuleLinear.pte" + "ET_MODULE_MULTI_ENTRY_PATH=${CMAKE_BINARY_DIR}/ModuleMultipleEntry.pte" + "ET_MODULE_SIMPLE_TRAIN_PATH=${CMAKE_BINARY_DIR}/ModuleSimpleTrain.pte" +) + et_cxx_test( runtime_executor_test SOURCES executor_test.cpp EXTRA_LIBS portable_ops_lib portable_kernels ) +add_dependencies(runtime_executor_test generated_pte_files) +set_property(TEST runtime_executor_test PROPERTY ENVIRONMENT ${test_env}) et_cxx_test( allocation_failure_stress_test @@ -36,6 +74,10 @@ et_cxx_test( extension_data_loader extension_runner_util ) +add_dependencies(allocation_failure_stress_test generated_pte_files) +set_property( + TEST allocation_failure_stress_test PROPERTY ENVIRONMENT ${test_env} +) et_cxx_test( method_test @@ -47,6 +89,8 @@ et_cxx_test( extension_data_loader extension_runner_util ) +add_dependencies(method_test generated_pte_files) +set_property(TEST method_test PROPERTY ENVIRONMENT ${test_env}) # TODO(T191569140): Enable this test. et_cxx_test(method_meta_test SOURCES # method_meta_test.cpp EXTRA_LIBS extension_data_loader) @@ -62,17 +106,23 @@ et_cxx_test( kernel_resolution_test SOURCES kernel_resolution_test.cpp EXTRA_LIBS extension_data_loader ) +add_dependencies(kernel_resolution_test generated_pte_files) +set_property(TEST kernel_resolution_test PROPERTY ENVIRONMENT ${test_env}) et_cxx_test( kernel_integration_test SOURCES kernel_integration_test.cpp EXTRA_LIBS extension_data_loader extension_runner_util ) +add_dependencies(kernel_integration_test generated_pte_files) +set_property(TEST kernel_integration_test PROPERTY ENVIRONMENT ${test_env}) # TODO(T191569140): Enable this test. et_cxx_test( backend_integration_test # SOURCES backend_integration_test.cpp EXTRA_LIBS extension_data_loader # extension_runner_util ) et_cxx_test(memory_manager_test SOURCES memory_manager_test.cpp) +add_dependencies(memory_manager_test generated_pte_files) +set_property(TEST memory_manager_test PROPERTY ENVIRONMENT ${test_env}) et_cxx_test( tensor_parser_test @@ -84,6 +134,8 @@ et_cxx_test( extension_data_loader extension_runner_util ) +add_dependencies(tensor_parser_test generated_pte_files) +set_property(TEST tensor_parser_test PROPERTY ENVIRONMENT ${test_env}) target_include_directories( tensor_parser_test diff --git a/runtime/kernel/test/CMakeLists.txt b/runtime/kernel/test/CMakeLists.txt index ce3246635d..b1b6044791 100644 --- a/runtime/kernel/test/CMakeLists.txt +++ b/runtime/kernel/test/CMakeLists.txt @@ -13,10 +13,6 @@ # cmake_minimum_required(VERSION 3.19) -project(runtime_kernel_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) @@ -27,7 +23,7 @@ target_link_libraries( operator_registry_test GTest::gtest GTest::gtest_main GTest::gmock executorch ) target_include_directories(operator_registry_test PRIVATE ${EXECUTORCH_ROOT}/..) -add_test(ExecuTorchTest operator_registry_test) +add_test(operator_registry_test operator_registry_test) add_executable(kernel_runtime_context_test kernel_runtime_context_test.cpp) target_link_libraries( @@ -37,7 +33,7 @@ target_link_libraries( target_include_directories( kernel_runtime_context_test PRIVATE ${EXECUTORCH_ROOT}/.. ) -add_test(ExecuTorchTest kernel_runtime_context_test) +add_test(kernel_runtime_context_test kernel_runtime_context_test) add_executable( operator_registry_max_kernel_num_test @@ -59,7 +55,8 @@ target_compile_definitions( target_include_directories( operator_registry_max_kernel_num_test PRIVATE ${EXECUTORCH_ROOT}/.. ) -add_test(ExecuTorchTest operator_registry_max_kernel_num_test) +# TODO: This is currently not working! +# add_test(operator_registry_max_kernel_num_test operator_registry_max_kernel_num_test) # TODO: Migrate kernel_double_registration_test and # test_kernel_manual_registration. Make sure dtype selective build is working. diff --git a/runtime/platform/test/CMakeLists.txt b/runtime/platform/test/CMakeLists.txt index f4b2f2e4a5..e96953b055 100644 --- a/runtime/platform/test/CMakeLists.txt +++ b/runtime/platform/test/CMakeLists.txt @@ -12,10 +12,6 @@ # cmake_minimum_required(VERSION 3.19) -project(runtime_platform_test) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..) @@ -23,8 +19,10 @@ include(${EXECUTORCH_ROOT}/build/Test.cmake) et_cxx_test(platform_test SOURCES executor_pal_test.cpp) -et_cxx_test(platform_death_test SOURCES executor_pal_death_test.cpp) +# TODO: Re-enable this test on OSS +# et_cxx_test(platform_death_test SOURCES executor_pal_death_test.cpp) et_cxx_test(logging_test SOURCES logging_test.cpp) -et_cxx_test(clock_test SOURCES clock_test.cpp stub_platform.cpp) +# TODO: Re-enable this test on OSS +# et_cxx_test(clock_test SOURCES clock_test.cpp stub_platform.cpp) diff --git a/test/run_oss_cpp_tests.sh b/test/run_oss_cpp_tests.sh index 3b786bb49c..9f7573295e 100755 --- a/test/run_oss_cpp_tests.sh +++ b/test/run_oss_cpp_tests.sh @@ -39,63 +39,18 @@ build_executorch() { -DEXECUTORCH_BUILD_DEVTOOLS=ON \ -DEXECUTORCH_BUILD_VULKAN=$BUILD_VULKAN \ -DEXECUTORCH_BUILD_XNNPACK=ON \ + -DEXECUTORCH_BUILD_TESTS=ON \ -Bcmake-out cmake --build cmake-out -j9 --target install } -build_gtest() { - mkdir -p third-party/googletest/build - pushd third-party/googletest/build - cmake .. -DCMAKE_INSTALL_PREFIX=. - make -j4 - make install - popd -} - -export_test_model() { - python3 -m test.models.export_program --modules "ModuleAdd,ModuleAddHalf,ModuleDynamicCatUnallocatedIO,ModuleIndex,ModuleLinear,ModuleMultipleEntry,ModuleSimpleTrain" --outdir "cmake-out" 2> /dev/null - python3 -m test.models.export_delegated_program --modules "ModuleAddMul" --backend_id "StubBackend" --outdir "cmake-out" || true - - DEPRECATED_ET_MODULE_LINEAR_CONSTANT_BUFFER_PATH="$(realpath test/models/deprecated/ModuleLinear-no-constant-segment.pte)" - ET_MODULE_ADD_HALF_PATH="$(realpath cmake-out/ModuleAddHalf.pte)" - ET_MODULE_ADD_PATH="$(realpath cmake-out/ModuleAdd.pte)" - ET_MODULE_DYNAMIC_CAT_UNALLOCATED_IO_PATH="$(realpath cmake-out/ModuleDynamicCatUnallocatedIO.pte)" - ET_MODULE_INDEX_PATH="$(realpath cmake-out/ModuleIndex.pte)" - ET_MODULE_LINEAR_PATH="$(realpath cmake-out/ModuleLinear.pte)" - ET_MODULE_MULTI_ENTRY_PATH="$(realpath cmake-out/ModuleMultipleEntry.pte)" - ET_MODULE_ADD_MUL_NOSEGMENTS_DA1024_PATH="$(realpath cmake-out/ModuleAddMul-nosegments-da1024.pte)" - ET_MODULE_ADD_MUL_NOSEGMENTS_PATH="$(realpath cmake-out/ModuleAddMul-nosegments.pte)" - ET_MODULE_ADD_MUL_PATH="$(realpath cmake-out/ModuleAddMul.pte)" - ET_MODULE_SIMPLE_TRAIN_PATH="$(realpath cmake-out/ModuleSimpleTrain.pte)" - export DEPRECATED_ET_MODULE_LINEAR_CONSTANT_BUFFER_PATH - export ET_MODULE_ADD_HALF_PATH - export ET_MODULE_ADD_PATH - export ET_MODULE_DYNAMIC_CAT_UNALLOCATED_IO_PATH - export ET_MODULE_INDEX_PATH - export ET_MODULE_LINEAR_PATH - export ET_MODULE_MULTI_ENTRY_PATH - export ET_MODULE_ADD_MUL_NOSEGMENTS_DA1024_PATH - export ET_MODULE_ADD_MUL_NOSEGMENTS_PATH - export ET_MODULE_ADD_MUL_PATH - export ET_MODULE_SIMPLE_TRAIN_PATH -} - build_and_run_test() { local test_dir=$1 - cmake "${test_dir}" \ - -DCMAKE_BUILD_TYPE=Debug \ - -DCMAKE_INSTALL_PREFIX=cmake-out \ - -DEXECUTORCH_USE_CPP_CODE_COVERAGE=ON \ - -DCMAKE_PREFIX_PATH="$(pwd)/third-party/googletest/build" \ - -Bcmake-out/"${test_dir}" - cmake --build cmake-out/"${test_dir}" -j9 if [[ "$test_dir" =~ .*examples/models/llama/tokenizer.* ]]; then RESOURCES_PATH=$(realpath examples/models/llama/tokenizer/test/resources) elif [[ "$test_dir" =~ .*extension/llm/tokenizer.* ]]; then RESOURCES_PATH=$(realpath extension/llm/tokenizer/test/resources) - else - RESOURCES_PATH=$(realpath extension/module/test/resources) fi export RESOURCES_PATH @@ -112,18 +67,18 @@ report_coverage() { ${LLVM_COV} report -instr-profile=cmake-out/merged.profdata $TEST_BINARY_LIST } -probe_tests() { +run_ctest() { + pushd cmake-out/ + ctest + popd +} + +probe_additional_tests() { # This function finds the set of directories that contain C++ tests # CMakeLists.txt rules, that are buildable using build_and_run_test dirs=( - backends - examples - extension - kernels - runtime - schema - devtools - test + examples/models/llama/tokenizer + extension/llm/tokenizer ) find "${dirs[@]}" \ @@ -133,14 +88,13 @@ probe_tests() { } build_executorch -build_gtest -export_test_model +run_ctest if [ -z "$1" ]; then echo "Running all directories:" - probe_tests + probe_additional_tests - for test_dir in $(probe_tests); do + for test_dir in $(probe_additional_tests); do build_and_run_test "${test_dir}" done else diff --git a/test/utils/CMakeLists.txt b/test/utils/CMakeLists.txt index 9183deeb69..c8bc2b5702 100644 --- a/test/utils/CMakeLists.txt +++ b/test/utils/CMakeLists.txt @@ -12,10 +12,6 @@ # cmake_minimum_required(VERSION 3.19) -project(test_utils) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..) diff --git a/test/utils/OSSTest.cmake.in b/test/utils/OSSTest.cmake.in index a2c2b9d1ea..6487c0bc79 100644 --- a/test/utils/OSSTest.cmake.in +++ b/test/utils/OSSTest.cmake.in @@ -14,10 +14,6 @@ # cmake_minimum_required(VERSION 3.19) -project({project_name}) - -# Use C++17 for test. -set(CMAKE_CXX_STANDARD 17) set(EXECUTORCH_ROOT ${{CMAKE_CURRENT_SOURCE_DIR}}/{path_to_root}) diff --git a/test/utils/OSSTestConfig.json b/test/utils/OSSTestConfig.json index d2b0ff3575..ce8c9723d2 100644 --- a/test/utils/OSSTestConfig.json +++ b/test/utils/OSSTestConfig.json @@ -30,18 +30,6 @@ "malloc_memory_allocator_test.cpp" ] }, - { - "directory": "extension/module/test", - "sources": [ - "module_test.cpp" - ], - "additional_libs": [ - "extension_data_loader", - "extension_module", - "portable_kernels", - "portable_ops_lib" - ] - }, { "directory": "extension/pytree/test", "sources": [ @@ -49,18 +37,6 @@ "test_pytree.cpp" ] }, - { - "directory": "extension/runner_util/test", - "sources": [ - "inputs_test.cpp" - ], - "additional_libs": [ - "extension_data_loader", - "extension_runner_util", - "portable_kernels", - "portable_ops_lib" - ] - }, { "directory": "extension/tensor/test", "sources": [ @@ -89,7 +65,8 @@ "tensor_test.cpp", "half_test.cpp", "scalar_test.cpp", - "tensor_impl_test.cpp" + "tensor_impl_test.cpp", + "bfloat16_test.cpp" ] }, {