From fcfe4c3ad3826523e60f1478ecee2da363f379cd Mon Sep 17 00:00:00 2001 From: Jukka Lehtosalo Date: Mon, 19 Jan 2026 17:01:54 +0000 Subject: [PATCH 1/2] Move librt module files to dedicated subdirectories Move librt_internal.[ch] into mypyc/lib-rt/internal/ and librt_base64.[ch] into mypyc/lib-rt/base64/ to better reflect that these files implement separate librt submodules. Updated all references to point to the new locations: - mypyc/codegen/emitmodule.py: updated include paths - mypyc/build.py: updated source file paths - mypyc/lib-rt/setup.py: updated source file paths - mypy/cache.py: updated comment with new path Co-Authored-By: Claude Sonnet 4.5 --- mypy/cache.py | 2 +- mypyc/build.py | 4 ++-- mypyc/codegen/emitmodule.py | 4 ++-- mypyc/lib-rt/{ => base64}/librt_base64.c | 0 mypyc/lib-rt/{ => base64}/librt_base64.h | 0 mypyc/lib-rt/{ => internal}/librt_internal.c | 0 mypyc/lib-rt/{ => internal}/librt_internal.h | 0 mypyc/lib-rt/setup.py | 4 ++-- 8 files changed, 7 insertions(+), 7 deletions(-) rename mypyc/lib-rt/{ => base64}/librt_base64.c (100%) rename mypyc/lib-rt/{ => base64}/librt_base64.h (100%) rename mypyc/lib-rt/{ => internal}/librt_internal.c (100%) rename mypyc/lib-rt/{ => internal}/librt_internal.h (100%) diff --git a/mypy/cache.py b/mypy/cache.py index 832cfb4732ea..f67bd627d3b8 100644 --- a/mypy/cache.py +++ b/mypy/cache.py @@ -1,7 +1,7 @@ """ This module contains high-level logic for fixed format serialization. -Lower-level parts are implemented in C in mypyc/lib-rt/librt_internal.c +Lower-level parts are implemented in C in mypyc/lib-rt/internal/librt_internal.c Short summary of low-level functionality: * integers are automatically serialized as 1, 2, or 4 bytes, or arbitrary length. * str/bytes are serialized as size (1, 2, or 4 bytes) followed by bytes buffer. diff --git a/mypyc/build.py b/mypyc/build.py index ef5d00fca145..19826fd23fdd 100644 --- a/mypyc/build.py +++ b/mypyc/build.py @@ -53,12 +53,12 @@ class ModDesc(NamedTuple): LIBRT_MODULES = [ - ModDesc("librt.internal", ["librt_internal.c"], [], []), + ModDesc("librt.internal", ["internal/librt_internal.c"], [], []), ModDesc("librt.strings", ["librt_strings.c"], [], []), ModDesc( "librt.base64", [ - "librt_base64.c", + "base64/librt_base64.c", "base64/lib.c", "base64/codec_choose.c", "base64/tables/tables.c", diff --git a/mypyc/codegen/emitmodule.py b/mypyc/codegen/emitmodule.py index a345753a74dd..60f5e6755fa3 100644 --- a/mypyc/codegen/emitmodule.py +++ b/mypyc/codegen/emitmodule.py @@ -625,9 +625,9 @@ def generate_c_for_modules(self) -> list[tuple[str, str]]: ext_declarations.emit_line("#include ") ext_declarations.emit_line("#include ") if self.compiler_options.depends_on_librt_internal: - ext_declarations.emit_line("#include ") + ext_declarations.emit_line("#include ") if any(LIBRT_BASE64 in mod.dependencies for mod in self.modules.values()): - ext_declarations.emit_line("#include ") + ext_declarations.emit_line("#include ") if any(LIBRT_STRINGS in mod.dependencies for mod in self.modules.values()): ext_declarations.emit_line("#include ") # Include headers for conditional source files diff --git a/mypyc/lib-rt/librt_base64.c b/mypyc/lib-rt/base64/librt_base64.c similarity index 100% rename from mypyc/lib-rt/librt_base64.c rename to mypyc/lib-rt/base64/librt_base64.c diff --git a/mypyc/lib-rt/librt_base64.h b/mypyc/lib-rt/base64/librt_base64.h similarity index 100% rename from mypyc/lib-rt/librt_base64.h rename to mypyc/lib-rt/base64/librt_base64.h diff --git a/mypyc/lib-rt/librt_internal.c b/mypyc/lib-rt/internal/librt_internal.c similarity index 100% rename from mypyc/lib-rt/librt_internal.c rename to mypyc/lib-rt/internal/librt_internal.c diff --git a/mypyc/lib-rt/librt_internal.h b/mypyc/lib-rt/internal/librt_internal.h similarity index 100% rename from mypyc/lib-rt/librt_internal.h rename to mypyc/lib-rt/internal/librt_internal.h diff --git a/mypyc/lib-rt/setup.py b/mypyc/lib-rt/setup.py index 964b56e4b562..372213d992cc 100644 --- a/mypyc/lib-rt/setup.py +++ b/mypyc/lib-rt/setup.py @@ -89,7 +89,7 @@ def run(self) -> None: Extension( "librt.internal", [ - "librt_internal.c", + "internal/librt_internal.c", "init.c", "int_ops.c", "exc_ops.c", @@ -115,7 +115,7 @@ def run(self) -> None: Extension( "librt.base64", [ - "librt_base64.c", + "base64/librt_base64.c", "base64/lib.c", "base64/codec_choose.c", "base64/tables/tables.c", From 76f38a33eb8c34888b03bb23591c2bb010aa5e34 Mon Sep 17 00:00:00 2001 From: Jukka Lehtosalo Date: Thu, 22 Jan 2026 12:21:17 +0000 Subject: [PATCH 2/2] Also move librt.strings implementation --- mypyc/build.py | 4 ++-- mypyc/codegen/emitmodule.py | 2 +- mypyc/lib-rt/byteswriter_extra_ops.h | 2 +- mypyc/lib-rt/setup.py | 6 +++--- mypyc/lib-rt/{ => strings}/librt_strings.c | 0 mypyc/lib-rt/{ => strings}/librt_strings.h | 0 mypyc/lib-rt/stringwriter_extra_ops.h | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) rename mypyc/lib-rt/{ => strings}/librt_strings.c (100%) rename mypyc/lib-rt/{ => strings}/librt_strings.h (100%) diff --git a/mypyc/build.py b/mypyc/build.py index 19826fd23fdd..08c08685ea1e 100644 --- a/mypyc/build.py +++ b/mypyc/build.py @@ -53,8 +53,8 @@ class ModDesc(NamedTuple): LIBRT_MODULES = [ - ModDesc("librt.internal", ["internal/librt_internal.c"], [], []), - ModDesc("librt.strings", ["librt_strings.c"], [], []), + ModDesc("librt.internal", ["internal/librt_internal.c"], [], ["internal"]), + ModDesc("librt.strings", ["strings/librt_strings.c"], [], ["strings"]), ModDesc( "librt.base64", [ diff --git a/mypyc/codegen/emitmodule.py b/mypyc/codegen/emitmodule.py index 60f5e6755fa3..d56dfd766e1c 100644 --- a/mypyc/codegen/emitmodule.py +++ b/mypyc/codegen/emitmodule.py @@ -629,7 +629,7 @@ def generate_c_for_modules(self) -> list[tuple[str, str]]: if any(LIBRT_BASE64 in mod.dependencies for mod in self.modules.values()): ext_declarations.emit_line("#include ") if any(LIBRT_STRINGS in mod.dependencies for mod in self.modules.values()): - ext_declarations.emit_line("#include ") + ext_declarations.emit_line("#include ") # Include headers for conditional source files source_deps = collect_source_dependencies(self.modules) for source_dep in sorted(source_deps, key=lambda d: d.path): diff --git a/mypyc/lib-rt/byteswriter_extra_ops.h b/mypyc/lib-rt/byteswriter_extra_ops.h index 59410a077fcd..27645052c782 100644 --- a/mypyc/lib-rt/byteswriter_extra_ops.h +++ b/mypyc/lib-rt/byteswriter_extra_ops.h @@ -6,7 +6,7 @@ #include #include -#include "librt_strings.h" +#include "strings/librt_strings.h" static inline CPyTagged CPyBytesWriter_Len(PyObject *obj) { diff --git a/mypyc/lib-rt/setup.py b/mypyc/lib-rt/setup.py index 372213d992cc..a86e2367c1c0 100644 --- a/mypyc/lib-rt/setup.py +++ b/mypyc/lib-rt/setup.py @@ -96,20 +96,20 @@ def run(self) -> None: "pythonsupport.c", "getargsfast.c", ], - include_dirs=["."], + include_dirs=[".", "internal"], extra_compile_args=cflags, ), Extension( "librt.strings", [ - "librt_strings.c", + "strings/librt_strings.c", "init.c", "int_ops.c", "exc_ops.c", "pythonsupport.c", "getargsfast.c", ], - include_dirs=["."], + include_dirs=[".", "strings"], extra_compile_args=cflags, ), Extension( diff --git a/mypyc/lib-rt/librt_strings.c b/mypyc/lib-rt/strings/librt_strings.c similarity index 100% rename from mypyc/lib-rt/librt_strings.c rename to mypyc/lib-rt/strings/librt_strings.c diff --git a/mypyc/lib-rt/librt_strings.h b/mypyc/lib-rt/strings/librt_strings.h similarity index 100% rename from mypyc/lib-rt/librt_strings.h rename to mypyc/lib-rt/strings/librt_strings.h diff --git a/mypyc/lib-rt/stringwriter_extra_ops.h b/mypyc/lib-rt/stringwriter_extra_ops.h index 646199c697f6..e15eb1dd2156 100644 --- a/mypyc/lib-rt/stringwriter_extra_ops.h +++ b/mypyc/lib-rt/stringwriter_extra_ops.h @@ -6,7 +6,7 @@ #include #include -#include "librt_strings.h" +#include "strings/librt_strings.h" static inline CPyTagged CPyStringWriter_Len(PyObject *obj) {