CLI loading of compiler ir generation plugins
(cherry picked from commit b0fdfae2ce3aaa9bb5790b9c8ac8d507f2df4235)
This commit is contained in:
committed by
Vasily Levchenko
parent
b49e7c067f
commit
6064cc9a34
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR
|
|||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.WARNING
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.WARNING
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
|
import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser
|
||||||
import org.jetbrains.kotlin.config.*
|
import org.jetbrains.kotlin.config.*
|
||||||
import org.jetbrains.kotlin.konan.KonanVersion
|
import org.jetbrains.kotlin.konan.KonanVersion
|
||||||
import org.jetbrains.kotlin.konan.file.File
|
import org.jetbrains.kotlin.konan.file.File
|
||||||
@@ -59,6 +60,10 @@ class K2Native : CLICompiler<K2NativeCompilerArguments>() {
|
|||||||
return ExitCode.OK
|
return ExitCode.OK
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val pluginLoadResult =
|
||||||
|
PluginCliParser.loadPluginsSafe(arguments.pluginClasspaths, arguments.pluginOptions, configuration)
|
||||||
|
if (pluginLoadResult != ExitCode.OK) return pluginLoadResult
|
||||||
|
|
||||||
val environment = KotlinCoreEnvironment.createForProduction(rootDisposable,
|
val environment = KotlinCoreEnvironment.createForProduction(rootDisposable,
|
||||||
configuration, EnvironmentConfigFiles.NATIVE_CONFIG_FILES)
|
configuration, EnvironmentConfigFiles.NATIVE_CONFIG_FILES)
|
||||||
val project = environment.project
|
val project = environment.project
|
||||||
|
|||||||
+7
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.backend.konan
|
package org.jetbrains.kotlin.backend.konan
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
|
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.ModuleIndex
|
import org.jetbrains.kotlin.backend.konan.ir.ModuleIndex
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.emitLLVM
|
import org.jetbrains.kotlin.backend.konan.llvm.emitLLVM
|
||||||
@@ -81,6 +82,12 @@ fun runTopLevelPhases(konanConfig: KonanConfig, environment: KotlinCoreEnvironme
|
|||||||
|
|
||||||
// validateIrModule(context, module)
|
// validateIrModule(context, module)
|
||||||
}
|
}
|
||||||
|
phaser.phase(KonanPhase.IR_GENERATOR_PLUGINS) {
|
||||||
|
val extensions = IrGenerationExtension.getInstances(context.config.project)
|
||||||
|
extensions.forEach { extension ->
|
||||||
|
context.irModule!!.files.forEach { irFile -> extension.generate(irFile, context, bindingContext) }
|
||||||
|
}
|
||||||
|
}
|
||||||
phaser.phase(KonanPhase.GEN_SYNTHETIC_FIELDS) {
|
phaser.phase(KonanPhase.GEN_SYNTHETIC_FIELDS) {
|
||||||
markBackingFields(context)
|
markBackingFields(context)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -25,6 +25,7 @@ enum class KonanPhase(val description: String,
|
|||||||
var verbose: Boolean = false) {
|
var verbose: Boolean = false) {
|
||||||
/* */ FRONTEND("Frontend builds AST"),
|
/* */ FRONTEND("Frontend builds AST"),
|
||||||
/* */ PSI_TO_IR("Psi to IR conversion"),
|
/* */ PSI_TO_IR("Psi to IR conversion"),
|
||||||
|
/* */ IR_GENERATOR_PLUGINS("Plugged-in ir generators"),
|
||||||
/* */ GEN_SYNTHETIC_FIELDS("Generate synthetic fields"),
|
/* */ GEN_SYNTHETIC_FIELDS("Generate synthetic fields"),
|
||||||
/* */ SERIALIZER("Serialize descriptor tree and inline IR bodies", GEN_SYNTHETIC_FIELDS),
|
/* */ SERIALIZER("Serialize descriptor tree and inline IR bodies", GEN_SYNTHETIC_FIELDS),
|
||||||
/* */ BACKEND("All backend"),
|
/* */ BACKEND("All backend"),
|
||||||
|
|||||||
+2
@@ -125,6 +125,8 @@ internal class KonanSymbols(context: Context, val symbolTable: SymbolTable, val
|
|||||||
|
|
||||||
val entryPoint = findMainEntryPoint(context)?.let { symbolTable.referenceSimpleFunction(it) }
|
val entryPoint = findMainEntryPoint(context)?.let { symbolTable.referenceSimpleFunction(it) }
|
||||||
|
|
||||||
|
override val externalSymbolTable = lazySymbolTable
|
||||||
|
|
||||||
val nothing = symbolTable.referenceClass(builtIns.nothing)
|
val nothing = symbolTable.referenceClass(builtIns.nothing)
|
||||||
val throwable = symbolTable.referenceClass(builtIns.throwable)
|
val throwable = symbolTable.referenceClass(builtIns.throwable)
|
||||||
val string = symbolTable.referenceClass(builtIns.string)
|
val string = symbolTable.referenceClass(builtIns.string)
|
||||||
|
|||||||
Reference in New Issue
Block a user