From b7470495f29f9aaaebb9f31baf34ddaeedf72ded Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Mon, 12 Oct 2020 18:29:27 +0700 Subject: [PATCH] [Clang][Runtime] Move macro definitions to konan.properties Cleaned up a bit ClangArgs.kt by moving macro definitions to konan.properties. It is also useful for a future targets refactoring. --- konan/konan.properties | 56 +++++- konan/platforms/zephyr/stm32f4_disco | 4 + .../kotlin/konan/target/ClangArgs.kt | 187 +----------------- .../kotlin/konan/target/Configurables.kt | 2 + 4 files changed, 62 insertions(+), 187 deletions(-) diff --git a/konan/konan.properties b/konan/konan.properties index cbb0eda3736..7e73a097a6c 100644 --- a/konan/konan.properties +++ b/konan/konan.properties @@ -78,6 +78,8 @@ linkerDynamicFlags.macos_x64 = -dylib osVersionMinFlagLd.macos_x64 = -macosx_version_min osVersionMinFlagClang.macos_x64 = -mmacosx-version-min 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 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 dependencies.macos_x64 = \ libffi-3.2.1-3-darwin-macos \ lldb-3-macos @@ -116,6 +118,14 @@ linkerOptimizationFlags.ios_arm32 = -dead_strip osVersionMinFlagLd.ios_arm32 = -iphoneos_version_min osVersionMinFlagClang.ios_arm32 = -miphoneos-version-min osVersionMin.ios_arm32 = 9.0 +# Regarding KONAN_NO_64BIT_ATOMIC: +# While not 100% correct here, using atomic ops on iOS armv7 requires 8 byte alignment, +# and general ABI requires 4-byte alignment on 64-bit long fields as mentioned in +# https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html#//apple_ref/doc/uid/TP40009021-SW1 +# See https://github.com/ktorio/ktor/issues/941 for the context. +runtimeDefinitions.ios_arm32 = KONAN_OBJC_INTEROP=1 KONAN_IOS KONAN_ARM32=1 \ + KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 KONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1 MACHSIZE=32 \ + KONAN_NO_64BIT_ATOMIC=1 KONAN_NO_UNALIGNED_ACCESS=1 # Apple's 64-bit iOS. targetToolchain.macos_x64-ios_arm64 = target-toolchain-xcode_12_0-macos_x64 @@ -144,6 +154,8 @@ linkerOptimizationFlags.ios_arm64 = -dead_strip osVersionMinFlagLd.ios_arm64 = -iphoneos_version_min osVersionMinFlagClang.ios_arm64 = -miphoneos-version-min osVersionMin.ios_arm64 = 9.0 +runtimeDefinitions.ios_arm64 = KONAN_OBJC_INTEROP=1 KONAN_IOS=1 KONAN_ARM64=1 \ + KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 KONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1 MACHSIZE=64 # Apple's iOS simulator. targetToolchain.macos_x64-ios_x64 = target-toolchain-xcode_12_0-macos_x64 @@ -169,6 +181,8 @@ linkerDynamicFlags.ios_x64 = -dylib osVersionMinFlagLd.ios_x64 = -ios_simulator_version_min osVersionMinFlagClang.ios_x64 = -mios-simulator-version-min osVersionMin.ios_x64 = 9.0 +runtimeDefinitions.ios_x64 = KONAN_OBJC_INTEROP=1 KONAN_IOS=1 KONAN_X64=1 \ + KONAN_CORE_SYMBOLICATION=1 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 # Apple's tvOS simulator. targetToolchain.macos_x64-tvos_x64 = target-toolchain-xcode_12_0-macos_x64 @@ -194,6 +208,8 @@ linkerDynamicFlags.tvos_x64 = -dylib osVersionMinFlagLd.tvos_x64 = -tvos_simulator_version_min osVersionMinFlagClang.tvos_x64 = -mtvos-simulator-version-min osVersionMin.tvos_x64 = 9.0 +runtimeDefinitions.tvos_x64 = KONAN_OBJC_INTEROP=1 KONAN_TVOS=1 KONAN_X64=1 \ + KONAN_CORE_SYMBOLICATION=1 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 # Apple's 64-bit tvOS. targetToolchain.macos_x64-tvos_arm64 = target-toolchain-xcode_12_0-macos_x64 @@ -219,6 +235,8 @@ linkerOptimizationFlags.tvos_arm64 = -dead_strip osVersionMinFlagLd.tvos_arm64 = -tvos_version_min osVersionMinFlagClang.tvos_arm64 = -mtvos-version-min osVersionMin.tvos_arm64 = 9.0 +runtimeDefinitions.tvos_arm64 = KONAN_OBJC_INTEROP=1 KONAN_TVOS=1 KONAN_ARM64=1 \ + KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 KONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1 MACHSIZE=64 # watchOS armv7k targetToolchain.macos_x64-watchos_arm32 = target-toolchain-xcode_12_0-macos_x64 @@ -244,6 +262,10 @@ linkerDynamicFlags.watchos_arm32 = -dylib osVersionMinFlagLd.watchos_arm32 = -watchos_version_min osVersionMinFlagClang.watchos_arm32 = -mwatchos-version-min osVersionMin.watchos_arm32 = 5.0 +# Regarding KONAN_NO_64BIT_ATOMIC=1: see explanation for ios_arm32 above. +runtimeDefinitions.watchos_arm32 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS KONAN_ARM32=1 \ + KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 KONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1 \ + MACHSIZE=32 KONAN_NO_64BIT_ATOMIC=1 KONAN_NO_UNALIGNED_ACCESS=1 # watchOS arm64_32 targetToolchain.macos_x64-watchos_arm64 = target-toolchain-xcode_12_0-macos_x64 @@ -270,6 +292,10 @@ linkerDynamicFlags.watchos_arm64 = -dylib osVersionMinFlagLd.watchos_arm64 = -watchos_version_min osVersionMinFlagClang.watchos_arm64 = -mwatchos-version-min osVersionMin.watchos_arm64 = 5.0 +# Regarding KONAN_NO_64BIT_ATOMIC=1: see explanation for ios_arm32 above. +runtimeDefinitions.watchos_arm64 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS KONAN_ARM32=1 \ + KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 KONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1 \ + MACHSIZE=32 KONAN_NO_64BIT_ATOMIC=1 KONAN_NO_UNALIGNED_ACCESS=1 # Apple's watchOS i386 simulator. targetToolchain.macos_x64-watchos_x86 = target-toolchain-xcode_12_0-macos_x64 @@ -299,6 +325,8 @@ linkerDynamicFlags.watchos_x86 = -dylib osVersionMinFlagLd.watchos_x86 = -watchos_simulator_version_min osVersionMinFlagClang.watchos_x86 = -mwatchos-simulator-version-min osVersionMin.watchos_x86 = 5.0 +runtimeDefinitions.watchos_x86 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS=1 KONAN_NO_64BIT_ATOMIC=1 \ + KONAN_X86=1 KONAN_CORE_SYMBOLICATION=1 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 # Linux x86-64. llvmHome.linux_x64 = $llvm.linux_x64.dev @@ -340,6 +368,8 @@ linkerDynamicFlags.linux_x64 = -shared dynamicLinker.linux_x64 = /lib64/ld-linux-x86-64.so.2 # targetSysRoot relative abiSpecificLibraries.linux_x64 = ../lib64 lib64 usr/lib64 +runtimeDefinitions.linux_x64 = USE_GCC_UNWIND=1 KONAN_LINUX=1 KONAN_X64=1 \ + USE_ELF_SYMBOLS=1 ELFSIZE=64 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 # Raspberry Pi targetToolchain.linux_x64-linux_arm32_hfp = target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu @@ -379,6 +409,8 @@ abiSpecificLibraries.linux_arm32_hfp = \ ../lib/arm-linux-gnueabihf \ lib/arm-linux-gnueabihf \ usr/lib/arm-linux-gnueabihf +runtimeDefinitions.linux_arm32_hfp = USE_GCC_UNWIND=1 KONAN_LINUX=1 \ + KONAN_ARM32=1 USE_ELF_SYMBOLS=1 ELFSIZE=32 KONAN_NO_UNALIGNED_ACCESS=1 # Linux arm64 targetToolchain.linux_x64-linux_arm64 = target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu @@ -418,6 +450,8 @@ dynamicLinker.linux_arm64 = /lib/ld-linux-aarch64.so.1 abiSpecificLibraries.linux_arm64 = \ lib \ usr/lib +runtimeDefinitions.linux_arm64 = USE_GCC_UNWIND=1 KONAN_LINUX=1 KONAN_ARM64=1 \ + USE_ELF_SYMBOLS=1 ELFSIZE=64 # MIPS targetToolchain.linux_x64-linux_mips32 = target-gcc-toolchain-2-linux-mips/x86_64-unknown-linux-gnu @@ -444,6 +478,9 @@ clangDynamicFlags.linux_mips32 = -mrelocation-model pic dynamicLinker.linux_mips32 = /lib/ld.so.1 # targetSysRoot relative abiSpecificLibraries.linux_mips32 = +# TODO: reconsider KONAN_NO_64BIT_ATOMIC, once target MIPS can do proper 64-bit load/store/CAS. +runtimeDefinitions.linux_mips32 = USE_GCC_UNWIND=1 KONAN_LINUX=1 KONAN_MIPS32=1 \ + USE_ELF_SYMBOLS=1 ELFSIZE=32 KONAN_NO_64BIT_ATOMIC=1 KONAN_NO_UNALIGNED_ACCESS=1 # MIPSel targetToolchain.linux_x64-linux_mipsel32 = target-gcc-toolchain-2-linux-mips/x86_64-unknown-linux-gnu @@ -469,6 +506,9 @@ clangDynamicFlags.linux_mipsel32 = -mrelocation-model pic dynamicLinker.linux_mipsel32 = /lib/ld.so.1 # targetSysRoot relative abiSpecificLibraries.linux_mipsel32 = +# TODO: reconsider KONAN_NO_64BIT_ATOMIC, once target MIPS can do proper 64-bit load/store/CAS. +runtimeDefinitions.linux_mipsel32 = USE_GCC_UNWIND=1 KONAN_LINUX=1 \ + KONAN_MIPSEL32=1 USE_ELF_SYMBOLS=1 ELFSIZE=32 KONAN_NO_64BIT_ATOMIC=1 KONAN_NO_UNALIGNED_ACCESS=1 # Android ARM32, based on NDK for android-21. targetToolchain.macos_x64-android_arm32 = target-toolchain-2-osx-android_ndk @@ -494,6 +534,8 @@ linkerNoDebugFlags.android_arm32 = -Wl,-S clangNooptFlags.android_arm32 = -O1 targetSysRoot.android_arm32 = target-sysroot-1-android_ndk linkerKonanFlags.android_arm32 = -lm -lc++_static -lc++abi -landroid -llog -latomic +runtimeDefinitions.android_arm32 = __ANDROID__ USE_GCC_UNWIND=1 USE_ELF_SYMBOLS=1 ELFSIZE=32 \ + KONAN_ANDROID=1 KONAN_ARM32=1 KONAN_NO_UNALIGNED_ACCESS=1 # Android ARM64, based on NDK. targetToolchain.macos_x64-android_arm64 = target-toolchain-2-osx-android_ndk @@ -519,6 +561,8 @@ clangNooptFlags.android_arm64 = -O1 targetSysRoot.android_arm64 = target-sysroot-1-android_ndk linkerKonanFlags.android_arm64 = -lm -lc++_static -lc++abi -landroid -llog -latomic linkerNoDebugFlags.android_arm64 = -Wl,-S +runtimeDefinitions.android_arm64 = __ANDROID__ USE_GCC_UNWIND=1 USE_ELF_SYMBOLS=1 \ + ELFSIZE=64 KONAN_ANDROID=1 KONAN_ARM64=1 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 # Android X86, based on NDK. targetToolchain.macos_x64-android_x86 = target-toolchain-2-osx-android_ndk @@ -549,6 +593,8 @@ clangNooptFlags.android_x86 = -O1 targetSysRoot.android_x86 = target-sysroot-1-android_ndk linkerKonanFlags.android_x86 = -lm -lc++_static -lc++abi -landroid -llog -latomic linkerNoDebugFlags.android_x86 = -Wl,-S +runtimeDefinitions.android_x86 = __ANDROID__ USE_GCC_UNWIND=1 USE_ELF_SYMBOLS=1 \ + ELFSIZE=32 KONAN_ANDROID=1 KONAN_X86=1 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 # Android X64, based on NDK. targetToolchain.macos_x64-android_x64 = target-toolchain-2-osx-android_ndk @@ -574,7 +620,8 @@ clangNooptFlags.android_x64 = -O1 targetSysRoot.android_x64 = target-sysroot-1-android_ndk linkerKonanFlags.android_x64 = -lm -lc++_static -lc++abi -landroid -llog -latomic linkerNoDebugFlags.android_x64 = -Wl,-S - +runtimeDefinitions.android_x64 = __ANDROID__ USE_GCC_UNWIND=1 USE_ELF_SYMBOLS=1 \ + ELFSIZE=64 KONAN_ANDROID=1 KONAN_X64=1 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 # Windows x86-64, based on mingw-w64. llvmHome.mingw_x64 = $llvm.mingw_x64.dev @@ -607,6 +654,8 @@ linkerKonanFlags.mingw_x64 =-static-libgcc -static-libstdc++ \ -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive,-Bdynamic \ -Wl,--defsym,__cxa_demangle=Konan_cxa_demangle linkerOptimizationFlags.mingw_x64 = -Wl,--gc-sections +runtimeDefinitions.mingw_x64 = USE_GCC_UNWIND=1 USE_PE_COFF_SYMBOLS=1 KONAN_WINDOWS=1 \ + UNICODE KONAN_X64=1 KONAN_NO_MEMMEM=1 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 # Windows i686, based on mingw-w64. targetToolchain.mingw_x64-mingw_x86 = msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 @@ -641,6 +690,8 @@ linkerKonanFlags.mingw_x86 = -static-libgcc -static-libstdc++ \ -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive,-Bdynamic \ -Wl,--defsym,___cxa_demangle=_Konan_cxa_demangle linkerOptimizationFlags.mingw_x86 = -Wl,--gc-sections +runtimeDefinitions.mingw_x86 = USE_GCC_UNWIND=1 USE_PE_COFF_SYMBOLS=1 KONAN_WINDOWS=1 \ + UNICODE KONAN_X86=1 KONAN_NO_MEMMEM=1 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 # WebAssembly 32-bit. targetToolchain.macos_x64-wasm32 = target-toolchain-3-macos-wasm @@ -669,6 +720,9 @@ clangOptFlags.wasm32 = -O3 clangDebugFlags.wasm32 = -O0 # TODO: make explicit list of external symbols lld.wasm32 = --allow-undefined --no-entry --global-base=0 --no-threads --export-dynamic +runtimeDefinitions.wasm32 = KONAN_WASM=1 KONAN_NO_FFI=1 KONAN_NO_THREADS=1 \ + KONAN_NO_EXCEPTIONS=1 KONAN_INTERNAL_DLMALLOC=1 KONAN_INTERNAL_SNPRINTF=1 \ + KONAN_INTERNAL_NOW=1 KONAN_NO_MEMMEM KONAN_NO_CTORS_SECTION=1 # The version of Kotlin/Native compiler compilerVersion=@compilerVersion@ \ No newline at end of file diff --git a/konan/platforms/zephyr/stm32f4_disco b/konan/platforms/zephyr/stm32f4_disco index b00158ef8e1..6690bd1c790 100644 --- a/konan/platforms/zephyr/stm32f4_disco +++ b/konan/platforms/zephyr/stm32f4_disco @@ -24,6 +24,10 @@ boardSpecificClangFlags.zephyr_stm32f4_disco = -mthumb targetCpu.zephyr_stm32f4_disco = cortex-m4 targetAbi.zephyr_stm32f4_disco = aapcs clangFlags = -Os +runtimeDefinitions.zephyr_stm32f4_disco = KONAN_ZEPHYR=1 KONAN_NO_FFI=1 \ + KONAN_NO_THREADS=1 KONAN_NO_EXCEPTIONS=1 KONAN_NO_MATH=1 \ + KONAN_INTERNAL_SNPRINTF=1 KONAN_INTERNAL_NOW=1 KONAN_NO_MEMMEM=1 \ + KONAN_NO_CTORS_SECTION=1 KONAN_NO_UNALIGNED_ACCESS=1 targetToolchain.linux_x64-zephyr_stm32f4_disco = gcc-arm-none-eabi-7-2017-q4-major-linux/arm-none-eabi dependencies.linux_x64-zephyr_stm32f4_disco = \ 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 2f62ad6a4eb..0628d57271b 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 @@ -157,192 +157,7 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con } val clangArgsSpecificForKonanSources - get() = when (target) { - KonanTarget.LINUX_X64 -> - listOf("-DUSE_GCC_UNWIND=1", - "-DKONAN_LINUX=1", - "-DKONAN_X64=1", - "-DUSE_ELF_SYMBOLS=1", - "-DELFSIZE=64", - "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1") - - KonanTarget.LINUX_ARM32_HFP -> - listOf("-DUSE_GCC_UNWIND=1", - "-DKONAN_LINUX=1", - "-DKONAN_ARM32=1", - "-DUSE_ELF_SYMBOLS=1", - "-DELFSIZE=32", - "-DKONAN_NO_UNALIGNED_ACCESS=1") - - KonanTarget.LINUX_ARM64 -> - listOf("-DUSE_GCC_UNWIND=1", - "-DKONAN_LINUX=1", - "-DKONAN_ARM64=1", - "-DUSE_ELF_SYMBOLS=1", - "-DELFSIZE=64") - - KonanTarget.LINUX_MIPS32 -> - listOf("-DUSE_GCC_UNWIND=1", - "-DKONAN_LINUX=1", - "-DKONAN_MIPS32=1", - "-DUSE_ELF_SYMBOLS=1", - "-DELFSIZE=32", - // TODO: reconsider, once target MIPS can do proper 64-bit load/store/CAS. - "-DKONAN_NO_64BIT_ATOMIC=1", - "-DKONAN_NO_UNALIGNED_ACCESS=1") - - KonanTarget.LINUX_MIPSEL32 -> - listOf("-DUSE_GCC_UNWIND=1", - "-DKONAN_LINUX=1", - "-DKONAN_MIPSEL32=1", - "-DUSE_ELF_SYMBOLS=1", - "-DELFSIZE=32", - // TODO: reconsider, once target MIPS can do proper 64-bit load/store/CAS. - "-DKONAN_NO_64BIT_ATOMIC=1", - "-DKONAN_NO_UNALIGNED_ACCESS=1") - - KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 -> - listOf("-DUSE_GCC_UNWIND=1", - "-DUSE_PE_COFF_SYMBOLS=1", - "-DKONAN_WINDOWS=1", - "-DUNICODE", - if (target == KonanTarget.MINGW_X64) "-DKONAN_X64=1" else "-DKONAN_X86=1", - "-DKONAN_NO_MEMMEM=1", - "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1") - - KonanTarget.MACOS_X64 -> - listOf("-DKONAN_OSX=1", - "-DKONAN_MACOSX=1", - "-DKONAN_X64=1", - "-DKONAN_OBJC_INTEROP=1", - "-DKONAN_CORE_SYMBOLICATION=1", - "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1") - - KonanTarget.IOS_ARM32 -> - listOf("-DKONAN_OBJC_INTEROP=1", - "-DKONAN_IOS", - "-DKONAN_ARM32=1", - "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1", - "-DKONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1", - "-DMACHSIZE=32", - // While not 100% correct here, using atomic ops on iOS armv7 requires 8 byte alignment, - // and general ABI requires 4-byte alignment on 64-bit long fields as mentioned in - // https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html#//apple_ref/doc/uid/TP40009021-SW1 - // See https://github.com/ktorio/ktor/issues/941 for the context. - "-DKONAN_NO_64BIT_ATOMIC=1", - "-DKONAN_NO_UNALIGNED_ACCESS=1") - - KonanTarget.IOS_ARM64 -> - listOf("-DKONAN_OBJC_INTEROP=1", - "-DKONAN_IOS=1", - "-DKONAN_ARM64=1", - "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1", - "-DKONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1", - "-DMACHSIZE=64") - - KonanTarget.IOS_X64 -> - listOf("-DKONAN_OBJC_INTEROP=1", - "-DKONAN_IOS=1", - "-DKONAN_X64=1", - "-DKONAN_CORE_SYMBOLICATION=1", - "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1") - - KonanTarget.TVOS_ARM64 -> - listOf("-DKONAN_OBJC_INTEROP=1", - "-DKONAN_TVOS=1", - "-DKONAN_ARM64=1", - "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1", - "-DKONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1", - "-DMACHSIZE=64") - - KonanTarget.TVOS_X64 -> - listOf("-DKONAN_OBJC_INTEROP=1", - "-DKONAN_TVOS=1", - "-DKONAN_X64=1", - "-DKONAN_CORE_SYMBOLICATION=1", - "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1") - - KonanTarget.WATCHOS_ARM64, - KonanTarget.WATCHOS_ARM32 -> - listOf("-DKONAN_OBJC_INTEROP=1", - "-DKONAN_WATCHOS", - "-DKONAN_ARM32=1", - "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1", - "-DKONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1", - "-DMACHSIZE=32", - // See explanation for ios_arm32 above. - "-DKONAN_NO_64BIT_ATOMIC=1", - "-DKONAN_NO_UNALIGNED_ACCESS=1") - - KonanTarget.WATCHOS_X86 -> - listOf("-DKONAN_OBJC_INTEROP=1", - "-DKONAN_WATCHOS=1", - "-DKONAN_NO_64BIT_ATOMIC=1", - "-DKONAN_X86=1", - "-DKONAN_CORE_SYMBOLICATION=1", - "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1") - - KonanTarget.WATCHOS_X64 -> TODO("implement me") - - KonanTarget.ANDROID_ARM32 -> - listOf("-D__ANDROID__", - "-DUSE_GCC_UNWIND=1", - "-DUSE_ELF_SYMBOLS=1", - "-DELFSIZE=32", - "-DKONAN_ANDROID=1", - "-DKONAN_ARM32=1", - "-DKONAN_NO_UNALIGNED_ACCESS=1") - - KonanTarget.ANDROID_ARM64 -> - listOf("-D__ANDROID__", - "-DUSE_GCC_UNWIND=1", - "-DUSE_ELF_SYMBOLS=1", - "-DELFSIZE=64", - "-DKONAN_ANDROID=1", - "-DKONAN_ARM64=1", - "-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1") - - KonanTarget.ANDROID_X86 -> - listOf("-D__ANDROID__", - "-DUSE_GCC_UNWIND=1", - "-DUSE_ELF_SYMBOLS=1", - "-DELFSIZE=32", - "-DKONAN_ANDROID=1", - "-DKONAN_X86=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", - "-DKONAN_NO_THREADS=1", - "-DKONAN_NO_EXCEPTIONS=1", - "-DKONAN_INTERNAL_DLMALLOC=1", - "-DKONAN_INTERNAL_SNPRINTF=1", - "-DKONAN_INTERNAL_NOW=1", - "-DKONAN_NO_MEMMEM", - "-DKONAN_NO_CTORS_SECTION=1") - - is KonanTarget.ZEPHYR -> - listOf( "-DKONAN_ZEPHYR=1", - "-DKONAN_NO_FFI=1", - "-DKONAN_NO_THREADS=1", - "-DKONAN_NO_EXCEPTIONS=1", - "-DKONAN_NO_MATH=1", - "-DKONAN_INTERNAL_SNPRINTF=1", - "-DKONAN_INTERNAL_NOW=1", - "-DKONAN_NO_MEMMEM=1", - "-DKONAN_NO_CTORS_SECTION=1", - "-DKONAN_NO_UNALIGNED_ACCESS=1") - } + get() = runtimeDefinitions.map { "-D$it" } private val host = HostManager.host diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt index 3ca4be09000..13e4c4c2286 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt @@ -51,6 +51,8 @@ interface Configurables : TargetableExternalStorage { val absoluteTargetSysRoot get() = absolute(targetSysRoot) val absoluteTargetToolchain get() = absolute(targetToolchain) val absoluteLlvmHome get() = absolute(llvmHome) + + val runtimeDefinitions get() = targetList("runtimeDefinitions") } interface TargetableConfigurables : Configurables {