# 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 is intended to have helper functions for test-related CMakeLists.txt # files. # # ### Editing this file ### # # This file should be formatted with # ~~~ # cmake-format -i Test.cmake # ~~~ # 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 # LIBS : additional libraries to be linked against the target. # gtest, gmock, executorch are linked by default, but Sometimes user may need # additional libraries like kernels. We use CMake package executorch in this # helper, so user can easily add installed libraries. # # Example: et_cxx_test(my_test SOURCES my_test.cpp EXTRA_LIBS portable_kernels) # # This defines a gtest executable my_test, compiling my_test.cpp, and linking # against libportable_kernels.a. # 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}) # 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}) endfunction()