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 {
|
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user