diff --git a/src/build/build.h b/src/build/build.h index 4a605dd37..053ed5ddb 100644 --- a/src/build/build.h +++ b/src/build/build.h @@ -321,6 +321,7 @@ typedef enum typedef enum { ARCH_OS_TARGET_DEFAULT = 0, + ANDROID_AARCH64, ELF_AARCH64, ELF_RISCV32, ELF_RISCV64, @@ -329,6 +330,7 @@ typedef enum ELF_XTENSA, FREEBSD_X86, FREEBSD_X64, + IOS_AARCH64, LINUX_AARCH64, LINUX_RISCV32, LINUX_RISCV64, diff --git a/src/build/build_options.c b/src/build/build_options.c index 1774f1013..5481f4509 100644 --- a/src/build/build_options.c +++ b/src/build/build_options.c @@ -17,6 +17,7 @@ extern const char *llvm_version; extern const char *llvm_target; char *arch_os_target[ARCH_OS_TARGET_LAST + 1] = { + [ANDROID_AARCH64] = "android-aarch64", [ELF_AARCH64] = "elf-aarch64", [ELF_RISCV32] = "elf-riscv32", [ELF_RISCV64] = "elf-riscv64", @@ -25,6 +26,7 @@ char *arch_os_target[ARCH_OS_TARGET_LAST + 1] = { [ELF_XTENSA] = "elf-xtensa", [FREEBSD_X86] = "freebsd-x86", [FREEBSD_X64] = "freebsd-x64", + [IOS_AARCH64] = "ios-aarch64", [LINUX_AARCH64] = "linux-aarch64", [LINUX_RISCV32] = "linux-riscv32", [LINUX_RISCV64] = "linux-riscv64", diff --git a/src/compiler/compiler.c b/src/compiler/compiler.c index 4d0c6fb5e..47f19e760 100644 --- a/src/compiler/compiler.c +++ b/src/compiler/compiler.c @@ -1009,12 +1009,14 @@ static int jump_buffer_size() case OPENBSD_X64: REMINDER("Guessing setjmp for platform."); return 32; + case ANDROID_AARCH64: case LINUX_AARCH64: case ELF_AARCH64: return 39; case WINDOWS_AARCH64: // Based on Godbolt return 24; + case IOS_AARCH64: case MACOS_AARCH64: // Based on macOS headers return 25; diff --git a/src/compiler/linker.c b/src/compiler/linker.c index e4785b456..1229c8e49 100644 --- a/src/compiler/linker.c +++ b/src/compiler/linker.c @@ -594,10 +594,7 @@ Linker linker_find_linker_type(void) case OS_TYPE_NETBSD: case OS_TYPE_OPENBSD: return LINKER_LD; - case OS_TYPE_IOS: - case OS_TYPE_MACOSX: - case OS_TYPE_TVOS: - case OS_TYPE_WATCHOS: + case OS_DARWIN_TYPES: return LINKER_LD64; case OS_TYPE_WIN32: return LINKER_LINK_EXE; diff --git a/src/compiler/target.c b/src/compiler/target.c index 45f27b6cf..3d72f4789 100644 --- a/src/compiler/target.c +++ b/src/compiler/target.c @@ -113,15 +113,12 @@ static bool os_target_use_thread_local(OsType os) case OS_TYPE_UNKNOWN: case OS_TYPE_NONE: return false; + case OS_DARWIN_TYPES: case OS_TYPE_FREE_BSD: - case OS_TYPE_IOS: case OS_TYPE_LINUX: - case OS_TYPE_MACOSX: case OS_TYPE_NETBSD: case OS_TYPE_OPENBSD: case OS_TYPE_WIN32: - case OS_TYPE_TVOS: - case OS_TYPE_WATCHOS: case OS_TYPE_WASI: return true; } @@ -253,10 +250,7 @@ static inline void target_setup_x86_abi(BuildTarget *target) compiler.platform.x86.is_mcu_api = compiler.platform.os == OS_TYPE_ELFIAMCU; switch (compiler.platform.os) { - case OS_TYPE_MACOSX: - case OS_TYPE_IOS: - case OS_TYPE_WATCHOS: - case OS_TYPE_TVOS: + case OS_DARWIN_TYPES: case OS_TYPE_DRAGON_FLY: case OS_TYPE_FREE_BSD: case OS_TYPE_ELFIAMCU: @@ -1047,7 +1041,9 @@ static char *arch_to_target_triple[ARCH_OS_TARGET_LAST + 1] = { [FREEBSD_X64] = "x86_64-pc-freebsd", [OPENBSD_X64] = "x86_64-pc-openbsd", [ELF_X64] = "x86_64-unknown-elf", + [ANDROID_AARCH64] = "aarch64-unknown-linux-android", [LINUX_AARCH64] = "aarch64-unknown-linux-gnu", + [IOS_AARCH64] = "aarch64-apple-ios", [MACOS_AARCH64] = "aarch64-apple-macosx", [ELF_AARCH64] = "aarch64-unknown-elf", [WINDOWS_AARCH64] = "aarch64-pc-windows-msvc", @@ -1423,10 +1419,7 @@ static ObjectFormatType object_format_from_os(OsType os, ArchType arch_type) case OS_TYPE_OPENBSD: case OS_TYPE_FREE_BSD: return OBJ_FORMAT_ELF; - case OS_TYPE_MACOSX: - case OS_TYPE_IOS: - case OS_TYPE_TVOS: - case OS_TYPE_WATCHOS: + case OS_DARWIN_TYPES: return OBJ_FORMAT_MACHO; case OS_TYPE_WIN32: return OBJ_FORMAT_COFF; @@ -1475,7 +1468,7 @@ static unsigned os_target_c_type_bits(OsType os, ArchType arch, CType type) } // Use default break; - case OS_TYPE_MACOSX: + case OS_DARWIN_TYPES: case OS_TYPE_LINUX: case OS_TYPE_NONE: case OS_TYPE_FREE_BSD: @@ -1497,21 +1490,6 @@ static unsigned os_target_c_type_bits(OsType os, ArchType arch, CType type) default: UNREACHABLE } - case OS_TYPE_IOS: - case OS_TYPE_TVOS: - case OS_TYPE_WATCHOS: - switch (type) - { - case CTYPE_SHORT: - return 16; - case CTYPE_INT: - return 32; - case CTYPE_LONG: - case CTYPE_LONG_LONG: - return 64; - default: - UNREACHABLE - } } switch (type) { @@ -2035,6 +2013,10 @@ void target_setup(BuildTarget *target) compiler.platform.reloc_model = target->reloc_model; } + if (compiler.platform.os == OS_TYPE_IOS) + { + WARNING("iOS not properly supported yet."); + } if (compiler.platform.os == OS_TYPE_MACOSX) { if (!compiler.build.macos.sysroot) compiler.build.macos.sysroot = macos_sysroot();