blob: 1fdfa588b1360591f848dfef142f4fa23831b8e4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
cmake_minimum_required(VERSION 3.10)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(TC_PREFIX riscv32-picolibc-elf-)
# Set compiler and tools
set(CMAKE_C_COMPILER "${TC_PREFIX}gcc" CACHE INTERNAL "C Compiler")
set(CMAKE_OBJCOPY "${TC_PREFIX}objcopy" CACHE INTERNAL "Object Copier")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
file(REAL_PATH "stubs/libgloss_stub.c" LIBGLOSS_STUB)
# Configure for Bare Metal.
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR riscv32)
include(cmake/fiddle.cmake)
project (ch537 LANGUAGES C ASM)
# Set compiler and linker flags
file(GLOB LINKER_SCRIPT "linker/*.ld")
set(CMAKE_C_FLAGS "-march=rv32imac_zicsr -mabi=ilp32 -lgcc -static -O -std=gnu99" CACHE INTERNAL "C Compiler options")
set(CMAKE_ASM_FLAGS "-march=rv32imac_zicsr -mabi=ilp32 -lgcc -static -O -std=gnu99" CACHE INTERNAL "C Compiler options")
set(CMAKE_EXE_LINKER_FLAGS "-static -L ${CMAKE_BINARY_DIR}/lib -lmain -T ${LINKER_SCRIPT}" CACHE INTERNAL "Linker options")
include_directories(include linker ${CMAKE_BINARY_DIR}/generated/fdl)
file(GLOB_RECURSE SOURCES "src/*.c" "src/*.s")
message("Sources ${SOURCES}")
file(REAL_PATH "ch-flash/" CH_FLASH_DIR)
add_library(libmain STATIC ${SOURCES})
set_target_properties(libmain PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
OUTPUT_NAME main
)
add_library(libgloss_stub STATIC ${LIBGLOSS_STUB})
set_target_properties(libgloss_stub PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
OUTPUT_NAME gloss
)
add_dependencies(libmain fdl_headers)
set(fdl_headers)
file(GLOB_RECURSE fdl_files "${CMAKE_SOURCE_DIR}/fdl/*.fdl")
fiddle_sources(fdl_headers "${fdl_files}")
add_custom_target( fdl_headers DEPENDS ${fdl_headers})
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/main.elf
DEPENDS libmain libgloss_stub
COMMENT "Link main.elf"
COMMAND ${TC_PREFIX}gcc -nostartfiles -lgcc
-static -L ${CMAKE_BINARY_DIR}/lib -lmain -T ${LINKER_SCRIPT}
-o ${CMAKE_BINARY_DIR}/main.elf
${CMAKE_BINARY_DIR}/lib/libmain.a
)
# Generates the binary with objcopy.
add_custom_command(
OUTPUT main.bin
DEPENDS ${CMAKE_BINARY_DIR}/main.elf
COMMENT "objcopy -O binary main.elf main.bin"
COMMAND ${CMAKE_OBJCOPY} -O binary main.elf main.bin
)
add_custom_command(
OUTPUT objdump.txt
DEPENDS main.elf
COMMAND ${TC_PREFIX}objdump -D main.elf > objdump.txt
)
add_custom_target(main_bin ALL DEPENDS main.bin objdump.txt)
# Generates the flash binary
add_custom_command(
OUTPUT ${CH_FLASH_DIR}/ch-flash
COMMAND cd ${CH_FLASH_DIR} && make
)
add_custom_target(
flash
DEPENDS main.bin ${CH_FLASH_DIR}/ch-flash
COMMAND ${CH_FLASH_DIR}/ch-flash -f main.bin
)
# Uncomment to add debugging support
# add_custom_target(
# debug
# COMMAND "${TC_PREFIX}gdb" -tui -ex "tar ext :3333" -ex "file main.elf"
# )
|