diff --git a/backend.native/build.gradle b/backend.native/build.gradle index 110d99b697d..e5da6cc46e9 100644 --- a/backend.native/build.gradle +++ b/backend.native/build.gradle @@ -207,7 +207,7 @@ targetList.each { target -> if (target != "wasm32") defaultArgs += '-g' def konanArgs = [*defaultArgs, '-target', target, - "-Xruntime=${project(':runtime').file('build/' + target + '/runtime.bc')}", + "-Xruntime=${project(':runtime').file('build/bitcode/main/' + target + '/runtime.bc')}", *project.globalBuildArgs] task("${target}Stdlib", type: JavaExec) { diff --git a/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcode.kt b/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcode.kt index 9e93b5eb0ab..2ed276bcca1 100644 --- a/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcode.kt +++ b/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcode.kt @@ -18,7 +18,8 @@ import javax.inject.Inject open class CompileToBitcode @Inject constructor( val srcRoot: File, val folderName: String, - val target: String + val target: String, + val outputGroup: String ) : DefaultTask() { enum class Language { @@ -48,7 +49,7 @@ open class CompileToBitcode @Inject constructor( @Input var language = Language.CPP - private val targetDir by lazy { File(project.buildDir, target) } + private val targetDir by lazy { project.buildDir.resolve("bitcode/$outputGroup/$target") } val objDir by lazy { File(targetDir, folderName) } diff --git a/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt b/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt index 307b76b0039..85af1c8a588 100644 --- a/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt +++ b/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt @@ -38,12 +38,17 @@ open class CompileToBitcodeExtension @Inject constructor(val project: Project) { provider { rootProject.property("targetList") as List } // TODO: Can we make it better? } - fun create(name: String, srcDir: File = project.file("src/$name"), configurationBlock: CompileToBitcode.() -> Unit = {}) { + fun create( + name: String, + srcDir: File = project.file("src/$name"), + outputGroup: String = "main", + configurationBlock: CompileToBitcode.() -> Unit = {} + ) { targetList.get().forEach { targetName -> project.tasks.register( "${targetName}${name.snakeCaseToCamelCase().capitalize()}", CompileToBitcode::class.java, - srcDir, name, targetName + srcDir, name, targetName, outputGroup ).configure { it.group = BasePlugin.BUILD_GROUP it.description = "Compiles '$name' to bitcode for $targetName" diff --git a/build-tools/src/main/kotlin/org/jetbrains/kotlin/testing/native/RuntimeTestingPlugin.kt b/build-tools/src/main/kotlin/org/jetbrains/kotlin/testing/native/RuntimeTestingPlugin.kt index 6d7f437233f..fb935411949 100644 --- a/build-tools/src/main/kotlin/org/jetbrains/kotlin/testing/native/RuntimeTestingPlugin.kt +++ b/build-tools/src/main/kotlin/org/jetbrains/kotlin/testing/native/RuntimeTestingPlugin.kt @@ -53,7 +53,7 @@ open class RuntimeTestingPlugin : Plugin { val bitcodeExtension = project.extensions.getByName(CompileToBitcodePlugin.EXTENSION_NAME) as CompileToBitcodeExtension - bitcodeExtension.create("googletest") { + bitcodeExtension.create("googletest", outputGroup = "test") { srcDirs = project.files( googleTestRoot.resolve("googletest/src") ) @@ -68,7 +68,7 @@ open class RuntimeTestingPlugin : Plugin { dependsOn(dependencies) } - bitcodeExtension.create("googlemock") { + bitcodeExtension.create("googlemock", outputGroup = "test") { srcDirs = project.files( googleTestRoot.resolve("googlemock/src") ) diff --git a/build.gradle b/build.gradle index bde4f89a718..955251ef012 100644 --- a/build.gradle +++ b/build.gradle @@ -497,11 +497,11 @@ targetList.each { target -> } } } - from(project(':runtime').file("build/$target")) { + from(project(':runtime').file("build/bitcode/main/$target")) { include("runtime.bc") into("$stdlibDefaultComponent/targets/$target/native") } - from(project(':runtime').file("build/$target")) { + from(project(':runtime').file("build/bitcode/main/$target")) { include("*.bc") exclude("runtime.bc") into("konan/targets/$target/native") diff --git a/endorsedLibraries/kotlinx.cli/build.gradle b/endorsedLibraries/kotlinx.cli/build.gradle index f5cb4d87c05..e53f30dab02 100644 --- a/endorsedLibraries/kotlinx.cli/build.gradle +++ b/endorsedLibraries/kotlinx.cli/build.gradle @@ -80,7 +80,7 @@ targetList.each { target -> if (target != "wasm32") defaultArgs += '-g' def konanArgs = [*defaultArgs, '-target', target, - "-Xruntime=${project(':runtime').file('build/' + target + '/runtime.bc')}", + "-Xruntime=${project(':runtime').file('build/bitcode/main/' + target + '/runtime.bc')}", *project.globalBuildArgs] task("${target}KotlinxCli", type: JavaExec) { diff --git a/runtime/build.gradle.kts b/runtime/build.gradle.kts index f9d691fbad8..5089cd68182 100644 --- a/runtime/build.gradle.kts +++ b/runtime/build.gradle.kts @@ -43,7 +43,7 @@ bitcode { "${target}ExceptionsSupport" ) includeRuntime() - linkerArgs.add(project.file("../common/build/$target/hash.bc").path) + linkerArgs.add(project.file("../common/build/bitcode/main/$target/hash.bc").path) } create("mimalloc") { @@ -95,6 +95,12 @@ val hostRuntime by tasks.registering { dependsOn("${hostName}Runtime") } +val assemble by tasks.registering { + dependsOn(tasks.withType(CompileToBitcode::class).matching { + it.outputGroup == "main" + }) +} + val clean by tasks.registering { doLast { delete(buildDir)