hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

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 ];