xref: /aosp_15_r20/external/executorch/build/Test.cmake (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
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#
8*523fa7a6SAndroid Build Coastguard Worker# This file is intended to have helper functions for test-related CMakeLists.txt
9*523fa7a6SAndroid Build Coastguard Worker# files.
10*523fa7a6SAndroid Build Coastguard Worker#
11*523fa7a6SAndroid Build Coastguard Worker# ### Editing this file ###
12*523fa7a6SAndroid Build Coastguard Worker#
13*523fa7a6SAndroid Build Coastguard Worker# This file should be formatted with
14*523fa7a6SAndroid Build Coastguard Worker# ~~~
15*523fa7a6SAndroid Build Coastguard Worker# cmake-format -i Test.cmake
16*523fa7a6SAndroid Build Coastguard Worker# ~~~
17*523fa7a6SAndroid Build Coastguard Worker# It should also be cmake-lint clean.
18*523fa7a6SAndroid Build Coastguard Worker#
19*523fa7a6SAndroid Build Coastguard Worker
20*523fa7a6SAndroid Build Coastguard Workerinclude(${EXECUTORCH_ROOT}/build/Utils.cmake)
21*523fa7a6SAndroid Build Coastguard Worker
22*523fa7a6SAndroid Build Coastguard Worker# Find prebuilt executorch library
23*523fa7a6SAndroid Build Coastguard Workerfind_package(executorch CONFIG REQUIRED)
24*523fa7a6SAndroid Build Coastguard Worker
25*523fa7a6SAndroid Build Coastguard Workerenable_testing()
26*523fa7a6SAndroid Build Coastguard Workerfind_package(GTest CONFIG REQUIRED)
27*523fa7a6SAndroid Build Coastguard Worker
28*523fa7a6SAndroid Build Coastguard Workertarget_link_options_shared_lib(cpuinfo)
29*523fa7a6SAndroid Build Coastguard Workertarget_link_options_shared_lib(extension_data_loader)
30*523fa7a6SAndroid Build Coastguard Workertarget_link_options_shared_lib(portable_kernels)
31*523fa7a6SAndroid Build Coastguard Workertarget_link_options_shared_lib(portable_ops_lib)
32*523fa7a6SAndroid Build Coastguard Workertarget_link_options_shared_lib(pthreadpool)
33*523fa7a6SAndroid Build Coastguard Workertarget_link_options_shared_lib(quantized_ops_lib)
34*523fa7a6SAndroid Build Coastguard Worker
35*523fa7a6SAndroid Build Coastguard Worker# Add code coverage flags to supported compilers
36*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_USE_CPP_CODE_COVERAGE)
37*523fa7a6SAndroid Build Coastguard Worker  if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
38*523fa7a6SAndroid Build Coastguard Worker    string(APPEND CMAKE_C_FLAGS " --coverage -fprofile-abs-path")
39*523fa7a6SAndroid Build Coastguard Worker    string(APPEND CMAKE_CXX_FLAGS " --coverage -fprofile-abs-path")
40*523fa7a6SAndroid Build Coastguard Worker  elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
41*523fa7a6SAndroid Build Coastguard Worker    string(APPEND CMAKE_C_FLAGS " -fprofile-instr-generate -fcoverage-mapping")
42*523fa7a6SAndroid Build Coastguard Worker    string(APPEND CMAKE_CXX_FLAGS
43*523fa7a6SAndroid Build Coastguard Worker           " -fprofile-instr-generate -fcoverage-mapping"
44*523fa7a6SAndroid Build Coastguard Worker    )
45*523fa7a6SAndroid Build Coastguard Worker  else()
46*523fa7a6SAndroid Build Coastguard Worker    message(ERROR
47*523fa7a6SAndroid Build Coastguard Worker            "Code coverage for compiler ${CMAKE_CXX_COMPILER_ID} is unsupported"
48*523fa7a6SAndroid Build Coastguard Worker    )
49*523fa7a6SAndroid Build Coastguard Worker  endif()
50*523fa7a6SAndroid Build Coastguard Workerendif()
51*523fa7a6SAndroid Build Coastguard Worker
52*523fa7a6SAndroid Build Coastguard Worker# A helper function to generate a gtest cxx executable target @param
53*523fa7a6SAndroid Build Coastguard Worker# target_name: name for the executable @param SOURCES <list_of_sources>: test
54*523fa7a6SAndroid Build Coastguard Worker# sources to be compiled. Sometimes util sources are used as well @param EXTRA
55*523fa7a6SAndroid Build Coastguard Worker# LIBS <list_of_libs>: additional libraries to be linked against the target.
56*523fa7a6SAndroid Build Coastguard Worker# gtest, gmock, executorch are linked by default, but Sometimes user may need
57*523fa7a6SAndroid Build Coastguard Worker# additional libraries like kernels. We use CMake package executorch in this
58*523fa7a6SAndroid Build Coastguard Worker# helper, so user can easily add installed libraries.
59*523fa7a6SAndroid Build Coastguard Worker#
60*523fa7a6SAndroid Build Coastguard Worker# Example: et_cxx_test(my_test SOURCES my_test.cpp EXTRA_LIBS portable_kernels)
61*523fa7a6SAndroid Build Coastguard Worker#
62*523fa7a6SAndroid Build Coastguard Worker# This defines a gtest executable my_test, compiling my_test.cpp, and linking
63*523fa7a6SAndroid Build Coastguard Worker# against libportable_kernels.a.
64*523fa7a6SAndroid Build Coastguard Worker#
65*523fa7a6SAndroid Build Coastguard Workerfunction(et_cxx_test target_name)
66*523fa7a6SAndroid Build Coastguard Worker
67*523fa7a6SAndroid Build Coastguard Worker  set(multi_arg_names SOURCES EXTRA_LIBS)
68*523fa7a6SAndroid Build Coastguard Worker  cmake_parse_arguments(ET_CXX_TEST "" "" "${multi_arg_names}" ${ARGN})
69*523fa7a6SAndroid Build Coastguard Worker
70*523fa7a6SAndroid Build Coastguard Worker  # Let files say "include <executorch/path/to/header.h>".
71*523fa7a6SAndroid Build Coastguard Worker  target_include_directories(executorch INTERFACE ${EXECUTORCH_ROOT}/..)
72*523fa7a6SAndroid Build Coastguard Worker
73*523fa7a6SAndroid Build Coastguard Worker  set(ET_TEST_UTIL_SOURCES
74*523fa7a6SAndroid Build Coastguard Worker      ${EXECUTORCH_ROOT}/runtime/core/exec_aten/testing_util/tensor_util.cpp
75*523fa7a6SAndroid Build Coastguard Worker  )
76*523fa7a6SAndroid Build Coastguard Worker
77*523fa7a6SAndroid Build Coastguard Worker  add_executable(${target_name} ${ET_CXX_TEST_SOURCES} ${ET_TEST_UTIL_SOURCES})
78*523fa7a6SAndroid Build Coastguard Worker  # Includes gtest, gmock, executorch by default
79*523fa7a6SAndroid Build Coastguard Worker  target_link_libraries(
80*523fa7a6SAndroid Build Coastguard Worker    ${target_name} GTest::gtest GTest::gtest_main GTest::gmock executorch
81*523fa7a6SAndroid Build Coastguard Worker    ${ET_CXX_TEST_EXTRA_LIBS}
82*523fa7a6SAndroid Build Coastguard Worker  )
83*523fa7a6SAndroid Build Coastguard Worker
84*523fa7a6SAndroid Build Coastguard Worker  # add_test adds a test target to be used by ctest. We use `ExecuTorchTest` as
85*523fa7a6SAndroid Build Coastguard Worker  # the ctest target name for the test executable Usage: cd
86*523fa7a6SAndroid Build Coastguard Worker  # cmake-out/path/to/test/; ctest Note: currently we directly invoke the test
87*523fa7a6SAndroid Build Coastguard Worker  # target, without using ctest
88*523fa7a6SAndroid Build Coastguard Worker  add_test(ExecuTorchTest ${target_name})
89*523fa7a6SAndroid Build Coastguard Worker
90*523fa7a6SAndroid Build Coastguard Workerendfunction()
91