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> =
configuration.getList(KonanConfigKeys.INCLUDED_BINARY_FILES)
internal val defaultSystemLibraries: List<String> = emptyList()
internal val languageVersionSettings =
configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS)!!
@@ -142,7 +142,7 @@ internal class Linker(val context: Context) {
try {
File(executable).delete()
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(),
linkerArgs = asLinkerArgs(config.getNotNull(KonanConfigKeys.LINKER_ARGS)) +
BitcodeEmbedding.getLinkerOptions(context.config) +
@@ -61,8 +61,7 @@ private fun staticGnuArCommands(ar: String, executable: ExecutableFile,
// Use "clang -v -save-temps" to write linkCommand() method
// for another implementation of this class.
abstract class LinkerFlags(val configurables: Configurables)
/* : Configurables by configurables */ {
abstract class LinkerFlags(val configurables: Configurables) {
protected val llvmBin = "${configurables.absoluteLlvmHome}/bin"
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 {
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 {
private val libtool = "$absoluteTargetToolchain/usr/bin/libtool"
@@ -282,14 +281,14 @@ open class MacOSBasedLinker(targetProperties: AppleConfigurables)
return exitCode
}
open fun dsymutilCommand(executable: ExecutableFile, outputDsymBundle: String): List<String> =
fun dsymutilCommand(executable: ExecutableFile, outputDsymBundle: String): List<String> =
listOf(dsymutil, executable, "-o", outputDsymBundle)
open fun dsymutilDryRunVerboseCommand(executable: ExecutableFile): List<String> =
fun dsymutilDryRunVerboseCommand(executable: ExecutableFile): List<String> =
listOf(dsymutil, "-dump-debug-map", executable)
}
open class GccBasedLinker(targetProperties: GccConfigurables)
class GccBasedLinker(targetProperties: GccConfigurables)
: LinkerFlags(targetProperties), GccConfigurables by targetProperties {
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 {
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 {
override val useCompilerDriverAsLinker: Boolean get() = false
@@ -482,30 +481,13 @@ open class ZephyrLinker(targetProperties: ZephyrConfigurables)
}
fun linker(configurables: Configurables): LinkerFlags =
when (configurables.target) {
KonanTarget.LINUX_X64,
KonanTarget.LINUX_ARM32_HFP, KonanTarget.LINUX_ARM64,
KonanTarget.LINUX_MIPS32, KonanTarget.LINUX_MIPSEL32 ->
GccBasedLinker(configurables as GccConfigurables)
KonanTarget.MACOS_X64,
KonanTarget.TVOS_X64, KonanTarget.TVOS_ARM64,
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)
when (configurables) {
is GccConfigurables -> GccBasedLinker(configurables)
is AppleConfigurables -> MacOSBasedLinker(configurables)
is AndroidConfigurables-> AndroidLinker(configurables)
is MingwConfigurables -> MingwLinker(configurables)
is WasmConfigurables -> WasmLinker(configurables)
is ZephyrConfigurables -> ZephyrLinker(configurables)
else -> error("Unexpected target: ${configurables.target}")
}