blob: b7f9345ca42d4c192b99e4152bc0b5b6ce4990dc [file] [log] [blame]
# Copyright (c) Microsoft Corporation
# SPDX-License-Identifier: Apache-2.0
set(CMAKE_CXX_STANDARD 20)
file(COPY ${CMAKE_SOURCE_DIR}/tests DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
add_executable(
ubpf_plugin
ubpf_plugin.cc
)
target_include_directories("ubpf_plugin" PRIVATE
"${CMAKE_SOURCE_DIR}/vm"
"${CMAKE_BINARY_DIR}/vm"
"${CMAKE_SOURCE_DIR}/vm/inc"
"${CMAKE_BINARY_DIR}/vm/inc"
)
target_link_libraries(
ubpf_plugin
ubpf
ubpf_settings
)
file(GLOB external_files ${CMAKE_SOURCE_DIR}/external/bpf_conformance/tests/*.data)
file(GLOB local_files ${CMAKE_SOURCE_DIR}/tests/*.data)
set(files ${external_files} ${local_files})
if(NOT BPF_CONFORMANCE_RUNNER)
set(BPF_CONFORMANCE_RUNNER ${CMAKE_BINARY_DIR}/external/bpf_conformance/bin/bpf_conformance_runner)
else()
message(STATUS "Using custom bpf_conformance_runner: ${BPF_CONFORMANCE_RUNNER}")
endif()
if(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 AND (NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL aarch64))
set(PLUGIN_JIT --plugin_path ${CMAKE_BINARY_DIR}/bin/run-jit.sh)
set(PLUGIN_INTERPRET --plugin_path ${CMAKE_BINARY_DIR}/bin/run-interpret.sh)
else()
if(PLATFORM_WINDOWS)
set(PLATFORM_EXECUTABLE_EXTENSION ".exe")
else()
set(PLATFORM_EXECUTABLE_EXTENSION "")
endif()
set(PLUGIN_JIT --plugin_path ${CMAKE_BINARY_DIR}/bin/ubpf_plugin${PLATFORM_EXECUTABLE_EXTENSION} --plugin_options --jit)
set(PLUGIN_INTERPRET --plugin_path ${CMAKE_BINARY_DIR}/bin/ubpf_plugin${PLATFORM_EXECUTABLE_EXTENSION} --plugin_options --interpret)
endif()
# Add all names of tests that are expected to fail to the TESTS_EXPECTED_TO_FAIL list
list(APPEND TESTS_EXPECTED_TO_FAIL "duplicate_label")
# TODO: remove this once we have a proper implementation of interlocked operations
# and support for calling local functions.
list(APPEND TESTS_EXPECTED_TO_FAIL "lock")
foreach(file ${files})
unset(EXPECT_FAILURE)
foreach(to_fail ${TESTS_EXPECTED_TO_FAIL})
if(NOT EXPECT_FAILURE)
string(REGEX MATCH "${to_fail}" EXPECT_FAILURE "${file}")
if(EXPECT_FAILURE)
message(STATUS "Expecting ${file} test to fail.")
endif()
endif()
endforeach()
add_test(
NAME ${file}-JIT
COMMAND ${BPF_CONFORMANCE_RUNNER} --test_file_path ${file} ${PLUGIN_JIT}
)
if(EXPECT_FAILURE)
set_tests_properties(${file}-JIT PROPERTIES WILL_FAIL TRUE)
endif()
add_test(
NAME ${file}-Interpreter
COMMAND ${BPF_CONFORMANCE_RUNNER} --test_file_path ${file} ${PLUGIN_INTERPRET}
)
if(EXPECT_FAILURE)
set_tests_properties(${file}-Interpreter PROPERTIES WILL_FAIL TRUE)
endif()
endforeach()