diff --git a/CMakeLists.txt b/CMakeLists.txt index 266d4e54433..dc4b3c7e8f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,6 +89,8 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux") MESSAGE("TOOLCHAIN = RISCV_GNU") elseif(TOOLCHAIN STREQUAL "RISCV64_GCC") MESSAGE("TOOLCHAIN = RISCV64_GCC") + elseif(TOOLCHAIN STREQUAL "RISCV_NONE") + MESSAGE("TOOLCHAIN = RISCV_NONE") elseif(TOOLCHAIN STREQUAL "RISCV_XPACK") MESSAGE("TOOLCHAIN = RISCV_XPACK") elseif(TOOLCHAIN STREQUAL "ARC_GCC") @@ -417,6 +419,30 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux") SET(CMAKE_C_LINK_EXECUTABLE " -o -Wl,--start-group -Wl,--end-group") + elseif(TOOLCHAIN STREQUAL "RISCV_NONE") + SET(CMAKE_C_COMPILER riscv64-elf-gcc) + ADD_COMPILE_OPTIONS(-nostdlib -lgcc) + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + ADD_COMPILE_OPTIONS(-g) + endif() + + if(ARCH STREQUAL "riscv32") + ADD_COMPILE_OPTIONS(-march=rv32imac_zicsr -mabi=ilp32) + elseif(ARCH STREQUAL "riscv64") + ADD_COMPILE_OPTIONS(-march=rv64imac_zicsr -mabi=lp64) + else() + ADD_COMPILE_OPTIONS(-march=error -mabi=error) + endif() + + SET(CMAKE_AR riscv64-elf-ar) + + SET(CMAKE_LINKER riscv64-elf-gcc) + SET(CMAKE_EXE_LINKER_FLAGS "-no-pie" ) + + SET(MBEDTLS_FLAGS -nostdlib -lgcc) + + SET(CMAKE_C_LINK_EXECUTABLE " -o -Wl,--start-group -Wl,--end-group") + elseif(TOOLCHAIN STREQUAL "RISCV_XPACK") SET(CMAKE_C_COMPILER riscv-none-elf-gcc) SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") diff --git a/doc/build.md b/doc/build.md index fd67e15b8aa..6354667e5d1 100644 --- a/doc/build.md +++ b/doc/build.md @@ -291,3 +291,15 @@ Unit tests can be disable by adding -DDISABLE_TESTS=1 to CMake. ```shell -DDISABLE_TESTS=1 ``` + +### Embedded builds for RISC-V + +The libspdm libraries can be build along with mbedtls to target an embedded +environment. You can then use newlibc to create final binaries linking with +libspdm and mbedtls + +To build libspdm with mbedtls for RISC-V 32-bit run the following + +``` +cmake -DARCH=riscv32 -DTOOLCHAIN=RISCV_NONE -DTARGET=Debug -DCRYPTO=mbedtls -DDISABLE_TESTS=1 .. +```