diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index e49a6e795c3..d01123c3d3a 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -1799,6 +1799,12 @@
+
+
+
+
+
+
diff --git a/libraries/tools/kotlin-gradle-plugin-idea-proto/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-idea-proto/build.gradle.kts
index 13385800405..17545b43632 100644
--- a/libraries/tools/kotlin-gradle-plugin-idea-proto/build.gradle.kts
+++ b/libraries/tools/kotlin-gradle-plugin-idea-proto/build.gradle.kts
@@ -1,6 +1,8 @@
@file:Suppress("HasPlatformType")
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
+import org.jetbrains.kotlin.konan.target.HostManager
+import org.jetbrains.kotlin.konan.target.KonanTarget.*
plugins {
kotlin("jvm")
@@ -64,35 +66,68 @@ run {
}
}
+
/* Setup protoc */
-tasks.register("protoc") {
- val protoSources = file("src/main/proto")
- val javaOutput = file("src/generated/java/")
- val kotlinOutput = file("src/generated/kotlin/")
-
- inputs.dir(protoSources)
- outputs.dir(javaOutput)
- outputs.dir(kotlinOutput)
-
- doFirst {
- javaOutput.deleteRecursively()
- kotlinOutput.deleteRecursively()
- javaOutput.mkdirs()
- kotlinOutput.mkdirs()
+run {
+ val protoc = configurations.create("protoc") {
+ isCanBeResolved = true
+ isCanBeConsumed = false
}
- workingDir(project.projectDir)
+ dependencies {
+ protoc("com.google.protobuf:protoc:3.21.9") {
+ artifact {
+ type = "exe"
+ classifier = when (HostManager.host) {
+ MACOS_ARM64 -> "osx-aarch_64"
+ MACOS_X64 -> "osx-x86_64"
+ MINGW_X64 -> "windows-x86_64"
+ LINUX_X64 -> "linux-x86_64"
+ else -> null
+ }
+ }
+ }
+ }
- commandLine(
- *arrayOf(
- "protoc",
- "-I=$protoSources",
- "--java_out=${javaOutput.absolutePath}",
- "--kotlin_out=${kotlinOutput.absolutePath}"
- ) + protoSources.listFiles().orEmpty()
- .filter { it.extension == "proto" }
- .map { it.path },
- )
+ val protocExecutable = buildDir.resolve("protoc/bin")
+ val setupProtoc = tasks.register("setupProtoc") {
+ doFirst {
+ protoc.files.single().copyTo(protocExecutable, overwrite = true)
+ protocExecutable.setExecutable(true)
+ }
+ }
+
+ tasks.register("protoc") {
+ dependsOn(setupProtoc)
+
+ val protoSources = file("src/main/proto")
+ val javaOutput = file("src/generated/java/")
+ val kotlinOutput = file("src/generated/kotlin/")
+
+ inputs.dir(protoSources)
+ outputs.dir(javaOutput)
+ outputs.dir(kotlinOutput)
+
+ doFirst {
+ javaOutput.deleteRecursively()
+ kotlinOutput.deleteRecursively()
+ javaOutput.mkdirs()
+ kotlinOutput.mkdirs()
+ }
+
+ workingDir(project.projectDir)
+
+ commandLine(
+ *arrayOf(
+ protocExecutable.absolutePath,
+ "-I=$protoSources",
+ "--java_out=${javaOutput.absolutePath}",
+ "--kotlin_out=${kotlinOutput.absolutePath}"
+ ) + protoSources.listFiles().orEmpty()
+ .filter { it.extension == "proto" }
+ .map { it.path },
+ )
+ }
}
@@ -118,4 +153,3 @@ run {
}
}
}
-