Skip to content

Commit

Permalink
Build options for riscv32
Browse files Browse the repository at this point in the history
  • Loading branch information
citizen-stig committed Aug 5, 2024
1 parent 6648126 commit 3769ab9
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions secp256k1-sys/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,38 @@ fn main() {
// just #define it away.
.define("printf(...)", Some(""));

if env::var("CARGO_CFG_TARGET_ARCH").unwrap() == "riscv32" {
const DEFAULT_RISCV_GNU_TOOLCHAIN: &str = "/opt/riscv";
println!("cargo:rerun-if-env-changed=RISCV_GNU_TOOLCHAIN");

let riscv_gnu_toolchain_path = env::var("RISCV_GNU_TOOLCHAIN").unwrap_or_else(|_| {
println!("cargo:warning=Variable RISCV_GNU_TOOLCHAIN unset. Assuming '{DEFAULT_RISCV_GNU_TOOLCHAIN}'");
println!("cargo:warning=Please make sure to build riscv toolchain:");
println!("cargo:warning= git clone https://github.com/riscv-collab/riscv-gnu-toolchain && cd riscv-gnu-toolchain");
println!("cargo:warning= export RISCV_GNU_TOOLCHAIN={DEFAULT_RISCV_GNU_TOOLCHAIN}");
println!("cargo:warning= configure --prefix=\"$RISCV_GNU_TOOLCHAIN\" --with-arch=rv32im --with-abi=ilp32");
println!("cargo:warning= make -j$(nproc)");

// if unset, try the default and fail eventually
DEFAULT_RISCV_GNU_TOOLCHAIN.into()
});

base_config
.compiler("clang")
.no_default_flags(true)
.flag(&format!("--sysroot={riscv_gnu_toolchain_path}/riscv32-unknown-elf"))
.flag(&format!("--gcc-toolchain={riscv_gnu_toolchain_path}"))
.flag("--target=riscv32-unknown-none-elf")
.flag("-march=rv32im")
.flag("-mabi=ilp32")
.flag("-mcmodel=medany")
.flag("-Os")
.flag("-fdata-sections")
.flag("-ffunction-sections")
.flag("-flto")
.target("riscv32-unknown-none-elf");
}

if cfg!(feature = "lowmemory") {
base_config.define("ECMULT_WINDOW_SIZE", Some("4")); // A low-enough value to consume negligible memory
base_config.define("ECMULT_GEN_PREC_BITS", Some("2"));
Expand Down

0 comments on commit 3769ab9

Please sign in to comment.