[Wasm] Move intrinsic generators to generators/wasm

Reason: avoid kotlin-stdlib-gen dependency on kotlinStdlib() via wasm.ir
This commit is contained in:
Svyatoslav Kuzmich
2020-12-15 17:39:24 +03:00
parent efeabac2c5
commit 602ed42b99
6 changed files with 58 additions and 28 deletions
+4
View File
@@ -24,6 +24,7 @@ fun extraSourceSet(name: String, extendMain: Boolean = true): Pair<SourceSet, Co
val (builtinsSourceSet, builtinsApi) = extraSourceSet("builtins", extendMain = false)
val (evaluateSourceSet, evaluateApi) = extraSourceSet("evaluate")
val (interpreterSourceSet, interpreterApi) = extraSourceSet("interpreter")
val (wasmSourceSet, wasmApi) = extraSourceSet("wasm")
dependencies {
// for GeneratorsFileUtil
@@ -32,6 +33,8 @@ dependencies {
builtinsApi("org.jetbrains.kotlin:kotlin-stdlib:$bootstrapKotlinVersion") { isTransitive = false }
evaluateApi(project(":core:deserialization"))
wasmApi(project(":wasm:wasm.ir"))
wasmApi(kotlinStdlib())
interpreterApi(project(":compiler:ir.tree"))
interpreterApi(project(":compiler:ir.tree.impl"))
@@ -96,5 +99,6 @@ val generateKeywordStrings by generator("org.jetbrains.kotlin.generators.fronten
val generateBuiltins by generator("org.jetbrains.kotlin.generators.builtins.generateBuiltIns.GenerateBuiltInsKt", builtinsSourceSet)
val generateOperationsMap by generator("org.jetbrains.kotlin.generators.evaluate.GenerateOperationsMapKt", evaluateSourceSet)
val generateInterpreterMap by generator("org.jetbrains.kotlin.generators.interpreter.GenerateInterpreterMapKt", interpreterSourceSet)
val generateWasmIntrinsics by generator("org.jetbrains.kotlin.generators.wasm.WasmIntrinsicGeneratorKt", wasmSourceSet)
testsJar()
@@ -3,27 +3,20 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package generators
package org.jetbrains.kotlin.generators.wasm
import org.jetbrains.kotlin.wasm.ir.WasmOp
import templates.COMMON_AUTOGENERATED_WARNING
import templates.COPYRIGHT_NOTICE
import templates.PrimitiveType
import templates.isUnsigned
import java.io.File
import java.io.FileWriter
fun generateWasmBuiltIns(targetDir: File) {
generateWasmOps(targetDir)
generateWasmArrays(targetDir)
}
fun FileWriter.generateStandardWasmInternalHeader() {
appendLine(COPYRIGHT_NOTICE)
appendLine(File("license/COPYRIGHT.txt").readText())
appendLine("package kotlin.wasm.internal")
appendLine()
appendLine(COMMON_AUTOGENERATED_WARNING)
appendLine("//")
appendLine("// NOTE: THIS FILE IS AUTO-GENERATED by the generators/wasm/WasmIntrinsicGenerator.kt")
appendLine("//")
appendLine()
}
@@ -57,17 +50,27 @@ fun generateWasmArrays(targetDir: File) {
writer.generateStandardWasmInternalHeader()
writer.appendLine(wasmArrayForType("Any", true))
PrimitiveType.descendingByDomainCapacity.reversed().forEach { primitive ->
val types = listOf(
"Byte",
"Char",
"Short",
"Int",
"Long",
"Float",
"Double"
)
types.forEach { primitive ->
val isPacked = primitive in setOf(
PrimitiveType.Byte,
PrimitiveType.Short,
PrimitiveType.Char,
"Byte",
"Char",
"Short",
)
val isUnsigned = primitive.isUnsigned() || primitive == PrimitiveType.Char
val isUnsigned = primitive == "Char"
writer.appendLine(
wasmArrayForType(
primitive.name,
primitive,
false, isPacked, isUnsigned
)
)
@@ -113,4 +116,10 @@ fun wasmArrayForType(
}
""".trimIndent()
}
fun main() {
val targetDir = File("libraries/stdlib/wasm/src/generated")
generateWasmOps(targetDir)
generateWasmArrays(targetDir)
}
@@ -1,13 +1,23 @@
/*
* Copyright 2010-2020 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.
*
* 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.
*/
package kotlin.wasm.internal
//
// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt
// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib
// NOTE: THIS FILE IS AUTO-GENERATED by the generators/wasm/WasmIntrinsicGenerator.kt
//
@WasmArrayOf(Any::class, isNullable = true)
+13 -3
View File
@@ -1,13 +1,23 @@
/*
* Copyright 2010-2020 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.
*
* 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.
*/
package kotlin.wasm.internal
//
// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt
// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib
// NOTE: THIS FILE IS AUTO-GENERATED by the generators/wasm/WasmIntrinsicGenerator.kt
//
@ExcludedFromCodegen
@@ -10,7 +10,6 @@ sourceSets {
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$bootstrapKotlinVersion"
compile "org.jetbrains.kotlin:kotlin-reflect:$bootstrapKotlinVersion"
compile project(":wasm:wasm.ir")
}
compileKotlin {
@@ -5,8 +5,8 @@
package generators
import java.io.*
import templates.*
import java.io.File
import kotlin.system.exitProcess
/**
@@ -71,8 +71,6 @@ fun main(args: Array<String>) {
}
targetDir.resolve("_${source.name.capitalize()}$platformSuffix.kt")
}
targetBaseDirs[KotlinTarget.WASM]?.let { generateWasmBuiltIns(it) }
}
fun File.resolveExistingDir(subpath: String) = resolve(subpath).also { it.requireExistingDir() }