[K/N] Remove more ext properties

This commit is contained in:
Alexander Shabalin
2024-03-05 23:16:39 +01:00
committed by Space Team
parent 23710ac133
commit adf5331ff0
17 changed files with 80 additions and 77 deletions
@@ -57,6 +57,7 @@ void loadCommandLineProperties() {
loadCommandLineProperties()
loadLocalProperties()
apply plugin: 'platform-manager'
apply plugin: 'konan'
apply plugin: 'kotlin'
apply plugin: 'kotlin.native.build-tools-conventions'
@@ -71,7 +72,7 @@ configurations {
ext.testOutputRoot = rootProject.file("test.output").absolutePath
ext.platformManager = project.project(":kotlin-native").platformManager
ext.platformManager = project.extensions.platformManager
ext.target = platformManager.targetManager(project.testTarget).target
ext.buildNumber = rootProject.property("kotlinVersion")
@@ -130,5 +130,9 @@ gradlePlugin {
id = "native-dependencies"
implementationClass = "org.jetbrains.kotlin.dependencies.NativeDependenciesPlugin"
}
create("platformManager") {
id = "platform-manager"
implementationClass = "org.jetbrains.kotlin.PlatformManagerPlugin"
}
}
}
@@ -170,7 +170,7 @@ class NamedNativeInteropConfig implements Named {
this.project = project
this.flavor = flavor
def platformManager = project.project(":kotlin-native").ext.platformManager
def platformManager = project.extensions.platformManager
def targetManager = platformManager.targetManager(target)
this.target = targetManager.targetName
@@ -304,6 +304,7 @@ class NativeInteropPlugin implements Plugin<Project> {
@Override
void apply(Project prj) {
prj.plugins.apply("platform-manager")
prj.plugins.apply("native-dependencies")
prj.extensions.add("kotlinNativeInterop", new NativeInteropExtension(prj))
@@ -161,12 +161,6 @@ abstract class ExecClang @Inject constructor(
}
companion object {
@JvmStatic
fun create(project: Project): ExecClang = create(
project.objects,
project.project(":kotlin-native").findProperty("platformManager") as PlatformManager,
)
@JvmStatic
fun create(objects: ObjectFactory, platformManager: PlatformManager) =
objects.newInstance(ExecClang::class.java, platformManager)
@@ -32,7 +32,7 @@ object PlatformInfo {
@JvmStatic
fun getTarget(project: Project): KonanTarget {
val platformManager = project.project(":kotlin-native").platformManager
val platformManager = project.platformManager
val targetName = project.project.testTarget.name
return platformManager.targetManager(targetName).target
}
@@ -0,0 +1,19 @@
/*
* Copyright 2010-2024 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
import kotlinBuildProperties
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.jetbrains.kotlin.konan.target.*
open class PlatformManagerPlugin : Plugin<Project> {
override fun apply(project: Project) {
val konanDataDir = project.kotlinBuildProperties.getOrNull("konan.data.dir") as String?
val platformManager = PlatformManager(buildDistribution(project.project(":kotlin-native").projectDir.absolutePath, konanDataDir), false)
project.extensions.add("platformManager", platformManager)
}
}
@@ -12,6 +12,7 @@ import org.gradle.api.file.FileCollection
import org.gradle.api.plugins.ExtraPropertiesExtension
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.TaskProvider
import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.konan.target.*
import java.io.File
import java.nio.file.Path
@@ -25,7 +26,7 @@ private const val KLIB_PROPERTY_COMPILER_VERSION = "compiler_version"
//region Project properties.
val Project.platformManager
get() = findProperty("platformManager") as PlatformManager
get() = extensions.getByType<PlatformManager>()
val Project.testTarget
get() = findProperty("target") as? KonanTarget ?: HostManager.host
@@ -331,7 +332,7 @@ fun Project.buildStaticLibrary(cSources: Collection<File>, output: File, objDir:
val platform = platformManager.platform(testTarget)
objDir.mkdirs()
ExecClang.create(project).execClangForCompilerTests(testTarget) {
ExecClang.create(project.objects, project.platformManager).execClangForCompilerTests(testTarget) {
args = listOf("-c", *cSources.map { it.absolutePath }.toTypedArray())
workingDir(objDir)
}
@@ -21,6 +21,7 @@ import org.gradle.api.tasks.TaskProvider
import org.gradle.kotlin.dsl.*
import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.jetbrains.kotlin.ExecClang
import org.jetbrains.kotlin.PlatformManagerPlugin
import org.jetbrains.kotlin.cpp.*
import org.jetbrains.kotlin.dependencies.NativeDependenciesExtension
import org.jetbrains.kotlin.dependencies.NativeDependenciesPlugin
@@ -29,6 +30,7 @@ import org.jetbrains.kotlin.konan.target.PlatformManager
import org.jetbrains.kotlin.konan.target.SanitizerKind
import org.jetbrains.kotlin.konan.target.TargetDomainObjectContainer
import org.jetbrains.kotlin.konan.target.TargetWithSanitizer
import org.jetbrains.kotlin.konan.target.enabledTargets
import org.jetbrains.kotlin.testing.native.GoogleTestExtension
import org.jetbrains.kotlin.utils.capitalized
import java.time.Duration
@@ -139,13 +141,10 @@ open class CompileToBitcodeExtension @Inject constructor(val project: Project) :
"-Wno-unused-parameter", // False positives with polymorphic functions.
)
private val targetList = with(project) {
provider { (rootProject.project(":kotlin-native").property("targetList") as? List<*>)?.filterIsInstance<String>() ?: emptyList() } // TODO: Can we make it better?
}
private val allTestsTasks by lazy {
val name = project.name.capitalized
targetList.get().associateBy(keySelector = { it }, valueTransform = {
val platformManager = project.extensions.getByType<PlatformManager>()
enabledTargets(platformManager).associateBy(keySelector = { it.visibleName }, valueTransform = {
project.tasks.register("${it}${name}Tests") {
description = "Runs all $name tests for $it"
group = VERIFICATION_TASK_GROUP
@@ -670,6 +669,7 @@ open class CompileToBitcodeExtension @Inject constructor(val project: Project) :
*/
open class CompileToBitcodePlugin : Plugin<Project> {
override fun apply(project: Project) {
project.apply<PlatformManagerPlugin>()
project.apply<CppConsumerPlugin>()
project.apply<CompilationDatabasePlugin>()
project.apply<GitClangFormatPlugin>()
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.cpp
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.PlatformManagerPlugin
import org.jetbrains.kotlin.dependencies.NativeDependenciesExtension
import org.jetbrains.kotlin.dependencies.NativeDependenciesPlugin
@@ -16,6 +17,7 @@ import org.jetbrains.kotlin.dependencies.NativeDependenciesPlugin
*/
open class GitClangFormatPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.apply<PlatformManagerPlugin>()
target.apply<NativeDependenciesPlugin>()
val nativeDependencies = target.extensions.getByType<NativeDependenciesExtension>()
@@ -13,6 +13,7 @@ import org.gradle.api.file.DirectoryProperty
import org.gradle.api.logging.LogLevel
import org.gradle.api.provider.Property
import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.PlatformManagerPlugin
import org.jetbrains.kotlin.konan.properties.KonanPropertiesLoader
import org.jetbrains.kotlin.konan.target.PlatformManager
import org.jetbrains.kotlin.konan.target.TargetDomainObjectContainer
@@ -166,6 +167,7 @@ abstract class NativeDependenciesDownloaderExtension @Inject constructor(private
*/
open class NativeDependenciesDownloaderPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.apply<PlatformManagerPlugin>()
project.apply<NativeDependenciesBasePlugin>()
project.extensions.create<NativeDependenciesDownloaderExtension>("nativeDependenciesDownloader", project)
}
@@ -12,6 +12,7 @@ import org.gradle.api.artifacts.Configuration
import org.gradle.api.attributes.Usage
import org.gradle.api.file.FileCollection
import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.PlatformManagerPlugin
import org.jetbrains.kotlin.konan.target.*
import java.io.File
import java.nio.file.Paths
@@ -137,6 +138,7 @@ abstract class NativeDependenciesExtension @Inject constructor(private val proje
*/
class NativeDependenciesPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.apply<PlatformManagerPlugin>()
project.apply<NativeDependenciesBasePlugin>()
project.extensions.create<NativeDependenciesExtension>("nativeDependencies", project)
}
+6 -28
View File
@@ -52,18 +52,7 @@ if (PlatformInfo.isMac()) {
}
apply plugin: "kotlin.native.build-tools-conventions"
ext {
distDir = UtilsKt.getKotlinNativeDist(project)
def konanDataDir = project.hasProperty('konan.data.dir') ? project.property('konan.data.dir').toString() : null
dependenciesDir = DependencyDirectories.INSTANCE.getDependenciesRoot(konanDataDir)
experimentalEnabled = project.hasProperty("org.jetbrains.kotlin.native.experimentalTargets")
platformManager = new PlatformManager(DistributionKt.buildDistribution(projectDir.absolutePath, konanDataDir),
ext.experimentalEnabled)
cacheableTargetNames = platformManager.hostPlatform.cacheableTargets
cacheableTargets = cacheableTargetNames.collect { platformManager.targetByName(it) }
}
apply plugin: "platform-manager"
allprojects {
repositories {
@@ -72,20 +61,13 @@ allprojects {
url project.bootstrapKotlinRepo
}
}
setupHostAndTarget()
setupClang(project)
}
void setupHostAndTarget() {
ext.hostName = platformManager.hostName
ext.targetList = EnabledTargetsKt.enabledTargets(platformManager).collect { it.visibleName } as List
ext.konanTargetList = EnabledTargetsKt.enabledTargets(platformManager) as List
}
void setupClang(Project project) {
project.extensions.platformManager = project.project(":kotlin-native").ext.platformManager
}
def platformManager = project.extensions.platformManager
def distDir = UtilsKt.getKotlinNativeDist(project)
def hostName = PlatformInfo.hostName
def targetList = EnabledTargetsKt.enabledTargets(platformManager).collect { it.visibleName } as List
def cacheableTargetNames = platformManager.hostPlatform.cacheableTargets
configurations {
ftpAntTask
@@ -302,12 +284,8 @@ tasks.register("distCompiler", Copy) {
tokens: [("llvm.${hostName}.dev".toString()): "\$llvm.${hostName}.${llvmVariant}".toString()]
)
}
if (experimentalEnabled) {
file('konan/experimentalTargetsEnabled').text = ""
} else {
delete('konan/experimentalTargetsEnabled')
}
}
tasks.register("distDef", Copy) {
destinationDir project.file("$distDir/konan/platformDef/")
+2 -2
View File
@@ -3,8 +3,8 @@
* that can be found in the LICENSE file.
*/
import java.io.File
import org.jetbrains.kotlin.konan.target.allTargetsWithSanitizers
import org.jetbrains.kotlin.konan.util.DependencyDirectories
plugins {
id("native-dependencies-downloader")
@@ -13,7 +13,7 @@ plugins {
nativeDependenciesDownloader {
repositoryURL.set("https://cache-redirector.jetbrains.com/download.jetbrains.com/kotlin/native")
dependenciesDirectory.set(rootProject.project(":kotlin-native").property("dependenciesDir") as File)
dependenciesDirectory.set(DependencyDirectories.getDependenciesRoot(kotlinBuildProperties.konanDataDir))
allTargets {}
}
+10 -12
View File
@@ -5,12 +5,13 @@
import org.jetbrains.kotlin.gradle.plugin.konan.tasks.KonanCacheTask
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanInteropTask
import org.jetbrains.kotlin.PlatformInfo
import org.jetbrains.kotlin.kotlinNativeDist
import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.util.*
// These properties are used by the 'konan' plugin, thus we set them before applying it.
val distDir: File by project
val konanHome: String by extra(distDir.absolutePath)
val konanHome: String by extra(kotlinNativeDist.absolutePath)
val jvmArgs: String by extra(
mutableListOf<String>().apply {
addAll(HostManager.defaultJvmArgs)
@@ -22,6 +23,7 @@ extra["org.jetbrains.kotlin.native.home"] = konanHome
extra["konan.jvmArgs"] = jvmArgs
plugins {
id("platform-manager")
id("konan")
}
@@ -40,11 +42,9 @@ if (HostManager.host == KonanTarget.MACOS_ARM64) {
project.configureJvmToolchain(JdkMajorVersion.JDK_17_0)
}
val konanTargetList: List<KonanTarget> by project
val targetList: List<String> by project
val cacheableTargets: List<KonanTarget> by project
val cacheableTargetNames = platformManager.hostPlatform.cacheableTargets
konanTargetList.forEach { target ->
enabledTargets(platformManager).forEach { target ->
val targetName = target.visibleName
val installTasks = mutableListOf<TaskProvider<out Task>>()
val cacheTasks = mutableListOf<TaskProvider<out Task>>()
@@ -84,7 +84,7 @@ konanTargetList.forEach { target ->
}
installTasks.add(klibInstallTask)
if (target in cacheableTargets) {
if (target.name in cacheableTargetNames) {
val cacheTask = tasks.register("${libName}Cache", KonanCacheTask::class.java) {
notCompatibleWithConfigurationCache("project used in execution time")
this.target = targetName
@@ -112,7 +112,7 @@ konanTargetList.forEach { target ->
dependsOn(installTasks)
}
if (target in cacheableTargets) {
if (target.name in cacheableTargetNames) {
tasks.register("${targetName}Cache") {
dependsOn(cacheTasks)
@@ -122,14 +122,12 @@ konanTargetList.forEach { target ->
}
}
val hostName: String by project
val hostInstall by tasks.registering {
dependsOn("${hostName}Install")
dependsOn("${PlatformInfo.hostName}Install")
}
val hostCache by tasks.registering {
dependsOn("${hostName}Cache")
dependsOn("${PlatformInfo.hostName}Cache")
}
val cache by tasks.registering {
+11 -13
View File
@@ -15,8 +15,7 @@ import org.jetbrains.kotlin.konan.file.File as KFile
import org.jetbrains.kotlin.konan.target.Architecture as TargetArchitecture
// These properties are used by the 'konan' plugin, thus we set them before applying it.
val distDir: File by project
val konanHome: String by extra(distDir.absolutePath)
val konanHome: String by extra(kotlinNativeDist.absolutePath)
extra["org.jetbrains.kotlin.native.home"] = konanHome
val kotlinVersion: String by rootProject.extra
@@ -36,8 +35,7 @@ googletest {
refresh = project.hasProperty("refresh-gtest")
}
val hostName: String by project
val targetList: List<String> by project
val targetList = enabledTargets(extensions.getByType<PlatformManager>())
bitcode {
allTargets {
@@ -519,15 +517,15 @@ dependencies {
runtimeBitcode(project(":kotlin-native:runtime"))
}
targetList.forEach { targetName ->
targetList.forEach { target ->
// TODO: replace with a more convenient user-facing task that can build for a specific target.
// like compileToBitcode with optional argument --target.
tasks.register("${targetName}Runtime") {
description = "Build all main runtime modules for $targetName"
tasks.register("${target}Runtime") {
description = "Build all main runtime modules for $target"
group = CompileToBitcodeExtension.BUILD_TASK_GROUP
val dependencies = runtimeBitcode.incoming.artifactView {
attributes {
attribute(TargetWithSanitizer.TARGET_ATTRIBUTE, project.platformManager.targetByName(targetName).withSanitizer())
attribute(TargetWithSanitizer.TARGET_ATTRIBUTE, target.withSanitizer())
}
}.files
dependsOn(dependencies)
@@ -537,13 +535,13 @@ targetList.forEach { targetName ->
val hostRuntime by tasks.registering {
description = "Build all main runtime modules for host"
group = CompileToBitcodeExtension.BUILD_TASK_GROUP
dependsOn("${hostName}Runtime")
dependsOn("${PlatformInfo.hostName}Runtime")
}
val hostRuntimeTests by tasks.registering {
description = "Runs all runtime tests for host"
group = CompileToBitcodeExtension.VERIFICATION_TASK_GROUP
dependsOn("${hostName}RuntimeTests")
dependsOn("${PlatformInfo.hostName}RuntimeTests")
}
tasks.named("assemble") {
@@ -551,7 +549,7 @@ tasks.named("assemble") {
}
val hostAssemble by tasks.registering {
dependsOn("${hostName}Runtime")
dependsOn("${PlatformInfo.hostName}Runtime")
}
tasks.named("clean") {
@@ -656,7 +654,7 @@ val stdlibTask = tasks.register<Copy>("nativeStdlib") {
}
}
val cacheableTargetNames: List<String> by project
val cacheableTargetNames = platformManager.hostPlatform.cacheableTargets
cacheableTargetNames.forEach { targetName ->
tasks.register("${targetName}StdlibCache", KonanCacheTask::class.java) {
@@ -668,7 +666,7 @@ cacheableTargetNames.forEach { targetName ->
dependsOn(":kotlin-native:${targetName}CrossDistRuntime")
// stdlib cache links in runtime modules from the K/N distribution.
inputs.dir("$distDir/konan/targets/$targetName/native")
inputs.dir("$kotlinNativeDist/konan/targets/$targetName/native")
}
}
@@ -65,3 +65,6 @@ val KotlinBuildProperties.isSwiftExportPluginPublishingEnabled: Boolean
val KotlinBuildProperties.limitTestTasksConcurrency: Boolean
get() = getBoolean("kotlin.build.limitTestTasksConcurrency", true)
val KotlinBuildProperties.konanDataDir: String?
get() = getOrNull("konan.data.dir") as String?