diff --git a/meta/recipes-devtools/python/python3-cython/0001-3.2.x-Shared-module-Use-SharedUtilitySourceDescripto.patch b/meta/recipes-devtools/python/python3-cython/0001-3.2.x-Shared-module-Use-SharedUtilitySourceDescripto.patch
new file mode 100644
index 0000000000..b57acb6969
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cython/0001-3.2.x-Shared-module-Use-SharedUtilitySourceDescripto.patch
@@ -0,0 +1,94 @@
+From f3cfdebd75374a29a930687c1f126282c51b7a92 Mon Sep 17 00:00:00 2001
+From: mv-python <matusvalo@users.noreply.github.com>
+Date: Fri, 12 Jun 2026 10:32:42 +0200
+Subject: [PATCH] [3.2.x] Shared module: Use `SharedUtilitySourceDescriptor`
+ instead of temporary directory (#7723) (GH-7739)
+
+This PR uses `SharedUtilitySourceDescriptor` instead of an empty pyx
+file in the temp dir. This simplifies the logic and also assures that
+`__pyx_f` is unchanged across builds.
+
+Backport of https://github.com/cython/cython/pull/7723
+Alternative to https://github.com/cython/cython/pull/7634
+
+Upstream-Status: Backport [https://github.com/cython/cython/commit/f3cfdebd75374a29a930687c1f126282c51b7a92]
+
+Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
+---
+ Cython/Build/SharedModule.py | 25 ++++++++-----------------
+ Cython/Compiler/Scanning.py  |  9 +++++++++
+ 2 files changed, 17 insertions(+), 17 deletions(-)
+
+diff --git a/Cython/Build/SharedModule.py b/Cython/Build/SharedModule.py
+index fed6263cd..45da4b462 100644
+--- a/Cython/Build/SharedModule.py
++++ b/Cython/Build/SharedModule.py
+@@ -1,13 +1,10 @@
+ import os
+-import re
+-import shutil
+-import tempfile
+ 
+ from Cython.Compiler import (
+     MemoryView, Code, Options, Pipeline, Errors, Main, Symtab
+ )
+ from Cython.Compiler.StringEncoding import EncodedString
+-from Cython.Compiler.Scanning import FileSourceDescriptor
++from Cython.Compiler.Scanning import SharedUtilitySourceDescriptor
+ 
+ 
+ def create_shared_library_pipeline(context, scope, options, result):
+@@ -72,23 +69,17 @@ def generate_shared_module(options):
+     Errors.open_listing_file(None)
+ 
+     dest_c_file = options.shared_c_file_path
++    pyx_file = os.path.splitext(dest_c_file)[0] + '.pyx'
+     module_name = os.path.splitext(os.path.basename(dest_c_file))[0]
+ 
+     context = Main.Context.from_options(options)
+     scope = Symtab.ModuleScope('MemoryView', parent_module = None, context = context, is_package=False)
+ 
+-    with tempfile.TemporaryDirectory() as tmpdirname:
+-        pyx_file = os.path.join(tmpdirname, f'{module_name}.pyx')
+-        c_file = os.path.join(tmpdirname, f'{module_name}.c')
+-        with open(pyx_file, 'w'):
+-            pass
+-        source_desc = FileSourceDescriptor(pyx_file)
+-        comp_src = Main.CompilationSource(source_desc, EncodedString(module_name), os.getcwd())
+-        result = Main.create_default_resultobj(comp_src, options)
+-
+-        pipeline = create_shared_library_pipeline(context, scope, options, result)
+-        err, enddata = Pipeline.run_pipeline(pipeline, comp_src)
+-        if err is None:
+-            shutil.copy(c_file, dest_c_file)
++    source_desc = SharedUtilitySourceDescriptor(pyx_file)
++    comp_src = Main.CompilationSource(source_desc, EncodedString(module_name), os.getcwd())
++    result = Main.create_default_resultobj(comp_src, options)
++
++    pipeline = create_shared_library_pipeline(context, scope, options, result)
++    err, enddata = Pipeline.run_pipeline(pipeline, comp_src)
+ 
+     return err, enddata
+diff --git a/Cython/Compiler/Scanning.py b/Cython/Compiler/Scanning.py
+index 2a8cb5a93..4cec7d1ed 100644
+--- a/Cython/Compiler/Scanning.py
++++ b/Cython/Compiler/Scanning.py
+@@ -281,6 +281,15 @@ class StringSourceDescriptor(SourceDescriptor):
+         return "<StringSourceDescriptor:%s>" % self.name
+ 
+ 
++class SharedUtilitySourceDescriptor(FileSourceDescriptor):
++    """
++    A specialized source descriptor for shared utility code only. Not part of public API.
++    """
++
++    def get_file_object(self, encoding=None, error_handling=None):
++        from io import StringIO
++        return StringIO('')
++
+ #------------------------------------------------------------------
+ 
+ class PyrexScanner(Scanner):
+-- 
+2.43.0
+
diff --git a/meta/recipes-devtools/python/python3-cython_3.2.5.bb b/meta/recipes-devtools/python/python3-cython_3.2.5.bb
index 373387576a..8bd68bd4df 100644
--- a/meta/recipes-devtools/python/python3-cython_3.2.5.bb
+++ b/meta/recipes-devtools/python/python3-cython_3.2.5.bb
@@ -13,6 +13,7 @@ inherit pypi setuptools3 cython
 
 SRC_URI += " \
     file://0001-Replace-not-predictable-build-path-prefix-with-hardc.patch \
+    file://0001-3.2.x-Shared-module-Use-SharedUtilitySourceDescripto.patch \
 "
 
 # No need to depend on self
