From 333d9b1236a5c6289ab8e99a74fd3ba9df8e1146 Mon Sep 17 00:00:00 2001 From: Lee Maguire Date: Fri, 19 Jul 2024 12:55:42 +0100 Subject: [PATCH 1/6] fix archiving on xcode --- CHANGELOG.md | 1 + .../bridge_type_info_generator.cpp.in | 3 +++ .../generator/bridge_type_info_parser.cmake | 25 +++++++++++++++---- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27e70dd1..31162fc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ NEXT-RELEASE Release notes (YYYY-MM-DD) ### Fixed * Using the `==` operator in a type safe query for a nullable string property would return the incorrect result when algined storage was disabled. * Fix compilation issue when building with Bionic due to use of std::tuple (since 2.1.0). +* Archiving on Xcode would fail due to duplicated alias' when aligned storage was enabled. ### Enhancements * Add ability to use `managed>` in type safe queries when comparing a value for a key. e.g. diff --git a/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in b/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in index 11b0943e..3cbd7362 100644 --- a/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in +++ b/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in @@ -44,5 +44,8 @@ int main() @TYPE_INFO_QUERY_DECLS@ + static char arch_key[] = {'a','r','c','h','_','k','e','y','_',KEY}; + required += 1; + return required; } \ No newline at end of file diff --git a/src/cpprealm/internal/bridge/generator/bridge_type_info_parser.cmake b/src/cpprealm/internal/bridge/generator/bridge_type_info_parser.cmake index c5b843a2..0561fb12 100644 --- a/src/cpprealm/internal/bridge/generator/bridge_type_info_parser.cmake +++ b/src/cpprealm/internal/bridge/generator/bridge_type_info_parser.cmake @@ -1,14 +1,29 @@ -file(STRINGS ${BRIDGE_TYPE_INFO_BIN} compiled_string_literals REGEX "^REALM_TYPE_INFO") +file(STRINGS ${BRIDGE_TYPE_INFO_BIN} compiled_string_literals REGEX "^(REALM_TYPE_INFO|arch_key_)") + +set(regex_realm "REALM_TYPE_INFO:(.+)\\[0*(.*),0*(.*)\\]") +set(regex_arch "^arch_key_(.+)") -set(regex "REALM_TYPE_INFO:(.+)\\[0*(.*),0*(.*)\\]") set(BRIDGE_TYPE_DECLS "") +set(BRIDGE_TYPE_DECLS_TYPES "") +set(BRIDGE_TYPE_DECLS_REQUIRES_ELSE_IF OFF) foreach(i ${compiled_string_literals}) - if("${i}" MATCHES "${regex}") - set(BRIDGE_TYPE_DECLS "${BRIDGE_TYPE_DECLS} using ${CMAKE_MATCH_1} = std::aligned_storage<${CMAKE_MATCH_2}, ${CMAKE_MATCH_3}>::type;\n") + message(STATUS "${i}") + if("${i}" MATCHES "${regex_realm}") + set(BRIDGE_TYPE_DECLS_TYPES "${BRIDGE_TYPE_DECLS_TYPES} using ${CMAKE_MATCH_1} = std::aligned_storage<${CMAKE_MATCH_2}, ${CMAKE_MATCH_3}>::type;\n") + elseif("${i}" MATCHES "${regex_arch}") + if(BRIDGE_TYPE_DECLS_REQUIRES_ELSE_IF) + set(BRIDGE_TYPE_DECLS "${BRIDGE_TYPE_DECLS}#elif defined(${CMAKE_MATCH_1})\n${BRIDGE_TYPE_DECLS_TYPES}") + else() + set(BRIDGE_TYPE_DECLS "#if defined(${CMAKE_MATCH_1})\n${BRIDGE_TYPE_DECLS_TYPES}") + endif() + set(BRIDGE_TYPE_DECLS_REQUIRES_ELSE_IF ON) + set(BRIDGE_TYPE_DECLS_TYPES "") else() - message(FATAL_ERROR "Unrecognized type info string: " ${h}) + message(FATAL_ERROR "Unrecognized type info string: ${i}") endif() endforeach() +set(BRIDGE_TYPE_DECLS "${BRIDGE_TYPE_DECLS}#endif") + configure_file(${SOURCE_DIR}/bridge_types.hpp.in ${BINARY_DIR}/bridge_types.hpp) From df53c106c4b67f3ee5b7e74103d3cf3fbab258d0 Mon Sep 17 00:00:00 2001 From: Lee Maguire Date: Fri, 19 Jul 2024 13:13:21 +0100 Subject: [PATCH 2/6] fix archiving on xcode --- .../internal/bridge/generator/bridge_type_info_generator.cpp.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in b/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in index 3cbd7362..3a57d5be 100644 --- a/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in +++ b/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in @@ -44,7 +44,7 @@ int main() @TYPE_INFO_QUERY_DECLS@ - static char arch_key[] = {'a','r','c','h','_','k','e','y','_',KEY}; + static char arch_key[] = {'a','r','c','h','_','k','e','y','_',KEY, '\0'}; required += 1; return required; From 11b1e30992b18af3f12c181bb6341df3d8535fdb Mon Sep 17 00:00:00 2001 From: Lee Maguire Date: Fri, 19 Jul 2024 15:34:01 +0100 Subject: [PATCH 3/6] add windows specific macros --- .../generator/bridge_type_info_generator.cpp.in | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in b/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in index 3a57d5be..79c79cc4 100644 --- a/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in +++ b/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in @@ -19,6 +19,18 @@ # define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' #elif defined(__ARM_ARCH_7S__) # define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#elif defined(_M_X64) +# define KEY '_','M','_','X','6','4' +#elif defined(__amd64__) +# define KEY '_','_','a','m','d','6','4','_','_' +#elif defined(_M_IX86) +# define KEY '_','M','_','I','X','8','6' +#elif defined(__i386__) +# define KEY '_','_','i','3','8','6','_','_' +#elif defined(_M_ARM) +# define KEY '_','M','_','A','R','M' +#elif defined(__arm__) +# define KEY '_','_','a','r','m','_','_' #endif int main() From 743b39ed34bfb6a811961a9785bcebf14ca8b7f8 Mon Sep 17 00:00:00 2001 From: Lee Maguire Date: Fri, 19 Jul 2024 16:06:45 +0100 Subject: [PATCH 4/6] add windows specific macros --- .../bridge/generator/bridge_type_info_generator.cpp.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in b/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in index 79c79cc4..7ea261a0 100644 --- a/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in +++ b/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in @@ -9,6 +9,8 @@ # define KEY '_','_','i','3','8','6' #elif defined(__x86_64) # define KEY '_','_','x','8','6','_','6','4' +#elif defined(__x86_64__) +# define KEY '_','_','x','8','6','_','6','4','_','_' #elif defined(__ppc__) # define KEY '_','_','p','p','c','_','_' #elif defined(__ppc64__) @@ -29,6 +31,8 @@ # define KEY '_','_','i','3','8','6','_','_' #elif defined(_M_ARM) # define KEY '_','M','_','A','R','M' +#elif defined(_M_ARM64) +# define KEY '_','M','_','A','R','M','6','4' #elif defined(__arm__) # define KEY '_','_','a','r','m','_','_' #endif From f3f1f6350ab1f613a5d8dec0277abf2b81c37515 Mon Sep 17 00:00:00 2001 From: Lee Maguire Date: Fri, 19 Jul 2024 16:55:33 +0100 Subject: [PATCH 5/6] add windows specific macros --- .../internal/bridge/generator/bridge_type_info_generator.cpp.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in b/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in index 7ea261a0..ccabbea9 100644 --- a/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in +++ b/src/cpprealm/internal/bridge/generator/bridge_type_info_generator.cpp.in @@ -61,7 +61,7 @@ int main() @TYPE_INFO_QUERY_DECLS@ static char arch_key[] = {'a','r','c','h','_','k','e','y','_',KEY, '\0'}; - required += 1; + required += arch_key[0]; return required; } \ No newline at end of file From b3ed782eca0eced97e825709ebdcc1a91f74f553 Mon Sep 17 00:00:00 2001 From: Lee Maguire Date: Fri, 19 Jul 2024 17:25:00 +0100 Subject: [PATCH 6/6] add windows specific macros --- .../internal/bridge/generator/bridge_type_info_parser.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpprealm/internal/bridge/generator/bridge_type_info_parser.cmake b/src/cpprealm/internal/bridge/generator/bridge_type_info_parser.cmake index 0561fb12..70ee6574 100644 --- a/src/cpprealm/internal/bridge/generator/bridge_type_info_parser.cmake +++ b/src/cpprealm/internal/bridge/generator/bridge_type_info_parser.cmake @@ -8,7 +8,6 @@ set(BRIDGE_TYPE_DECLS_TYPES "") set(BRIDGE_TYPE_DECLS_REQUIRES_ELSE_IF OFF) foreach(i ${compiled_string_literals}) - message(STATUS "${i}") if("${i}" MATCHES "${regex_realm}") set(BRIDGE_TYPE_DECLS_TYPES "${BRIDGE_TYPE_DECLS_TYPES} using ${CMAKE_MATCH_1} = std::aligned_storage<${CMAKE_MATCH_2}, ${CMAKE_MATCH_3}>::type;\n") elseif("${i}" MATCHES "${regex_arch}")