# Kotlin Compilation Process Overview


本文基于 Kotlin 1.9.22 版本，对 JVM 编译流程进行分析，程序入口点为 K2JVMCompiler，源码位于 [kotlin-compiler-embeddable](https://central.sonatype.com/artifact/org.jetbrains.kotlin/kotlin-compiler-embeddable)，建议阅读本文前对 FE10(K1)，FIR(K2) 有基本的了解

Kotlin 整体编译流程我个人将其分为以下几步：

1.  Create configuration，用于将 CLI 或其他渠道传给 kotlinc 的参数转化成 configuration
2.  Create environment，用于创建 KotlinLexer、Intellij Core Environment、VFS、Project、PsiFacade 以及将 SourceSet、Dependencies 等信息传递给编译器
3.  Compiler Frontend，用于分析和生成 KtFile + BindingContext 或 FIR(K2)，同时也可以将这些事件分发到各个扩展点
4.  Compiler Backend，用于生成 Backend IR 和 generate code，比如在 JVM 平台会生成 bytecode

具体见下图，看不清的话可以去飞书文档画板：[Kotlin Compilation Process Overview > 画板](https://eqyrx3fg3l.feishu.cn/docx/Tbg6dsnLPoimtGxNENxcV3rXnAe?openbrd=1&doc_app_id=501&blockId=JoUEdcIi1oaGfLxEvWBcsxr9nvf&blockType=whiteboard&blockToken=Dr7bwxtRThaSsIbJNEHcZXRenOM#JoUEdcIi1oaGfLxEvWBcsxr9nvf)

![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d2f76f44e6bb4b19bbf0d5755e0ee50f~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=2933&h=11314&s=1895281&e=png&b=ffffff)

一些可能用到的相关参考资料：

1.  [Crash Course on the Kotlin Compiler | K1 + K2 Frontends, Backends | by mvndy | Google Developer Experts | Medium](https://eqyrx3fg3l.feishu.cn/docx/BwsGd7plGoY85ExgHs4cv7JDnLd)
2.  https://github.com/JetBrains/kotlin/blob/v1.9.22/compiler/cli/cli-common/resources/META-INF/extensions/compiler.xml

飞书文档原文：[Kotlin Compilation Process Overview](https://eqyrx3fg3l.feishu.cn/docx/Tbg6dsnLPoimtGxNENxcV3rXnAe)


