diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/OptimizationPipeline.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/OptimizationPipeline.kt index a1f8a88eddc..518531c89fd 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/OptimizationPipeline.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/OptimizationPipeline.kt @@ -59,9 +59,9 @@ private class LlvmPipelineConfiguration(context: Context) { KonanTarget.LINUX_ARM64 -> "generic" KonanTarget.ANDROID_ARM32 -> "arm7tdmi" KonanTarget.ANDROID_ARM64 -> "cortex-a57" + KonanTarget.ANDROID_X64 -> "x86-64" KonanTarget.LINUX_MIPS32 -> "mips32r2" KonanTarget.LINUX_MIPSEL32 -> "mips32r2" - KonanTarget.ANDROID_X64 -> TODO("implement me") KonanTarget.WATCHOS_ARM64 -> TODO("implement me") KonanTarget.WATCHOS_X64 -> TODO("implement me") KonanTarget.TVOS_ARM64 -> TODO("implement me") diff --git a/konan/konan.properties b/konan/konan.properties index 153ec7f6469..0699d966120 100644 --- a/konan/konan.properties +++ b/konan/konan.properties @@ -343,63 +343,88 @@ dynamicLinker.linux_mipsel32 = /lib/ld.so.1 abiSpecificLibraries.linux_mipsel32 = # Android ARM32, based on NDK for android-21. -targetToolchain.macos_x64-android_arm32 = target-toolchain-21-osx-android_arm32 -# TODO: split dependencies to host-dependent and host-independent parts. +targetToolchain.macos_x64-android_arm32 = target-toolchain-1-osx-android_ndk dependencies.macos_x64-android_arm32 = \ clang-llvm-6.0.1-darwin-macos \ - target-sysroot-21-android_arm32 \ - target-toolchain-21-osx-android_arm32 \ + target-sysroot-1-android_ndk \ + target-toolchain-1-osx-android_ndk \ libffi-3.2.1-3-darwin-macos -targetToolchain.linux_x64-android_arm32 = target-toolchain-21-linux-android_arm32 +targetToolchain.linux_x64-android_arm32 = target-toolchain-1-linux-android_ndk dependencies.linux_x64-android_arm32 = \ clang-llvm-6.0.1-linux-x86-64 \ - target-sysroot-21-android_arm32 \ - target-toolchain-21-linux-android_arm32 \ + target-sysroot-1-android_ndk \ + target-toolchain-1-linux-android_ndk \ libffi-3.2.1-2-linux-x86-64 -targetToolchain.mingw_x64-android_arm32 = target-toolchain-21-windows-android_arm32 +targetToolchain.mingw_x64-android_arm32 = target-toolchain-1-windows-android_ndk dependencies.mingw_x64-android_arm32 = \ msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1-2 \ - target-sysroot-21-android_arm32 \ - target-toolchain-21-windows-android_arm32 \ + target-sysroot-1-android_ndk \ + target-toolchain-1-windows-android_ndk \ libffi-3.2.1-mingw-w64-x86-64 quadruple.android_arm32 = arm-linux-androideabi -entrySelector.android_arm32 = -Wl,--defsym -Wl,main=Konan_main +entrySelector.android_arm32 = -Wl,--defsym -Wl,main=Konan_main clangFlags.android_arm32 = -cc1 -target-cpu arm7tdmi -emit-obj -disable-llvm-optzns -x ir -femulated-tls -mrelocation-model pic clangOptFlags.android_arm32 = -O3 -ffunction-sections linkerNoDebugFlags.android_arm32 = -Wl,-S clangNooptFlags.android_arm32 = -O1 -targetSysRoot.android_arm32 = target-sysroot-21-android_arm32 -linkerKonanFlags.android_arm32 = -lm -latomic -lstdc++ -landroid +targetSysRoot.android_arm32 = target-sysroot-1-android_ndk +linkerKonanFlags.android_arm32 = -lm -lstdc++ -landroid -llog -latomic -# Android ARM64, based on NDK for android-21. -targetToolchain.macos_x64-android_arm64 = target-toolchain-21-osx-android_arm64 -# TODO: split dependencies to host-dependent and host-independent parts. -dependencies.macos_x64-android_arm64 = \ +# Android ARM64, based on NDK. +targetToolchain.macos_x64-android_x64 = target-toolchain-1-osx-android_ndk +dependencies.macos_x64-android_x64 = \ clang-llvm-6.0.1-darwin-macos \ - target-sysroot-21-android_arm64 \ - target-toolchain-21-osx-android_arm64 \ + target-sysroot-1-android_ndk \ + target-toolchain-1-osx-android_ndk \ libffi-3.2.1-3-darwin-macos -targetToolchain.linux_x64-android_arm64 = target-toolchain-21-linux-android_arm64 -dependencies.linux_x64-android_arm64 = \ +targetToolchain.linux_x64-android_x64 = target-toolchain-1-linux-android_ndk +dependencies.linux_x64-android_x64 = \ clang-llvm-6.0.1-linux-x86-64 \ - target-sysroot-21-android_arm64 \ - target-toolchain-21-linux-android_arm64 \ + target-sysroot-1-android_ndk \ + target-toolchain-1-linux-android_ndk \ libffi-3.2.1-2-linux-x86-64 -targetToolchain.mingw_x64-android_arm64 = target-toolchain-21-windows-android_arm64 -dependencies.mingw_x64-android_arm64 = \ +targetToolchain.mingw_x64-android_x64 = target-toolchain-1-windows-android_ndk +dependencies.mingw_x64-android_x64 = \ msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1-2 \ - target-sysroot-21-android_arm64 \ - target-toolchain-21-windows-android_arm64 \ + target-sysroot-1-android_ndk \ + target-toolchain-1-windows-android_ndk \ libffi-3.2.1-mingw-w64-x86-64 quadruple.android_arm64 = aarch64-linux-android entrySelector.android_arm64 = -Wl,--defsym -Wl,main=Konan_main clangFlags.android_arm64 = -cc1 -target-cpu cortex-a57 -emit-obj -disable-llvm-passes -x ir -femulated-tls -mrelocation-model pic -targetSysRoot.android_arm64 = target-sysroot-21-android_arm64 -linkerKonanFlags.android_arm64 = -lm -latomic -lstdc++ -landroid +targetSysRoot.android_arm64 = target-sysroot-1-android_ndk +linkerKonanFlags.android_arm64 = -lm -lstdc++ -landroid -llog -latomic linkerNoDebugFlags.android_arm64 = -Wl,-S +# Android X64, based on NDK. +targetToolchain.macos_x64-android_arm64 = target-toolchain-1-osx-android_ndk +dependencies.macos_x64-android_arm64 = \ + clang-llvm-6.0.1-darwin-macos \ + target-sysroot-1-android_ndk \ + target-toolchain-1-osx-android_ndk \ + libffi-3.2.1-3-darwin-macos +targetToolchain.linux_x64-android_arm64 = target-toolchain-1-linux-android_ndk +dependencies.linux_x64-android_arm64 = \ + clang-llvm-6.0.1-linux-x86-64 \ + target-sysroot-1-android_ndk \ + target-toolchain-1-linux-android_ndk \ + libffi-3.2.1-2-linux-x86-64 +targetToolchain.mingw_x64-android_arm64 = target-toolchain-1-windows-android_ndk +dependencies.mingw_x64-android_arm64 = \ + msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1-2 \ + target-sysroot-1-android_ndk \ + target-toolchain-1-windows-android_ndk \ + libffi-3.2.1-mingw-w64-x86-64 + +quadruple.android_x64 = x86_64-linux-android +entrySelector.android_x64 = -Wl,--defsym -Wl,main=Konan_main +clangFlags.android_x64 = -cc1 -target-cpu x86-64 -emit-obj -disable-llvm-passes -x ir -femulated-tls -mrelocation-model pic +targetSysRoot.android_x64 = target-sysroot-1-android_ndk +linkerKonanFlags.android_x64 = -lm -lstdc++ -landroid -llog -latomic +linkerNoDebugFlags.android_ax64 = -Wl,-S + # Windows x86-64, based on mingw-w64. llvmHome.mingw_x64 = msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1-2 targetToolchain.mingw_x64 = msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1-2 @@ -508,4 +533,4 @@ llcNooptFlags.wasm32 = -O1 llcOptFlags.wasm32 = -O3 llcDebugFlags.wasm32 = -O0 # TODO: make explicit list of external symbols -lld.wasm32 = --allow-undefined --no-entry --global-base=0 --no-threads \ No newline at end of file +lld.wasm32 = --allow-undefined --no-entry --global-base=0 --no-threads diff --git a/platformLibs/src/platform/android/android.def b/platformLibs/src/platform/android/android.def index 81f93786779..7a892dd45ba 100644 --- a/platformLibs/src/platform/android/android.def +++ b/platformLibs/src/platform/android/android.def @@ -1,13 +1,28 @@ depends = posix package = platform.android -headers = jni.h android/api-level.h android/asset_manager.h android/asset_manager_jni.h android/bitmap.h \ - android/configuration.h android/dlext.h android/input.h android/keycodes.h android/log.h \ - android/looper.h android/native_activity.h android/native_window.h android/native_window_jni.h \ - android/obb.h android/rect.h android/sensor.h android/storage_manager.h android/tts.h \ +headers = jni.h stdbool.h \ + android/NeuralNetworks.h \ + android/api-level.h android/asset_manager.h android/asset_manager_jni.h \ + android/bitmap.h \ + android/choreographer.h android/configuration.h \ + android/data_space.h android/dlext.h \ + android/fdsan.h android/font.h android/font_matcher.h \ + android/hardware_buffer.h android/hardware_buffer_jni.h \ + android/input.h \ + android/keycodes.h \ + android/log.h android/looper.h \ + android/multinetwork.h \ + android/native_activity.h android/native_window.h android/ndk-version.h \ + android/obb.h \ + android/rect.h \ + android/sensor.h android/set_abort_message.h android/sharedmem.h android/sharedmem_jni.h \ + android/storage_manager.h android/surface_texture.h android/surface_texture_jni.h \ + android/sync.h android/system_fonts.h \ + android/trace.h \ + android/versioning.h \ android/window.h headerFilter = ** - linkerOpts = -landroid -llog -ljnigraphics --- diff --git a/platformLibs/src/platform/android/linux.def b/platformLibs/src/platform/android/linux.def index e5e78fbd390..dd8f80d5694 100644 --- a/platformLibs/src/platform/android/linux.def +++ b/platformLibs/src/platform/android/linux.def @@ -1,12 +1,12 @@ depends = posix package = platform.linux headers = byteswap.h elf.h endian.h features.h lastlog.h link.h \ - malloc.h mntent.h nsswitch.h pathconf.h termio.h thread_db.h \ - uchar.h util.h \ + malloc.h mntent.h termio.h \ + uchar.h \ sys/epoll.h sys/inotify.h sys/klog.h sys/sendfile.h \ - sys/sysconf.h sys/sysinfo.h sys/utime.h \ - net/if_ether.h net/if_packet.h netinet/ether.h netinet/in6.h netpacket/packet.h - + sys/sysconf.h sys/sysinfo.h \ + linux/if_ether.h linux/utime.h \ + net/if_packet.h netinet/ether.h netinet/in6.h netpacket/packet.h headers.android_arm32 = time64.h headerFilter = ** diff --git a/platformLibs/src/platform/android/media.def b/platformLibs/src/platform/android/media.def index 5e18f888a55..7e3d112cb80 100644 --- a/platformLibs/src/platform/android/media.def +++ b/platformLibs/src/platform/android/media.def @@ -3,4 +3,4 @@ package = platform.media headers = media/NdkMediaCodec.h media/NdkMediaCrypto.h media/NdkMediaDrm.h media/NdkMediaError.h \ media/NdkMediaExtractor.h media/NdkMediaFormat.h media/NdkMediaMuxer.h headerFilter = media/** -linkerOpts = -lmediandk \ No newline at end of file +linkerOpts = -lmediandk diff --git a/platformLibs/src/platform/android/posix.def b/platformLibs/src/platform/android/posix.def index 1d7d124e149..1d456714e27 100644 --- a/platformLibs/src/platform/android/posix.def +++ b/platformLibs/src/platform/android/posix.def @@ -3,15 +3,15 @@ package = platform.posix headers = alloca.h ar.h assert.h complex.h dirent.h dlfcn.h err.h errno.h fcntl.h \ fenv.h fnmatch.h fts.h ftw.h getopt.h grp.h inttypes.h libgen.h limits.h \ locale.h math.h memory.h netdb.h paths.h poll.h \ - pthread.h pwd.h regex.h resolv.h sched.h search.h semaphore.h setjmp.h sgtty.h signal.h \ - stdatomic.h stdint.h stdio.h stdlib.h string.h strings.h syslog.h termios.h \ + pthread.h pwd.h regex.h resolv.h sched.h search.h semaphore.h setjmp.h signal.h \ + stdatomic.h stdbool.h stdint.h stdio.h stdlib.h string.h strings.h syslog.h termios.h \ time.h ucontext.h unistd.h utime.h utmp.h wchar.h wctype.h xlocale.h \ net/ethernet.h net/if.h net/if_arp.h net/route.h \ netinet/icmp6.h netinet/if_ether.h netinet/in.h netinet/in_systm.h \ netinet/ip.h netinet/ip6.h netinet/ip_icmp.h netinet/tcp.h netinet/udp.h \ sys/ioctl.h sys/ipc.h sys/mman.h sys/poll.h sys/ptrace.h \ sys/queue.h sys/select.h sys/shm.h sys/stat.h \ - sys/syslimits.h sys/time.h sys/times.h sys/utsname.h sys/wait.h + sys/time.h sys/times.h sys/utsname.h sys/wait.h linkerOpts = -ldl @@ -42,4 +42,4 @@ static int init_sockets() { } static void deinit_sockets() { -} \ No newline at end of file +} diff --git a/runtime/src/launcher/cpp/androidLauncher.cpp b/runtime/src/launcher/cpp/androidLauncher.cpp index 19062825c44..16348390a80 100644 --- a/runtime/src/launcher/cpp/androidLauncher.cpp +++ b/runtime/src/launcher/cpp/androidLauncher.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt index e69c9516804..4f902049b44 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt @@ -18,6 +18,19 @@ package org.jetbrains.kotlin.konan.target import org.jetbrains.kotlin.konan.file.File +internal object Android { + const val API = "21" + private val architectureMap = mapOf( + // KonanTarget.X86 to "x86", + KonanTarget.ANDROID_X64 to "x86_64", + KonanTarget.ANDROID_ARM32 to "arm", + KonanTarget.ANDROID_ARM64 to "arm64" + ) + + fun architectureDirForTarget(target: KonanTarget) = + "android-${API}/arch-${architectureMap.getValue(target)}" +} + class ClangArgs(private val configurables: Configurables) : Configurables by configurables { val targetArg = if (configurables is TargetableConfigurables) @@ -72,22 +85,19 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con KonanTarget.IOS_X64 -> listOf("-stdlib=libc++", "-isysroot", absoluteTargetSysRoot, "-miphoneos-version-min=9.0.0") - KonanTarget.ANDROID_ARM32 -> - listOf("-target", targetArg!!, - "--sysroot=$absoluteTargetSysRoot", - // HACKS! - "-I$absoluteTargetSysRoot/usr/include/c++/4.9.x", - "-I$absoluteTargetSysRoot/usr/include/c++/4.9.x/arm-linux-androideabi") + KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64, 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") + } - KonanTarget.ANDROID_ARM64 -> - listOf("-target", targetArg!!, - "--sysroot=$absoluteTargetSysRoot", - // HACKS! - "-I$absoluteTargetSysRoot/usr/include/c++/4.9.x", - "-I$absoluteTargetSysRoot/usr/include/c++/4.9.x/aarch64-linux-android") - - // By default wasm target forces `hidden` visibility which causes - // linkage problems. + // By default WASM target forces `hidden` visibility which causes linkage problems. KonanTarget.WASM32 -> listOf("-target", targetArg!!, "-fno-rtti", @@ -103,7 +113,6 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con "-Xclang", "-isystem$absoluteTargetSysRoot/include/compat", "-Xclang", "-isystem$absoluteTargetSysRoot/include/libc") - KonanTarget.ANDROID_X64 -> TODO("implement me") KonanTarget.WATCHOS_ARM64 -> TODO("implement me") KonanTarget.WATCHOS_X64 -> TODO("implement me") KonanTarget.TVOS_ARM64 -> TODO("implement me") @@ -239,6 +248,15 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con "-DKONAN_ARM64=1", "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1") + KonanTarget.ANDROID_X64 -> + listOf("-D__ANDROID__", + "-DUSE_GCC_UNWIND=1", + "-DUSE_ELF_SYMBOLS=1", + "-DELFSIZE=64", + "-DKONAN_ANDROID=1", + "-DKONAN_X64=1", + "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1") + KonanTarget.WASM32 -> listOf("-DKONAN_WASM=1", "-DKONAN_NO_FFI=1", @@ -250,7 +268,6 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con "-DKONAN_NO_MEMMEM", "-DKONAN_NO_CTORS_SECTION=1") - KonanTarget.ANDROID_X64 -> TODO("implement me") KonanTarget.WATCHOS_ARM64 -> TODO("implement me") KonanTarget.WATCHOS_X64 -> TODO("implement me") KonanTarget.TVOS_ARM64 -> TODO("implement me") diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt index 19a175096a9..a75ca25228f 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt @@ -44,13 +44,12 @@ fun loadConfigurables(target: KonanTarget, properties: Properties, baseDir: Stri LinuxMIPSConfigurablesImpl(target, properties, baseDir) KonanTarget.MACOS_X64, KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 -> AppleConfigurablesImpl(target, properties, baseDir) - KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64 -> + KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64, KonanTarget.ANDROID_X64 -> AndroidConfigurablesImpl(target, properties, baseDir) KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 -> MingwConfigurablesImpl(target, properties, baseDir) KonanTarget.WASM32 -> WasmConfigurablesImpl(target, properties, baseDir) - KonanTarget.ANDROID_X64 -> TODO("unimplemented: $target") KonanTarget.WATCHOS_ARM64, KonanTarget.WATCHOS_X64 -> TODO("unimplemented: $target") KonanTarget.TVOS_ARM64, KonanTarget.TVOS_X64 -> TODO("unimplemented: $target") is KonanTarget.ZEPHYR -> diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt index de4d789f933..da1c433c59b 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt @@ -108,13 +108,23 @@ open class AndroidLinker(targetProperties: AndroidConfigurables) return staticGnuArCommands(ar, executable, objectFiles, libraries) val dynamic = kind == LinkerOutputKind.DYNAMIC_LIBRARY - // liblog.so must be linked in, as we use its functionality in runtime. + val toolchainSysroot = "${absoluteTargetToolchain}/sysroot" + val architectureDir = Android.architectureDirForTarget(target) + val apiSysroot = "$absoluteTargetSysRoot/$architectureDir" + val clangTarget = targetArg!! + val libDirs = listOf( + "--sysroot=$apiSysroot", + if (target == KonanTarget.ANDROID_X64) "-L$apiSysroot/usr/lib64" else "-L$apiSysroot/usr/lib", + "-L$toolchainSysroot/usr/lib/$clangTarget/${Android.API}", + "-L$toolchainSysroot/usr/lib/$clangTarget") return listOf(Command(clang).apply { +"-o" +executable +"-fPIC" +"-shared" - +"-llog" + +"-target" + +targetArg!! + +libDirs +objectFiles if (optimize) +linkerOptimizationFlags if (!debug) +linkerNoDebugFlags @@ -429,13 +439,12 @@ fun linker(configurables: Configurables): LinkerFlags = LinuxBasedLinker(configurables as LinuxMIPSConfigurables) KonanTarget.MACOS_X64, KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 -> MacOSBasedLinker(configurables as AppleConfigurables) - KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64 -> + KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64, KonanTarget.ANDROID_X64 -> AndroidLinker(configurables as AndroidConfigurables) KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 -> MingwLinker(configurables as MingwConfigurables) KonanTarget.WASM32 -> WasmLinker(configurables as WasmConfigurables) - KonanTarget.ANDROID_X64 -> TODO("implement me") KonanTarget.WATCHOS_ARM64 -> TODO("implement me") KonanTarget.WATCHOS_X64 -> TODO("implement me") KonanTarget.TVOS_ARM64 -> TODO("implement me") diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Platform.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Platform.kt index 5e3cbb56662..3c2d5ffb772 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Platform.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Platform.kt @@ -49,7 +49,7 @@ class PlatformManager(distribution: Distribution = Distribution(), experimental: * TODO: Don't forget to delete this field and replace all its usages to `enabled`. */ val filteredOutEnabledButNotSupported - get() = enabled.filterNot { it == KonanTarget.ANDROID_X64 || it == KonanTarget.WATCHOS_X64 || it == KonanTarget.WATCHOS_ARM64 || + get() = enabled.filterNot { it == KonanTarget.WATCHOS_X64 || it == KonanTarget.WATCHOS_ARM64 || it == KonanTarget.TVOS_X64 || it == KonanTarget.TVOS_ARM64} }