Minor linker code clean-up

This commit is contained in:
Sergey Bogolepov
2020-08-31 18:13:27 +07:00
committed by Sergey Bogolepov
parent 5bc03a45a7
commit a710a478a5
3 changed files with 17 additions and 37 deletions
@@ -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)!!
@@ -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)
} }