Merge Stdlib generators

This commit is contained in:
Abduqodiri Qurbonzoda
2021-02-16 11:48:23 +03:00
parent e9a969875c
commit 39731fd493
3 changed files with 22 additions and 68 deletions
@@ -1,29 +0,0 @@
configurations {
generatorRuntime
}
repositories {
maven {
url project.bootstrapKotlinRepo
}
}
dependencies {
generatorRuntime "org.jetbrains.kotlin:kotlin-stdlib:${project.bootstrapKotlinVersion}"
generatorRuntime "org.jetbrains.kotlin:kotlin-reflect:${project.bootstrapKotlinVersion}"
generatorRuntime "org.jetbrains.kotlin:kotlin-stdlib-gen:${project.bootstrapKotlinVersion}"
}
task run(type: JavaExec) {
group 'application'
main 'generators.GenerateStandardLibKt'
classpath configurations.generatorRuntime
args = ["native", "${project(":runtime").projectDir}/src/main/kotlin/generated"]
}
task generateUnicodeData(type: JavaExec) {
group 'application'
main 'generators.unicode.GenerateUnicodeDataKt'
classpath configurations.generatorRuntime
args = ["native", "${project(":runtime").projectDir}/src/main/kotlin/generated", "${project(":backend.native").projectDir}/tests/stdlib_external/text"]
}
@@ -47,16 +47,11 @@ fun main(args: Array<String>) {
targetBaseDirs[KotlinTarget.JS] = baseDir.resolveExistingDir("libraries/stdlib/js/src/generated") targetBaseDirs[KotlinTarget.JS] = baseDir.resolveExistingDir("libraries/stdlib/js/src/generated")
targetBaseDirs[KotlinTarget.JS_IR] = baseDir.resolveExistingDir("libraries/stdlib/js-ir/src/generated") targetBaseDirs[KotlinTarget.JS_IR] = baseDir.resolveExistingDir("libraries/stdlib/js-ir/src/generated")
targetBaseDirs[KotlinTarget.WASM] = baseDir.resolveExistingDir("libraries/stdlib/wasm/src/generated") targetBaseDirs[KotlinTarget.WASM] = baseDir.resolveExistingDir("libraries/stdlib/wasm/src/generated")
} targetBaseDirs[KotlinTarget.Native] = baseDir.resolveExistingDir("kotlin-native/runtime/src/main/kotlin/generated")
2 -> {
val (targetName, targetDir) = args
val target = KotlinTarget.values.singleOrNull { it.name.equals(targetName, ignoreCase = true) } ?: error("Invalid target: $targetName")
targetBaseDirs[target] = File(targetDir).also { it.requireExistingDir() }
} }
else -> { else -> {
println("""Parameters: println("""Parameters:
<kotlin-base-dir> - generates sources for common, jvm, js, ir-js targets using paths derived from specified base path <kotlin-base-dir> - generates sources for common, jvm, js, ir-js, native targets using paths derived from specified base path
<target> <target-dir> - generates source for the specified target in the specified target directory
""") """)
exitProcess(1) exitProcess(1)
} }
@@ -30,12 +30,9 @@ private const val derivedCorePropertiesUrl = "https://www.unicode.org/Public/$un
/** /**
* This program generates sources related to UnicodeData.txt and SpecialCasing.txt. * This program generates sources related to UnicodeData.txt and SpecialCasing.txt.
* There are two ways to run the program. * Pass the root directory of the project to generate sources for js, js-ir and native.
* 1. Pass the root directory of the project to generate sources for js and js-ir.
* _CharCategoryTest.kt and supporting files are also generated to test the generated sources. * _CharCategoryTest.kt and supporting files are also generated to test the generated sources.
* The generated test is meant to be run after updating Unicode version and should not be merged to master. * The generated test is meant to be run after updating Unicode version and should not be merged to master.
* 2. Pass the name of the target to generate sources for, and the directory to generate sources in.
* No tests are generated.
*/ */
fun main(args: Array<String>) { fun main(args: Array<String>) {
fun readLines(url: String): List<String> { fun readLines(url: String): List<String> {
@@ -96,12 +93,12 @@ fun main(args: Array<String>) {
oneToManyMappingsGenerators.add(lowercase) oneToManyMappingsGenerators.add(lowercase)
} }
var categoryTestGenerator: CharCategoryTestGenerator? = null val categoryTestGenerator: CharCategoryTestGenerator
var stringUppercaseGenerator: StringUppercaseGenerator? = null val stringUppercaseGenerator: StringUppercaseGenerator
var stringLowercaseGenerator: StringLowercaseGenerator? = null val stringLowercaseGenerator: StringLowercaseGenerator
var stringCasingTestGenerator: StringCasingTestGenerator? = null val stringCasingTestGenerator: StringCasingTestGenerator
when (args.size) { when (args.size) {
1 -> { 1 -> {
@@ -121,6 +118,16 @@ fun main(args: Array<String>) {
addRangesGenerators(jsIrGeneratedDir, KotlinTarget.JS_IR) addRangesGenerators(jsIrGeneratedDir, KotlinTarget.JS_IR)
oneToOneMappingsGenerators.add(MappingsGenerator.forTitlecase(jsIrGeneratedDir.resolve("_TitlecaseMappings.kt"))) oneToOneMappingsGenerators.add(MappingsGenerator.forTitlecase(jsIrGeneratedDir.resolve("_TitlecaseMappings.kt")))
val nativeGeneratedDir = baseDir.resolve("kotlin-native/runtime/src/main/kotlin/generated/")
addRangesGenerators(nativeGeneratedDir, KotlinTarget.Native)
addOneToOneMappingsGenerators(nativeGeneratedDir, KotlinTarget.Native)
addOneToManyMappingsGenerators(nativeGeneratedDir, KotlinTarget.Native)
stringUppercaseGenerator = StringUppercaseGenerator(nativeGeneratedDir.resolve("_StringUppercase.kt"), unicodeDataLines)
stringLowercaseGenerator = StringLowercaseGenerator(nativeGeneratedDir.resolve("_StringLowercase.kt"), unicodeDataLines)
val nativeTestDir = baseDir.resolve("kotlin-native/backend.native/tests/stdlib_external/text")
stringCasingTestGenerator = StringCasingTestGenerator(nativeTestDir)
// For debugging. To see the file content // For debugging. To see the file content
fun downloadFile(fromUrl: String) { fun downloadFile(fromUrl: String) {
val fileName = File(fromUrl).name val fileName = File(fromUrl).name
@@ -130,29 +137,10 @@ fun main(args: Array<String>) {
downloadFile(unicodeDataUrl) downloadFile(unicodeDataUrl)
downloadFile(specialCasingUrl) downloadFile(specialCasingUrl)
} }
3 -> {
val (targetName, targetDir, testDir) = args
val target = KotlinTarget.values.singleOrNull { it.name.equals(targetName, ignoreCase = true) }
?: error("Invalid target: $targetName")
val generatedDir = File(targetDir)
addRangesGenerators(generatedDir, target)
if (target == KotlinTarget.Native) {
addOneToOneMappingsGenerators(generatedDir, target)
addOneToManyMappingsGenerators(generatedDir, target)
stringUppercaseGenerator = StringUppercaseGenerator(generatedDir.resolve("_StringUppercase.kt"), unicodeDataLines)
stringLowercaseGenerator = StringLowercaseGenerator(generatedDir.resolve("_StringLowercase.kt"), unicodeDataLines)
stringCasingTestGenerator = StringCasingTestGenerator(File(testDir))
}
}
else -> { else -> {
println( println(
"""Parameters: """Parameters:
<kotlin-base-dir> - generates sources for js and js-ir targets using paths derived from specified base path <kotlin-base-dir> - generates sources for js, js-ir and native targets using paths derived from specified base path
<target> <target-dir> <test-dir> - generates sources for the specified target in the specified target directory
""" """
) )
exitProcess(1) exitProcess(1)
@@ -167,7 +155,7 @@ fun main(args: Array<String>) {
it.generate() it.generate()
} }
categoryTestGenerator?.let { categoryTestGenerator.let {
bmpUnicodeDataLines.forEach { line -> it.appendLine(line) } bmpUnicodeDataLines.forEach { line -> it.appendLine(line) }
it.generate() it.generate()
} }
@@ -182,17 +170,17 @@ fun main(args: Array<String>) {
it.generate() it.generate()
} }
stringUppercaseGenerator?.let { stringUppercaseGenerator.let {
specialCasingLines.forEach { line -> it.appendSpecialCasingLine(line) } specialCasingLines.forEach { line -> it.appendSpecialCasingLine(line) }
it.generate() it.generate()
} }
stringLowercaseGenerator?.let { stringLowercaseGenerator.let {
specialCasingLines.forEach { line -> it.appendSpecialCasingLine(line) } specialCasingLines.forEach { line -> it.appendSpecialCasingLine(line) }
propListLines.forEach { line -> it.appendPropListLine(line) } propListLines.forEach { line -> it.appendPropListLine(line) }
wordBreakPropertyLines.forEach { line -> it.appendWordBreakPropertyLine(line) } wordBreakPropertyLines.forEach { line -> it.appendWordBreakPropertyLine(line) }
it.generate() it.generate()
} }
stringCasingTestGenerator?.let { stringCasingTestGenerator.let {
derivedCorePropertiesLines.forEach { line -> it.appendDerivedCorePropertiesLine(line) } derivedCorePropertiesLines.forEach { line -> it.appendDerivedCorePropertiesLine(line) }
it.generate() it.generate()
} }