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}")