diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2024-05-20 00:05:57 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-20 00:05:57 +0100 |
| commit | 8dec4f6ed332f2e78331f1b29aaaac16a851745e (patch) | |
| tree | 78156eb049aff83dd1190dff14f7d14a9739b05a /src | |
| parent | b6d5be8593414371785eda44b8135ba988831cac (diff) | |
| parent | 2183140e7162b93066e93b0e65da86b220d45ad0 (diff) | |
Merge pull request #3570 from jasonKercher/linux-arm32
Get the compiler to build and work on arm32 Linux
Diffstat (limited to 'src')
| -rw-r--r-- | src/bug_report.cpp | 2 | ||||
| -rw-r--r-- | src/build_settings.cpp | 12 | ||||
| -rw-r--r-- | src/checker.cpp | 4 | ||||
| -rw-r--r-- | src/gb/gb.h | 7 | ||||
| -rw-r--r-- | src/llvm_backend_proc.cpp | 4 |
5 files changed, 22 insertions, 7 deletions
diff --git a/src/bug_report.cpp b/src/bug_report.cpp index c73595e99..1f754ce7c 100644 --- a/src/bug_report.cpp +++ b/src/bug_report.cpp @@ -251,7 +251,7 @@ gb_internal void report_ram_info() { int result = sysinfo(&info); if (result == 0x0) { - gb_printf("%lu MiB\n", info.totalram * info.mem_unit / gb_megabytes(1)); + gb_printf("%lu MiB\n", (unsigned long)(info.totalram * info.mem_unit / gb_megabytes(1))); } else { gb_printf("Unknown.\n"); } diff --git a/src/build_settings.cpp b/src/build_settings.cpp index f4e957479..693eaa4d3 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -978,7 +978,7 @@ gb_global TargetMetrics target_linux_arm32 = { TargetOs_linux, TargetArch_arm32, 4, 4, 4, 8, - str_lit("arm-linux-gnu"), + str_lit("arm-unknown-linux-gnueabihf"), }; gb_global TargetMetrics target_darwin_amd64 = { @@ -1906,6 +1906,16 @@ gb_internal void init_build_context(TargetMetrics *cross_target, Subtarget subta #else metrics = &target_linux_amd64; #endif + #elif defined(GB_CPU_ARM) + #if defined(GB_SYSTEM_WINDOWS) + #error "Build Error: Unsupported architecture" + #elif defined(GB_SYSTEM_OSX) + #error "Build Error: Unsupported architecture" + #elif defined(GB_SYSTEM_FREEBSD) + #error "Build Error: Unsupported architecture" + #else + metrics = &target_linux_arm32; + #endif #else #if defined(GB_SYSTEM_WINDOWS) metrics = &target_windows_i386; diff --git a/src/checker.cpp b/src/checker.cpp index 7cda0aa42..9d44c34dc 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -2645,6 +2645,10 @@ gb_internal void generate_minimum_dependency_set(Checker *c, Entity *start) { str_lit("memmove"), ); + FORCE_ADD_RUNTIME_ENTITIES(build_context.metrics.arch == TargetArch_arm32, + str_lit("aeabi_d2h") + ); + FORCE_ADD_RUNTIME_ENTITIES(is_arch_wasm() && !build_context.tilde_backend, // // Extended data type internal procedures // str_lit("umodti3"), diff --git a/src/gb/gb.h b/src/gb/gb.h index 58fbfa071..17d5e97d1 100644 --- a/src/gb/gb.h +++ b/src/gb/gb.h @@ -6261,11 +6261,12 @@ gb_no_inline isize gb_snprintf_va(char *text, isize max_len, char const *fmt, va #elif defined(__aarch64__) gb_inline u64 gb_rdtsc(void) { int64_t virtual_timer_value; - asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value)); - return virtual_timer_value; + asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value)); + return virtual_timer_value; } #else -#error "gb_rdtsc not supported" +#warning "gb_rdtsc not supported" + gb_inline u64 gb_rdtsc(void) { return 0; } #endif #if defined(GB_SYSTEM_WINDOWS) diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index b4b5b591b..3b9b1be05 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -2904,7 +2904,6 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu break; case TargetArch_arm32: { - // TODO(bill): Check this is correct GB_ASSERT(arg_count <= 7); char asm_string[] = "svc #0"; @@ -2912,13 +2911,14 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu for (unsigned i = 0; i < arg_count; i++) { constraints = gb_string_appendc(constraints, ",{"); static char const *regs[] = { - "r8", + "r7", "r0", "r1", "r2", "r3", "r4", "r5", + "r6", }; constraints = gb_string_appendc(constraints, regs[i]); constraints = gb_string_appendc(constraints, "}"); |