Kotlin Native 梳理
最近在 kotlin/native 上适配鸿蒙,感觉坑很多。而且 kotlin/native 相当于用 kotlin 写 c/c++,出现内存问题,一样挠头
其次,kotlin/native 因为要适配 iOS 的 platform,和 xcode 绑定的也很死,同时自己又和 llvm 绑定的很死,编译的时候有各种问题,比如 kotlin 1.9.x 没法和 xcode16 一起使用···
总之,最终在 kotlin/native 上替换了官方 llvm11 到 llvm12 适配了鸿蒙,但是还没有经过线上测试(ksp 生成鸿蒙 napi 胶水代码,又是一件头疼的事情),目前还想和官方保持一致使用 llvm11,但是鸿蒙单独使用 llvm12,所以还需要一个隔离的过程
以下是目前的一些理解(当然,可能不准确)
kotlin 2.0.21 适配 ohos 一些通用问题
llvm 版本
一直到 kotlin 2.1.0 之前 kotlin/native 都是使用的 llvm 11.1.0
鸿蒙 3.2.X 使用的 llvm 12.0.1,5.X 使用的 15.0.4
鸿蒙后面简称 ohos
我尝试过在 kotlin 2.0.21 上使用 ohos 15.0.4 的版本,指定 llvm home path,报错一堆,差异有些太大,所以,切换回了 3.2.X
在 3.2.X 使用 ohos 自己的 clang 的时候,遇到了 llvm bitcode 版本不匹配的问题(但是,这里听淘宝和快手的人说,他们没有遇到任何问题)
所以,我又将 kotlin/native 的工程升级到了 12.0.1,但是社区版本的 llvm 和 clang 在使用的时候又遇到了编译问题,我又自己编译了一份 apple llvm 12.0.0···最终成功
编译 llvm 问题
在 kotlin 2.0.21 上,不能直接使用开源版本的 llvm,因为 kotlin 对 llvm 做了特殊的修改,删掉了一些 hardcode
所以,特地 cherry-pick 过来,重新编译了一份
KT-69094 问题
https://youtrack.jetbrains.com/issue/KT-69094 kotlin 官方自己兜了个底
bundle 或者 publish 或者 涉及编译 apple 系 x86 时,需要加参数 -Pkonan.xcodeForSimdOverlay=/path/to/xcode15
编译器本身编译
编译 kt 文件
其实有两种路径,不过最终应该都是走的 cli runner