From fa44a0793854d0480831db664b53b8f27c2836d5 Mon Sep 17 00:00:00 2001 From: PJ Reiniger Date: Fri, 4 Nov 2022 23:03:49 -0400 Subject: [PATCH] [upstream-utils][mpack] Add upstream util for mpack (#4500) --- .github/workflows/upstream-utils.yml | 4 + .../0001-Don-t-emit-inline-defs.patch | 22 +++ .../0002-Update-amalgamation-script.patch | 24 +++ .../0003-Use-namespace-for-C.patch | 158 ++++++++++++++++++ upstream_utils/update_mpack.py | 59 +++++++ .../native/thirdparty/mpack/src/mpack.cpp | 12 +- 6 files changed, 278 insertions(+), 1 deletion(-) create mode 100644 upstream_utils/mpack_patches/0001-Don-t-emit-inline-defs.patch create mode 100644 upstream_utils/mpack_patches/0002-Update-amalgamation-script.patch create mode 100644 upstream_utils/mpack_patches/0003-Use-namespace-for-C.patch create mode 100755 upstream_utils/update_mpack.py diff --git a/.github/workflows/upstream-utils.yml b/.github/workflows/upstream-utils.yml index 445dcc7d1d3..f5d96a9fcd5 100644 --- a/.github/workflows/upstream-utils.yml +++ b/.github/workflows/upstream-utils.yml @@ -49,6 +49,10 @@ jobs: run: | cd upstream_utils ./update_llvm.py + - name: Run update_mpack.py + run: | + cd upstream_utils + ./update_mpack.py - name: Run update_stack_walker.py run: | cd upstream_utils diff --git a/upstream_utils/mpack_patches/0001-Don-t-emit-inline-defs.patch b/upstream_utils/mpack_patches/0001-Don-t-emit-inline-defs.patch new file mode 100644 index 00000000000..a899a5ef5cb --- /dev/null +++ b/upstream_utils/mpack_patches/0001-Don-t-emit-inline-defs.patch @@ -0,0 +1,22 @@ +From 05864e768ca1458c1e24f433d091306a7d47562b Mon Sep 17 00:00:00 2001 +From: PJ Reiniger +Date: Sat, 29 Oct 2022 12:09:03 -0400 +Subject: [PATCH 1/3] Don't emit inline defs + +--- + src/mpack/mpack-platform.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/mpack/mpack-platform.c b/src/mpack/mpack-platform.c +index 6599e1f..d4a2fa3 100644 +--- a/src/mpack/mpack-platform.c ++++ b/src/mpack/mpack-platform.c +@@ -24,7 +24,7 @@ + // standalone definitions of all (non-static) inline functions in MPack. + + #define MPACK_INTERNAL 1 +-#define MPACK_EMIT_INLINE_DEFS 1 ++#define MPACK_EMIT_INLINE_DEFS 0 + + #include "mpack-platform.h" + #include "mpack.h" diff --git a/upstream_utils/mpack_patches/0002-Update-amalgamation-script.patch b/upstream_utils/mpack_patches/0002-Update-amalgamation-script.patch new file mode 100644 index 00000000000..eabf1546f12 --- /dev/null +++ b/upstream_utils/mpack_patches/0002-Update-amalgamation-script.patch @@ -0,0 +1,24 @@ +From d4d045c843d4b4de747d800e570c32cff3759a80 Mon Sep 17 00:00:00 2001 +From: PJ Reiniger +Date: Sat, 29 Oct 2022 12:16:36 -0400 +Subject: [PATCH 2/3] Update amalgamation script + +--- + tools/amalgamate.sh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tools/amalgamate.sh b/tools/amalgamate.sh +index 2e24e27..4dfe999 100755 +--- a/tools/amalgamate.sh ++++ b/tools/amalgamate.sh +@@ -74,8 +74,8 @@ echo -e "#endif\n" >> $HEADER + + # assemble source + echo -e "#define MPACK_INTERNAL 1" >> $SOURCE +-echo -e "#define MPACK_EMIT_INLINE_DEFS 1\n" >> $SOURCE +-echo -e "#include \"mpack.h\"\n" >> $SOURCE ++echo -e "#define MPACK_EMIT_INLINE_DEFS 0\n" >> $SOURCE ++echo -e "#include \"wpi/mpack.h\"\n" >> $SOURCE + for f in $SOURCES; do + echo -e "\n/* $f.c */" >> $SOURCE + sed -e 's@^#include ".*@/* & */@' -e '0,/^ \*\/$/d' src/$f >> $SOURCE diff --git a/upstream_utils/mpack_patches/0003-Use-namespace-for-C.patch b/upstream_utils/mpack_patches/0003-Use-namespace-for-C.patch new file mode 100644 index 00000000000..4adb7f80f10 --- /dev/null +++ b/upstream_utils/mpack_patches/0003-Use-namespace-for-C.patch @@ -0,0 +1,158 @@ +From 37854ea8a4a4b387940719c40bd32792f1e6e027 Mon Sep 17 00:00:00 2001 +From: PJ Reiniger +Date: Sat, 29 Oct 2022 12:22:50 -0400 +Subject: [PATCH 3/3] Use namespace for C++ + +--- + src/mpack/mpack-common.c | 2 ++ + src/mpack/mpack-expect.c | 2 ++ + src/mpack/mpack-node.c | 2 ++ + src/mpack/mpack-platform.c | 2 ++ + src/mpack/mpack-platform.h | 2 +- + src/mpack/mpack-reader.c | 2 ++ + src/mpack/mpack-writer.c | 2 ++ + src/mpack/mpack-writer.h | 3 ++- + 8 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/src/mpack/mpack-common.c b/src/mpack/mpack-common.c +index 2c133a3..dc7207f 100644 +--- a/src/mpack/mpack-common.c ++++ b/src/mpack/mpack-common.c +@@ -24,6 +24,7 @@ + #include "mpack-common.h" + + MPACK_SILENCE_WARNINGS_BEGIN ++namespace mpack { + + const char* mpack_error_to_string(mpack_error_t error) { + #if MPACK_STRINGS +@@ -748,4 +749,5 @@ void mpack_print_file_callback(void* context, const char* data, size_t count) { + } + #endif + ++} // namespace mpack + MPACK_SILENCE_WARNINGS_END +diff --git a/src/mpack/mpack-expect.c b/src/mpack/mpack-expect.c +index 81576d1..6232a67 100644 +--- a/src/mpack/mpack-expect.c ++++ b/src/mpack/mpack-expect.c +@@ -24,6 +24,7 @@ + #include "mpack-expect.h" + + MPACK_SILENCE_WARNINGS_BEGIN ++namespace mpack { + + #if MPACK_EXPECT + +@@ -880,4 +881,5 @@ size_t mpack_expect_key_cstr(mpack_reader_t* reader, const char* keys[], bool fo + + #endif + ++} // namespace mpack + MPACK_SILENCE_WARNINGS_END +diff --git a/src/mpack/mpack-node.c b/src/mpack/mpack-node.c +index 3d4b0f4..aba9897 100644 +--- a/src/mpack/mpack-node.c ++++ b/src/mpack/mpack-node.c +@@ -24,6 +24,7 @@ + #include "mpack-node.h" + + MPACK_SILENCE_WARNINGS_BEGIN ++namespace mpack { + + #if MPACK_NODE + +@@ -2401,4 +2402,5 @@ mpack_node_t mpack_node_map_value_at(mpack_node_t node, size_t index) { + + #endif + ++} // namespace mpack + MPACK_SILENCE_WARNINGS_END +diff --git a/src/mpack/mpack-platform.c b/src/mpack/mpack-platform.c +index d4a2fa3..75d2de3 100644 +--- a/src/mpack/mpack-platform.c ++++ b/src/mpack/mpack-platform.c +@@ -30,6 +30,7 @@ + #include "mpack.h" + + MPACK_SILENCE_WARNINGS_BEGIN ++namespace mpack { + + #if MPACK_DEBUG + +@@ -218,4 +219,5 @@ void* mpack_realloc(void* old_ptr, size_t used_size, size_t new_size) { + } + #endif + ++} // namespace mpack + MPACK_SILENCE_WARNINGS_END +diff --git a/src/mpack/mpack-platform.h b/src/mpack/mpack-platform.h +index 79604c9..27a2f9e 100644 +--- a/src/mpack/mpack-platform.h ++++ b/src/mpack/mpack-platform.h +@@ -1043,7 +1043,7 @@ void mpack_assert_fail(const char* message); + */ + + #ifdef __cplusplus +- #define MPACK_EXTERN_C_BEGIN extern "C" { ++ #define MPACK_EXTERN_C_BEGIN namespace mpack { + #define MPACK_EXTERN_C_END } + #else + #define MPACK_EXTERN_C_BEGIN /*nothing*/ +diff --git a/src/mpack/mpack-reader.c b/src/mpack/mpack-reader.c +index c6d2223..a135879 100644 +--- a/src/mpack/mpack-reader.c ++++ b/src/mpack/mpack-reader.c +@@ -24,6 +24,7 @@ + #include "mpack-reader.h" + + MPACK_SILENCE_WARNINGS_BEGIN ++namespace mpack { + + #if MPACK_READER + +@@ -1284,4 +1285,5 @@ void mpack_print_stdfile_to_callback(FILE* file, mpack_print_callback_t callback + + #endif + ++} // namespace mpack + MPACK_SILENCE_WARNINGS_END +diff --git a/src/mpack/mpack-writer.c b/src/mpack/mpack-writer.c +index 4d052b1..9630d9e 100644 +--- a/src/mpack/mpack-writer.c ++++ b/src/mpack/mpack-writer.c +@@ -24,6 +24,7 @@ + #include "mpack-writer.h" + + MPACK_SILENCE_WARNINGS_BEGIN ++namespace mpack { + + #if MPACK_WRITER + +@@ -1772,4 +1773,5 @@ void mpack_complete_array(mpack_writer_t* writer) { + #endif // MPACK_BUILDER + #endif // MPACK_WRITER + ++} // namespace mpack + MPACK_SILENCE_WARNINGS_END +diff --git a/src/mpack/mpack-writer.h b/src/mpack/mpack-writer.h +index c239ee6..abeee1a 100644 +--- a/src/mpack/mpack-writer.h ++++ b/src/mpack/mpack-writer.h +@@ -1168,6 +1168,7 @@ MPACK_EXTERN_C_END + + #if defined(__cplusplus) || defined(MPACK_DOXYGEN) + ++namespace mpack { + /** + * @name C++ write overloads + * @{ +@@ -1304,7 +1305,7 @@ MPACK_INLINE void mpack_write_kv(mpack_writer_t* writer, const char *key, const + /** + * @} + */ +- ++} // namespace mpack + #endif /* __cplusplus */ + + /** diff --git a/upstream_utils/update_mpack.py b/upstream_utils/update_mpack.py new file mode 100755 index 00000000000..25eabfc4939 --- /dev/null +++ b/upstream_utils/update_mpack.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 + +import os +import shutil +import subprocess + +from upstream_utils import ( + get_repo_root, + clone_repo, + walk_cwd_and_copy_if, + git_am, +) + + +def main(): + upstream_root = clone_repo("https://github.com/ludocode/mpack", "v1.1") + wpilib_root = get_repo_root() + wpiutil = os.path.join(wpilib_root, "wpiutil") + + # Delete old install + for d in [ + "src/main/native/thirdparty/mpack/src", + "src/main/native/thirdparty/mpack/include", + ]: + shutil.rmtree(os.path.join(wpiutil, d), ignore_errors=True) + + # Apply patches to upstream Git repo + os.chdir(upstream_root) + + for f in [ + "0001-Don-t-emit-inline-defs.patch", + "0002-Update-amalgamation-script.patch", + "0003-Use-namespace-for-C.patch", + ]: + git_am( + os.path.join(wpilib_root, "upstream_utils/mpack_patches", f), + ) + + # Run the amalgmation script + subprocess.check_call(["bash", "tools/amalgamate.sh"]) + + # Copy the files + amalgamation_source_dir = os.path.join( + ".", ".build", "amalgamation", "src", "mpack" + ) + os.chdir(amalgamation_source_dir) + + walk_cwd_and_copy_if( + lambda dp, f: f.endswith(".h"), + os.path.join(wpiutil, "src/main/native/thirdparty/mpack/include/wpi"), + ) + walk_cwd_and_copy_if( + lambda dp, f: f.endswith(".c"), + os.path.join(wpiutil, "src/main/native/thirdparty/mpack/src"), + ) + + +if __name__ == "__main__": + main() diff --git a/wpiutil/src/main/native/thirdparty/mpack/src/mpack.cpp b/wpiutil/src/main/native/thirdparty/mpack/src/mpack.cpp index fbcb6a4207b..af5fbd0f960 100644 --- a/wpiutil/src/main/native/thirdparty/mpack/src/mpack.cpp +++ b/wpiutil/src/main/native/thirdparty/mpack/src/mpack.cpp @@ -237,6 +237,7 @@ void* mpack_realloc(void* old_ptr, size_t used_size, size_t new_size) { } #endif +} // namespace mpack MPACK_SILENCE_WARNINGS_END /* mpack/mpack-common.c.c */ @@ -246,6 +247,7 @@ MPACK_SILENCE_WARNINGS_END /* #include "mpack-common.h" */ MPACK_SILENCE_WARNINGS_BEGIN +namespace mpack { const char* mpack_error_to_string(mpack_error_t error) { #if MPACK_STRINGS @@ -970,6 +972,7 @@ void mpack_print_file_callback(void* context, const char* data, size_t count) { } #endif +} // namespace mpack MPACK_SILENCE_WARNINGS_END /* mpack/mpack-writer.c.c */ @@ -979,6 +982,7 @@ MPACK_SILENCE_WARNINGS_END /* #include "mpack-writer.h" */ MPACK_SILENCE_WARNINGS_BEGIN +namespace mpack { #if MPACK_WRITER @@ -2727,6 +2731,7 @@ void mpack_complete_array(mpack_writer_t* writer) { #endif // MPACK_BUILDER #endif // MPACK_WRITER +} // namespace mpack MPACK_SILENCE_WARNINGS_END /* mpack/mpack-reader.c.c */ @@ -2736,6 +2741,7 @@ MPACK_SILENCE_WARNINGS_END /* #include "mpack-reader.h" */ MPACK_SILENCE_WARNINGS_BEGIN +namespace mpack { #if MPACK_READER @@ -3996,6 +4002,7 @@ void mpack_print_stdfile_to_callback(FILE* file, mpack_print_callback_t callback #endif +} // namespace mpack MPACK_SILENCE_WARNINGS_END /* mpack/mpack-expect.c.c */ @@ -4005,6 +4012,7 @@ MPACK_SILENCE_WARNINGS_END /* #include "mpack-expect.h" */ MPACK_SILENCE_WARNINGS_BEGIN +namespace mpack { #if MPACK_EXPECT @@ -4861,6 +4869,7 @@ size_t mpack_expect_key_cstr(mpack_reader_t* reader, const char* keys[], bool fo #endif +} // namespace mpack MPACK_SILENCE_WARNINGS_END /* mpack/mpack-node.c.c */ @@ -4870,6 +4879,7 @@ MPACK_SILENCE_WARNINGS_END /* #include "mpack-node.h" */ MPACK_SILENCE_WARNINGS_BEGIN +namespace mpack { #if MPACK_NODE @@ -7247,5 +7257,5 @@ mpack_node_t mpack_node_map_value_at(mpack_node_t node, size_t index) { #endif -} // namespace wpi +} // namespace mpack MPACK_SILENCE_WARNINGS_END