@@ -46,7 +46,6 @@ val copySources by tasks.registering(Sync::class) {
4646 }
4747 from(stdlibProjectDir.resolve(" jvm/runtime" )) {
4848 include(" **/*" )
49- exclude(" kotlin/jvm/functions/Functions.kt" )
5049 into(" jvm/runtime" )
5150 }
5251 from(stdlibProjectDir.resolve(" jvm/builtins" )) {
@@ -69,6 +68,120 @@ val copySources by tasks.registering(Sync::class) {
6968
7069val outputKlib = layout.buildDirectory.file(" libs/kotlin-stdlib-jvm-ir.klib" )
7170
71+ val copyMinimalSources by tasks.registering(Sync ::class ) {
72+ dependsOn(" :prepare:build.version:writeStdlibVersion" )
73+ into(layout.buildDirectory.dir(" src/genesis-minimal" ))
74+
75+ from(" src/stubs/jvm/builtins" ) {
76+ include(" **" )
77+ into(" jvm/builtins" )
78+ }
79+
80+ from(" src/stubs" ) {
81+ include(" kotlin/**" )
82+ into(" common/src" )
83+ }
84+
85+ // Common Sources - mirroring jvm-minimal-for-test
86+ from(stdlibProjectDir.resolve(" src" )) {
87+ include(
88+ " kotlin/Annotation.kt" ,
89+ " kotlin/Any.kt" ,
90+ " kotlin/Array.kt" ,
91+ " kotlin/ArrayIntrinsics.kt" ,
92+ " kotlin/Arrays.kt" ,
93+ " kotlin/Boolean.kt" ,
94+ // "kotlin/Char.kt", // Used via stub in src/stubs/kotlin/Char.kt
95+ " kotlin/CharSequence.kt" ,
96+ // "kotlin/Collections.kt",
97+ " kotlin/Comparable.kt" ,
98+ " kotlin/Enum.kt" ,
99+ " kotlin/Enum.kt" ,
100+ // "kotlin/enums/EnumEntries.kt", // Used via stub in src/stubs/kotlin/enums/EnumEntries.kt
101+ " kotlin/Function.kt" ,
102+ " kotlin/Function.kt" ,
103+ " kotlin/Iterator.kt" ,
104+ " kotlin/Library.kt" ,
105+ " kotlin/Nothing.kt" ,
106+ " kotlin/Number.kt" ,
107+ // "kotlin/Primitives.kt", // Used via stub in src/stubs/kotlin/Primitives.kt
108+ " kotlin/String.kt" ,
109+ " kotlin/Throwable.kt" ,
110+ " kotlin/Unit.kt" ,
111+ " kotlin/util/Standard.kt" ,
112+ " kotlin/annotations/Multiplatform.kt" ,
113+ " kotlin/annotations/WasExperimental.kt" ,
114+ " kotlin/annotations/ReturnValue.kt" ,
115+ " kotlin/internal/Annotations.kt" ,
116+ " kotlin/internal/AnnotationsBuiltin.kt" ,
117+ " kotlin/concurrent/atomics/AtomicArrays.common.kt" ,
118+ " kotlin/concurrent/atomics/Atomics.common.kt" ,
119+ " kotlin/contextParameters/Context.kt" ,
120+ " kotlin/contextParameters/ContextOf.kt" ,
121+ " kotlin/contracts/ContractBuilder.kt" ,
122+ " kotlin/contracts/Effect.kt" ,
123+ " kotlin/Annotations.kt" , // Defines SinceKotlin, Deprecated, etc.
124+ )
125+ into(" common/src" )
126+ }
127+
128+
129+ from(stdlibProjectDir.resolve(" common/src" )) {
130+ include(
131+ " kotlin/ExceptionsH.kt" ,
132+ )
133+ into(" common/common" )
134+ }
135+
136+ // JVM Sources - mirroring jvm-minimal-for-test
137+ from(stdlibProjectDir.resolve(" jvm/runtime" )) {
138+ include(
139+ " kotlin/NoWhenBranchMatchedException.kt" ,
140+ " kotlin/UninitializedPropertyAccessException.kt" ,
141+ " kotlin/TypeAliases.kt" ,
142+ " kotlin/text/TypeAliases.kt" ,
143+ )
144+ into(" jvm/runtime" )
145+ }
146+ from(stdlibProjectDir.resolve(" jvm/src" )) {
147+ include(
148+ " kotlin/ArrayIntrinsics.kt" ,
149+ " kotlin/Unit.kt" ,
150+ " kotlin/collections/TypeAliases.kt" ,
151+ " kotlin/enums/EnumEntriesJVM.kt" ,
152+ " kotlin/io/Serializable.kt" ,
153+ )
154+ into(" jvm/src" )
155+ }
156+
157+ from(stdlibProjectDir.resolve(" jvm/builtins" )) {
158+ include(" *.kt" )
159+ exclude(" Char.kt" )
160+ exclude(" Primitives.kt" )
161+ exclude(" Collections.kt" )
162+ into(" jvm/builtins" )
163+ }
164+
165+
166+
167+ // Stub sources - include if they are needed for minimal too, or maybe not?
168+ // jvm-minimal-for-test includes 'jvm-src/minimalAtomics.kt' etc. which are LOCAL to that project.
169+ // jvm-ir-for-test has 'src/stubs/kotlin/jvm/internal/Functions.kt' etc.
170+ // The user said "same srcs", implying the ones from jvm-minimal-for-test?
171+ // Or just the stdlib subset?
172+ // jvm-minimal-for-test has local sources: "jvm-src" and "common-src".
173+ // We probably need to include THOSE local sources from jvm-minimal-for-test if checking "same srcs".
174+ // BUT jvm-ir-for-test might not have access to jvm-minimal-for-test sources easily without path hacking or duplication.
175+ // User said "We can use the full stdlib in the classpath... jvm-minimal only contains kt classes".
176+ // Let's assume for now we just want the subset of STDLIB sources.
177+ // If we need the local stubs from jvm-minimal-for-test, we might need to copy them or reference them.
178+ // Let's copy the stdlib subset first.
179+
180+ duplicatesStrategy = DuplicatesStrategy .EXCLUDE
181+ }
182+
183+ val outputMinimalKlib = layout.buildDirectory.file(" libs/kotlin-stdlib-jvm-minimal-ir.klib" )
184+
72185// Helper to separate Java compilation
73186fun createJavaCompilationTask (sourceTask : TaskProvider <Sync >): TaskProvider <Jar > {
74187 val variantName = sourceTask.name.replaceFirstChar { it.uppercase() }
@@ -114,7 +227,8 @@ val jarJava = createJavaCompilationTask(copySources)
114227fun JavaExec.configureJklibCompilation (
115228 sourceTask : TaskProvider <Sync >,
116229 klibOutput : Provider <RegularFile >,
117- classpathJar : Provider <RegularFile >
230+ classpathJar : Provider <RegularFile >,
231+ extraClasspath : FileCollection = project.files()
118232) {
119233 dependsOn(sourceTask)
120234
@@ -148,13 +262,14 @@ fun JavaExec.configureJklibCompilation(
148262
149263 doFirst {
150264 val allFiles = inputs.files.files.filter { it.extension == " kt" }
151- val jvmFiles = allFiles.filter { it.path.contains(" /jvm /" ) }
152- val commonFiles = allFiles.filter { it.path.contains(" /common/" )}
265+ val commonFiles = allFiles.filter { it.path.contains(" /common /" ) }
266+ val jvmFiles = allFiles.filter { ! it.path.contains(" /common/" ) }
153267
154268 val jvmSourceFiles = jvmFiles.map { it.absolutePath }
155269 val commonSourceFiles = commonFiles.map { it.absolutePath }
156270
157271 logger.lifecycle(" Compiling ${jvmSourceFiles.size} JVM files and ${commonSourceFiles.size} Common files, total ${allFiles.size} " )
272+ logger.lifecycle(" Running K2JKlibCompiler with Java version: ${System .getProperty(" java.version" )} " )
158273
159274 val outputPath = outputs.files.singleFile.absolutePath
160275
@@ -178,11 +293,12 @@ fun JavaExec.configureJklibCompilation(
178293 " -Xoutput-builtins-metadata" ,
179294 )
180295
181- // Add separate Java compilation output and kotlin-reflect to classpath
296+
182297 val kotlinReflectJar = kotlinReflectFileCollection.singleOrNull()
183298 val fullClasspath = listOfNotNull(
184299 classpathJar.get().asFile.absolutePath,
185- kotlinReflectJar?.absolutePath
300+ kotlinReflectJar?.absolutePath,
301+ extraClasspath.asPath
186302 ).joinToString(File .pathSeparator)
187303
188304 args(" -classpath" , fullClasspath)
@@ -193,18 +309,44 @@ fun JavaExec.configureJklibCompilation(
193309}
194310
195311val compileStdlib by tasks.registering(JavaExec ::class ) {
312+ val javaToolchains = project.extensions.getByType(JavaToolchainService ::class .java)
313+ javaLauncher.set(javaToolchains.launcherFor {
314+ languageVersion.set(JavaLanguageVersion .of(8 ))
315+ })
196316 configureJklibCompilation(copySources, outputKlib, jarJava.flatMap { it.archiveFile })
197317}
198318
319+ val compileMinimalStdlib by tasks.registering(JavaExec ::class ) {
320+ val javaToolchains = project.extensions.getByType(JavaToolchainService ::class .java)
321+ javaLauncher.set(javaToolchains.launcherFor {
322+ languageVersion.set(JavaLanguageVersion .of(8 ))
323+ })
324+ // Use the SAME jarJava (full stdlib Java classes) as classpath, as requested.
325+ configureJklibCompilation(copyMinimalSources, outputMinimalKlib, jarJava.flatMap { it.archiveFile }, project.files({ project.findProject(" :kotlin-stdlib" )?.tasks?.getByName(" jvmJar" )?.outputs?.files ? : project.files() }))
326+
327+ // Suppress "Actual without expect" errors typical in minimal stdlib (due to missing common sources)
328+ args(" -nowarn" )
329+ }
330+
199331// Expose the KLIB artifact
200332val distJKlib by configurations.creating {
201333 isCanBeConsumed = true
202334 isCanBeResolved = false
203335}
204336
337+ val distMinimalJKlib by configurations.creating {
338+ isCanBeConsumed = true
339+ isCanBeResolved = false
340+ }
341+
205342artifacts {
206343 add(distJKlib.name, outputKlib) {
207344 builtBy(compileStdlib)
208345 }
209346 add(distJKlib.name, jarJava)
347+
348+ add(distMinimalJKlib.name, outputMinimalKlib) {
349+ builtBy(compileMinimalStdlib)
350+ }
351+ add(distMinimalJKlib.name, jarJava)
210352}
0 commit comments