diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt index 47d80935083..1499b126217 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt @@ -59,20 +59,10 @@ fun getCInteropArguments(): List { isMultiple = true, delimiter = ",", deprecatedWarning = "Option -h is deprecated. Please use -header."), OptionDescriptor(ArgType.String(), HEADER_FILTER_ADDITIONAL_SEARCH_PREFIX, "hfasp", "header file to produce kotlin bindings for", isMultiple = true, delimiter = ","), - OptionDescriptor(ArgType.String(), "compilerOpts", - description = "additional compiler options (allows to add several options separated by spaces)", - isMultiple = true, delimiter = " "), - OptionDescriptor(ArgType.String(), "linkerOpts", - description = "additional linker options (allows to add several options separated by spaces)", - isMultiple = true, delimiter = " "), - OptionDescriptor(ArgType.String(), "compilerOpt", - description = "additional compiler option", isMultiple = true), - OptionDescriptor(ArgType.String(), "linkerOpt", - description = "additional linker option", isMultiple = true), - OptionDescriptor(ArgType.String(), "copt", description = "additional compiler options (allows to add several options separated by spaces)", - isMultiple = true, delimiter = " ", deprecatedWarning = "Option -copt is deprecated. Please use -compilerOpts."), - OptionDescriptor(ArgType.String(), "lopt", description = "additional linker options (allows to add several options separated by spaces)", - isMultiple = true, delimiter = " ", deprecatedWarning = "Option -lopt is deprecated. Please use -linkerOpts."), + OptionDescriptor(ArgType.String(), "compilerOpts", "copt", + "additional compiler options", isMultiple = true, delimiter = " "), + OptionDescriptor(ArgType.String(), "linkerOpts", "lopt", + "additional linker options", isMultiple = true, delimiter = " "), OptionDescriptor(ArgType.String(), "linker", description = "use specified linker") ) return (options + getCommonInteropArguments()) diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt index 6205935db8b..4aa94b7e902 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt @@ -176,15 +176,12 @@ private fun processCLib(args: Array, additionalArgs: Map = val tool = prepareTool(argParser.get("target"), flavor) val def = DefFile(defFile, tool.substitutions) - val isLinkerOptsSetByUser = (argParser.getOrigin("linkerOpts") == ArgParser.ValueOrigin.SET_BY_USER) || - (argParser.getOrigin("linkerOpt") == ArgParser.ValueOrigin.SET_BY_USER) || - (argParser.getOrigin("lopt") == ArgParser.ValueOrigin.SET_BY_USER) - if (flavorName == "native" && isLinkerOptsSetByUser) { - warn("-linkerOpt(s)/-lopt option is not supported by cinterop. Please add linker options to .def file or binary compilation instead.") + + if (flavorName == "native" && argParser.getOrigin("linkerOpts") == ArgParser.ValueOrigin.SET_BY_USER) { + warn("-linkerOpts/-lopt option is not supported by cinterop. Please add linker options to .def file or binary compilation instead.") } - val additionalLinkerOpts = argParser.getValuesAsArray("linkerOpts") + argParser.getValuesAsArray("linkerOpt") + - argParser.getValuesAsArray("lopt") + val additionalLinkerOpts = argParser.getValuesAsArray("linkerOpts") val verbose = argParser.get("verbose")!! val language = selectNativeLanguage(def.config) @@ -305,8 +302,7 @@ internal fun buildNativeLibrary( imports: ImportsImpl ): NativeLibrary { val additionalHeaders = arguments.getValuesAsArray("header") + arguments.getValuesAsArray("h") - val additionalCompilerOpts = arguments.getValuesAsArray("compilerOpts") + arguments.getValuesAsArray("compilerOpt") + - arguments.getValuesAsArray("copt") + val additionalCompilerOpts = arguments.getValuesAsArray("compilerOpts") val headerFiles = def.config.headers + additionalHeaders val language = selectNativeLanguage(def.config) diff --git a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt index 72d0de64273..fa5e8c88f9e 100644 --- a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt +++ b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt @@ -121,8 +121,8 @@ class K2Native : CLICompiler() { put(NOMAIN, arguments.nomain) put(LIBRARY_FILES, arguments.libraries.toNonNullList()) - put(LINKER_ARGS, arguments.linkerArguments.toNonNullList() + - arguments.singleLinkerArguments.toNonNullList()) + + put(LINKER_ARGS, arguments.linkerArguments.toNonNullList()) arguments.moduleName ?. let{ put(MODULE_NAME, it) } arguments.target ?.let{ put(TARGET, it) } diff --git a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt index 052eae1c515..3927a073fdd 100644 --- a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt +++ b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt @@ -66,9 +66,6 @@ class K2NativeCompilerArguments : CommonCompilerArguments() { @Argument(value="-linker-options", deprecatedName = "-linkerOpts", valueDescription = "", description = "Pass arguments to linker", delimiter = " ") var linkerArguments: Array? = null - @Argument(value="-linker-option", valueDescription = "", description = "Pass argument to linker", delimiter = "") - var singleLinkerArguments: Array? = null - @Argument(value = "-nostdlib", description = "Don't link with stdlib") var nostdlib: Boolean = false diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt index 04197e85c55..f860496dd4b 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.types.isUnit import org.jetbrains.kotlin.types.SimpleType -import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol /** * List of all implemented interfaces (including those which implemented by a super class) @@ -219,10 +218,8 @@ internal tailrec fun IrDeclaration.findPackage(): IrPackageFragment { ?: (parent as IrDeclaration).findPackage() } -fun IrDeclaration.isIrBuiltIn() = this.findPackage().packageFragmentDescriptor is IrBuiltinsPackageFragmentDescriptor - -fun IrFunction.isComparisonFunction(map: Map) = - this.symbol in map.values +fun IrFunction.isComparisonFunction(map: Map): Boolean = + this in map.values val IrDeclaration.isPropertyAccessor get() = this is IrSimpleFunction && this.correspondingProperty != null diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index a4db1f8c4ad..d5c884e4375 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -2000,7 +2000,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map intrinsicGenerator.evaluateCall(callee, args) - function.isIrBuiltIn() -> evaluateOperatorCall(callee, argsWithContinuationIfNeeded) + function.origin == IrDeclarationOrigin.IR_BUILTINS_STUB -> evaluateOperatorCall(callee, argsWithContinuationIfNeeded) function is IrConstructor -> evaluateConstructorCall(callee, argsWithContinuationIfNeeded) else -> evaluateSimpleFunctionCall(function, argsWithContinuationIfNeeded, resultLifetime, callee.superQualifierSymbol?.owner) } @@ -2101,7 +2101,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map icmpEq(args[0], args[1]) + function == ib.eqeqeqFun -> icmpEq(args[0], args[1]) function.symbol == ib.booleanNotSymbol -> icmpNe(args[0], kTrue) function.isComparisonFunction(ib.greaterFunByOperandType) -> { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt index 51ecebb206c..b3e399f4ab6 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt @@ -301,7 +301,7 @@ private class InlineClassTransformer(private val context: Context) : IrBuildingT putValueArgument(1, irNullPointer()) } } - is BinaryType.Reference -> irCall(context.irBuiltIns.eqeqeqSymbol).apply { + is BinaryType.Reference -> irCall(context.irBuiltIns.eqeqeqFun).apply { putValueArgument(0, expression) putValueArgument(1, irNull()) } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt index d78d0ab2aee..a422d8e920a 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt @@ -70,7 +70,7 @@ internal class BuiltinOperatorLowering(val context: Context) : FileLoweringPass, } private fun ieee754EqualsDescriptors(): List = - irBuiltins.ieee754equalsFunByOperandType.values.map { it.descriptor } + irBuiltins.ieee754equalsFunByOperandType.values.map(IrSimpleFunction::descriptor) private fun transformBuiltinOperator(expression: IrCall): IrExpression = when (expression.descriptor) { irBuiltins.eqeq, in ieee754EqualsDescriptors() -> lowerEqeq(expression) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/loops/ForLoopsLowering.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/loops/ForLoopsLowering.kt index 227031fab22..580969b90c2 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/loops/ForLoopsLowering.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/loops/ForLoopsLowering.kt @@ -157,7 +157,7 @@ private class RangeLoopTransformer( val compareTo = symbols.getBinaryOperator(OperatorNameConventions.COMPARE_TO, forLoopHeader.bound.type.toKotlinType(), minConst.type.toKotlinType()) - return irCall(irBuiltIns.greaterFunByOperandType[irBuiltIns.int]!!).apply { + return irCall(irBuiltIns.greaterFunByOperandType[irBuiltIns.int]?.symbol!!).apply { val compareToCall = irCall(compareTo).apply { dispatchReceiver = irGet(forLoopHeader.bound) putValueArgument(0, minConst) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/loops/HeaderProcessor.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/loops/HeaderProcessor.kt index 801e50ed4d0..449382392cd 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/loops/HeaderProcessor.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/loops/HeaderProcessor.kt @@ -49,9 +49,9 @@ internal class ProgressionLoopHeader( private val increasing = headerInfo.increasing fun comparingFunction(builtIns: IrBuiltIns) = if (increasing) - builtIns.lessOrEqualFunByOperandType[builtIns.int]!! + builtIns.lessOrEqualFunByOperandType[builtIns.int]?.symbol!! else - builtIns.greaterOrEqualFunByOperandType[builtIns.int]!! + builtIns.greaterOrEqualFunByOperandType[builtIns.int]?.symbol!! override fun initializeLoopVariable(symbols: KonanSymbols, builder: DeclarationIrBuilder) = with(builder) { irGet(inductionVariable) @@ -99,7 +99,7 @@ internal class ArrayLoopHeader( override fun buildBody(builder: DeclarationIrBuilder, loop: IrLoop, newBody: IrExpression?): IrLoop = with (builder) { val builtIns = context.irBuiltIns - val callee = builtIns.lessOrEqualFunByOperandType[builtIns.int]!! + val callee = builtIns.lessOrEqualFunByOperandType[builtIns.int]?.symbol!! val newCondition = irCall(callee).apply { putValueArgument(0, irGet(inductionVariable)) putValueArgument(1, irGet(last)) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt index ae5232c5c83..e3da55b5e0e 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.ir.types.isNothing import org.jetbrains.kotlin.ir.types.isUnit import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid -import org.jetbrains.kotlin.backend.konan.descriptors.isIrBuiltIn import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -582,9 +581,8 @@ internal object DataFlowIR { attributes = attributes or FunctionAttributes.RETURNS_UNIT if (returnsNothing) attributes = attributes or FunctionAttributes.RETURNS_NOTHING - val symbol = when { - it.isExternal || it.isIrBuiltIn() -> { + it.isExternal || (it.origin == IrDeclarationOrigin.IR_BUILTINS_STUB) -> { val escapesAnnotation = it.descriptor.annotations.findAnnotation(FQ_NAME_ESCAPES) val pointsToAnnotation = it.descriptor.annotations.findAnnotation(FQ_NAME_POINTS_TO) @Suppress("UNCHECKED_CAST") diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanDeclarationTable.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanDeclarationTable.kt index 09552ba78a1..8cb4e756b16 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanDeclarationTable.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanDeclarationTable.kt @@ -15,3 +15,7 @@ class KonanDeclarationTable(builtIns: IrBuiltIns, descriptorTable: DescriptorTab loadKnownBuiltins() } } + +// This is what we pre-populate tables with. +val IrBuiltIns.knownBuiltins + get() = irBuiltInsExternalPackageFragment.declarations diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUnboundSymbolReplacer.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUnboundSymbolReplacer.kt index 13116d89993..57f9f192784 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUnboundSymbolReplacer.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUnboundSymbolReplacer.kt @@ -19,6 +19,36 @@ import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.types.toKotlinType import org.jetbrains.kotlin.ir.visitors.* +@Deprecated("") +internal fun IrModuleFragment.replaceUnboundSymbols(context: Context) { + val collector = DeclarationSymbolCollector() + with(collector) { + with(irBuiltins) { + for (op in arrayOf(eqeqeqFun, eqeqFun, throwNpeFun, noWhenBranchMatchedExceptionFun) + + lessFunByOperandType.values + + lessOrEqualFunByOperandType.values + + greaterOrEqualFunByOperandType.values + + greaterFunByOperandType.values + + ieee754equalsFunByOperandType.values) { + register(op.symbol) + } + } + } + this.acceptVoid(collector) + + val symbolTable = context.ir.symbols.symbolTable + + this.transformChildrenVoid(IrUnboundSymbolReplacer(symbolTable, collector.descriptorToSymbol, context)) + + // Generate missing external stubs: + @Suppress("DEPRECATION") + ExternalDependenciesGenerator( + context.moduleDescriptor, + symbolTable = context.psi2IrGeneratorContext.symbolTable, + irBuiltIns = context.irBuiltIns + ).generateUnboundSymbolsAsDependencies() +} + private fun IrModuleFragment.mergeFrom(other: IrModuleFragment): Unit { assert(this.files.isEmpty()) assert(other.files.isEmpty()) diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 240eb4c1430..03cf2b5c345 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -2894,20 +2894,6 @@ task inline_defaultArgs_linkTest(type: LinkKonanTest) { lib = "codegen/inline/defaultArgs_linkTest_lib.kt" } -def generateWithSpaceDefFile() { - def file = new File("${buildDir}/withSpaces.def") - file.write """ -headers = stdio.h "${projectDir}/interop/basics/custom headers/custom.h" -linkerOpts = -map "${buildDir}/cutom map.map" ---- - -int customCompare(const char* str1, const char* str2) { - return custom_strcmp(str1, str2); -} -""" - return file.absolutePath -} - kotlinNativeInterop { target project.testTarget ?: 'host' flavor 'native' @@ -3064,24 +3050,6 @@ task interop_callbacksAndVarargs(type: RunInteropKonanTest) { interop = 'ccallbacksAndVarargs' } -task interop_withSpaces() { - dependsOn 'build' - konanArtifacts { - interop('withSpacesInterop') { - defFile generateWithSpaceDefFile() - } - program("withSpaces") { - srcDir "interop/basics/withSpaces.kt" - libraries { - artifact 'withSpacesInterop' - } - } - } - doLast { - assert file("${buildDir}/cutom map.map").exists() - } -} - task interop_echo_server(type: RunInteropKonanTest) { disabled = isWasmTarget(project) || isWindowsTarget(project) run = false diff --git a/backend.native/tests/interop/basics/custom headers/custom.h b/backend.native/tests/interop/basics/custom headers/custom.h deleted file mode 100644 index 1e9e547aca7..00000000000 --- a/backend.native/tests/interop/basics/custom headers/custom.h +++ /dev/null @@ -1,7 +0,0 @@ -#include -#include -#include - -int custom_strcmp(const char* str1, const char* str2) { - return strcmp(str1, str2); -} \ No newline at end of file diff --git a/backend.native/tests/interop/basics/withSpaces.kt b/backend.native/tests/interop/basics/withSpaces.kt deleted file mode 100644 index 71d8bee4a17..00000000000 --- a/backend.native/tests/interop/basics/withSpaces.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the LICENSE file. - */ - -import kotlin.test.* -import kotlinx.cinterop.* -import withSpaces.* - -fun main(args: Array) { - customCompare("first", "second") -} diff --git a/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/NativeInteropPlugin.groovy b/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/NativeInteropPlugin.groovy index 834ddff17bb..11b49d466d3 100644 --- a/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/NativeInteropPlugin.groovy +++ b/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/NativeInteropPlugin.groovy @@ -247,8 +247,8 @@ class NamedNativeInteropConfig implements Named { environment['PATH'] = project.files(project.hostPlatform.clang.clangPaths).asPath + File.pathSeparator + environment['PATH'] - args compilerOpts.collectMany { ['-compilerOpt', it] } - args linkerOpts.collectMany { ['-linkerOpt', it] } + args compilerOpts.collectMany { ['-copt', it] } + args linkerOpts.collectMany { ['-lopt', it] } headers.each { args '-header', it diff --git a/gradle.properties b/gradle.properties index 53f135b71aa..7632d302bdd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,11 +18,11 @@ buildKotlinVersion=1.3.30-dev-1945 buildKotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.3.30-dev-1945,pinned:true/artifacts/content/maven remoteRoot=konan_tests -kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.3.40-dev-1222,branch:default:true,pinned:true/artifacts/content/maven -kotlinVersion=1.3.40-dev-1222 -testKotlinVersion=1.3.40-dev-1222 -sharedRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_KotlinNativeShared_BuildAndTest),number:1.0-dev-28,branch:default:true,pinned:true/artifacts/content/maven -sharedVersion=1.0-dev-28 +kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.3.40-dev-990,branch:default:true,pinned:true/artifacts/content/maven +kotlinVersion=1.3.40-dev-990 +testKotlinVersion=1.3.40-dev-990 +sharedRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_KotlinNativeShared_BuildAndTest),number:1.0-dev-23,branch:default:true,pinned:true/artifacts/content/maven +sharedVersion=1.0-dev-23 konanVersion=1.3.0 org.gradle.jvmargs='-Dfile.encoding=UTF-8' org.gradle.workers.max=4 diff --git a/performance/videoplayer/build.gradle b/performance/videoplayer/build.gradle index bcb0a751848..96ddd6d5f37 100644 --- a/performance/videoplayer/build.gradle +++ b/performance/videoplayer/build.gradle @@ -21,17 +21,17 @@ if (MPPTools.isMacos()) { '-headerFilterAdditionalSearchPrefix', '/usr/include/x86_64-linux-gnu', '-headerFilterAdditionalSearchPrefix', '/usr/include/ffmpeg'] } else if (MPPTools.isWindows()) { - includeDirsFfmpeg += ['-compilerOpt', "-I${MPPTools.mingwPath()}/include"] + includeDirsFfmpeg += ['-copt', "-I${MPPTools.mingwPath()}/include"] } def includeDirsSdl = [] if (MPPTools.isMacos()) { - includeDirsSdl += ['-compilerOpt', '-I/opt/local/include/SDL2', - '-compilerOpt', '-I/usr/local/include/SDL2'] + includeDirsSdl += ['-copt', '-I/opt/local/include/SDL2', + '-copt', '-I/usr/local/include/SDL2'] } else if (MPPTools.isLinux()) { - includeDirsSdl += ['-compilerOpt', '-I/usr/include/SDL2'] + includeDirsSdl += ['-copt', '-I/usr/include/SDL2'] } else if (MPPTools.isWindows()) { - includeDirsSdl += ['-compilerOpt', "-I${MPPTools.mingwPath()}/include/SDL2"] + includeDirsSdl += ['-copt', "-I${MPPTools.mingwPath()}/include/SDL2"] } project.ext { diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/CInteropTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/CInteropTask.kt index 1c5e86fc0df..39450dad0e7 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/CInteropTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/CInteropTask.kt @@ -98,14 +98,14 @@ open class CInteropTask @Inject constructor(val settings: CInteropSettingsImpl): addFileArgs("-header", headers) compilerOpts.forEach { - addArg("-compilerOpt", it) + addArg("-copt", it) } linkerOpts.forEach { - addArg("-linkerOpt", it) + addArg("-lopt", it) } - addArgs("-compilerOpt", allHeadersDirs.map { "-I${it.absolutePath}" }) + addArgs("-copt", allHeadersDirs.map { "-I${it.absolutePath}" }) addArgs("-headerFilterAdditionalSearchPrefix", headerFilterDirs.map { it.absolutePath }) libraries.files.filter { diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt index 5e0301ea407..36eb8a1d9dd 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt @@ -196,9 +196,7 @@ open class KotlinNativeCompile @Inject constructor(internal val binary: Abstract else -> { /* Do nothing. */ } } - linkerOpts.forEach { - addArg("-linker-option", it) - } + addListArg("-linker-options", linkerOpts) addAll(sources.files.map { it.absolutePath }) commonSources.files.mapTo(this) { "-Xcommon-sources=${it.absolutePath}" } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt index f928dc22938..5e10fce4282 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt @@ -203,6 +203,12 @@ internal fun MutableList.addFileArgs(parameter: String, values: Collecti } } +internal fun MutableList.addListArg(parameter: String, values: List) { + if (values.isNotEmpty()) { + addArg(parameter, values.joinToString(separator = " ")) + } +} + // endregion internal fun dumpProperties(task: Task) { diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompileTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompileTask.kt index 3171c4f0b0a..9c59c6efe8a 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompileTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompileTask.kt @@ -122,9 +122,8 @@ abstract class KonanCompileTask: KonanBuildingTask(), KonanCompileSpec { addFileArgs("-native-library", nativeLibraries) addArg("-produce", produce.name.toLowerCase()) - linkerOpts.forEach { - addArg("-linker-option", it) - } + + addListArg("-linker-options", linkerOpts) addArgIfNotNull("-target", konanTarget.visibleName) addArgIfNotNull("-language-version", languageVersion) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanInteropTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanInteropTask.kt index 28fb6215527..d718d36187a 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanInteropTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanInteropTask.kt @@ -93,10 +93,10 @@ open class KonanInteropTask @Inject constructor(val workerExecutor: WorkerExecut linkerOpts.addAll(it.files.map { it.canonicalPath }) } linkerOpts.forEach { - addArg("-linkerOpt", it) + addArg("-lopt", it) } - addArgs("-compilerOpt", includeDirs.allHeadersDirs.map { "-I${it.absolutePath}" }) + addArgs("-copt", includeDirs.allHeadersDirs.map { "-I${it.absolutePath}" }) addArgs("-headerFilterAdditionalSearchPrefix", includeDirs.headerFilterDirs.map { it.absolutePath }) addArgs("-repo", libraries.repos.map { it.canonicalPath })