new file mode 100644
@@ -0,0 +1,221 @@
+From 8e9892f08b1248dc03862da86915c2745e0ff7ec Mon Sep 17 00:00:00 2001
+From: "Andrew J. Hesford" <ajh@sideband.org>
+Date: Fri, 15 Jul 2022 10:33:02 -0400
+Subject: [PATCH] build_rust: remove linker handling that broke cross
+ compilation
+
+Upstream-Status: Submitted [https://github.com/PyO3/setuptools-rust/pull/269]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ setuptools_rust/build.py | 151 ++-------------------------------------
+ 1 file changed, 7 insertions(+), 144 deletions(-)
+
+diff --git a/setuptools_rust/build.py b/setuptools_rust/build.py
+index 4fe594b..e81ed8f 100644
+--- a/setuptools_rust/build.py
++++ b/setuptools_rust/build.py
+@@ -113,23 +113,10 @@ def build_extension(
+ self, ext: RustExtension, forced_target_triple: Optional[str] = None
+ ) -> List["_BuiltModule"]:
+
+- target_info = self._detect_rust_target(forced_target_triple)
+- if target_info is not None:
+- target_triple = target_info.triple
+- cross_lib = target_info.cross_lib
+- linker = target_info.linker
+- # We're ignoring target_info.linker_args for now because we're not
+- # sure if they will always do the right thing. Might help with some
+- # of the OS-specific logic if it does.
+-
+- else:
+- target_triple = None
+- cross_lib = None
+- linker = None
+-
++ target_triple = self._detect_rust_target(forced_target_triple)
+ rustc_cfgs = get_rustc_cfgs(target_triple)
+
+- env = _prepare_build_environment(cross_lib)
++ env = _prepare_build_environment()
+
+ if not os.path.exists(ext.path):
+ raise DistutilsFileError(
+@@ -150,9 +137,6 @@ def build_extension(
+
+ rustflags = []
+
+- if linker is not None:
+- rustflags.extend(["-C", "linker=" + linker])
+-
+ if ext._uses_exec_binding():
+ command = [self.cargo, "build", "--manifest-path", ext.path, *cargo_args]
+
+@@ -407,45 +391,12 @@ def _py_limited_api(self) -> _PyLimitedApi:
+
+ def _detect_rust_target(
+ self, forced_target_triple: Optional[str] = None
+- ) -> Optional["_TargetInfo"]:
++ ) -> Optional[str]:
+ assert self.plat_name is not None
+- cross_compile_info = _detect_unix_cross_compile_info()
+- if cross_compile_info is not None:
+- cross_target_info = cross_compile_info.to_target_info()
+- if forced_target_triple is not None:
+- if (
+- cross_target_info is not None
+- and not cross_target_info.is_compatible_with(forced_target_triple)
+- ):
+- self.warn(
+- f"Forced Rust target `{forced_target_triple}` is not "
+- f"compatible with deduced Rust target "
+- f"`{cross_target_info.triple}` - the built package "
+- f" may not import successfully once installed."
+- )
+-
+- # Forcing the target in a cross-compile environment; use
+- # the cross-compile information in combination with the
+- # forced target
+- return _TargetInfo(
+- forced_target_triple,
+- cross_compile_info.cross_lib,
+- cross_compile_info.linker,
+- cross_compile_info.linker_args,
+- )
+- elif cross_target_info is not None:
+- return cross_target_info
+- else:
+- raise DistutilsPlatformError(
+- "Don't know the correct rust target for system type "
+- f"{cross_compile_info.host_type}. Please set the "
+- "CARGO_BUILD_TARGET environment variable."
+- )
+-
+- elif forced_target_triple is not None:
++ if forced_target_triple is not None:
+ # Automatic target detection can be overridden via the CARGO_BUILD_TARGET
+ # environment variable or --target command line option
+- return _TargetInfo.for_triple(forced_target_triple)
++ return forced_target_triple
+
+ # Determine local rust target which needs to be "forced" if necessary
+ local_rust_target = _adjusted_local_rust_target(self.plat_name)
+@@ -457,7 +408,7 @@ def _detect_rust_target(
+ # check for None first to avoid calling to rustc if not needed
+ and local_rust_target != get_rust_host()
+ ):
+- return _TargetInfo.for_triple(local_rust_target)
++ return local_rust_target
+
+ return None
+
+@@ -547,91 +498,6 @@ class _BuiltModule(NamedTuple):
+ path: str
+
+
+-class _TargetInfo(NamedTuple):
+- triple: str
+- cross_lib: Optional[str]
+- linker: Optional[str]
+- linker_args: Optional[str]
+-
+- @staticmethod
+- def for_triple(triple: str) -> "_TargetInfo":
+- return _TargetInfo(triple, None, None, None)
+-
+- def is_compatible_with(self, target: str) -> bool:
+- if self.triple == target:
+- return True
+-
+- # the vendor field can be ignored, so x86_64-pc-linux-gnu is compatible
+- # with x86_64-unknown-linux-gnu
+- if _replace_vendor_with_unknown(self.triple) == target:
+- return True
+-
+- return False
+-
+-
+-class _CrossCompileInfo(NamedTuple):
+- host_type: str
+- cross_lib: Optional[str]
+- linker: Optional[str]
+- linker_args: Optional[str]
+-
+- def to_target_info(self) -> Optional[_TargetInfo]:
+- """Maps this cross compile info to target info.
+-
+- Returns None if the corresponding target information could not be
+- deduced.
+- """
+- # hopefully an exact match
+- targets = get_rust_target_list()
+- if self.host_type in targets:
+- return _TargetInfo(
+- self.host_type, self.cross_lib, self.linker, self.linker_args
+- )
+-
+- # the vendor field can be ignored, so x86_64-pc-linux-gnu is compatible
+- # with x86_64-unknown-linux-gnu
+- without_vendor = _replace_vendor_with_unknown(self.host_type)
+- if without_vendor is not None and without_vendor in targets:
+- return _TargetInfo(
+- without_vendor, self.cross_lib, self.linker, self.linker_args
+- )
+-
+- return None
+-
+-
+-def _detect_unix_cross_compile_info() -> Optional["_CrossCompileInfo"]:
+- # See https://github.com/PyO3/setuptools-rust/issues/138
+- # This is to support cross compiling on *NIX, where plat_name isn't
+- # necessarily the same as the system we are running on. *NIX systems
+- # have more detailed information available in sysconfig. We need that
+- # because plat_name doesn't give us information on e.g., glibc vs musl.
+- host_type = sysconfig.get_config_var("HOST_GNU_TYPE")
+- build_type = sysconfig.get_config_var("BUILD_GNU_TYPE")
+-
+- if not host_type or host_type == build_type:
+- # not *NIX, or not cross compiling
+- return None
+-
+- if "apple-darwin" in host_type and (build_type and "apple-darwin" in build_type):
+- # On macos and the build and host differ. This is probably an arm
+- # Python which was built on x86_64. Don't try to handle this for now.
+- # (See https://github.com/PyO3/setuptools-rust/issues/192)
+- return None
+-
+- stdlib = sysconfig.get_path("stdlib")
+- assert stdlib is not None
+- cross_lib = os.path.dirname(stdlib)
+-
+- bldshared = sysconfig.get_config_var("BLDSHARED")
+- if not bldshared:
+- linker = None
+- linker_args = None
+- else:
+- [linker, _, linker_args] = bldshared.partition(" ")
+-
+- return _CrossCompileInfo(host_type, cross_lib, linker, linker_args)
+-
+-
+ def _replace_vendor_with_unknown(target: str) -> Optional[str]:
+ """Replaces vendor in the target triple with unknown.
+
+@@ -644,7 +510,7 @@ def _replace_vendor_with_unknown(target: str) -> Optional[str]:
+ return "-".join(components)
+
+
+-def _prepare_build_environment(cross_lib: Optional[str]) -> Dict[str, str]:
++def _prepare_build_environment() -> Dict[str, str]:
+ """Prepares environment variables to use when executing cargo build."""
+
+ # Make sure that if pythonXX-sys is used, it builds against the current
+@@ -665,9 +531,6 @@ def _prepare_build_environment(cross_lib: Optional[str]) -> Dict[str, str]:
+ }
+ )
+
+- if cross_lib:
+- env.setdefault("PYO3_CROSS_LIB_DIR", cross_lib)
+-
+ env.pop("CARGO", None)
+ return env
+
similarity index 84%
rename from meta/recipes-devtools/python/python3-setuptools-rust_1.3.0.bb
rename to meta/recipes-devtools/python/python3-setuptools-rust_1.4.1.bb
@@ -9,8 +9,9 @@ BUGTRACKER = "https://github.com/PyO3/setuptools-rust/issues"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=011cd92e702dd9e6b1a26157b6fd53f5"
-SRC_URI = "https://files.pythonhosted.org/packages/67/08/e1aa2c582c62ac76e4d60f8e454bd3bba933781a06a88b4e38797445822a/setuptools-rust-${PV}.tar.gz"
-SRC_URI[sha256sum] = "958c5bf4ab6483d59dab888538121871cc5006354a42fb0fbd50acf03caad1de"
+SRC_URI = "https://files.pythonhosted.org/packages/67/08/e1aa2c582c62ac76e4d60f8e454bd3bba933781a06a88b4e38797445822a/setuptools-rust-${PV}.tar.gz \
+ file://8e9892f08b1248dc03862da86915c2745e0ff7ec.patch"
+SRC_URI[sha256sum] = "18ff850831f58ee21d5783825c99fad632da21e47645e9427fd7dec048029e76"
inherit cargo pypi python_setuptools_build_meta
Signed-off-by: Alexander Kanavin <alex@linutronix.de> --- ...92f08b1248dc03862da86915c2745e0ff7ec.patch | 221 ++++++++++++++++++ ....0.bb => python3-setuptools-rust_1.4.1.bb} | 5 +- 2 files changed, 224 insertions(+), 2 deletions(-) create mode 100644 meta/recipes-devtools/python/python3-setuptools-rust/8e9892f08b1248dc03862da86915c2745e0ff7ec.patch rename meta/recipes-devtools/python/{python3-setuptools-rust_1.3.0.bb => python3-setuptools-rust_1.4.1.bb} (84%)