diff --git a/Scripts/StructPackVerifier.py b/Scripts/StructPackVerifier.py index 90f1ad393..d49dfd5d5 100755 --- a/Scripts/StructPackVerifier.py +++ b/Scripts/StructPackVerifier.py @@ -46,8 +46,8 @@ class AliasType: @dataclass class StructDefinition(TypeDefinition): Size: int - Aliases: list[AliasType] - Members: list[TypeDefinition] + Aliases: list + Members: list ExpectFEXMatch: bool def __init__(self, Name, Size): @@ -60,8 +60,8 @@ class StructDefinition(TypeDefinition): @dataclass class UnionDefinition(TypeDefinition): Size: int - Aliases: list[AliasType] - Members: list[TypeDefinition] + Aliases: list + Members: list ExpectFEXMatch: bool def __init__(self, Name, Size): @@ -86,12 +86,12 @@ class FieldDefinition(TypeDefinition): class ArchDB: Parsed: bool ArchName: str - NamespaceScope: list[str] + NamespaceScope: list CurrentNamespace: str TU: TranslationUnit - Structs: dict[StructDefinition] - Unions: dict[UnionDefinition] - FieldDecls: list[FieldDefinition] + Structs: dict + Unions: dict + FieldDecls: list def __init__(self, ArchName): self.Parsed = True self.ArchName = ArchName @@ -103,7 +103,7 @@ class ArchDB: self.FieldDecls = [] class DBList: - DBs: list[ArchDB] + DBs: list def __init__(self, DB32, DB64, DBAArch64, DBWin32, DBWin64): self.DBs = [DB32, DB64, DBAArch64, DBWin32, DBWin64] @@ -551,6 +551,8 @@ def main(): args_x86_64 = [ "-I/usr/include/x86_64-linux-gnu", + "-I/usr/x86_64-linux-gnu/include/c++/10/x86_64-linux-gnu/", + "-I/usr/x86_64-linux-gnu/include/", "-O2", "--target=x86_64-linux-unknown", ] diff --git a/Source/Tests/LinuxSyscalls/CMakeLists.txt b/Source/Tests/LinuxSyscalls/CMakeLists.txt index b1a4f41ef..0c8389b33 100644 --- a/Source/Tests/LinuxSyscalls/CMakeLists.txt +++ b/Source/Tests/LinuxSyscalls/CMakeLists.txt @@ -55,3 +55,68 @@ add_library(LinuxEmulation STATIC target_link_libraries(LinuxEmulation FEXCore pthread numa) target_include_directories(LinuxEmulation PRIVATE ${CMAKE_BINARY_DIR}/generated) + +set(HEADERS_TO_VERIFY + x32/Types.h x86_32 # This needs to match structs to 32bit structs + ) + +list(LENGTH HEADERS_TO_VERIFY ARG_COUNT) +math(EXPR ARG_COUNT "${ARG_COUNT}-1") + +set (ARGS + "-x" "c++" + "-std=c++20") +# Global include directories +get_directory_property (INC_DIRS INCLUDE_DIRECTORIES) +list(TRANSFORM INC_DIRS PREPEND "-I") +list(APPEND ARGS ${INC_DIRS}) + +# FEXCore directories +get_target_property(INC_DIRS FEXCore INTERFACE_INCLUDE_DIRECTORIES) +list(TRANSFORM INC_DIRS PREPEND "-I") +list(APPEND ARGS ${INC_DIRS}) + +foreach(Index RANGE 0 ${ARG_COUNT} 2) + math(EXPR TEST_TYPE_INDEX "${Index}+1") + + list(GET HEADERS_TO_VERIFY ${Index} HEADER) + list(GET HEADERS_TO_VERIFY ${TEST_TYPE_INDEX} TEST_TYPE) + + file(RELATIVE_PATH REL_HEADER ${CMAKE_BINARY_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/${HEADER}") + set(TEST_NAME "${TEST_DESC}/Test_verify_${HEADER}") + set(TEST_NAME_ARCH "${TEST_DESC}/Test_verify_arch_${HEADER}") + + add_test( + NAME ${TEST_NAME}_x86_64 + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + COMMAND "python3" "${CMAKE_SOURCE_DIR}/Scripts/StructPackVerifier.py" "-c1" "x86_64" "${REL_HEADER}" ${ARGS}) + + add_test( + NAME ${TEST_NAME}_aarch64 + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + COMMAND "python3" "${CMAKE_SOURCE_DIR}/Scripts/StructPackVerifier.py" "-c1" "aarch64" "${REL_HEADER}" ${ARGS}) + + add_test( + NAME ${TEST_NAME_ARCH}_x86_64 + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + COMMAND "python3" "${CMAKE_SOURCE_DIR}/Scripts/StructPackVerifier.py" "-c1" "x86_64" "-c2" "${TEST_TYPE}" "${REL_HEADER}" ${ARGS}) + + add_test( + NAME ${TEST_NAME_ARCH}_aarch64 + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + COMMAND "python3" "${CMAKE_SOURCE_DIR}/Scripts/StructPackVerifier.py" "-c1" "aarch64" "-c2" "${TEST_TYPE}" "${REL_HEADER}" ${ARGS}) + + set_property(TEST ${TEST_NAME}_x86_64 APPEND PROPERTY DEPENDS "${HEADER}") + set_property(TEST ${TEST_NAME}_aarch64 APPEND PROPERTY DEPENDS "${HEADER}") + set_property(TEST ${TEST_NAME_ARCH}_x86_64 APPEND PROPERTY DEPENDS "${HEADER}") + set_property(TEST ${TEST_NAME_ARCH}_aarch64 APPEND PROPERTY DEPENDS "${HEADER}") +endforeach() + +execute_process(COMMAND "nproc" OUTPUT_VARIABLE CORES) +string(STRIP ${CORES} CORES) + +add_custom_target( + struct_verifier + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + USES_TERMINAL + COMMAND "ctest" "--timeout" "302" "-j${CORES}" "-R" "Test_verify*")