From 346a91da6d0e704303bdb6c9ee3231a531966f67 Mon Sep 17 00:00:00 2001 From: Slava Krauchanka Date: Fri, 13 Jun 2025 21:16:58 +0200 Subject: [PATCH] added support for more granular RISCV32/64 ISA extensions --- CMakeLists.txt | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 75ece41..961b7f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,10 +42,47 @@ function(_rust_map_target) elseif(CONFIG_RISCV) if(CONFIG_RISCV_ISA_RV64I) # TODO: Should fail if the extensions don't match. - set(RUST_TARGET "riscv64imac-unknown-none-elf" PARENT_SCOPE) + # We have multiple choices, try to pick the best. + # Note that Rust currently only supports "riscv64gc" and "riscv64imac" targets! + set(RUST_TARGET "riscv64") + if(CONFIG_RISCV_ISA_EXT_G) + set(RUST_TARGET "${RUST_TARGET}g") + else() + set(RUST_TARGET "${RUST_TARGET}i") + if(CONFIG_RISCV_ISA_EXT_M) + set(RUST_TARGET "${RUST_TARGET}m") + endif() + if(CONFIG_RISCV_ISA_EXT_A) + set(RUST_TARGET "${RUST_TARGET}a") + endif() + if(CONFIG_RISCV_ISA_EXT_F) + set(RUST_TARGET "${RUST_TARGET}f") + endif() + if(CONFIG_RISCV_ISA_EXT_D) + set(RUST_TARGET "${RUST_TARGET}d") + endif() + endif() + if(CONFIG_RISCV_ISA_EXT_C) + set(RUST_TARGET "${RUST_TARGET}c") + endif() + set(RUST_TARGET "${RUST_TARGET}-unknown-none-elf" PARENT_SCOPE) elseif(CONFIG_RISCV_ISA_RV32I) - # TODO: We have multiple choices, try to pick the best. - set(RUST_TARGET "riscv32i-unknown-none-elf" PARENT_SCOPE) + # We have multiple choices, try to pick the best. + # Note that Rust currently only supports subsets of "riscv32imafc" targets! + set(RUST_TARGET "riscv32i") + if(CONFIG_RISCV_ISA_EXT_M) + set(RUST_TARGET "${RUST_TARGET}m") + endif() + if(CONFIG_RISCV_ISA_EXT_A) + set(RUST_TARGET "${RUST_TARGET}a") + endif() + if(CONFIG_RISCV_ISA_EXT_F) + set(RUST_TARGET "${RUST_TARGET}f") + endif() + if(CONFIG_RISCV_ISA_EXT_C) + set(RUST_TARGET "${RUST_TARGET}c") + endif() + set(RUST_TARGET "${RUST_TARGET}-unknown-none-elf" PARENT_SCOPE) else() message(FATAL_ERROR "Rust: Unsupported riscv ISA") endif()