From 4176c50107aa75c5810daccda99c588e374b6fae Mon Sep 17 00:00:00 2001 From: Andrey Yastrebov Date: Thu, 14 Dec 2023 16:43:44 +0100 Subject: [PATCH] KT-63592 Create setupLLDBScript task --- .../gradle/plugin/mpp/KotlinLLDBScript.kt | 62 +++++++++++++++++++ .../plugin/registerKotlinPluginExtensions.kt | 1 + .../kotlin/commonizer/KonanDistribution.kt | 5 +- .../konan/library/NativeLibraryConstants.kt | 1 + 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinLLDBScript.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinLLDBScript.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinLLDBScript.kt new file mode 100644 index 00000000000..24b38613131 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinLLDBScript.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.plugin.mpp + +import org.gradle.api.DefaultTask +import org.gradle.api.Project +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.ProjectLayout +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.model.ObjectFactory +import org.gradle.api.provider.Property +import org.gradle.api.tasks.* +import org.jetbrains.kotlin.commonizer.toolsDir +import org.jetbrains.kotlin.gradle.plugin.KotlinProjectSetupCoroutine +import org.jetbrains.kotlin.gradle.targets.native.internal.konanDistribution +import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask +import org.jetbrains.kotlin.gradle.utils.getFile +import javax.inject.Inject + +internal val KotlinLLDBScriptSetupAction = KotlinProjectSetupCoroutine { + locateOrRegisterLLDBScriptTask() +} + +@CacheableTask +internal abstract class LLDBInitTask +@Inject constructor( + objects: ObjectFactory, + projectLayout: ProjectLayout, +) : DefaultTask() { + + @get:Input + internal abstract val fileName: Property + + @get:InputDirectory + @get:PathSensitive(PathSensitivity.RELATIVE) + internal abstract val konanToolsDir: DirectoryProperty + + @get:OutputFile + protected val outputFile: RegularFileProperty by lazy { + objects.fileProperty().convention( + projectLayout.buildDirectory.file(fileName) + ) + } + + @TaskAction + fun createScript() { + outputFile + .getFile() + .writeText("command script import ${konanToolsDir.getFile().resolve("konan_lldb.py")}") + } +} + +internal fun Project.locateOrRegisterLLDBScriptTask(): TaskProvider { + return locateOrRegisterTask("setupLldbScript") { task -> + task.description = "Generate lldbinit file with imported konan_lldb.py script" + task.fileName.set("lldbinit") + task.konanToolsDir.set(konanDistribution.toolsDir) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt index 4d02b18636f..b7d41c5cf13 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt @@ -70,6 +70,7 @@ internal fun Project.registerKotlinPluginExtensions() { register(project, CreateFatFrameworksSetupAction) register(project, KotlinRegisterCompilationArchiveTasksExtension) register(project, IdeMultiplatformImportActionSetupAction) + register(project, KotlinLLDBScriptSetupAction) } } diff --git a/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/KonanDistribution.kt b/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/KonanDistribution.kt index ff2e8fbad1d..5504e6848bc 100644 --- a/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/KonanDistribution.kt +++ b/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/KonanDistribution.kt @@ -25,4 +25,7 @@ public val KonanDistribution.platformLibsDir: File get() = klibDir.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR) public val KonanDistribution.sourcesDir: File - get() = root.resolve(KONAN_DISTRIBUTION_SOURCES_DIR) \ No newline at end of file + get() = root.resolve(KONAN_DISTRIBUTION_SOURCES_DIR) + +public val KonanDistribution.toolsDir: File + get() = root.resolve(KONAN_DISTRIBUTION_TOOLS_DIR) \ No newline at end of file diff --git a/native/utils/src/org/jetbrains/kotlin/konan/library/NativeLibraryConstants.kt b/native/utils/src/org/jetbrains/kotlin/konan/library/NativeLibraryConstants.kt index ab175852eca..694adc74bbe 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/library/NativeLibraryConstants.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/library/NativeLibraryConstants.kt @@ -16,6 +16,7 @@ const val KONAN_DISTRIBUTION_COMMONIZED_LIBS_DIR = "commonized" const val KLIB_INTEROP_IR_PROVIDER_IDENTIFIER = "kotlin.native.cinterop" const val KONAN_DISTRIBUTION_SOURCES_DIR = "sources" +const val KONAN_DISTRIBUTION_TOOLS_DIR = "tools" fun konanCommonLibraryPath(libraryName: String) = File(KONAN_DISTRIBUTION_KLIB_DIR, KONAN_DISTRIBUTION_COMMON_LIBS_DIR).resolve(libraryName)