Minor refactoring and reformatting of ClangArgs
This commit is contained in:
committed by
Stanislav Erokhin
parent
55b1e0faf0
commit
c779ce2e6d
+146
-118
@@ -33,151 +33,179 @@ internal object Android {
|
||||
|
||||
class ClangArgs(private val configurables: Configurables) : Configurables by configurables {
|
||||
|
||||
val targetArg = if (configurables is TargetableConfigurables)
|
||||
private val targetArg = if (configurables is TargetableConfigurables)
|
||||
configurables.targetArg
|
||||
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
|
||||
get() {
|
||||
require(configurables is AppleConfigurables)
|
||||
return configurables.osVersionMin
|
||||
}
|
||||
|
||||
val specificClangArgs: List<String>
|
||||
get() {
|
||||
val result = when (target) {
|
||||
KonanTarget.LINUX_X64 ->
|
||||
listOf("--sysroot=$absoluteTargetSysRoot") +
|
||||
if (target != host) listOf("-target", targetArg!!) else emptyList()
|
||||
private val specificClangArgs: List<String> = when (target) {
|
||||
KonanTarget.LINUX_X64 -> listOf(
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
)
|
||||
|
||||
KonanTarget.LINUX_ARM32_HFP ->
|
||||
listOf("-target", targetArg!!,
|
||||
"-mfpu=vfp", "-mfloat-abi=hard",
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
// TODO: those two are hacks.
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.8.3",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.8.3/arm-linux-gnueabihf")
|
||||
KonanTarget.LINUX_ARM32_HFP -> listOf(
|
||||
"-mfpu=vfp", "-mfloat-abi=hard",
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
// TODO: those two are hacks.
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.8.3",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.8.3/arm-linux-gnueabihf"
|
||||
)
|
||||
|
||||
KonanTarget.LINUX_ARM64 ->
|
||||
listOf("-target", targetArg!!,
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/7",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/7/aarch64-linux-gnu")
|
||||
KonanTarget.LINUX_ARM64 -> listOf(
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/7",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/7/aarch64-linux-gnu"
|
||||
)
|
||||
|
||||
KonanTarget.LINUX_MIPS32 ->
|
||||
listOf("-target", targetArg!!,
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4/mips-unknown-linux-gnu")
|
||||
KonanTarget.LINUX_MIPS32 -> listOf(
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4/mips-unknown-linux-gnu"
|
||||
)
|
||||
|
||||
KonanTarget.LINUX_MIPSEL32 ->
|
||||
listOf("-target", targetArg!!,
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4/mipsel-unknown-linux-gnu")
|
||||
KonanTarget.LINUX_MIPSEL32 -> listOf(
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.9.4/mipsel-unknown-linux-gnu"
|
||||
)
|
||||
|
||||
KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 ->
|
||||
listOf("-target", targetArg!!, "--sysroot=$absoluteTargetSysRoot", "-Xclang", "-flto-visibility-public-std")
|
||||
KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 -> listOf(
|
||||
"--sysroot=$absoluteTargetSysRoot", "-Xclang",
|
||||
"-flto-visibility-public-std"
|
||||
)
|
||||
|
||||
KonanTarget.MACOS_X64 ->
|
||||
listOf("--sysroot=$absoluteTargetSysRoot", "-mmacosx-version-min=$osVersionMin")
|
||||
KonanTarget.MACOS_X64 -> listOf(
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
"-mmacosx-version-min=$osVersionMin"
|
||||
)
|
||||
|
||||
KonanTarget.IOS_ARM32 ->
|
||||
listOf("-stdlib=libc++", "-arch", "armv7", "-isysroot", absoluteTargetSysRoot, "-miphoneos-version-min=$osVersionMin")
|
||||
KonanTarget.IOS_ARM32 -> listOf(
|
||||
"-stdlib=libc++",
|
||||
"-arch", "armv7",
|
||||
"-isysroot", absoluteTargetSysRoot,
|
||||
"-miphoneos-version-min=$osVersionMin"
|
||||
)
|
||||
|
||||
KonanTarget.IOS_ARM64 ->
|
||||
listOf("-stdlib=libc++", "-arch", "arm64", "-isysroot", absoluteTargetSysRoot, "-miphoneos-version-min=$osVersionMin")
|
||||
KonanTarget.IOS_ARM64 -> listOf(
|
||||
"-stdlib=libc++",
|
||||
"-arch", "arm64",
|
||||
"-isysroot", absoluteTargetSysRoot,
|
||||
"-miphoneos-version-min=$osVersionMin"
|
||||
)
|
||||
|
||||
KonanTarget.IOS_X64 ->
|
||||
listOf("-stdlib=libc++", "-isysroot", absoluteTargetSysRoot, "-miphoneos-version-min=$osVersionMin")
|
||||
KonanTarget.IOS_X64 -> listOf(
|
||||
"-stdlib=libc++",
|
||||
"-isysroot", absoluteTargetSysRoot,
|
||||
"-miphoneos-version-min=$osVersionMin"
|
||||
)
|
||||
|
||||
KonanTarget.TVOS_ARM64 ->
|
||||
listOf("-stdlib=libc++", "-arch", "arm64", "-isysroot", absoluteTargetSysRoot, "-mtvos-version-min=$osVersionMin")
|
||||
KonanTarget.TVOS_ARM64 -> listOf(
|
||||
"-stdlib=libc++",
|
||||
"-arch", "arm64",
|
||||
"-isysroot", absoluteTargetSysRoot,
|
||||
"-mtvos-version-min=$osVersionMin"
|
||||
)
|
||||
|
||||
KonanTarget.TVOS_X64 ->
|
||||
listOf("-stdlib=libc++", "-isysroot", absoluteTargetSysRoot, "-mtvos-simulator-version-min=$osVersionMin")
|
||||
KonanTarget.TVOS_X64 -> listOf(
|
||||
"-stdlib=libc++",
|
||||
"-isysroot", absoluteTargetSysRoot,
|
||||
"-mtvos-simulator-version-min=$osVersionMin"
|
||||
)
|
||||
|
||||
KonanTarget.WATCHOS_ARM64,
|
||||
KonanTarget.WATCHOS_ARM32 ->
|
||||
listOf("-stdlib=libc++", "-arch", "armv7k", "-isysroot", absoluteTargetSysRoot, "-mwatchos-version-min=$osVersionMin")
|
||||
KonanTarget.WATCHOS_ARM64,
|
||||
KonanTarget.WATCHOS_ARM32 -> listOf(
|
||||
"-stdlib=libc++",
|
||||
"-arch", "armv7k",
|
||||
"-isysroot", absoluteTargetSysRoot,
|
||||
"-mwatchos-version-min=$osVersionMin"
|
||||
)
|
||||
|
||||
KonanTarget.WATCHOS_X86 ->
|
||||
listOf("-stdlib=libc++", "-arch", "i386", "-isysroot", absoluteTargetSysRoot, "-mwatchos-simulator-version-min=$osVersionMin")
|
||||
KonanTarget.WATCHOS_X86 -> listOf(
|
||||
"-stdlib=libc++",
|
||||
"-arch", "i386",
|
||||
"-isysroot", absoluteTargetSysRoot,
|
||||
"-mwatchos-simulator-version-min=$osVersionMin"
|
||||
)
|
||||
|
||||
KonanTarget.WATCHOS_X64 ->
|
||||
listOf("-stdlib=libc++", "-isysroot", absoluteTargetSysRoot, "-mwatchos-simulator-version-min=$osVersionMin")
|
||||
KonanTarget.WATCHOS_X64 -> listOf(
|
||||
"-stdlib=libc++",
|
||||
"-isysroot", absoluteTargetSysRoot,
|
||||
"-mwatchos-simulator-version-min=$osVersionMin"
|
||||
)
|
||||
|
||||
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64,
|
||||
KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 -> {
|
||||
val clangTarget = targetArg!!
|
||||
val architectureDir = Android.architectureDirForTarget(target)
|
||||
val toolchainSysroot = "$absoluteTargetToolchain/sysroot"
|
||||
listOf("-target", clangTarget,
|
||||
"-D__ANDROID_API__=${Android.API}",
|
||||
"--sysroot=$absoluteTargetSysRoot/$architectureDir",
|
||||
"-I$toolchainSysroot/usr/include/c++/v1",
|
||||
"-I$toolchainSysroot/usr/include",
|
||||
"-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
|
||||
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64,
|
||||
KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 -> {
|
||||
val clangTarget = targetArg!!
|
||||
val architectureDir = Android.architectureDirForTarget(target)
|
||||
val toolchainSysroot = "$absoluteTargetToolchain/sysroot"
|
||||
listOf(
|
||||
"-D__ANDROID_API__=${Android.API}",
|
||||
"--sysroot=$absoluteTargetSysRoot/$architectureDir",
|
||||
"-I$toolchainSysroot/usr/include/c++/v1",
|
||||
"-I$toolchainSysroot/usr/include",
|
||||
"-I$toolchainSysroot/usr/include/$clangTarget"
|
||||
)
|
||||
}
|
||||
|
||||
val clangArgsSpecificForKonanSources
|
||||
get() = runtimeDefinitions.map { "-D$it" }
|
||||
// By default WASM target forces `hidden` visibility which causes linkage problems.
|
||||
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
|
||||
|
||||
private val binDir = when (host) {
|
||||
KonanTarget.LINUX_X64 -> "$absoluteTargetToolchain/bin"
|
||||
KonanTarget.MINGW_X64 -> "$absoluteTargetToolchain/bin"
|
||||
KonanTarget.MACOS_X64 -> "$absoluteTargetToolchain/usr/bin"
|
||||
else -> throw TargetSupportException("Unexpected host platform")
|
||||
is KonanTarget.ZEPHYR -> listOf(
|
||||
"-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()
|
||||
}
|
||||
|
||||
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)
|
||||
|
||||
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.
|
||||
listOf("-isystem", "$absoluteLlvmHome/lib/clang/$llvmVersion/include", *clangArgs)
|
||||
|
||||
val targetClangCmd
|
||||
private val targetClangCmd
|
||||
= listOf("${absoluteLlvmHome}/bin/clang") + clangArgs
|
||||
|
||||
val targetClangXXCmd
|
||||
private val targetClangXXCmd
|
||||
= listOf("${absoluteLlvmHome}/bin/clang++") + clangArgs
|
||||
|
||||
fun clangC(vararg userArgs: String) = targetClangCmd + userArgs.asList()
|
||||
|
||||
Reference in New Issue
Block a user