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_IR] = baseDir.resolveExistingDir("libraries/stdlib/js-ir/src/generated")
targetBaseDirs[KotlinTarget.WASM] = baseDir.resolveExistingDir("libraries/stdlib/wasm/src/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() }
targetBaseDirs[KotlinTarget.Native] = baseDir.resolveExistingDir("kotlin-native/runtime/src/main/kotlin/generated")
}
else -> {
println("""Parameters:
<kotlin-base-dir> - generates sources for common, jvm, js, ir-js targets using paths derived from specified base path
<target> <target-dir> - generates source for the specified target in the specified target directory
<kotlin-base-dir> - generates sources for common, jvm, js, ir-js, native targets using paths derived from specified base path
""")
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.
* There are two ways to run the program.
* 1. Pass the root directory of the project to generate sources for js and js-ir.
* Pass the root directory of the project to generate sources for js, js-ir and native.
* _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.
* 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 readLines(url: String): List<String> {
@@ -96,12 +93,12 @@ fun main(args: Array<String>) {
oneToManyMappingsGenerators.add(lowercase)
}
var categoryTestGenerator: CharCategoryTestGenerator? = null
val categoryTestGenerator: CharCategoryTestGenerator
var stringUppercaseGenerator: StringUppercaseGenerator? = null
var stringLowercaseGenerator: StringLowercaseGenerator? = null
val stringUppercaseGenerator: StringUppercaseGenerator
val stringLowercaseGenerator: StringLowercaseGenerator
var stringCasingTestGenerator: StringCasingTestGenerator? = null
val stringCasingTestGenerator: StringCasingTestGenerator
when (args.size) {
1 -> {
@@ -121,6 +118,16 @@ fun main(args: Array<String>) {
addRangesGenerators(jsIrGeneratedDir, KotlinTarget.JS_IR)
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
fun downloadFile(fromUrl: String) {
val fileName = File(fromUrl).name
@@ -130,29 +137,10 @@ fun main(args: Array<String>) {
downloadFile(unicodeDataUrl)
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 -> {
println(
"""Parameters:
<kotlin-base-dir> - generates sources for js and js-ir targets using paths derived from specified base path
<target> <target-dir> <test-dir> - generates sources for the specified target in the specified target directory
<kotlin-base-dir> - generates sources for js, js-ir and native targets using paths derived from specified base path
"""
)
exitProcess(1)
@@ -167,7 +155,7 @@ fun main(args: Array<String>) {
it.generate()
}
categoryTestGenerator?.let {
categoryTestGenerator.let {
bmpUnicodeDataLines.forEach { line -> it.appendLine(line) }
it.generate()
}
@@ -182,17 +170,17 @@ fun main(args: Array<String>) {
it.generate()
}
stringUppercaseGenerator?.let {
stringUppercaseGenerator.let {
specialCasingLines.forEach { line -> it.appendSpecialCasingLine(line) }
it.generate()
}
stringLowercaseGenerator?.let {
stringLowercaseGenerator.let {
specialCasingLines.forEach { line -> it.appendSpecialCasingLine(line) }
propListLines.forEach { line -> it.appendPropListLine(line) }
wordBreakPropertyLines.forEach { line -> it.appendWordBreakPropertyLine(line) }
it.generate()
}
stringCasingTestGenerator?.let {
stringCasingTestGenerator.let {
derivedCorePropertiesLines.forEach { line -> it.appendDerivedCorePropertiesLine(line) }
it.generate()
}