From afd4e5a02ec97b04e1ac17416e97cabea308489a Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Fri, 11 Aug 2017 18:14:50 +0700 Subject: [PATCH] gradle-plugin: Make def-file mandatory and remove 'linker' parameter --- .../kotlin/gradle/plugin/KonanCompileTask.kt | 1 - .../kotlin/gradle/plugin/KonanInteropTask.kt | 17 ++++++++--------- .../kotlin/gradle/plugin/KonanPlugin.kt | 9 +++++---- .../plugin/test/IncrementalSpecification.groovy | 1 + .../gradle/plugin/test/KonanProject.groovy | 1 + 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt index fb7aeaa4457..5399754698d 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt @@ -65,7 +65,6 @@ import java.io.File */ -// TODO: form groups for tasks // TODO: Make the task class nested for config with properties accessible for outer users. open class KonanCompileTask: KonanTargetableTask() { diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropTask.kt index 35c4fb62412..b047f499e11 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropTask.kt @@ -70,13 +70,13 @@ open class KonanInteropTask: KonanTargetableTask() { // Interop stub generator parameters ------------------------------------- - @Optional @InputFile var defFile: File? = null + @InputFile var defFile: File? = null internal set + @Optional @Input var pkg: String? = null internal set - @Input lateinit var libName: String - @Optional @Input var linker: String? = null + @Input lateinit var libName: String internal set @Optional @Input var manifest: String? = null @@ -123,7 +123,6 @@ open class KonanInteropTask: KonanTargetableTask() { addArgIfNotNull("-target", target) addArgIfNotNull("-def", defFile?.canonicalPath) addArg("-pkg", pkg ?: libName) - addArgIfNotNull("-linker", linker) addFileArgs("-h", headers) @@ -175,7 +174,11 @@ open class KonanInteropConfig( // DSL methods ------------------------------------------------------------ fun defFile(file: Any) = with(generateStubsTask) { - defFile = project.file(file) + defFile = project.file(file).also { + if (!it.exists()) { + throw NoSuchFileException(it, reason = "No def-file by the specified path.") + } + } } fun pkg(value: String) = with(generateStubsTask) { @@ -204,10 +207,6 @@ open class KonanInteropConfig( compilerOpts.addAll(values.map { "-I$it" }) } - fun linker(value: String) = with(generateStubsTask) { - linker = value - } - fun linkerOpts(vararg values: String) = linkerOpts(values.toList()) fun linkerOpts(values: List) = with(generateStubsTask) { linkerOpts.addAll(values) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt index 4b3b997f175..838a0763002 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt @@ -57,8 +57,8 @@ internal val Project.konanInteropCompiledStubsDir get() = "${konanBuildRoot}/int internal val Project.konanInteropLibsOutputDir get() = "${konanBuildRoot}/nativelibs" internal val Project.konanDefaultSrcDir get() = file("${projectDir.canonicalPath}/src/main/kotlin") -internal fun Project.konanDefaultDefFile(interopName: String) - = file("${projectDir.canonicalPath}/src/main/c_interop/$interopName.def") +internal fun Project.konanDefaultDefFile(libName: String) + = file("${projectDir.canonicalPath}/src/main/c_interop/$libName.def") internal val Project.konanInteropClasspath get() = project.fileTree("${project.konanHome}/konan/lib/").apply { include("*.jar") } @@ -157,8 +157,10 @@ internal fun dumpProperties(task: Task) { println() println("Compilation task: ${task.name}") println("outputDir : ${task.outputDir}") + println("artifact : ${task.artifact}") println("artifactPath : ${task.artifactPath}") println("inputFiles : ${task.inputFiles.joinToString(prefix = "[", separator = ", ", postfix = "]")}") + println("produce : ${task.produce}") println("libraries : ${task.libraries}") println("nativeLibraries : ${task.nativeLibraries}") println("linkerOpts : ${task.linkerOpts}") @@ -180,7 +182,6 @@ internal fun dumpProperties(task: Task) { println("defFile : ${task.defFile}") println("target : ${task.target}") println("pkg : ${task.pkg}") - println("linker : ${task.linker}") println("compilerOpts : ${task.compilerOpts}") println("linkerOpts : ${task.linkerOpts}") println("headers : ${task.headers.joinToString(prefix = "[", separator = ", ", postfix = "]")}") @@ -197,7 +198,7 @@ internal fun setDefaultInputs(project: Project) { project.konanArtifactsContainer.asSequence() .filter { it.compilationTask.inputFiles.isEmpty() } .forEach { config -> - project.konanDefaultSrcDir?.takeIf { it.exists() }?.let { + project.konanDefaultSrcDir.takeIf { it.exists() }?.let { config.inputDir(it.canonicalPath) } } diff --git a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy index 9106080b8f5..22215c9b3ab 100644 --- a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy +++ b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy @@ -166,6 +166,7 @@ class IncrementalSpecification extends BaseKonanSpecification { def project = KonanInteropProject.createEmpty(projectDirectory) { KonanInteropProject it -> it.generateSrcFile('main.kt') it.buildFile.append("konanInterop { foo {} }\n") + it.generateDefFile("foo.def", "") } def results = buildTwice(project) { KonanInteropProject it -> it.addCompilationSetting("main", "useInterop", "'foo'") diff --git a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/KonanProject.groovy b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/KonanProject.groovy index 75677c02741..4ecf3d91a10 100644 --- a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/KonanProject.groovy +++ b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/KonanProject.groovy @@ -311,6 +311,7 @@ class KonanInteropProject extends KonanProject { generateFolders() generateBuildFile() generatePropertiesFile(konanHome) + generateDefFile("${DEFAULT_INTEROP_NAME}.def", "") } return result }