Skip to content

Commit d24da0e

Browse files
committed
riscv : add riscv qemu virt support and fix fs bit error in mstatus
1 parent 485a02f commit d24da0e

20 files changed

+1463
-0
lines changed

cmake/riscv64-unknown-elf.cmake

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Toolchain settings
2+
set(CMAKE_C_COMPILER riscv64-unknown-elf-gcc)
3+
set(CMAKE_CXX_COMPILER riscv64-unknown-elf-g++)
4+
set(AS riscv64-unknown-elf-as)
5+
set(AR riscv64-unknown-elf-ar)
6+
set(OBJCOPY riscv64-unknown-elf-objcopy)
7+
set(OBJDUMP riscv64-unknown-elf-objdump)
8+
set(SIZE riscv64-unknown-elf-size)
9+
10+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
11+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
12+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
13+
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
14+
15+
# this makes the test compiles use static library option so that we don't need to pre-set linker flags and scripts
16+
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
17+
18+
set(CMAKE_C_FLAGS "${CFLAGS}" CACHE INTERNAL "c compiler flags")
19+
set(CMAKE_CXX_FLAGS "${CXXFLAGS}" CACHE INTERNAL "cxx compiler flags")
20+
set(CMAKE_ASM_FLAGS "${ASFLAGS} -D__ASSEMBLER__" CACHE INTERNAL "asm compiler flags")
21+
set(CMAKE_EXE_LINKER_FLAGS "${LDFLAGS}" CACHE INTERNAL "exe link flags")
22+
23+
SET(CMAKE_C_FLAGS_DEBUG "-Og -g -ggdb3" CACHE INTERNAL "c debug compiler flags")
24+
SET(CMAKE_CXX_FLAGS_DEBUG "-Og -g -ggdb3" CACHE INTERNAL "cxx debug compiler flags")
25+
SET(CMAKE_ASM_FLAGS_DEBUG "-g -ggdb3" CACHE INTERNAL "asm debug compiler flags")
26+
27+
SET(CMAKE_C_FLAGS_RELEASE "-O3" CACHE INTERNAL "c release compiler flags")
28+
SET(CMAKE_CXX_FLAGS_RELEASE "-O3" CACHE INTERNAL "cxx release compiler flags")
29+
SET(CMAKE_ASM_FLAGS_RELEASE "" CACHE INTERNAL "asm release compiler flags")

cmake/riscv64_gnu.cmake

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Name of the target
2+
set(CMAKE_SYSTEM_NAME Generic)
3+
set(CMAKE_SYSTEM_PROCESSOR risc-v64)
4+
5+
set(THREADX_ARCH "risc-v64")
6+
set(THREADX_TOOLCHAIN "gnu")
7+
set(ARCH_FLAGS "-g -march=rv64gc -mabi=lp64d -mcmodel=medany")
8+
set(CFLAGS "${ARCH_FLAGS}")
9+
set(ASFLAGS "${ARCH_FLAGS}")
10+
set(LDFLAGS "${ARCH_FLAGS}")
11+
12+
include(${CMAKE_CURRENT_LIST_DIR}/riscv64-unknown-elf.cmake)

ports/risc-v64/gnu/CMakeLists.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
target_sources(${PROJECT_NAME}
3+
PRIVATE
4+
# {{BEGIN_TARGET_SOURCES}}
5+
${CMAKE_CURRENT_LIST_DIR}/src/tx_initialize_low_level.S
6+
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_context_restore.S
7+
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_context_save.S
8+
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_control.S
9+
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_schedule.S
10+
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_stack_build.S
11+
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_system_return.S
12+
${CMAKE_CURRENT_LIST_DIR}/src/tx_timer_interrupt.c
13+
# {{END_TARGET_SOURCES}}
14+
)
15+
16+
target_include_directories(${PROJECT_NAME}
17+
PUBLIC
18+
${CMAKE_CURRENT_LIST_DIR}/inc
19+
)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include "plic.h"
2+
#include "hwtimer.h"
3+
#include "uart.h"
4+
#include <stdint.h>
5+
#include <stddef.h>
6+
7+
void *memset(const void *des, int c,size_t n)
8+
{
9+
if((des == NULL) || n <=0)
10+
return (void*)des;
11+
char* t = (char*)des;
12+
int i;
13+
for(i=0;i<n;i++)
14+
t[i]=c;
15+
return t;
16+
}
17+
18+
19+
int board_init(void)
20+
{
21+
int ret;
22+
ret = plic_init();
23+
if(ret)
24+
return ret;
25+
ret = uart_init();
26+
if(ret)
27+
return ret;
28+
ret = hwtimer_init();
29+
if(ret)
30+
return ret;
31+
return 0;
32+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/bin/bash
2+
3+
pushd ../../../../../
4+
cmake -Bbuild -GNinja -DCMAKE_TOOLCHAIN_FILE=cmake/riscv64_gnu.cmake .
5+
cmake --build ./build/
6+
popd

0 commit comments

Comments
 (0)