arch.ha (1249B)
1 // SPDX-License-Identifier: GPL-3.0-only 2 // (c) Hare authors <https://harelang.org> 3 4 use cmd::hare::build; 5 6 // When building the bootstrap toolchain, these values will get overwritten to 7 // equal the values in config.mk 8 def AARCH64_AS = "as"; 9 def AARCH64_CC = "cc"; 10 def AARCH64_LD = "ld"; 11 def RISCV64_AS = "as"; 12 def RISCV64_CC = "cc"; 13 def RISCV64_LD = "ld"; 14 def X86_64_AS = "as"; 15 def X86_64_CC = "cc"; 16 def X86_64_LD = "ld"; 17 18 // TODO: implement cross compiling to other kernels (e.g. linux => freebsd) 19 // TODO: sysroots 20 const arches: [_]build::arch = [ 21 build::arch { 22 name = "aarch64", 23 qbe_name = "arm64", 24 as_cmd = AARCH64_AS, 25 cc_cmd = AARCH64_CC, 26 ld_cmd = AARCH64_LD, 27 }, 28 build::arch { 29 name = "riscv64", 30 qbe_name = "rv64", 31 as_cmd = RISCV64_AS, 32 cc_cmd = RISCV64_CC, 33 ld_cmd = RISCV64_LD, 34 }, 35 build::arch { 36 name = "x86_64", 37 qbe_name = "amd64_sysv", 38 as_cmd = X86_64_AS, 39 cc_cmd = X86_64_CC, 40 ld_cmd = X86_64_LD, 41 }, 42 ]; 43 44 fn set_arch_tags(tags: *[]str, a: *build::arch) void = { 45 merge_tags(tags, "-aarch64-riscv64-x86_64")!; 46 append(tags, a.name); 47 }; 48 49 fn get_arch(name: str) (*build::arch | unknown_arch) = { 50 for (let arch &.. arches) { 51 if (arch.name == name) { 52 return arch; 53 }; 54 }; 55 return name: unknown_arch; 56 };