bazel-contrib / bazel-contrib/rules_python

Fixing search path of boostrapped Python toolchain dylib is not hermetic

未关闭
#3,223 9 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
need: upstream support type: toolchain
主要语言
Starlark
星标
688
派生
721
平均合并
15 小时 7 分钟
30 天内合并 PR
76

描述

Change #2089 breaks multi-platform builds. The contents of `libpython.dylib` differ depending on which host machine runs the build, since `if "darwin" in platform and "osx" == repo_utils.get_platforms_os_name(rctx)` checks the host machine not the execution platform. This change, if it has to happen conditionally, needs to happen in a build target instead.

```
$ diffoscope /tmp/local.libpython3.11.dylib /tmp/remote.libpython3.11.dylib
--- /tmp/local.libpython3.11.dylib
+++ /tmp/remote.libpython3.11.dylib
├── arm64
│ ├── otool -arch arm64 -h {}
│ │ @@ -1,3 +1,3 @@
│ │ Mach header
│ │ magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
│ │ - 0xfeedfacf 16777228 0 0x00 6 32 4544 0x00100085
│ │ + 0xfeedfacf 16777228 0 0x00 6 32 4552 0x00100085
│ ├── otool -arch arm64 -L {}
│ │ @@ -1,8 +1,8 @@
│ │ - @rpath/libpython3.11.dylib (compatibility version 3.11.0, current version 3.11.0)
│ │ + /install/lib/libpython3.11.dylib (compatibility version 3.11.0, current version 3.11.0)
│ │ /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1336.61.1)
│ │ /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
│ │ /usr/lib/libpanel.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
│ │ /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 2202.0.0)
│ │ /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
│ │ /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration (compatibility version 1.0.0, current version 1296.60.3)
```

_Originally posted by @brentleyjones in https://github.com/bazel-contrib/rules_python/issues/2089#issuecomment-3234021683_

贡献指南

打开贡献指南

调研方向

首先检查更改 #2089 以及包含 libpython.dylib 平台检查的代码,重点确认它读取的是主机平台还是执行平台。重现本地与远程之间的 diffoscope 比较,然后验证多平台构建无论主机机器为何都能生成内容相同的 dylib。

由索引模型根据 Issue 内容生成。

评估

技术栈
python
领域
build-system
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。