Files
revng-revng/tests/tools/pipeline/CMakeLists.txt
Massimo Fioravanti c05b5dbb28 Steps now represent the *end* of a step
A special "begin" step has been introduced.
2022-03-28 12:17:05 +02:00

157 lines
4.3 KiB
CMake

#
# This file is distributed under the MIT License. See LICENSE.md for details.
#
# Define StringContainerLibrary
revng_add_library_internal(
revngStringContainerLibrary SHARED
${CMAKE_CURRENT_SOURCE_DIR}/StringContainerLibrary.cpp)
target_link_libraries(revngStringContainerLibrary revngPipeline revngPipes)
macro(
add_pipeline_test
TEST_NAME
PIPELINE_FILE
TARGETS
TARGET_STEP
INPUTS_LIST
OUTPUTS_LIST
FLAGS)
add_test(
NAME "${TEST_NAME}"
COMMAND
bash -c "rm -rf ${CMAKE_BINARY_DIR}/${TEST_NAME} &&
${CMAKE_BINARY_DIR}/libexec/revng/revng-pipeline \
-P ${CMAKE_CURRENT_SOURCE_DIR}/${PIPELINE_FILE} \
${TARGETS} \
-i ${INPUTS_LIST} \
-o ${OUTPUTS_LIST} \
-l ${CMAKE_BINARY_DIR}/lib/librevngStringContainerLibrary.so \
-p ${CMAKE_BINARY_DIR}/${TEST_NAME} \
-f ${FLAGS} \
--step ${TARGET_STEP}")
set_tests_properties(
"${TEST_NAME}" PROPERTIES LABELS "pipeline;run" ENVIRONMENT
"PATH=${CMAKE_BINARY_DIR}/bin:$ENV{PATH}")
endmacro()
macro(add_pipeline_dump_test TEST_NAME PIPELINE_FILE)
add_test(
NAME "${TEST_NAME}"
COMMAND
"${CMAKE_BINARY_DIR}/libexec/revng/revng-pipeline" -P
"${CMAKE_CURRENT_SOURCE_DIR}/${PIPELINE_FILE}" dc:dc:StringKind -l
"${CMAKE_BINARY_DIR}/lib/librevngStringContainerLibrary.so" -d --step
FirstStep)
set_tests_properties(
"${TEST_NAME}" PROPERTIES LABELS "pipeline;dump" ENVIRONMENT
"PATH=${CMAKE_BINARY_DIR}/bin:$ENV{PATH}")
endmacro()
macro(
test_pipeline_output
TEST_NAME
PIPELINE_FILE
TARGETS
TARGET_STEP
INPUTS_LIST
OUTPUTS_LIST
FLAGS
FILE_TO_CHECK
EXPECTED_OUTPUT)
add_pipeline_test(
"${TEST_NAME}"
"${PIPELINE_FILE}"
"${TARGETS}"
"${TARGET_STEP}"
"${INPUTS_LIST}"
"${OUTPUTS_LIST}"
"${FLAGS}")
add_test(NAME "${TEST_NAME}-check" COMMAND diff -u "${FILE_TO_CHECK}"
"${EXPECTED_OUTPUT}")
set_tests_properties("${TEST_NAME}-check" PROPERTIES DEPENDS "${TEST_NAME}"
LABELS "pipeline;check")
endmacro()
macro(
ensure_pipeline_failure
TEST_NAME
PIPELINE_FILE
TARGETS
TARGET_STEP
INPUTS_LIST
OUTPUTS_LIST
FLAGS)
add_pipeline_test(
"${TEST_NAME}"
"${PIPELINE_FILE}"
"${TARGETS}"
"${TARGET_STEP}"
"${INPUTS_LIST}"
"${OUTPUTS_LIST}"
"${FLAGS}"
"${EXPECTED_OUTPUT}")
set_tests_properties("${TEST_NAME}" PROPERTIES WILL_FAIL TRUE)
endmacro()
set(COPY_PIPE_TEST_INPUTS
"begin:Strings1:${CMAKE_CURRENT_SOURCE_DIR}/CopyPipeTestInput.txt")
set(COPY_PIPE_TEST_OUTPUTS "FirstStep:Strings2:CopyPipeTestOutput.txt")
test_pipeline_output(
pipeline-copy-pipe
CopyPipeTestPipeline.yml
Strings2:Root:StringKind
FirstStep
"${COPY_PIPE_TEST_INPUTS}"
"${COPY_PIPE_TEST_OUTPUTS}"
None
CopyPipeTestOutput.txt
"${CMAKE_CURRENT_SOURCE_DIR}/CopyPipeTestExpected.txt")
# Try to produce a target produced by a non-disabled pipe
test_pipeline_output(
pipeline-copy-pipe-flag
CopyPipeFlagTestPipeline.yml
Strings2:Root:StringKind
FirstStep
"${COPY_PIPE_TEST_INPUTS}"
"${COPY_PIPE_TEST_OUTPUTS}"
None
CopyPipeTestOutput.txt
"${CMAKE_CURRENT_SOURCE_DIR}/CopyPipeTestExpected.txt")
# Try to produce a target produced by a disabled pipe
ensure_pipeline_failure(
pipeline-flag-fail-test
CopyPipeFlagTestPipeline.yml
Strings2:Root:StringKind
FirstStep
"${COPY_PIPE_TEST_INPUTS}"
"${COPY_PIPE_TEST_OUTPUTS}"
DisableCopyPipe)
# Try to invoke a non-existing pass using a PureLLVMPipe
ensure_pipeline_failure(
pipeline-test-missing-pipe
MissingPassPipelineTest.yml
Strings2:Root:StringKind
FirstStep
"${COPY_PIPE_TEST_INPUTS}"
"${COPY_PIPE_TEST_OUTPUTS}"
DontCare)
# Test an LLVMPass pipe
add_pipeline_dump_test(pipeline-llvm-pass-test PassPipelineTest.yml)
# Test running revng-pipeline in multiple invocation
add_test(
NAME pipeline-multistep-test
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/MultiStepPipelineTest.sh" --load
${CMAKE_BINARY_DIR}/lib/librevngStringContainerLibrary.so
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
set_tests_properties(pipeline-multistep-test PROPERTIES DEPENDS revng-pipeline
LABELS "pipeline")