diff --git a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt index e7ec77399d7..38bcf152d30 100644 --- a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt +++ b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.Services import org.jetbrains.kotlin.config.addKotlinSourceRoots import org.jetbrains.kotlin.config.kotlinSourceRoots +import org.jetbrains.kotlin.konan.KonanVersion import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.psi.KtFile diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/DebugUtils.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/DebugUtils.kt index 566931c3549..0049dced668 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/DebugUtils.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/DebugUtils.kt @@ -20,7 +20,7 @@ import kotlinx.cinterop.allocArrayOf import kotlinx.cinterop.memScoped import llvm.* import org.jetbrains.kotlin.backend.konan.Context -import org.jetbrains.kotlin.backend.konan.KonanVersion +import org.jetbrains.kotlin.konan.KonanVersion import org.jetbrains.kotlin.backend.konan.irasdescriptors.FunctionDescriptor import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.ir.SourceManager.FileEntry diff --git a/buildSrc/shared/build.gradle b/buildSrc/shared/build.gradle index ee04469f324..1c91b22068c 100644 --- a/buildSrc/shared/build.gradle +++ b/buildSrc/shared/build.gradle @@ -27,7 +27,7 @@ buildscript { apply plugin: 'kotlin' // We reuse the source code from the Project in buildSrc. -sourceSets.main.kotlin.srcDirs = ["$projectDir/../../shared"] +sourceSets.main.kotlin.srcDirs = ["$projectDir/../../shared/src/main/kotlin"] dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion" diff --git a/gradle.properties b/gradle.properties index ccb2e1ca7b5..90c16abce8a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,6 +22,6 @@ remoteRoot=konan_tests testDataVersion=1226829:id kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.2.50-dev-515,tag:kotlin-native,pinned:true/artifacts/content/maven kotlinVersion=1.2.50-dev-515 -konanVersion=0.6.2 +konanVersion=0.7 org.gradle.jvmargs='-Dfile.encoding=UTF-8' diff --git a/shared/build.gradle b/shared/build.gradle index 93831aad4d3..66bbb345c55 100644 --- a/shared/build.gradle +++ b/shared/build.gradle @@ -13,9 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.kotlin.VersionGenerator buildscript { - ext.rootBuildDirectory = file('../') + ext.rootBuildDirectory = file('..') apply from: "$rootBuildDirectory/gradle/loadRootProperties.gradle" apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle" @@ -33,6 +34,19 @@ repositories { } } +task generateCompilerVersion(type: VersionGenerator){} + +sourceSets { + main.kotlin { + srcDir 'src/main/kotlin' + srcDir generateCompilerVersion.versionSourceDirectory + } +} + +compileKotlin{ + dependsOn('generateCompilerVersion') +} + jar { archiveName = "shared.jar" } diff --git a/shared/buildSrc/build.gradle b/shared/buildSrc/build.gradle new file mode 100644 index 00000000000..0e9a8ff4d33 --- /dev/null +++ b/shared/buildSrc/build.gradle @@ -0,0 +1,35 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +buildscript { + println("rootDir: $rootDir") + ext.rootBuildDirectory = "$rootDir/../.." + apply from: "$rootBuildDirectory/gradle/loadRootProperties.gradle" + apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle" + +} + + +apply plugin: 'kotlin' + +repositories { + mavenCentral() +} + +dependencies { + compile gradleApi() + compile localGroovy() + compile "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion" +} \ No newline at end of file diff --git a/shared/buildSrc/src/main/kotlin/org/jetbrains/kotlin/VersionGenerator.kt b/shared/buildSrc/src/main/kotlin/org/jetbrains/kotlin/VersionGenerator.kt new file mode 100644 index 00000000000..132c6a91313 --- /dev/null +++ b/shared/buildSrc/src/main/kotlin/org/jetbrains/kotlin/VersionGenerator.kt @@ -0,0 +1,55 @@ +package org.jetbrains.kotlin + +import groovy.lang.Closure +import org.gradle.api.DefaultTask +import org.gradle.api.Task +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.OutputFile +import java.io.File + + +open class VersionGenerator: DefaultTask() { + @OutputDirectory + val versionSourceDirectory = project.file("build/generated") + @OutputFile + val versionFile:File = project.file("${versionSourceDirectory.path}/org/jetbrains/kotlin/konan/KonanVersion.kt") + + + override fun configure(closure: Closure<*>): Task { + val result = super.configure(closure) + doFirst { + val content = buildString { + operator fun String.unaryPlus() = this@buildString.append(this) + val version = project.properties["konanVersion"].toString().split(".") + val major = version[0].toInt() + val minor = version[1].toInt() + val maintenance = if (version.size > 2) version[2].toInt() else 0 + val build = System.getenv("env.dep.Kotlin_KotlinNative_Master_KotlinNativeCheckout.build.counter")?.let { + it.split("-")[2].toInt() //7-dev-buildcount + }?: -1 + val meta = project.properties["konanMetaVersion"]?.let { "MetaVersion.${it.toString().toUpperCase()}" } ?: "MetaVersion.DEV" + + + """ + |package org.jetbrains.kotlin.konan + |data class KonanVersion(val meta: MetaVersion = MetaVersion.DEV, + | val major: Int, + | val minor: Int, + | val maintenance: Int, + | val build:Int) { + | companion object { + | val CURRENT = KonanVersion($meta, $major, $minor, $maintenance, $build) + | } + | private val versionString by lazy { + | "${'$'}{meta.name} ${'$'}major.${'$'}minor.${'$'}maintenance-${'$'}build".trim() + | } + | override fun toString() = versionString + |} + """.trimMargin() + } + versionFile.printWriter().use { + it.println(content) + } + } + return result + } +} diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanVersion.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/MetaVersion.kt similarity index 66% rename from backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanVersion.kt rename to shared/src/main/kotlin/org/jetbrains/kotlin/konan/MetaVersion.kt index 73c33132785..8d9246349a2 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanVersion.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/MetaVersion.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.jetbrains.kotlin.backend.konan +package org.jetbrains.kotlin.konan /** * https://en.wikipedia.org/wiki/Software_versioning @@ -22,15 +22,9 @@ package org.jetbrains.kotlin.backend.konan */ enum class MetaVersion { + DEV, EAP, ALPHA, BETA, RC -} - -class KonanVersion(val meta: MetaVersion?, val major: Int, val minor: Int, val maintenance: Int, val build:Int) { - companion object { - val CURRENT = KonanVersion(MetaVersion.EAP, 0, 6, 2, 0) - } - override fun toString() = if (meta != null) "$meta $major.$minor.$maintenance.$build" else "$major.$minor.$maintenance.$build" -} +} \ No newline at end of file diff --git a/tools/kotlin-native-gradle-plugin/build.gradle b/tools/kotlin-native-gradle-plugin/build.gradle index 3f120802ed6..d351a896b50 100644 --- a/tools/kotlin-native-gradle-plugin/build.gradle +++ b/tools/kotlin-native-gradle-plugin/build.gradle @@ -122,8 +122,6 @@ test { processResources { // We add konanVersion as a task input to avoid considering this task up-to-date when // konanVersion is actually changed and should be updated in the plugin jar. - inputs.property("konanVersion", konanVersion) - expand('konanVersion': konanVersion) from(file("$rootBuildDirectory/utilities/env_blacklist")) } 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 e7ec6652368..c64e2270b3b 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 @@ -37,6 +37,7 @@ import org.gradle.language.nativeplatform.internal.Names import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.jetbrains.kotlin.gradle.plugin.KonanPlugin.Companion.COMPILE_ALL_TASK_NAME import org.jetbrains.kotlin.gradle.plugin.tasks.* +import org.jetbrains.kotlin.konan.KonanVersion import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.customerDistribution @@ -110,9 +111,6 @@ internal val Project.konanExtension: KonanExtension internal val Project.konanCompilerDownloadTask get() = tasks.getByName(KonanPlugin.KONAN_DOWNLOAD_TASK_NAME) -internal val Project.konanVersion - get() = getProperty(KonanPlugin.ProjectProperty.KONAN_VERSION, KonanPlugin.DEFAULT_KONAN_VERSION) as String - internal val Project.requestedTargets get() = findProperty(KonanPlugin.ProjectProperty.KONAN_BUILD_TARGETS)?.let { it.toString().trim().split("\\s+".toRegex()) @@ -141,7 +139,7 @@ private fun Project.getOrCreateTask(name: String): Task = with(tasks) { } internal fun Project.konanCompilerName(): String = - "kotlin-native-${project.simpleOsName}-${this.konanVersion}" + "kotlin-native-${project.simpleOsName}-${KonanVersion.CURRENT}" internal fun Project.konanCompilerDownloadDir(): String = DependencyProcessor.localKonanDir.resolve(project.konanCompilerName()).absolutePath @@ -218,7 +216,7 @@ internal fun dumpProperties(task: Task) { println("target : $target") println("languageVersion : $languageVersion") println("apiVersion : $apiVersion") - println("konanVersion : $konanVersion") + println("konanVersion : ${KonanVersion.CURRENT}") println("konanHome : $konanHome") println() } @@ -239,7 +237,7 @@ internal fun dumpProperties(task: Task) { println("linkerOpts : $linkerOpts") println("headers : ${headers.dump()}") println("linkFiles : ${linkFiles.dump()}") - println("konanVersion : $konanVersion") + println("konanVersion : ${KonanVersion.CURRENT}") println("konanHome : $konanHome") println() } @@ -273,7 +271,6 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR enum class ProjectProperty(val propertyName: String) { KONAN_HOME ("konan.home"), - KONAN_VERSION ("konan.version"), KONAN_BUILD_TARGETS ("konan.build.targets"), KONAN_JVM_ARGS ("konan.jvmArgs"), KONAN_USE_ENVIRONMENT_VARIABLES("konan.useEnvironmentVariables"), @@ -294,11 +291,6 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR internal const val KONAN_MAIN_VARIANT = "konan_main_variant" internal const val KONAN_EXTENSION_NAME = "konan" - - internal val DEFAULT_KONAN_VERSION = Properties().apply { - load(KonanPlugin::class.java.getResourceAsStream("/META-INF/gradle-plugins/konan.properties") ?: - throw RuntimeException("Cannot find a properties file")) - }.getProperty("default-konan-version") ?: throw RuntimeException("Cannot read the default compiler version") } private fun Project.cleanKonan() = project.tasks.withType(KonanBuildingTask::class.java).forEach { diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanToolingModelBuilder.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanToolingModelBuilder.kt index 35a2f648d6d..815327851eb 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanToolingModelBuilder.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanToolingModelBuilder.kt @@ -20,6 +20,7 @@ import org.gradle.api.Project import org.gradle.tooling.provider.model.ToolingModelBuilder import org.jetbrains.kotlin.gradle.plugin.model.KonanArtifact import org.jetbrains.kotlin.gradle.plugin.model.KonanModel +import org.jetbrains.kotlin.konan.KonanVersion import org.jetbrains.kotlin.konan.util.visibleName object KonanToolingModelBuilder : ToolingModelBuilder { @@ -29,12 +30,11 @@ object KonanToolingModelBuilder : ToolingModelBuilder { val artifacts = project.konanArtifactsContainer.flatten() .toList() .map { KonanArtifactImpl("${it.artifact.name}-${it.konanTarget.visibleName}", it.artifact.canonicalPath) } - return KonanModelImpl(project.konanVersion, artifacts) + return KonanModelImpl(artifacts) } } private class KonanModelImpl( - override val konanVersion: String, override val artifacts: List ) : KonanModel diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/model/KonanModel.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/model/KonanModel.kt index 18509a7ece9..b31a870cb3c 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/model/KonanModel.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/model/KonanModel.kt @@ -23,7 +23,6 @@ import java.io.Serializable * This model is shared with the client processes such as an IDE. */ interface KonanModel : Serializable { - val konanVersion: String val artifacts: List } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBuildingTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBuildingTask.kt index 2e48e5a5e97..2953e00e10b 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBuildingTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBuildingTask.kt @@ -39,8 +39,6 @@ abstract class KonanBuildingTask: KonanArtifactWithLibrariesTask(), KonanBuildin @Input val extraOpts = mutableListOf() - val konanVersion - @Input get() = project.konanVersion val konanHome @Input get() = project.konanHome diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompilerDownloadTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompilerDownloadTask.kt index 2b833317644..da3e095002b 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompilerDownloadTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompilerDownloadTask.kt @@ -21,6 +21,8 @@ import org.gradle.api.GradleScriptException import org.gradle.api.tasks.Internal import org.gradle.api.tasks.TaskAction import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.konan.KonanVersion +import org.jetbrains.kotlin.konan.MetaVersion import org.jetbrains.kotlin.konan.util.DependencyProcessor import org.jetbrains.kotlin.konan.util.DependencySource import org.jetbrains.kotlin.konan.util.visibleName @@ -43,18 +45,15 @@ open class KonanCompilerDownloadTask : DefaultTask() { if (!project.hasProperty(KonanPlugin.ProjectProperty.DOWNLOAD_COMPILER)) { val konanHome = project.getProperty(KonanPlugin.ProjectProperty.KONAN_HOME) logger.info("Use a user-defined compiler path: $konanHome") - if (project.hasProperty(KonanPlugin.ProjectProperty.KONAN_VERSION)) { - val konanVersion = project.getProperty(KonanPlugin.ProjectProperty.KONAN_VERSION) - logger.warn("${KonanPlugin.ProjectProperty.KONAN_VERSION.propertyName} " + - "(=$konanVersion) property is ignored " + - "because a user-defined compiler path is specified: $konanHome") - } } else { try { val downloadUrlDirectory = buildString { append("$BASE_DOWNLOAD_URL/") - val version = project.konanVersion - append(if (version.contains("dev")) "dev/" else "releases/") + val version = KonanVersion.CURRENT + when (version.meta) { + MetaVersion.DEV -> append("dev/") + else -> append("releases/") + } append("$version/") append(project.simpleOsName) }