已开启
feat: refine iOS LTO staticlib #605
feat: refine iOS LTO staticlib #605
已开启
wangyang594创建于 14 天前
wangyang594仓颉Developer
14 天前

Change Details (Required)

lld/MachO

  • -staticlib 选项Options.td / Driver.cpp / Config.h):新增 -staticlib flag;config->staticlib 控制编译完 bitcode 后即返回(跳过 replaceCommonSymbols 及后续最终链接),产出静态库 archive 而非 dylib。
  • LTO.cpp createConfig:新增 EnablePackageVisibility 总开关(hideAllVisiblePkgs || hasMatchedVisiblePkg),门控 HiddenGUIDs 填充——普通 LTO 链接(iOS 可执行/dylib/无 --visible-pkgs 的 archive)EnablePackageVisibility=false,永不填充 HiddenGUIDs,保护非静态库最终产物的符号不被误隐藏。
  • LTO.cpp BitcodeCompiler::addstaticlib 时默认 exportDynamicExportDynamic 仅由真正定义该 IR 符号的文件标记(防止由别的文件提供的引用污染 GlobalResolution,导致不可见包符号被错误保留为 external)。visible-pkg 符号得 ExportDynamic=true,故后续 !ExportDynamic 测试将其排除在 HiddenGUIDs 之外,保持 external。

llvm/lib/LTO

  • Config.h:新增 HiddenGUIDs(需隐藏符号 GUID 集,仅 ThinLTO backend 消费)与 EnablePackageVisibility(总开关,默认 false)。
  • LTO.cpp runThinLTO:在 ThinLTO 路径填充 HiddenGUIDs——Prevailing && !ExportDynamic 的符号。
  • LTO.cpp computeLTOCacheKey:将 HiddenGUIDs 排序后哈希进 cache key,防止不同包可见性配置的缓存对象混用。
  • LTOBackend.cpp thinBackend hide-loop:包可见性改写器,对 HiddenGUIDs 命中的 GlobalVariable/Function/Alias setVisibility(HiddenVisibility)(Mach-O 产出 N_PEXT:跨 partition/archive 可链接,库外不可见);豁免 llvm.used/llvm.compiler.used pinned 符号(UsedGVs,如包 init __CGP4... 须保持可外部调用);!isLocalLinkage 守卫让已是 't'(local)的符号保持不变。

Change Type (Required)

Please describe the type of changes in this Pull Request (reason). Simply save and click the checkbox, or when editing, change [ ] to [x] for the relevant item.

Self-Check of Changes (Required)

Please do not modify or delete the following options. Simply save and click the checkbox, or when editing, change [ ] to [x] for the relevant item.

Platform Differences:

Affected Components:

Local Compilation Verification Results:

Local Test Case Verification Results:

image.png

https://gitcode.com/Cangjie/cangjie_compiler/issues/1025

likedislike
CLA协议签署
当前Pull Request的提交暂无外部代码贡献者
合并受阻
Wwangyang594仓颉Developer
14 天前 关联了issue:[Feature]: 优化 iOS LTO
cangjie-ci成员
14 天前 评论:

PR创建成功通知 | 感谢您的贡献 🎉

您好!系统已检测到您成功创建 Pull Request(PR),感谢您对项目的支持与参与!以下几点需要您着重关注:

一、PR必须关联Issue ❗️

触发门禁检查的必要步骤:在PR描述框输入Issue完整链接,完成Issue关联

请注意,一个 Issue 不能同时关联同一 base 仓库内同一个分支的多个开启状态的 PR

二、门禁触发规则 🔧

  1. 门禁类型判定:由Issue关联的PR所属代码仓数量决定
    • 关联多个代码仓PR:触发「多仓联合门禁」
    • 关联单个代码仓PR:触发「单仓门禁」
  2. 启动指令与检查范围:需主动回复指令:
    • 回复 "start build":执行Cangjie的主要基础检查,包含commit格式检查、静态告警分析、OAT开源声明检查、多平台构建、单元/集成测试等
    • 关联同一issue的多个PR,仅需在任意一个PR里回复触发一次门禁,该PR门禁通过后,所有PR都会添加Label和测试人
    • 每个pr只能同时运行一条CI流水线,如需重新启动,请先关闭运行中的,再评论触发门禁
    • Markdown修改仅触发文档类构建测试门禁,不会触发Cangjie的编译测试门禁
    • commit 信息格式请遵循:Conventional Commits 规范
    • 请保证每一条 commit 都已添加 Signed-Off-By 信息
    • 回复 "start build cov":执行覆盖率构建工程,生成该提交的增量代码覆盖率报告

三、合入条件 ⚠️

  • 满足最低评审人数,且评审问题需全部解决;
  • 禁止合入本人创建的PR,需由其他协作者操作;
  • 合并前确保关联流水线任务运行成功(build-test-passed);
  • 需求类覆盖率门禁:当关联的 Issue 标题以 [feature]: 开头(需求类 Issue)时,联合提交中属于 cangjie_compilercangjie_runtimecangjie_stdxcangjie_toolsllvm-project 仓库的 PR,必须先回复 "start build cov" 触发增量覆盖率流水线并通过,使 PR 获得 cov-test-passed 标签后方可合入。

四、合并PR ✅

回复 "start merge",CI流水线会自动检查所有关联PR的状态、版本号标签、检视意见密度、兼容性、需求类覆盖率门禁,若所有PR都满足合并条件,则将会同时合并所有PR。若存在不满足合并条件的PR,则不会合并任何PR。

如果希望不进行兼容性相关的检测,请任一合法审查人复制以下内容,在 start merge 前提交评论:

本 pr 不需要兼容性相关检测,对于引发的任何兼容性问题(即由于本 pr 合入将导致用户需适配代码的话),由本人承担。

If you wish to avoid compatibility-related checks, please have any approver copy the following content and submit it as a comment before sending start merge:

This PR does not require compatibility-related checks. For any compatibility issues caused by this PR (i.e., if the integration of this PR will require users to adapt their code), I will take full responsibility.

五、补充说明 📢

likedislike
Ccangjie-ci维护者
14 天前 添加了label:1.3.0-alpha.03waiting-start-build
Ccangjie-ci维护者
14 天前 重置了测试状态
Wwangyang594仓颉Developer
14 天前 修改了pull request 的描述
此处折叠了87条消息 查看更多
Ccangjie-ci维护者
2 天前 添加了label:CI-running
Ccangjie-ci维护者
2 天前 通过测试
cangjie-ci成员
2 天前 评论:

🔨 构建/测试门禁

构建/测试门禁已通过

您提交的 PR 已顺利通过全部门禁检查流程,当前状态符合合入标准。具体检查结果如下:

  • Commit 检查:代码提交信息规范性、完整性、Signed Off信息验证通过,无格式或逻辑问题✓;
  • 代码构建:编译过程无报错,依赖项加载正常,构建产物完整性达标🔧;
  • 测试验证:单元测试、集成测试等各类用例执行完毕,全部通过验证🧪。

目前该 PR 已完全具备合入条件,可按项目流程推进后续合入操作。感谢您的严谨开发与协作,期待代码顺利合入🎉!

likedislike
Ccangjie-ci维护者
2 天前 删除了label:CI-running
Ccangjie-ci维护者
2 天前 添加了label:build-test-passed