From 579c1eb7db3bcbdf79bd23ea979d0c55ff2d3c46 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Mon, 22 Mar 2021 18:58:37 +0700 Subject: [PATCH] Remove libffi from target dependencies Technically, it is a dependency of a compiler itself. Thus, we can simplify konan.properties a little bit by applying the same approach as we did for LLVM. --- kotlin-native/konan/konan.properties | 112 +++++------------- .../kotlin/konan/target/KonanProperties.kt | 26 ++-- 2 files changed, 48 insertions(+), 90 deletions(-) diff --git a/kotlin-native/konan/konan.properties b/kotlin-native/konan/konan.properties index 66111a5f859..dbbb28069ef 100644 --- a/kotlin-native/konan/konan.properties +++ b/kotlin-native/konan/konan.properties @@ -41,6 +41,12 @@ predefinedLlvmDistributions = \ clang-llvm-apple-8.0.0-darwin-macos \ clang-llvm-apple-8.0.0-darwin-macos-aarch64 +predefinedLibffiVersions = \ + libffi-3.2.1-3-darwin-macos \ + libffi-3.3-1-macos-arm64 \ + libffi-3.2.1-2-linux-x86-64 \ + libffi-3.2.1-mingw-w64-x86-64 + llvm.linux_x64.dev = clang-llvm-8.0.0-linux-x86-64 llvm.linux_x64.user = clang-llvm-8.0.0-linux-x86-64 @@ -107,7 +113,6 @@ osVersionMin.macos_x64 = 10.11 runtimeDefinitions.macos_x64 = KONAN_OSX=1 KONAN_MACOSX=1 KONAN_X64=1 KONAN_OBJC_INTEROP=1 \ KONAN_CORE_SYMBOLICATION=1 dependencies.macos_x64 = \ - libffi-3.2.1-3-darwin-macos \ lldb-3-macos target-sysroot-xcode_12_2-macos_x64.default = \ @@ -148,11 +153,7 @@ osVersionMinFlagClang.macos_arm64 = -mmacosx-version-min osVersionMin.macos_arm64 = 11.0 runtimeDefinitions.macos_arm64 = KONAN_OSX=1 KONAN_MACOSX=1 KONAN_ARM64=1 KONAN_OBJC_INTEROP=1 \ KONAN_CORE_SYMBOLICATION=1 -dependencies.macos_arm64 = \ - libffi-3.3-1-macos-arm64 -dependencies.macos_x64-macos_arm64 = \ - libffi-3.2.1-3-darwin-macos target-sysroot-xcode_12_2-macos_arm64.default = \ remote:internal @@ -165,8 +166,6 @@ xcode-addon-xcode_12_2-macos_arm64.default = \ # Apple's 32-bit iOS. targetToolchain.macos_x64-ios_arm32 = target-toolchain-xcode_12_2-macos_x64 -dependencies.macos_x64-ios_arm32 = \ - libffi-3.2.1-3-darwin-macos target-sysroot-xcode_12_2-ios_arm32.default = \ remote:internal @@ -198,12 +197,8 @@ runtimeDefinitions.ios_arm32 = KONAN_OBJC_INTEROP=1 KONAN_IOS KONAN_ARM32=1 \ # Apple's 64-bit iOS. targetToolchain.macos_x64-ios_arm64 = target-toolchain-xcode_12_2-macos_x64 -dependencies.macos_x64-ios_arm64 = \ - libffi-3.2.1-3-darwin-macos targetToolchain.macos_arm64-ios_arm64 = target-toolchain-xcode_12_2-macos_x64 -dependencies.macos_arm64-ios_arm64 = \ - libffi-3.3-1-macos-arm64 target-sysroot-xcode_12_2-ios_arm64.default = \ remote:internal @@ -233,8 +228,6 @@ additionalCacheFlags.ios_arm64 = -Xembed-bitcode-marker # Apple's iOS simulator. targetToolchain.macos_x64-ios_x64 = target-toolchain-xcode_12_2-macos_x64 -dependencies.macos_x64-ios_x64 = \ - libffi-3.2.1-3-darwin-macos target-sysroot-xcode_12_2-ios_x64.default = \ remote:internal @@ -260,8 +253,6 @@ runtimeDefinitions.ios_x64 = KONAN_OBJC_INTEROP=1 KONAN_IOS=1 KONAN_X64=1 \ # Apple's tvOS simulator. targetToolchain.macos_x64-tvos_x64 = target-toolchain-xcode_12_2-macos_x64 -dependencies.macos_x64-tvos_x64 = \ - libffi-3.2.1-3-darwin-macos target-sysroot-xcode_12_2-tvos_x64.default = \ remote:internal @@ -287,8 +278,6 @@ runtimeDefinitions.tvos_x64 = KONAN_OBJC_INTEROP=1 KONAN_TVOS=1 KONAN_X64=1 \ # Apple's 64-bit tvOS. targetToolchain.macos_x64-tvos_arm64 = target-toolchain-xcode_12_2-macos_x64 -dependencies.macos_x64-tvos_arm64 = \ - libffi-3.2.1-3-darwin-macos target-sysroot-xcode_12_2-tvos_arm64.default = \ remote:internal @@ -314,8 +303,6 @@ runtimeDefinitions.tvos_arm64 = KONAN_OBJC_INTEROP=1 KONAN_TVOS=1 KONAN_ARM64=1 # watchOS armv7k targetToolchain.macos_x64-watchos_arm32 = target-toolchain-xcode_12_2-macos_x64 -dependencies.macos_x64-watchos_arm32 = \ - libffi-3.2.1-3-darwin-macos target-sysroot-xcode_12_2-watchos_arm32.default = \ remote:internal @@ -343,8 +330,6 @@ runtimeDefinitions.watchos_arm32 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS KONAN_ARM3 # watchOS arm64_32 targetToolchain.macos_x64-watchos_arm64 = target-toolchain-xcode_12_2-macos_x64 -dependencies.macos_x64-watchos_arm64 = \ - libffi-3.2.1-3-darwin-macos target-sysroot-xcode_12_2-watchos_arm64.default = \ remote:internal @@ -373,8 +358,6 @@ runtimeDefinitions.watchos_arm64 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS KONAN_ARM3 # Apple's watchOS i386 simulator. targetToolchain.macos_x64-watchos_x86 = target-toolchain-xcode_12_2-macos_x64 -dependencies.macos_x64-watchos_x86 = \ - libffi-3.2.1-3-darwin-macos target-sysroot-xcode_12_2-watchos_x86.default = \ remote:internal @@ -404,8 +387,6 @@ runtimeDefinitions.watchos_x86 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS=1 KONAN_NO_6 # watchOS x86_64 simulator. targetToolchain.macos_x64-watchos_x64 = target-toolchain-xcode_12_2-macos_x64 -dependencies.macos_x64-watchos_x64 = \ - libffi-3.2.1-3-darwin-macos target-sysroot-xcode_12_2-watchos_x64.default = \ remote:internal @@ -437,22 +418,18 @@ gccToolchain.linux_x64 = x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4. targetToolchain.linux_x64 = $gccToolchain.linux_x64/x86_64-unknown-linux-gnu dependencies.linux_x64 = \ x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2 \ - libffi-3.2.1-2-linux-x86-64 \ lldb-3-linux targetToolchain.mingw_x64-linux_x64 = msys2-mingw-w64-x86_64-clang-llvm-lld-compiler_rt-8.0.1 dependencies.mingw_x64-linux_x64 = \ - libffi-3.2.1-mingw-w64-x86-64 \ x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2 targetToolchain.macos_x64-linux_x64 = $llvmHome.macos_x64 dependencies.macos_x64-linux_x64 = \ - libffi-3.2.1-3-darwin-macos \ x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2 targetToolchain.macos_arm64-linux_x64 = $llvmHome.macos_arm64 dependencies.macos_arm64-linux_x64 = \ - libffi-3.3-1-macos-arm64 \ x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2 quadruple.linux_x64 = x86_64-unknown-linux-gnu @@ -500,14 +477,11 @@ emulatorDependency.linux_x64-linux_arm32_hfp = qemu-arm-static-5.1.0-linux-2 emulatorExecutable.linux_x64-linux_arm32_hfp = qemu-arm-static-5.1.0-linux-2/qemu-arm dependencies.linux_x64-linux_arm32_hfp = \ - arm-unknown-linux-gnueabihf-gcc-8.3.0-glibc-2.19-kernel-4.9-2 \ - libffi-3.2.1-2-linux-x86-64 + arm-unknown-linux-gnueabihf-gcc-8.3.0-glibc-2.19-kernel-4.9-2 dependencies.mingw_x64-linux_arm32_hfp = \ - arm-unknown-linux-gnueabihf-gcc-8.3.0-glibc-2.19-kernel-4.9-2 \ - libffi-3.2.1-mingw-w64-x86-64 + arm-unknown-linux-gnueabihf-gcc-8.3.0-glibc-2.19-kernel-4.9-2 dependencies.macos_x64-linux_arm32_hfp = \ - arm-unknown-linux-gnueabihf-gcc-8.3.0-glibc-2.19-kernel-4.9-2 \ - libffi-3.2.1-3-darwin-macos + arm-unknown-linux-gnueabihf-gcc-8.3.0-glibc-2.19-kernel-4.9-2 quadruple.linux_arm32_hfp = arm-unknown-linux-gnueabihf linkerNoDebugFlags.linux_arm32_hfp = -S @@ -553,14 +527,11 @@ emulatorDependency.linux_x64-linux_arm64 = qemu-aarch64-static-5.1.0-linux-2 emulatorExecutable.linux_x64-linux_arm64 = qemu-aarch64-static-5.1.0-linux-2/qemu-aarch64 dependencies.linux_x64-linux_arm64 = \ - aarch64-unknown-linux-gnu-gcc-8.3.0-glibc-2.25-kernel-4.9-2 \ - libffi-3.2.1-2-linux-x86-64 + aarch64-unknown-linux-gnu-gcc-8.3.0-glibc-2.25-kernel-4.9-2 dependencies.mingw_x64-linux_arm64 = \ - aarch64-unknown-linux-gnu-gcc-8.3.0-glibc-2.25-kernel-4.9-2 \ - libffi-3.2.1-mingw-w64-x86-64 + aarch64-unknown-linux-gnu-gcc-8.3.0-glibc-2.25-kernel-4.9-2 dependencies.macos_x64-linux_arm64 = \ - aarch64-unknown-linux-gnu-gcc-8.3.0-glibc-2.25-kernel-4.9-2 \ - libffi-3.2.1-3-darwin-macos + aarch64-unknown-linux-gnu-gcc-8.3.0-glibc-2.25-kernel-4.9-2 quadruple.linux_arm64 = aarch64-unknown-linux-gnu linkerNoDebugFlags.linux_arm64 = -S @@ -602,8 +573,7 @@ targetToolchain.linux_x64-linux_mips32 = $gccToolchain.linux_mips32/mips-unknown emulatorDependency.linux_x64-linux_mips32 = qemu-mips-static-5.1.0-linux-2 emulatorExecutable.linux_x64-linux_mips32 = qemu-mips-static-5.1.0-linux-2/qemu-mips dependencies.linux_x64-linux_mips32 = \ - mips-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2 \ - libffi-3.2.1-2-linux-x86-64 + mips-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2 quadruple.linux_mips32 = mips-unknown-linux-gnu linkerOptimizationFlags.linux_mips32 = --gc-sections @@ -644,8 +614,7 @@ targetToolchain.linux_x64-linux_mipsel32 = $gccToolchain.linux_mipsel32/mipsel-u emulatorDependency.linux_x64-linux_mipsel32 = qemu-mipsel-static-5.1.0-linux-2 emulatorExecutable.linux_x64-linux_mipsel32 = qemu-mipsel-static-5.1.0-linux-2/qemu-mipsel dependencies.linux_x64-linux_mipsel32 = \ - mipsel-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2 \ - libffi-3.2.1-2-linux-x86-64 + mipsel-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2 quadruple.linux_mipsel32 = mipsel-unknown-linux-gnu linkerOptimizationFlags.linux_mipsel32 = --gc-sections @@ -679,18 +648,15 @@ runtimeDefinitions.linux_mipsel32 = USE_GCC_UNWIND=1 KONAN_LINUX=1 \ targetToolchain.macos_x64-android_arm32 = target-toolchain-2-osx-android_ndk dependencies.macos_x64-android_arm32 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-osx-android_ndk \ - libffi-3.2.1-3-darwin-macos + target-toolchain-2-osx-android_ndk targetToolchain.linux_x64-android_arm32 = target-toolchain-2-linux-android_ndk dependencies.linux_x64-android_arm32 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-linux-android_ndk \ - libffi-3.2.1-2-linux-x86-64 + target-toolchain-2-linux-android_ndk targetToolchain.mingw_x64-android_arm32 = target-toolchain-2-windows-android_ndk dependencies.mingw_x64-android_arm32 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-windows-android_ndk \ - libffi-3.2.1-mingw-w64-x86-64 + target-toolchain-2-windows-android_ndk quadruple.android_arm32 = arm-linux-androideabi targetCpu.android_arm32 = arm7tdmi @@ -708,18 +674,15 @@ runtimeDefinitions.android_arm32 = __ANDROID__ USE_GCC_UNWIND=1 USE_ELF_SYMBOLS= targetToolchain.macos_x64-android_arm64 = target-toolchain-2-osx-android_ndk dependencies.macos_x64-android_arm64 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-osx-android_ndk \ - libffi-3.2.1-3-darwin-macos + target-toolchain-2-osx-android_ndk targetToolchain.linux_x64-android_arm64 = target-toolchain-2-linux-android_ndk dependencies.linux_x64-android_arm64 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-linux-android_ndk \ - libffi-3.2.1-2-linux-x86-64 + target-toolchain-2-linux-android_ndk targetToolchain.mingw_x64-android_arm64 = target-toolchain-2-windows-android_ndk dependencies.mingw_x64-android_arm64 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-windows-android_ndk \ - libffi-3.2.1-mingw-w64-x86-64 + target-toolchain-2-windows-android_ndk quadruple.android_arm64 = aarch64-linux-android targetCpu.android_arm64 = cortex-a57 @@ -736,18 +699,15 @@ runtimeDefinitions.android_arm64 = __ANDROID__ USE_GCC_UNWIND=1 USE_ELF_SYMBOLS= targetToolchain.macos_x64-android_x86 = target-toolchain-2-osx-android_ndk dependencies.macos_x64-android_x86 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-osx-android_ndk \ - libffi-3.2.1-3-darwin-macos + target-toolchain-2-osx-android_ndk targetToolchain.linux_x64-android_x86 = target-toolchain-2-linux-android_ndk dependencies.linux_x64-android_x86 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-linux-android_ndk \ - libffi-3.2.1-2-linux-x86-64 + target-toolchain-2-linux-android_ndk targetToolchain.mingw_x64-android_x86 = target-toolchain-2-windows-android_ndk dependencies.mingw_x64-android_x86 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-windows-android_ndk \ - libffi-3.2.1-mingw-w64-x86-64 + target-toolchain-2-windows-android_ndk quadruple.android_x86 = i686-linux-android # -target-cpu pentium4 makes sure that cogenerator knows which CPU flavour to emit code for. @@ -768,18 +728,15 @@ runtimeDefinitions.android_x86 = __ANDROID__ USE_GCC_UNWIND=1 USE_ELF_SYMBOLS=1 targetToolchain.macos_x64-android_x64 = target-toolchain-2-osx-android_ndk dependencies.macos_x64-android_x64 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-osx-android_ndk \ - libffi-3.2.1-3-darwin-macos + target-toolchain-2-osx-android_ndk targetToolchain.linux_x64-android_x64 = target-toolchain-2-linux-android_ndk dependencies.linux_x64-android_x64 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-linux-android_ndk \ - libffi-3.2.1-2-linux-x86-64 + target-toolchain-2-linux-android_ndk targetToolchain.mingw_x64-android_x64 = target-toolchain-2-windows-android_ndk dependencies.mingw_x64-android_x64 = \ target-sysroot-1-android_ndk \ - target-toolchain-2-windows-android_ndk \ - libffi-3.2.1-mingw-w64-x86-64 + target-toolchain-2-windows-android_ndk quadruple.android_x64 = x86_64-linux-android targetCpu.android_x64 = x86-64 @@ -801,12 +758,7 @@ targetToolchain.linux_x64-mingw_x64 = msys2-mingw-w64-x86_64-clang-llvm-lld-comp targetToolchain.macos_x64-mingw_x64 = msys2-mingw-w64-x86_64-clang-llvm-lld-compiler_rt-8.0.1 # for Windows we are currently using LLDB 9 dependencies.mingw_x64 = \ - libffi-3.2.1-mingw-w64-x86-64 \ lldb-2-windows -dependencies.linux_x64-mingw_x64 = \ - libffi-3.2.1-2-linux-x86-64 -dependencies.macos_x64-mingw_x64 = \ - libffi-3.2.1-3-darwin-macos quadruple.mingw_x64 = x86_64-w64-mingw32 targetSysRoot.mingw_x64 = msys2-mingw-w64-x86_64-clang-llvm-lld-compiler_rt-8.0.1 @@ -831,16 +783,13 @@ runtimeDefinitions.mingw_x64 = USE_GCC_UNWIND=1 USE_PE_COFF_SYMBOLS=1 KONAN_WIND # Windows i686, based on mingw-w64. targetToolchain.mingw_x64-mingw_x86 = msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 dependencies.mingw_x64-mingw_x86 = \ - msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 \ - libffi-3.2.1-mingw-w64-x86-64 + msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 targetToolchain.linux_x64-mingw_x86 = msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 targetToolchain.macos_x64-mingw_x86 = msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 dependencies.linux_x64-mingw_x86 = \ - msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 \ - libffi-3.2.1-2-linux-x86-64 + msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 dependencies.macos_x64-mingw_x86 = \ - msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 \ - libffi-3.2.1-3-darwin-macos + msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 quadruple.mingw_x86 = i686-w64-mingw32 targetSysRoot.mingw_x86 = msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 @@ -869,19 +818,16 @@ runtimeDefinitions.mingw_x86 = USE_GCC_UNWIND=1 USE_PE_COFF_SYMBOLS=1 KONAN_WIND # WebAssembly 32-bit. targetToolchain.macos_x64-wasm32 = target-toolchain-3-macos-wasm dependencies.macos_x64-wasm32 = \ - libffi-3.2.1-3-darwin-macos \ target-sysroot-4-embedded \ target-toolchain-3-macos-wasm targetToolchain.linux_x64-wasm32 = target-toolchain-2-linux-wasm dependencies.linux_x64-wasm32 = \ - libffi-3.2.1-2-linux-x86-64 \ target-sysroot-4-embedded \ target-toolchain-2-linux-wasm targetToolchain.mingw_x64-wasm32 = target-toolchain-2-mingw-wasm dependencies.mingw_x64-wasm32 = \ - libffi-3.2.1-mingw-w64-x86-64 \ target-sysroot-4-embedded \ target-toolchain-2-mingw-wasm diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanProperties.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanProperties.kt index dc100c15023..fc77b927755 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanProperties.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanProperties.kt @@ -41,18 +41,30 @@ abstract class KonanPropertiesLoader(override val target: KonanTarget, private val predefinedLlvmDistributions: Set = properties.propertyList("predefinedLlvmDistributions").toSet() - private fun llvmDependencies(): List { + private val predefinedLibffiVersions: Set = + properties.propertyList("predefinedLibffiVersions").toSet() + + private fun getPredefinedDependencyOrNull( + dependencyName: String, + dependencyAccessor: () -> String?, + predefinedDependencies: Set + ): String? { // Store into variable to avoid repeated resolve. - val llvmHome = llvmHome - ?: error("Undefined LLVM home!") - return when (llvmHome) { - in predefinedLlvmDistributions -> llvmHome + val dependency = dependencyAccessor() + ?: error("Undefined $dependencyName!") + return when (dependency) { + in predefinedDependencies -> dependency else -> null - }.let(::listOfNotNull) + } } + private fun compilerDependencies(): List = listOfNotNull( + getPredefinedDependencyOrNull("LLVM home", this::llvmHome, predefinedLlvmDistributions), + getPredefinedDependencyOrNull("libffi version", this::libffiDir, predefinedLibffiVersions) + ) + open val dependencies: List - get() = hostTargetList("dependencies") + llvmDependencies() + get() = hostTargetList("dependencies") + compilerDependencies() override fun downloadDependencies() { dependencyProcessor!!.run()