Compare commits

...

5 commits

Author SHA1 Message Date
jakeg00dwin
b7debf7eee Commented out some stuff and removed uneeded lines. 2025-03-07 10:52:05 -08:00
jakeg00dwin
5a8f27912c same 2025-03-07 10:51:53 -08:00
jakeg00dwin
9bec16fe6b added the compile and link options to the main target options. 2025-03-07 10:51:47 -08:00
jakeg00dwin
e8dad084d0 modified the ch32fun cakelists 2025-03-07 10:51:25 -08:00
jakeg00dwin
f95e82b4cf created copy with generic name 2025-03-07 10:51:08 -08:00
5 changed files with 307 additions and 46 deletions

122
build/linker_script.ld Normal file
View file

@ -0,0 +1,122 @@
ENTRY( InterruptVector )
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 16K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 2K
}
SECTIONS
{
.init :
{
_sinit = .;
. = ALIGN(4);
KEEP(*(SORT_NONE(.init)))
. = ALIGN(4);
_einit = .;
} >FLASH AT>FLASH
.text :
{
. = ALIGN(4);
*(.text)
*(.text.*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.t.*)
. = ALIGN(4);
} >FLASH AT>FLASH
.fini :
{
KEEP(*(SORT_NONE(.fini)))
. = ALIGN(4);
} >FLASH AT>FLASH
PROVIDE( _etext = . );
PROVIDE( _eitcm = . );
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH AT>FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH AT>FLASH
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH AT>FLASH
.ctors :
{
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
} >FLASH AT>FLASH
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
} >FLASH AT>FLASH
.dalign :
{
. = ALIGN(4);
PROVIDE(_data_vma = .);
} >RAM AT>FLASH
.dlalign :
{
. = ALIGN(4);
PROVIDE(_data_lma = .);
} >FLASH AT>FLASH
.data :
{
. = ALIGN(4);
__global_pointer$ = . + 0x3fc;
*(.gnu.linkonce.r.*)
*(.data .data.*)
*(.gnu.linkonce.d.*)
. = ALIGN(8);
*(.sdata .sdata.*)
*(.sdata2*)
*(.gnu.linkonce.s.*)
. = ALIGN(8);
*(.srodata.cst16)
*(.srodata.cst8)
*(.srodata.cst4)
*(.srodata.cst2)
*(.srodata .srodata.*)
. = ALIGN(4);
PROVIDE( _edata = .);
} >RAM AT>FLASH
.bss :
{
. = ALIGN(4);
PROVIDE( _sbss = .);
*(.sbss*)
*(.gnu.linkonce.sb.*)
*(.bss*)
*(.gnu.linkonce.b.*)
*(COMMON*)
. = ALIGN(4);
PROVIDE( _ebss = .);
} >RAM AT>FLASH
PROVIDE( _end = _ebss);
PROVIDE( end = . );
PROVIDE( _eusrstack = ORIGIN(RAM) + LENGTH(RAM));
/DISCARD/ : {
*(.note .note.*)
*(.eh_frame .eh_frame.*)
*(.comment .comment.*)
*(.ARM.extab* .gnu.linkonce.armextab.*)
*(.ARM.exidx*)
}
}

View file

@ -33,8 +33,7 @@ if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "FreeBSD")
set(CMAKE_C_COMPILER riscv32-unknown-elf-gcc)
set(CMAKE_CXX_COMPILER riscv32-unknown-elf-g++)
set(CMAKE_FIND_ROOT_PATH /usr/local/riscv/)
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --sysroot=${NEWLIB}")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --sysroot=${NEWLIB}")
# Without these two lines it freaks out.
set(CMAKE_C_STANDARD_COMPUTED_DEFAULT GNU)
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT GNU)
@ -44,6 +43,8 @@ elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux")
set(NEWLIB /opt/riscv/riscv32-unknown-elf/include)
set(CMAKE_C_COMPILER riscv32-unknown-elf-gcc)
set(CMAKE_CXX_COMPILER riscv32-unknown-elf-g++)
# Without these two lines it freaks out.
set(CMAKE_C_STANDARD_COMPUTED_DEFAULT GNU)
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT GNU)
else()
@ -67,14 +68,10 @@ endif()
# `/inc/funconfig.h` file.
# Specify the exact Chip
#set(MCU CH32V003J4M6)
#set(MCU CH32V003A4M6)
#set(MCU CH32V003F4P6)
#set(MCU CH32V003F4U6)
set(MCU CH32V003)
#Define it for the preprocessor as well.
add_compile_definitions(${MCU})
add_compile_definitions(${MCU}=1)
#add_definitions(-D${MCU})
@ -113,9 +110,7 @@ set(C_FLAGS_ARCH "\
#-------------------
# I'm appending to the existing cflags from the cmake file in the root dir.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
${C_FLAGS_ARCH} \
${OBJECT_GEN_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${C_FLAGS_ARCH} ${OBJECT_GEN_FLAGS}")
#-------------------
@ -128,7 +123,8 @@ ${OBJECT_GEN_FLAGS}")
#-------------------
#set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/${LINKER_SCRIPT})
set(LINKER_SCRIPT "./src/ch32v003.ld")
#set(LINKER_SCRIPT "./src/ch32v003.ld")
set(LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/src/linker_script.ld")
#set(LD_FLAGS "-lgcc")
set(LD_FLAGS " \
@ -136,8 +132,21 @@ set(LD_FLAGS " \
-Wl,-Map=${PROJECT_NAME}.map \
-lgcc \
-T ${LINKER_SCRIPT} \
-Wl,--gc-sections")
-Wl,--gc-sections"
)
#Allowing this line causes it to attempt compiler tests and if
# tosses errors.
#set(CMAKE_EXE_LINKER_FLAGS_INIT "${LD_FLAGS}")
#target_link_options(my_project PRIVATE -static -nostartfiles -T linker_script.ld)
#set(CMAKE_EXE_LINKER_FLAGS_INIT "${LD_FLAGS}")
#set(LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/src/linker_script.ld")
#set(LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/linker_script.ld")
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -T ${LINKER_SCRIPT}")
#-------------------
@ -149,8 +158,7 @@ message(STATUS "CMAKE_INCLUDE_PATH: ${CMAKE_INCLUDE_PATH}")
message(STATUS "CMAKE_FIND_ROOT_PATH: ${CMAKE_FIND_ROOT_PATH}")
# Unset all cache
unset(SEMIHOSTING)
unset(CMAKE_TOOLCHAIN_FILE)
unset(CMAKE_BUILD_TYPE)
#unset(SEMIHOSTING)
#unset(CMAKE_TOOLCHAIN_FILE)
#unset(CMAKE_BUILD_TYPE)

View file

@ -1,19 +1,3 @@
# Compiler flags
add_compile_options(
-g
-Os
-flto
-ffunction-sections
-fdata-sections
-fmessage-length=0
-msmall-data-limit=8
-march=rv32ec
-mabi=ilp32e
-DCH32V003=1
-static-libgcc
-nostdlib
-Wall
)
add_executable(${PROJECT_NAME}
main.c
@ -30,11 +14,35 @@ target_link_libraries(${PROJECT_NAME}
#${CMAKE_SOURCE_DIR}/libgcc.a
)
target_link_options(${PROJECT_NAME} PRIVATE -static-libgcc)
target_link_options(${PROJECT_NAME} PRIVATE
-Wl,--print-memory-usage
-Wl,-Map=${PROJECT_NAME}.map
-lgcc
-Wl,--gc-sections
-T ${CMAKE_SOURCE_DIR}/src/linker_script.ld
)
target_compile_options(${PROJECT_NAME} PRIVATE
-g
-Os
-flto
-ffunction-sections
-fdata-sections
-fmessage-length=0
-msmall-data-limit=8
-march=rv32ec
-mabi=ilp32e
-DCH32V003=1
-static-libgcc
-nostdlib
-Wall
)
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".elf")
#target_link_options(${PROJECT_NAME} PRIVATE -static -nostartfiles -T "./linker_script.ld")
# The other "targets" are size, upload, debug, production, etc
#if(NOT TARGET size)

View file

@ -1,5 +1,16 @@
# Compiler flags
add_compile_options(
add_library(ch32fun OBJECT
ch32fun.c
)
target_include_directories(ch32fun PUBLIC
${CMAKE_CURRENT_LIST_DIR}
${CMAKE_SOURCE_DIR}/inc
${CMAKE_SOURCE_DIR}/src/extralibs
${CMAKE_SOURCE_DIR}/src/ch32fun
)
target_compile_options(ch32fun PRIVATE
-g
-Os
-flto
@ -15,17 +26,7 @@ add_compile_options(
-Wall
)
add_library(ch32fun OBJECT
ch32fun.c
)
target_include_directories(ch32fun PUBLIC
${CMAKE_CURRENT_LIST_DIR}
${CMAKE_SOURCE_DIR}/inc
${CMAKE_SOURCE_DIR}/src/extralibs
${CMAKE_SOURCE_DIR}/src/ch32fun
)
#target_link_libraries(ch32fun PRIVATE
# ${CMAKE_SOURCE_DIR}/libgcc.a
#)

122
src/linker_script.ld Normal file
View file

@ -0,0 +1,122 @@
ENTRY( InterruptVector )
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 16K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 2K
}
SECTIONS
{
.init :
{
_sinit = .;
. = ALIGN(4);
KEEP(*(SORT_NONE(.init)))
. = ALIGN(4);
_einit = .;
} >FLASH AT>FLASH
.text :
{
. = ALIGN(4);
*(.text)
*(.text.*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.t.*)
. = ALIGN(4);
} >FLASH AT>FLASH
.fini :
{
KEEP(*(SORT_NONE(.fini)))
. = ALIGN(4);
} >FLASH AT>FLASH
PROVIDE( _etext = . );
PROVIDE( _eitcm = . );
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH AT>FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH AT>FLASH
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH AT>FLASH
.ctors :
{
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
} >FLASH AT>FLASH
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
} >FLASH AT>FLASH
.dalign :
{
. = ALIGN(4);
PROVIDE(_data_vma = .);
} >RAM AT>FLASH
.dlalign :
{
. = ALIGN(4);
PROVIDE(_data_lma = .);
} >FLASH AT>FLASH
.data :
{
. = ALIGN(4);
__global_pointer$ = . + 0x3fc;
*(.gnu.linkonce.r.*)
*(.data .data.*)
*(.gnu.linkonce.d.*)
. = ALIGN(8);
*(.sdata .sdata.*)
*(.sdata2*)
*(.gnu.linkonce.s.*)
. = ALIGN(8);
*(.srodata.cst16)
*(.srodata.cst8)
*(.srodata.cst4)
*(.srodata.cst2)
*(.srodata .srodata.*)
. = ALIGN(4);
PROVIDE( _edata = .);
} >RAM AT>FLASH
.bss :
{
. = ALIGN(4);
PROVIDE( _sbss = .);
*(.sbss*)
*(.gnu.linkonce.sb.*)
*(.bss*)
*(.gnu.linkonce.b.*)
*(COMMON*)
. = ALIGN(4);
PROVIDE( _ebss = .);
} >RAM AT>FLASH
PROVIDE( _end = _ebss);
PROVIDE( end = . );
PROVIDE( _eusrstack = ORIGIN(RAM) + LENGTH(RAM));
/DISCARD/ : {
*(.note .note.*)
*(.eh_frame .eh_frame.*)
*(.comment .comment.*)
*(.ARM.extab* .gnu.linkonce.armextab.*)
*(.ARM.exidx*)
}
}