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 { } } } -