diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt index f755fd1284f..42382acbcca 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt @@ -142,6 +142,7 @@ abstract class CLITool { 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 diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/MessageRenderer.java b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/MessageRenderer.java index 773d059caf5..5456734b823 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/MessageRenderer.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/MessageRenderer.java @@ -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); diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/XcodeStyleMessagerRenderer.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/XcodeStyleMessagerRenderer.kt new file mode 100644 index 00000000000..c160c1bd02c --- /dev/null +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/XcodeStyleMessagerRenderer.kt @@ -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" +} \ No newline at end of file diff --git a/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt b/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt index 9fb7e1966c3..e0e545b2e30 100644 --- a/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt +++ b/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt @@ -159,6 +159,7 @@ class K2Native : CLICompiler() { doMain(K2Native(), args) } } + @JvmStatic fun mainNoExit(args: Array) { profile("Total compiler main()") { if (doMainNoExit(K2Native(), args) != ExitCode.OK) { @@ -167,9 +168,9 @@ class K2Native : CLICompiler() { } } - @JvmStatic fun mainNoExitWithGradleRenderer(args: Array) { + @JvmStatic fun mainNoExitWithRenderer(args: Array, 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> = org.jetbrains.kotlin.backend.konan.parseBinaryOptions(arguments, configuration) fun main(args: Array) = K2Native.main(args) -fun mainNoExitWithGradleRenderer(args: Array) = K2Native.mainNoExitWithGradleRenderer(args) +fun mainNoExitWithGradleRenderer(args: Array) = K2Native.mainNoExitWithRenderer(args, MessageRenderer.GRADLE_STYLE) +fun mainNoExitWithXcodeRenderer(args: Array) = K2Native.mainNoExitWithRenderer(args, MessageRenderer.XCODE_STYLE) diff --git a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt index a26cb31a242..960dcf05c05 100644 --- a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt +++ b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt @@ -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) = usingNativeMemoryAllocator { - setupClangEnv() // For in-process invocation have to setup proper environment manually. - mainImpl(args, true, ::konancMainForGradle) +fun daemonMain(args: Array) = inProcessMain(args, ::konancMainWithGradleRenderer) + +fun daemonMainWithXcodeRenderer(args: Array) = inProcessMain(args, ::konancMainWithXcodeRenderer) + +private fun inProcessMain(args: Array, konancMain: (Array) -> Unit) { + usingNativeMemoryAllocator { + setupClangEnv() // For in-process invocation have to setup proper environment manually. + mainImpl(args, true, konancMain) + } } \ No newline at end of file