From 5e3bcaee08710c307726b1df6878b8c9f259f792 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 17 Apr 2025 10:10:29 -0600 Subject: [PATCH] Add custom target for compiling relibc-freestanding for riscv64gc --- mk/prefix.mk | 1 + targets/README | 3 ++ targets/riscv64gc-unknown-redox.json | 41 ++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 targets/README create mode 100644 targets/riscv64gc-unknown-redox.json diff --git a/mk/prefix.mk b/mk/prefix.mk index 118850143..eac2639eb 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -234,6 +234,7 @@ else export PATH="$(PREFIX_FREESTANDING_PATH):$$PATH" && \ export CARGO="env -u CARGO -u RUSTUP_TOOLCHAIN cargo" && \ export CC_$(subst -,_,$(TARGET))="$(GNU_TARGET)-gcc -isystem $(ROOT)/$@.partial/$(GNU_TARGET)/include" && \ + export RUST_TARGET_PATH="$(ROOT)/targets" && \ $(MAKE) clean && \ $(MAKE) -j 1 all && \ $(MAKE) -j 1 install DESTDIR="$(ROOT)/$@.partial/$(GNU_TARGET)" diff --git a/targets/README b/targets/README new file mode 100644 index 000000000..0b172dc89 --- /dev/null +++ b/targets/README @@ -0,0 +1,3 @@ +This contains a target definition for targets that Redox supports but have not +yet been added to the upstream rust, specifically for compiling relibc in +freestanding mode. diff --git a/targets/riscv64gc-unknown-redox.json b/targets/riscv64gc-unknown-redox.json new file mode 100644 index 000000000..bf46961c4 --- /dev/null +++ b/targets/riscv64gc-unknown-redox.json @@ -0,0 +1,41 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "crt-static-allows-dylibs": true, + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "dynamic-linking": true, + "env": "relibc", + "features": "+m,+a,+f,+d,+c", + "has-rpath": true, + "has-thread-local": true, + "late-link-args": { + "gnu-cc": [ + "-lgcc" + ], + "gnu-lld-cc": [ + "-lgcc" + ] + }, + "linker-flavor": "gnu-cc", + "llvm-abiname": "lp64d", + "llvm-target": "riscv64-unknown-redox", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "redox", + "plt-by-default": false, + "position-independent-executables": true, + "relro-level": "full", + "target-family": [ + "unix" + ], + "target-pointer-width": "64" +}