From 1c580ec92cf65532161f24496fc34b182e12dc6d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 13 Sep 2022 17:22:47 -0700 Subject: [PATCH] Thunks: Adds functional thunk testing to CI This is the bare minimum, it only tests glxinfo and vulkaninfo with and without thunks. Nothing more special than that. Already found the .1 bug with libvulkan host library loading. --- .github/workflows/ccpp.yml | 35 +++++++++++- CI/GLThunks.json | 5 ++ CI/VulkanThunks.json | 5 ++ unittests/CMakeLists.txt | 2 + unittests/ThunkFunctionalTests/CMakeLists.txt | 57 +++++++++++++++++++ 5 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 CI/GLThunks.json create mode 100644 CI/VulkanThunks.json create mode 100644 unittests/ThunkFunctionalTests/CMakeLists.txt diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index bf4d26dea..f6494ab25 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -188,6 +188,40 @@ jobs: working-directory: ${{runner.workspace}}/build run: mv ${{runner.workspace}}/build/Testing/Temporary/LastTest.log ${{runner.workspace}}/build/Testing/Temporary/LastTest_ThunkgenTests.log || true + - name: Install + if: matrix.arch[1] == 'x64' + working-directory: ${{runner.workspace}}/build + shell: bash + run: cmake --build . --config $BUILD_TYPE --target install + + - name: Test GL No-Thunks + if: matrix.arch[1] == 'x64' + working-directory: ${{runner.workspace}}/build + shell: bash + env: + DISPLAY: ":0" + run: cmake --build . --config $BUILD_TYPE --target thunk_functional_tests_nothunks + + - name: No thunks Results move + if: ${{ always() }} + shell: bash + working-directory: ${{runner.workspace}}/build + run: mv ${{runner.workspace}}/build/Testing/Temporary/LastTest.log ${{runner.workspace}}/build/Testing/Temporary/LastTest_NoThunkResults.log || true + + - name: Test GL Thunks + if: matrix.arch[1] == 'x64' + working-directory: ${{runner.workspace}}/build + shell: bash + env: + DISPLAY: ":0" + run: cmake --build . --config $BUILD_TYPE --target thunk_functional_tests_thunks + + - name: Thunks Results move + if: ${{ always() }} + shell: bash + working-directory: ${{runner.workspace}}/build + run: mv ${{runner.workspace}}/build/Testing/Temporary/LastTest.log ${{runner.workspace}}/build/Testing/Temporary/LastTest_ThunkResults.log || true + - name: Truncate test results if: ${{ always() }} shell: bash @@ -207,4 +241,3 @@ jobs: name: Results-${{ env.runner_name }} path: ${{runner.workspace}}/build/Testing/Temporary/LastTest_*.log retention-days: 3 - diff --git a/CI/GLThunks.json b/CI/GLThunks.json new file mode 100644 index 000000000..1f722e2cf --- /dev/null +++ b/CI/GLThunks.json @@ -0,0 +1,5 @@ +{ + "ThunksDB": { + "GL": 1 + } +} diff --git a/CI/VulkanThunks.json b/CI/VulkanThunks.json new file mode 100644 index 000000000..c60f78621 --- /dev/null +++ b/CI/VulkanThunks.json @@ -0,0 +1,5 @@ +{ + "ThunksDB": { + "Vulkan": 1 + } +} diff --git a/unittests/CMakeLists.txt b/unittests/CMakeLists.txt index bd5708413..096195216 100644 --- a/unittests/CMakeLists.txt +++ b/unittests/CMakeLists.txt @@ -6,8 +6,10 @@ add_subdirectory(POSIX/) add_subdirectory(gvisor-tests/) add_subdirectory(gcc-target-tests-32/) add_subdirectory(gcc-target-tests-64/) + if (BUILD_THUNKS) add_subdirectory(ThunkLibs) + add_subdirectory(ThunkFunctionalTests) endif() if (BUILD_FEX_LINUX_TESTS) diff --git a/unittests/ThunkFunctionalTests/CMakeLists.txt b/unittests/ThunkFunctionalTests/CMakeLists.txt new file mode 100644 index 000000000..cce54a0df --- /dev/null +++ b/unittests/ThunkFunctionalTests/CMakeLists.txt @@ -0,0 +1,57 @@ +set(FUNCTIONAL_DEPENDS "") + +function(AddThunksTest Bin ThunksFile) + set (ARGS + "-t" "${CMAKE_INSTALL_PREFIX}/lib/fex-emu/HostThunks" + "-j" "${CMAKE_INSTALL_PREFIX}/share/fex-emu/GuestThunks" + "-o" "stderr" "--no-silent" "-c" "irjit" "-n" "500" + ) + if (NOT ThunksFile) + set (TEST_NAME ThunkFunctionalTest-NoThunks-${Bin}) + else() + set (TEST_NAME ThunkFunctionalTest-Thunks-${Bin}) + list (APPEND ARGS + "-k" "${CMAKE_SOURCE_DIR}/CI/${ThunksFile}") + endif() + + add_test(NAME ${TEST_NAME} + COMMAND "$" + ${ARGS} + "--" + ${Bin}) + set_property(TEST ${TEST_NAME} APPEND PROPERTY DEPENDS "${Bin}") + + list(APPEND FUNCTIONAL_DEPENDS "${TEST_NAME}") +endfunction() + +function(AddTest Bin ThunksFile) + AddThunksTest("${Bin}" "") + AddThunksTest("${Bin}" "${ThunksFile}") +endfunction() + +AddTest("/usr/bin/glxinfo" "GLThunks.json") +AddTest("/usr/bin/vulkaninfo" "VulkanThunks.json") + +execute_process(COMMAND "nproc" OUTPUT_VARIABLE CORES) +string(STRIP ${CORES} CORES) + +add_custom_target( + thunk_functional_tests_nothunks + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + USES_TERMINAL + COMMAND "ctest" "--timeout" "302" "-j${CORES}" "-R" "ThunkFunctionalTest-NoThunks-\.*" + DEPENDS "${FUNCTIONAL_DEPENDS}") + +add_custom_target( + thunk_functional_tests_thunks + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + USES_TERMINAL + COMMAND "ctest" "--timeout" "302" "-j${CORES}" "-R" "ThunkFunctionalTest-Thunks-\.*" + DEPENDS "${FUNCTIONAL_DEPENDS}") + +add_custom_target( + thunk_functional_tests + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + USES_TERMINAL + COMMAND "ctest" "--timeout" "302" "-j${CORES}" "-R" "ThunkFunctionalTest\.*" + DEPENDS "${FUNCTIONAL_DEPENDS}")