Minor refactoring and reformatting of ClangArgs

This commit is contained in:
Sergey Bogolepov
2020-11-30 17:52:10 +07:00
committed by Stanislav Erokhin
parent 55b1e0faf0
commit c779ce2e6d
@@ -33,151 +33,179 @@ internal object Android {
class ClangArgs(private val configurables: Configurables) : Configurables by configurables { class ClangArgs(private val configurables: Configurables) : Configurables by configurables {
val targetArg = if (configurables is TargetableConfigurables) private val targetArg = if (configurables is TargetableConfigurables)
configurables.targetArg configurables.targetArg
else null else null
private val clangArgsSpecificForKonanSources
get() = runtimeDefinitions.map { "-D$it" }
private val binDir = when (HostManager.host) {
KonanTarget.LINUX_X64 -> "$absoluteTargetToolchain/bin"
KonanTarget.MINGW_X64 -> "$absoluteTargetToolchain/bin"
KonanTarget.MACOS_X64 -> "$absoluteTargetToolchain/usr/bin"
else -> throw TargetSupportException("Unexpected host platform")
}
// TODO: Use buildList
private val commonClangArgs: List<String> = mutableListOf<List<String>>().apply {
add(listOf("-B$binDir", "-fno-stack-protector"))
if (configurables is GccConfigurables) {
add(listOf("--gcc-toolchain=${configurables.absoluteGccToolchain}"))
}
if (configurables is TargetableConfigurables) {
add(listOf("-target", configurables.targetArg!!))
}
}.flatten()
private val osVersionMin: String private val osVersionMin: String
get() { get() {
require(configurables is AppleConfigurables) require(configurables is AppleConfigurables)
return configurables.osVersionMin return configurables.osVersionMin
} }
val specificClangArgs: List<String> private val specificClangArgs: List<String> = when (target) {
get() { KonanTarget.LINUX_X64 -> listOf(
val result = when (target) { "--sysroot=$absoluteTargetSysRoot",
KonanTarget.LINUX_X64 -> )
listOf("--sysroot=$absoluteTargetSysRoot") +
if (target != host) listOf("-target", targetArg!!) else emptyList()
KonanTarget.LINUX_ARM32_HFP -> KonanTarget.LINUX_ARM32_HFP -> listOf(
listOf("-target", targetArg!!, "-mfpu=vfp", "-mfloat-abi=hard",
"-mfpu=vfp", "-mfloat-abi=hard", "--sysroot=$absoluteTargetSysRoot",
"--sysroot=$absoluteTargetSysRoot", // TODO: those two are hacks.
// TODO: those two are hacks. "-I$absoluteTargetSysRoot/usr/include/c++/4.8.3",
"-I$absoluteTargetSysRoot/usr/include/c++/4.8.3", "-I$absoluteTargetSysRoot/usr/include/c++/4.8.3/arm-linux-gnueabihf"
"-I$absoluteTargetSysRoot/usr/include/c++/4.8.3/arm-linux-gnueabihf") )
KonanTarget.LINUX_ARM64 -> KonanTarget.LINUX_ARM64 -> listOf(
listOf("-target", targetArg!!, "--sysroot=$absoluteTargetSysRoot",
"--sysroot=$absoluteTargetSysRoot", "-I$absoluteTargetSysRoot/usr/include/c++/7",
"-I$absoluteTargetSysRoot/usr/include/c++/7", "-I$absoluteTargetSysRoot/usr/include/c++/7/aarch64-linux-gnu"
"-I$absoluteTargetSysRoot/usr/include/c++/7/aarch64-linux-gnu") )
KonanTarget.LINUX_MIPS32 -> KonanTarget.LINUX_MIPS32 -> listOf(
listOf("-target", targetArg!!, "--sysroot=$absoluteTargetSysRoot",
"--sysroot=$absoluteTargetSysRoot", "-I$absoluteTargetSysRoot/usr/include/c++/4.9.4",
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4", "-I$absoluteTargetSysRoot/usr/include/c++/4.9.4/mips-unknown-linux-gnu"
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4/mips-unknown-linux-gnu") )
KonanTarget.LINUX_MIPSEL32 -> KonanTarget.LINUX_MIPSEL32 -> listOf(
listOf("-target", targetArg!!, "--sysroot=$absoluteTargetSysRoot",
"--sysroot=$absoluteTargetSysRoot", "-I$absoluteTargetSysRoot/usr/include/c++/4.9.4",
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4", "-I$absoluteTargetSysRoot/usr/include/c++/4.9.4/mipsel-unknown-linux-gnu"
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4/mipsel-unknown-linux-gnu") )
KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 -> KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 -> listOf(
listOf("-target", targetArg!!, "--sysroot=$absoluteTargetSysRoot", "-Xclang", "-flto-visibility-public-std") "--sysroot=$absoluteTargetSysRoot", "-Xclang",
"-flto-visibility-public-std"
)
KonanTarget.MACOS_X64 -> KonanTarget.MACOS_X64 -> listOf(
listOf("--sysroot=$absoluteTargetSysRoot", "-mmacosx-version-min=$osVersionMin") "--sysroot=$absoluteTargetSysRoot",
"-mmacosx-version-min=$osVersionMin"
)
KonanTarget.IOS_ARM32 -> KonanTarget.IOS_ARM32 -> listOf(
listOf("-stdlib=libc++", "-arch", "armv7", "-isysroot", absoluteTargetSysRoot, "-miphoneos-version-min=$osVersionMin") "-stdlib=libc++",
"-arch", "armv7",
"-isysroot", absoluteTargetSysRoot,
"-miphoneos-version-min=$osVersionMin"
)
KonanTarget.IOS_ARM64 -> KonanTarget.IOS_ARM64 -> listOf(
listOf("-stdlib=libc++", "-arch", "arm64", "-isysroot", absoluteTargetSysRoot, "-miphoneos-version-min=$osVersionMin") "-stdlib=libc++",
"-arch", "arm64",
"-isysroot", absoluteTargetSysRoot,
"-miphoneos-version-min=$osVersionMin"
)
KonanTarget.IOS_X64 -> KonanTarget.IOS_X64 -> listOf(
listOf("-stdlib=libc++", "-isysroot", absoluteTargetSysRoot, "-miphoneos-version-min=$osVersionMin") "-stdlib=libc++",
"-isysroot", absoluteTargetSysRoot,
"-miphoneos-version-min=$osVersionMin"
)
KonanTarget.TVOS_ARM64 -> KonanTarget.TVOS_ARM64 -> listOf(
listOf("-stdlib=libc++", "-arch", "arm64", "-isysroot", absoluteTargetSysRoot, "-mtvos-version-min=$osVersionMin") "-stdlib=libc++",
"-arch", "arm64",
"-isysroot", absoluteTargetSysRoot,
"-mtvos-version-min=$osVersionMin"
)
KonanTarget.TVOS_X64 -> KonanTarget.TVOS_X64 -> listOf(
listOf("-stdlib=libc++", "-isysroot", absoluteTargetSysRoot, "-mtvos-simulator-version-min=$osVersionMin") "-stdlib=libc++",
"-isysroot", absoluteTargetSysRoot,
"-mtvos-simulator-version-min=$osVersionMin"
)
KonanTarget.WATCHOS_ARM64, KonanTarget.WATCHOS_ARM64,
KonanTarget.WATCHOS_ARM32 -> KonanTarget.WATCHOS_ARM32 -> listOf(
listOf("-stdlib=libc++", "-arch", "armv7k", "-isysroot", absoluteTargetSysRoot, "-mwatchos-version-min=$osVersionMin") "-stdlib=libc++",
"-arch", "armv7k",
"-isysroot", absoluteTargetSysRoot,
"-mwatchos-version-min=$osVersionMin"
)
KonanTarget.WATCHOS_X86 -> KonanTarget.WATCHOS_X86 -> listOf(
listOf("-stdlib=libc++", "-arch", "i386", "-isysroot", absoluteTargetSysRoot, "-mwatchos-simulator-version-min=$osVersionMin") "-stdlib=libc++",
"-arch", "i386",
"-isysroot", absoluteTargetSysRoot,
"-mwatchos-simulator-version-min=$osVersionMin"
)
KonanTarget.WATCHOS_X64 -> KonanTarget.WATCHOS_X64 -> listOf(
listOf("-stdlib=libc++", "-isysroot", absoluteTargetSysRoot, "-mwatchos-simulator-version-min=$osVersionMin") "-stdlib=libc++",
"-isysroot", absoluteTargetSysRoot,
"-mwatchos-simulator-version-min=$osVersionMin"
)
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64, KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64,
KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 -> { KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 -> {
val clangTarget = targetArg!! val clangTarget = targetArg!!
val architectureDir = Android.architectureDirForTarget(target) val architectureDir = Android.architectureDirForTarget(target)
val toolchainSysroot = "$absoluteTargetToolchain/sysroot" val toolchainSysroot = "$absoluteTargetToolchain/sysroot"
listOf("-target", clangTarget, listOf(
"-D__ANDROID_API__=${Android.API}", "-D__ANDROID_API__=${Android.API}",
"--sysroot=$absoluteTargetSysRoot/$architectureDir", "--sysroot=$absoluteTargetSysRoot/$architectureDir",
"-I$toolchainSysroot/usr/include/c++/v1", "-I$toolchainSysroot/usr/include/c++/v1",
"-I$toolchainSysroot/usr/include", "-I$toolchainSysroot/usr/include",
"-I$toolchainSysroot/usr/include/$clangTarget") "-I$toolchainSysroot/usr/include/$clangTarget"
} )
// By default WASM target forces `hidden` visibility which causes linkage problems.
KonanTarget.WASM32 ->
listOf("-target", targetArg!!,
"-fno-rtti",
"-fno-exceptions",
"-fvisibility=default",
"-D_LIBCPP_ABI_VERSION=2",
"-D_LIBCPP_NO_EXCEPTIONS=1",
"-nostdinc",
"-Xclang", "-nobuiltininc",
"-Xclang", "-nostdsysteminc",
"-Xclang", "-isystem$absoluteTargetSysRoot/include/libcxx",
"-Xclang", "-isystem$absoluteTargetSysRoot/lib/libcxxabi/include",
"-Xclang", "-isystem$absoluteTargetSysRoot/include/compat",
"-Xclang", "-isystem$absoluteTargetSysRoot/include/libc")
is KonanTarget.ZEPHYR ->
listOf("-target", targetArg!!,
"-fno-rtti",
"-fno-exceptions",
"-fno-asynchronous-unwind-tables",
"-fno-pie",
"-fno-pic",
"-fshort-enums",
"-nostdinc",
// TODO: make it a libGcc property?
// We need to get rid of wasm sysroot first.
"-isystem $targetToolchain/../lib/gcc/arm-none-eabi/7.2.1/include",
"-isystem $targetToolchain/../lib/gcc/arm-none-eabi/7.2.1/include-fixed",
"-isystem$absoluteTargetSysRoot/include/libcxx",
"-isystem$absoluteTargetSysRoot/include/libc"
) +
(configurables as ZephyrConfigurables).constructClangArgs()
}
return result
} }
val clangArgsSpecificForKonanSources // By default WASM target forces `hidden` visibility which causes linkage problems.
get() = runtimeDefinitions.map { "-D$it" } KonanTarget.WASM32 -> listOf(
"-fno-rtti",
"-fno-exceptions",
"-fvisibility=default",
"-D_LIBCPP_ABI_VERSION=2",
"-D_LIBCPP_NO_EXCEPTIONS=1",
"-nostdinc",
"-Xclang", "-nobuiltininc",
"-Xclang", "-nostdsysteminc",
"-Xclang", "-isystem$absoluteTargetSysRoot/include/libcxx",
"-Xclang", "-isystem$absoluteTargetSysRoot/lib/libcxxabi/include",
"-Xclang", "-isystem$absoluteTargetSysRoot/include/compat",
"-Xclang", "-isystem$absoluteTargetSysRoot/include/libc"
)
private val host = HostManager.host is KonanTarget.ZEPHYR -> listOf(
"-fno-rtti",
private val binDir = when (host) { "-fno-exceptions",
KonanTarget.LINUX_X64 -> "$absoluteTargetToolchain/bin" "-fno-asynchronous-unwind-tables",
KonanTarget.MINGW_X64 -> "$absoluteTargetToolchain/bin" "-fno-pie",
KonanTarget.MACOS_X64 -> "$absoluteTargetToolchain/usr/bin" "-fno-pic",
else -> throw TargetSupportException("Unexpected host platform") "-fshort-enums",
"-nostdinc",
// TODO: make it a libGcc property?
// We need to get rid of wasm sysroot first.
"-isystem $targetToolchain/../lib/gcc/arm-none-eabi/7.2.1/include",
"-isystem $targetToolchain/../lib/gcc/arm-none-eabi/7.2.1/include-fixed",
"-isystem$absoluteTargetSysRoot/include/libcxx",
"-isystem$absoluteTargetSysRoot/include/libc"
) + (configurables as ZephyrConfigurables).constructClangArgs()
} }
private val extraHostClangArgs =
if (configurables is GccConfigurables) {
listOf("--gcc-toolchain=${configurables.absoluteGccToolchain}")
} else {
emptyList()
}
val commonClangArgs = listOf("-B$binDir", "-fno-stack-protector") + extraHostClangArgs
val clangPaths = listOf("$absoluteLlvmHome/bin", binDir) val clangPaths = listOf("$absoluteLlvmHome/bin", binDir)
private val jdkDir by lazy { private val jdkDir by lazy {
@@ -202,10 +230,10 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
// We workaround the problem with -isystem flag below. // We workaround the problem with -isystem flag below.
listOf("-isystem", "$absoluteLlvmHome/lib/clang/$llvmVersion/include", *clangArgs) listOf("-isystem", "$absoluteLlvmHome/lib/clang/$llvmVersion/include", *clangArgs)
val targetClangCmd private val targetClangCmd
= listOf("${absoluteLlvmHome}/bin/clang") + clangArgs = listOf("${absoluteLlvmHome}/bin/clang") + clangArgs
val targetClangXXCmd private val targetClangXXCmd
= listOf("${absoluteLlvmHome}/bin/clang++") + clangArgs = listOf("${absoluteLlvmHome}/bin/clang++") + clangArgs
fun clangC(vararg userArgs: String) = targetClangCmd + userArgs.asList() fun clangC(vararg userArgs: String) = targetClangCmd + userArgs.asList()