在Bazel中为rules_foreign_cc实现封闭性autotools构建遇阻
问题:rules_foreign_cc构建autotools封闭环境时runfiles路径失效
背景
- 目标是为基于autotools的项目搭建rules_foreign_cc封闭构建环境,目前foreign_cc原生不支持autotools的封闭构建
- 使用
rules_perl包装autotools的Shell/Perl脚本,为foreign_cc定义配套工具链 rules_perl会将Perl脚本封装在一个小型Shell脚本中,该脚本依赖相对路径查找runfiles来配置Perl环境并调用目标脚本
核心问题
foreign_cc的configure_make规则会创建目录,将工具链命令(即rules_perl封装后的Shell脚本)的软链接放入该目录并添加至PATH,但通过软链接调用脚本时,脚本无法通过相对路径找到对应的runfiles,导致执行失败。
已尝试的方案及问题
临时方案:解析软链接获取实际路径
考虑在封装的Shell脚本中解析软链接得到脚本实际路径,以此定位runfiles,但希望借助Bazel的依赖追踪能力实现更规范的解决方案。修改foreign_cc代码枚举runfiles
尝试通过工具目标的default_runfiles属性枚举runfiles,但未生效,推测tool.target.default_runfiles.files.to_list()返回空列表。原因在于foreign_cc并非通过Bazel创建软链接,而是自行生成脚本创建,且该脚本未处理runfiles的软链接逻辑。
更新发现与下一步计划
- 验证结论:Bazel中使用工具链的规则无法直接访问工具链自身的runfiles
- 计划方案:在工具链规则中扩展所有runfiles路径,将其保存至工具链提供者中,后续尝试实现该方案
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

