Minor linker code clean-up
This commit is contained in:
committed by
Sergey Bogolepov
parent
5bc03a45a7
commit
a710a478a5
-2
@@ -149,8 +149,6 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
|
|||||||
internal val includeBinaries: List<String> =
|
internal val includeBinaries: List<String> =
|
||||||
configuration.getList(KonanConfigKeys.INCLUDED_BINARY_FILES)
|
configuration.getList(KonanConfigKeys.INCLUDED_BINARY_FILES)
|
||||||
|
|
||||||
internal val defaultSystemLibraries: List<String> = emptyList()
|
|
||||||
|
|
||||||
internal val languageVersionSettings =
|
internal val languageVersionSettings =
|
||||||
configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS)!!
|
configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS)!!
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -142,7 +142,7 @@ internal class Linker(val context: Context) {
|
|||||||
try {
|
try {
|
||||||
File(executable).delete()
|
File(executable).delete()
|
||||||
linker.linkCommands(objectFiles = objectFiles, executable = executable,
|
linker.linkCommands(objectFiles = objectFiles, executable = executable,
|
||||||
libraries = linker.linkStaticLibraries(includedBinaries) + context.config.defaultSystemLibraries +
|
libraries = linker.linkStaticLibraries(includedBinaries) +
|
||||||
caches.static.takeIf { context.config.produce != CompilerOutputKind.STATIC_CACHE }.orEmpty(),
|
caches.static.takeIf { context.config.produce != CompilerOutputKind.STATIC_CACHE }.orEmpty(),
|
||||||
linkerArgs = asLinkerArgs(config.getNotNull(KonanConfigKeys.LINKER_ARGS)) +
|
linkerArgs = asLinkerArgs(config.getNotNull(KonanConfigKeys.LINKER_ARGS)) +
|
||||||
BitcodeEmbedding.getLinkerOptions(context.config) +
|
BitcodeEmbedding.getLinkerOptions(context.config) +
|
||||||
|
|||||||
@@ -61,8 +61,7 @@ private fun staticGnuArCommands(ar: String, executable: ExecutableFile,
|
|||||||
|
|
||||||
// Use "clang -v -save-temps" to write linkCommand() method
|
// Use "clang -v -save-temps" to write linkCommand() method
|
||||||
// for another implementation of this class.
|
// for another implementation of this class.
|
||||||
abstract class LinkerFlags(val configurables: Configurables)
|
abstract class LinkerFlags(val configurables: Configurables) {
|
||||||
/* : Configurables by configurables */ {
|
|
||||||
|
|
||||||
protected val llvmBin = "${configurables.absoluteLlvmHome}/bin"
|
protected val llvmBin = "${configurables.absoluteLlvmHome}/bin"
|
||||||
protected val llvmLib = "${configurables.absoluteLlvmHome}/lib"
|
protected val llvmLib = "${configurables.absoluteLlvmHome}/lib"
|
||||||
@@ -95,7 +94,7 @@ abstract class LinkerFlags(val configurables: Configurables)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class AndroidLinker(targetProperties: AndroidConfigurables)
|
class AndroidLinker(targetProperties: AndroidConfigurables)
|
||||||
: LinkerFlags(targetProperties), AndroidConfigurables by targetProperties {
|
: LinkerFlags(targetProperties), AndroidConfigurables by targetProperties {
|
||||||
|
|
||||||
private val clangQuad = when (targetProperties.targetArg) {
|
private val clangQuad = when (targetProperties.targetArg) {
|
||||||
@@ -148,7 +147,7 @@ open class AndroidLinker(targetProperties: AndroidConfigurables)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class MacOSBasedLinker(targetProperties: AppleConfigurables)
|
class MacOSBasedLinker(targetProperties: AppleConfigurables)
|
||||||
: LinkerFlags(targetProperties), AppleConfigurables by targetProperties {
|
: LinkerFlags(targetProperties), AppleConfigurables by targetProperties {
|
||||||
|
|
||||||
private val libtool = "$absoluteTargetToolchain/usr/bin/libtool"
|
private val libtool = "$absoluteTargetToolchain/usr/bin/libtool"
|
||||||
@@ -282,14 +281,14 @@ open class MacOSBasedLinker(targetProperties: AppleConfigurables)
|
|||||||
return exitCode
|
return exitCode
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun dsymutilCommand(executable: ExecutableFile, outputDsymBundle: String): List<String> =
|
fun dsymutilCommand(executable: ExecutableFile, outputDsymBundle: String): List<String> =
|
||||||
listOf(dsymutil, executable, "-o", outputDsymBundle)
|
listOf(dsymutil, executable, "-o", outputDsymBundle)
|
||||||
|
|
||||||
open fun dsymutilDryRunVerboseCommand(executable: ExecutableFile): List<String> =
|
fun dsymutilDryRunVerboseCommand(executable: ExecutableFile): List<String> =
|
||||||
listOf(dsymutil, "-dump-debug-map", executable)
|
listOf(dsymutil, "-dump-debug-map", executable)
|
||||||
}
|
}
|
||||||
|
|
||||||
open class GccBasedLinker(targetProperties: GccConfigurables)
|
class GccBasedLinker(targetProperties: GccConfigurables)
|
||||||
: LinkerFlags(targetProperties), GccConfigurables by targetProperties {
|
: LinkerFlags(targetProperties), GccConfigurables by targetProperties {
|
||||||
|
|
||||||
private val ar = if (HostManager.hostIsMac) "$absoluteTargetToolchain/bin/llvm-ar"
|
private val ar = if (HostManager.hostIsMac) "$absoluteTargetToolchain/bin/llvm-ar"
|
||||||
@@ -358,7 +357,7 @@ open class GccBasedLinker(targetProperties: GccConfigurables)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class MingwLinker(targetProperties: MingwConfigurables)
|
class MingwLinker(targetProperties: MingwConfigurables)
|
||||||
: LinkerFlags(targetProperties), MingwConfigurables by targetProperties {
|
: LinkerFlags(targetProperties), MingwConfigurables by targetProperties {
|
||||||
|
|
||||||
private val ar = "$absoluteTargetToolchain/bin/ar"
|
private val ar = "$absoluteTargetToolchain/bin/ar"
|
||||||
@@ -406,7 +405,7 @@ open class MingwLinker(targetProperties: MingwConfigurables)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class WasmLinker(targetProperties: WasmConfigurables)
|
class WasmLinker(targetProperties: WasmConfigurables)
|
||||||
: LinkerFlags(targetProperties), WasmConfigurables by targetProperties {
|
: LinkerFlags(targetProperties), WasmConfigurables by targetProperties {
|
||||||
|
|
||||||
override val useCompilerDriverAsLinker: Boolean get() = false
|
override val useCompilerDriverAsLinker: Boolean get() = false
|
||||||
@@ -482,30 +481,13 @@ open class ZephyrLinker(targetProperties: ZephyrConfigurables)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun linker(configurables: Configurables): LinkerFlags =
|
fun linker(configurables: Configurables): LinkerFlags =
|
||||||
when (configurables.target) {
|
when (configurables) {
|
||||||
KonanTarget.LINUX_X64,
|
is GccConfigurables -> GccBasedLinker(configurables)
|
||||||
KonanTarget.LINUX_ARM32_HFP, KonanTarget.LINUX_ARM64,
|
is AppleConfigurables -> MacOSBasedLinker(configurables)
|
||||||
KonanTarget.LINUX_MIPS32, KonanTarget.LINUX_MIPSEL32 ->
|
is AndroidConfigurables-> AndroidLinker(configurables)
|
||||||
GccBasedLinker(configurables as GccConfigurables)
|
is MingwConfigurables -> MingwLinker(configurables)
|
||||||
|
is WasmConfigurables -> WasmLinker(configurables)
|
||||||
KonanTarget.MACOS_X64,
|
is ZephyrConfigurables -> ZephyrLinker(configurables)
|
||||||
KonanTarget.TVOS_X64, KonanTarget.TVOS_ARM64,
|
else -> error("Unexpected target: ${configurables.target}")
|
||||||
KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64,
|
|
||||||
KonanTarget.WATCHOS_ARM64, KonanTarget.WATCHOS_ARM32,
|
|
||||||
KonanTarget.WATCHOS_X64, KonanTarget.WATCHOS_X86 ->
|
|
||||||
MacOSBasedLinker(configurables as AppleConfigurables)
|
|
||||||
|
|
||||||
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64,
|
|
||||||
KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 ->
|
|
||||||
AndroidLinker(configurables as AndroidConfigurables)
|
|
||||||
|
|
||||||
KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 ->
|
|
||||||
MingwLinker(configurables as MingwConfigurables)
|
|
||||||
|
|
||||||
KonanTarget.WASM32 ->
|
|
||||||
WasmLinker(configurables as WasmConfigurables)
|
|
||||||
|
|
||||||
is KonanTarget.ZEPHYR ->
|
|
||||||
ZephyrLinker(configurables as ZephyrConfigurables)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user