[K/N, CLI] Pass through errors from Gradle to Xcode

^KT-55650

Merge-request: KT-MR-8245
Merged-by: Artem Daugel-Dauge <Artem.Daugel-Dauge@jetbrains.com>
This commit is contained in:
Artem Daugel-Dauge
2023-01-13 20:54:05 +00:00
committed by Space Team
parent a7cb58418b
commit 0d1e7e83b5
5 changed files with 53 additions and 7 deletions
@@ -142,6 +142,7 @@ abstract class CLITool<A : CommonToolArguments> {
when (System.getProperty(MessageRenderer.PROPERTY_KEY)) {
MessageRenderer.XML.name -> MessageRenderer.XML
MessageRenderer.GRADLE_STYLE.name -> MessageRenderer.GRADLE_STYLE
MessageRenderer.XCODE_STYLE.name -> MessageRenderer.XCODE_STYLE
MessageRenderer.WITHOUT_PATHS.name -> MessageRenderer.WITHOUT_PATHS
MessageRenderer.PLAIN_FULL_PATHS.name -> MessageRenderer.PLAIN_FULL_PATHS
else -> MessageRenderer.PLAIN_RELATIVE_PATHS
@@ -89,6 +89,8 @@ public interface MessageRenderer {
MessageRenderer GRADLE_STYLE = new GradleStyleMessageRenderer();
MessageRenderer XCODE_STYLE = new XcodeStyleMessageRenderer();
String renderPreamble();
String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageSourceLocation location);
@@ -0,0 +1,34 @@
/*
* Copyright 2010-2022 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.
*/
package org.jetbrains.kotlin.cli.common.messages
// https://developer.apple.com/documentation/xcode/running-custom-scripts-during-a-build#Log-errors-and-warnings-from-your-script
class XcodeStyleMessageRenderer : MessageRenderer {
override fun render(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?): String {
val xcodeSeverity = when (severity) {
CompilerMessageSeverity.WARNING, CompilerMessageSeverity.STRONG_WARNING -> "warning"
CompilerMessageSeverity.ERROR, CompilerMessageSeverity.EXCEPTION -> "error"
CompilerMessageSeverity.LOGGING, CompilerMessageSeverity.OUTPUT, CompilerMessageSeverity.INFO -> "note"
}
return buildString {
location?.apply {
append("$path:$line:$column: ")
}
append("$xcodeSeverity: $message")
}
}
override fun renderPreamble() = ""
override fun renderUsage(usage: String) = usage
override fun renderConclusion() = ""
override fun getName() = "XcodeStyle"
}
@@ -159,6 +159,7 @@ class K2Native : CLICompiler<K2NativeCompilerArguments>() {
doMain(K2Native(), args)
}
}
@JvmStatic fun mainNoExit(args: Array<String>) {
profile("Total compiler main()") {
if (doMainNoExit(K2Native(), args) != ExitCode.OK) {
@@ -167,9 +168,9 @@ class K2Native : CLICompiler<K2NativeCompilerArguments>() {
}
}
@JvmStatic fun mainNoExitWithGradleRenderer(args: Array<String>) {
@JvmStatic fun mainNoExitWithRenderer(args: Array<String>, messageRenderer: MessageRenderer) {
profile("Total compiler main()") {
if (doMainNoExit(K2Native(), args, MessageRenderer.GRADLE_STYLE) != ExitCode.OK) {
if (doMainNoExit(K2Native(), args, messageRenderer) != ExitCode.OK) {
throw KonanCompilationException("Compilation finished with errors")
}
}
@@ -186,4 +187,5 @@ fun parseBinaryOptions(
): List<BinaryOptionWithValue<*>> = org.jetbrains.kotlin.backend.konan.parseBinaryOptions(arguments, configuration)
fun main(args: Array<String>) = K2Native.main(args)
fun mainNoExitWithGradleRenderer(args: Array<String>) = K2Native.mainNoExitWithGradleRenderer(args)
fun mainNoExitWithGradleRenderer(args: Array<String>) = K2Native.mainNoExitWithRenderer(args, MessageRenderer.GRADLE_STYLE)
fun mainNoExitWithXcodeRenderer(args: Array<String>) = K2Native.mainNoExitWithRenderer(args, MessageRenderer.XCODE_STYLE)
@@ -7,7 +7,8 @@ package org.jetbrains.kotlin.cli.utilities
import org.jetbrains.kotlin.native.interop.gen.defFileDependencies
import org.jetbrains.kotlin.cli.bc.main as konancMain
import org.jetbrains.kotlin.cli.klib.main as klibMain
import org.jetbrains.kotlin.cli.bc.mainNoExitWithGradleRenderer as konancMainForGradle
import org.jetbrains.kotlin.cli.bc.mainNoExitWithGradleRenderer as konancMainWithGradleRenderer
import org.jetbrains.kotlin.cli.bc.mainNoExitWithXcodeRenderer as konancMainWithXcodeRenderer
import org.jetbrains.kotlin.backend.konan.env.setEnv
import org.jetbrains.kotlin.konan.util.usingNativeMemoryAllocator
@@ -47,7 +48,13 @@ private fun setupClangEnv() {
setEnv("LIBCLANG_DISABLE_CRASH_RECOVERY", "1")
}
fun daemonMain(args: Array<String>) = usingNativeMemoryAllocator {
setupClangEnv() // For in-process invocation have to setup proper environment manually.
mainImpl(args, true, ::konancMainForGradle)
fun daemonMain(args: Array<String>) = inProcessMain(args, ::konancMainWithGradleRenderer)
fun daemonMainWithXcodeRenderer(args: Array<String>) = inProcessMain(args, ::konancMainWithXcodeRenderer)
private fun inProcessMain(args: Array<String>, konancMain: (Array<String>) -> Unit) {
usingNativeMemoryAllocator {
setupClangEnv() // For in-process invocation have to setup proper environment manually.
mainImpl(args, true, konancMain)
}
}