target.ha (1605B)
1 use hare::module; 2 use hare::module::{tag_mode}; 3 4 type target = struct { 5 name: str, 6 ar_cmd: str, 7 as_cmd: str, 8 cc_cmd: str, 9 ld_cmd: str, 10 qbe_target: str, 11 tags: []module::tag, 12 }; 13 14 fn default_target() *target = { 15 let default = get_target(ARCH); 16 match (default) { 17 case void => 18 abort("Build configuration error - unknown default target"); 19 case let t: *target => 20 return t; 21 }; 22 }; 23 24 fn get_target(name: str) (*target | void) = { 25 for (let i = 0z; i < len(targets); i += 1) { 26 if (targets[i].name == name) { 27 return &targets[i]; 28 }; 29 }; 30 }; 31 32 // TODO: 33 // - Implement cross compiling to other kernels (e.g. Linux => FreeBSD) 34 // - sysroots 35 const targets: [_]target = [ 36 target { 37 name = "aarch64", 38 ar_cmd = AARCH64_AR, 39 as_cmd = AARCH64_AS, 40 cc_cmd = AARCH64_CC, 41 ld_cmd = AARCH64_LD, 42 qbe_target = "arm64", 43 tags = [module::tag { 44 name = "aarch64", 45 mode = tag_mode::INCLUSIVE, 46 }, module::tag { 47 name = PLATFORM, 48 mode = module::tag_mode::INCLUSIVE, 49 }], 50 }, 51 target { 52 name = "riscv64", 53 ar_cmd = RISCV64_AR, 54 as_cmd = RISCV64_AS, 55 cc_cmd = RISCV64_CC, 56 ld_cmd = RISCV64_LD, 57 qbe_target = "rv64", 58 tags = [module::tag { 59 name = "riscv64", 60 mode = tag_mode::INCLUSIVE, 61 }, module::tag { 62 name = PLATFORM, 63 mode = module::tag_mode::INCLUSIVE, 64 }], 65 }, 66 target { 67 name = "x86_64", 68 ar_cmd = X86_64_AR, 69 as_cmd = X86_64_AS, 70 cc_cmd = X86_64_CC, 71 ld_cmd = X86_64_LD, 72 qbe_target = "amd64_sysv", 73 tags = [module::tag { 74 name = "x86_64", 75 mode = tag_mode::INCLUSIVE, 76 }, module::tag { 77 name = PLATFORM, 78 mode = module::tag_mode::INCLUSIVE, 79 }], 80 }, 81 ];