Add Windows i18n support (#617)
This commit is contained in:
@@ -157,8 +157,9 @@ targetList.each { target ->
|
|||||||
classpath = project.configurations.cli_bc
|
classpath = project.configurations.cli_bc
|
||||||
jvmArgs "-ea",
|
jvmArgs "-ea",
|
||||||
"-Dkonan.home=${project.parent.file('dist')}",
|
"-Dkonan.home=${project.parent.file('dist')}",
|
||||||
"-Djava.library.path=${project.buildDir}/nativelibs"
|
"-Djava.library.path=${project.buildDir}/nativelibs",
|
||||||
args('-output', project(':runtime').file("build/${target}Stdlib"),
|
"-Dfile.encoding=UTF-8"
|
||||||
|
args('-output', project(':runtime').file("build/${target}Stdlib"),
|
||||||
'-nopack', '-nostdlib','-ea',
|
'-nopack', '-nostdlib','-ea',
|
||||||
'-produce', 'library', '-target', target,
|
'-produce', 'library', '-target', target,
|
||||||
'-runtime', project(':runtime').file("build/${target}/runtime.bc"),
|
'-runtime', project(':runtime').file("build/${target}/runtime.bc"),
|
||||||
|
|||||||
@@ -367,17 +367,14 @@ task hello3(type: RunKonanTest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
task hello4(type: RunKonanTest) {
|
task hello4(type: RunKonanTest) {
|
||||||
if (isWindows()) {
|
|
||||||
// To be investigated.
|
|
||||||
disabled = true
|
|
||||||
}
|
|
||||||
goldValue = "Hello\nПока\n"
|
goldValue = "Hello\nПока\n"
|
||||||
source = "runtime/basic/hello4.kt"
|
source = "runtime/basic/hello4.kt"
|
||||||
}
|
}
|
||||||
|
|
||||||
task tostring0(type: RunKonanTest) {
|
task tostring0(type: RunKonanTest) {
|
||||||
if (isWindows()) {
|
if (isWindows()) {
|
||||||
// To be investigated.
|
// ト is misprinted for now (as 0x3f).
|
||||||
|
// TODO: investigate.
|
||||||
disabled = true
|
disabled = true
|
||||||
}
|
}
|
||||||
goldValue = "127\n-1\n239\nA\nЁ\nト\n1122334455\n112233445566778899\n3.14159265358\n1.0E27\n1.0E-300\ntrue\nfalse\n"
|
goldValue = "127\n-1\n239\nA\nЁ\nト\n1122334455\n112233445566778899\n3.14159265358\n1.0E27\n1.0E-300\ntrue\nfalse\n"
|
||||||
@@ -395,10 +392,6 @@ task tostring2(type: RunKonanTest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
task tostring3(type: RunKonanTest) {
|
task tostring3(type: RunKonanTest) {
|
||||||
if (isWindows()) {
|
|
||||||
// Double.toString()
|
|
||||||
disabled = true
|
|
||||||
}
|
|
||||||
goldValue = "-128\n127\n-32768\n32767\n" +
|
goldValue = "-128\n127\n-32768\n32767\n" +
|
||||||
"-2147483648\n2147483647\n-9223372036854775808\n9223372036854775807\n" +
|
"-2147483648\n2147483647\n-9223372036854775808\n9223372036854775807\n" +
|
||||||
"1.4E-45\n3.4028235E38\n-Infinity\nInfinity\n" +
|
"1.4E-45\n3.4028235E38\n-Infinity\nInfinity\n" +
|
||||||
@@ -1223,19 +1216,11 @@ task moderately_large_array1(type: RunKonanTest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
task string_builder0(type: RunKonanTest) {
|
task string_builder0(type: RunKonanTest) {
|
||||||
if (isWindows()) {
|
|
||||||
// To be investigated.
|
|
||||||
disabled = true
|
|
||||||
}
|
|
||||||
goldValue = "OK\n"
|
goldValue = "OK\n"
|
||||||
source = "runtime/text/string_builder0.kt"
|
source = "runtime/text/string_builder0.kt"
|
||||||
}
|
}
|
||||||
|
|
||||||
task string0(type: RunKonanTest) {
|
task string0(type: RunKonanTest) {
|
||||||
if (isWindows()) {
|
|
||||||
// To be investigated.
|
|
||||||
disabled = true
|
|
||||||
}
|
|
||||||
goldValue = "true\ntrue\nПРИВЕТ\nпривет\nПока\ntrue\n"
|
goldValue = "true\ntrue\nПРИВЕТ\nпривет\nПока\ntrue\n"
|
||||||
source = "runtime/text/string0.kt"
|
source = "runtime/text/string0.kt"
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -114,7 +114,8 @@ void setupCompilationFlags() {
|
|||||||
ext.host = "mingw"
|
ext.host = "mingw"
|
||||||
ext.targetArgs <<
|
ext.targetArgs <<
|
||||||
[(ext.host):
|
[(ext.host):
|
||||||
["-target", "x86_64-w64-mingw32", "--sysroot=${mingwWithLlvmDir}", "-DOMIT_BACKTRACE"]]
|
["-target", "x86_64-w64-mingw32", "--sysroot=${mingwWithLlvmDir}",
|
||||||
|
"-DOMIT_BACKTRACE", "-DKONAN_WINDOWS=1"]]
|
||||||
} else {
|
} else {
|
||||||
ext.host = "macbook"
|
ext.host = "macbook"
|
||||||
ext.targetArgs <<
|
ext.targetArgs <<
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ abstract class KonanTest extends JavaExec {
|
|||||||
errorOutput = log
|
errorOutput = log
|
||||||
super.exec()
|
super.exec()
|
||||||
} finally {
|
} finally {
|
||||||
def logString = log.toString()
|
def logString = log.toString("UTF-8")
|
||||||
project.file("${output}.compilation.log").write(logString)
|
project.file("${output}.compilation.log").write(logString)
|
||||||
println(logString)
|
println(logString)
|
||||||
}
|
}
|
||||||
@@ -231,15 +231,16 @@ fun handleExceptionContinuation(x: (Throwable) -> Unit): Continuation<Any?> = ob
|
|||||||
|
|
||||||
ignoreExitValue = true
|
ignoreExitValue = true
|
||||||
}
|
}
|
||||||
println(out.toString())
|
def result = out.toString("UTF-8")
|
||||||
|
println(result)
|
||||||
|
|
||||||
if (execResult.exitValue != expectedExitStatus) {
|
if (execResult.exitValue != expectedExitStatus) {
|
||||||
throw new TestFailedException(
|
throw new TestFailedException(
|
||||||
"Test failed. Expected exit status: $expectedExitStatus, actual: ${execResult.exitValue}")
|
"Test failed. Expected exit status: $expectedExitStatus, actual: ${execResult.exitValue}")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (goldValue != null && goldValue != out.toString().replace(System.lineSeparator(), "\n")) {
|
if (goldValue != null && goldValue != result.replace(System.lineSeparator(), "\n")) {
|
||||||
throw new TestFailedException("Test failed. Expected output: $goldValue, actual output: ${out.toString()}")
|
throw new TestFailedException("Test failed. Expected output: $goldValue, actual output: $result")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -290,7 +291,7 @@ class RunDriverKonanTest extends KonanTest {
|
|||||||
standardOutput = log
|
standardOutput = log
|
||||||
errorOutput = log
|
errorOutput = log
|
||||||
}
|
}
|
||||||
def logString = log.toString()
|
def logString = log.toString("UTF-8")
|
||||||
project.file("${output}.compilation.log").write(logString)
|
project.file("${output}.compilation.log").write(logString)
|
||||||
println(logString)
|
println(logString)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -66,7 +66,8 @@ KONAN_HOME="$(findHome)"
|
|||||||
NATIVE_LIB="${KONAN_HOME}/konan/nativelib"
|
NATIVE_LIB="${KONAN_HOME}/konan/nativelib"
|
||||||
JAVA_OPTS="-ea \
|
JAVA_OPTS="-ea \
|
||||||
-Djava.library.path=${NATIVE_LIB} \
|
-Djava.library.path=${NATIVE_LIB} \
|
||||||
-Dkonan.home=${KONAN_HOME}"
|
-Dkonan.home=${KONAN_HOME} \
|
||||||
|
-Dfile.encoding=UTF-8"
|
||||||
|
|
||||||
STUB_GENERATOR_JAR="${KONAN_HOME}/konan/lib/StubGenerator.jar"
|
STUB_GENERATOR_JAR="${KONAN_HOME}/konan/lib/StubGenerator.jar"
|
||||||
KOTLIN_JAR="${KONAN_HOME}/konan/lib/kotlin-compiler.jar"
|
KOTLIN_JAR="${KONAN_HOME}/konan/lib/kotlin-compiler.jar"
|
||||||
|
|||||||
+1
-1
@@ -70,7 +70,7 @@ HELPERS_JAR="${KONAN_HOME}/konan/lib/helpers.jar"
|
|||||||
NATIVE_LIB="${KONAN_HOME}/konan/nativelib"
|
NATIVE_LIB="${KONAN_HOME}/konan/nativelib"
|
||||||
KONAN_CLASSPATH="$KOTLIN_JAR:$INTEROP_JAR:$KONAN_JAR:$HELPERS_JAR"
|
KONAN_CLASSPATH="$KOTLIN_JAR:$INTEROP_JAR:$KONAN_JAR:$HELPERS_JAR"
|
||||||
KONAN_COMPILER=org.jetbrains.kotlin.cli.bc.K2NativeKt
|
KONAN_COMPILER=org.jetbrains.kotlin.cli.bc.K2NativeKt
|
||||||
JAVA_OPTS=-ea
|
JAVA_OPTS="-ea -Dfile.encoding=UTF-8"
|
||||||
|
|
||||||
#
|
#
|
||||||
# KONAN BACKEND INVOCATION
|
# KONAN BACKEND INVOCATION
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ ffi_type* convertFfiTypeKindToType(FfiTypeKind typeKind) {
|
|||||||
case FFI_TYPE_KIND_DOUBLE: return &ffi_type_double;
|
case FFI_TYPE_KIND_DOUBLE: return &ffi_type_double;
|
||||||
case FFI_TYPE_KIND_POINTER: return &ffi_type_pointer;
|
case FFI_TYPE_KIND_POINTER: return &ffi_type_pointer;
|
||||||
|
|
||||||
default: assert(false);
|
default: assert(false); return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#if KONAN_WINDOWS
|
||||||
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "Memory.h"
|
#include "Memory.h"
|
||||||
#include "Runtime.h"
|
#include "Runtime.h"
|
||||||
@@ -64,6 +67,12 @@ RuntimeState* InitRuntime() {
|
|||||||
result->memoryState = InitMemory();
|
result->memoryState = InitMemory();
|
||||||
// Keep global variables in state as well.
|
// Keep global variables in state as well.
|
||||||
InitGlobalVariables();
|
InitGlobalVariables();
|
||||||
|
#if KONAN_WINDOWS
|
||||||
|
// Note that this code enforces UTF-8 console output, so we may want to rethink
|
||||||
|
// how we perform console IO, if it turns out, that UTF-16 is better output format.
|
||||||
|
SetConsoleCP(CP_UTF8);
|
||||||
|
SetConsoleOutputCP(CP_UTF8);
|
||||||
|
#endif
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ if [ x$TARGET == x ]; then
|
|||||||
case "$OSTYPE" in
|
case "$OSTYPE" in
|
||||||
darwin*) TARGET=macbook ;;
|
darwin*) TARGET=macbook ;;
|
||||||
linux*) TARGET=linux ;;
|
linux*) TARGET=linux ;;
|
||||||
|
msys*) TARGET=mingw ;;
|
||||||
*) echo "unknown: $OSTYPE" && exit 1;;
|
*) echo "unknown: $OSTYPE" && exit 1;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user