blob: b8c26a3bc34e1ea389cc0c83bd378d99dcef8575 (
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
|
cmake_minimum_required(VERSION 3.10)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
project (ch537)
# Configure for Bare Metal.
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR riscv32)
set(TC_PREFIX riscv32-unknown-elf-)
include_directories(include linker)
file(GLOB SOURCES "src/*.c")
file(GLOB LINKER_SCRIPT "linker/*.ld")
file(REAL_PATH "ch-flash/" CH_FLASH_DIR)
# 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)
# Set compiler and linker flags
set(CMAKE_C_FLAGS "-ffreestanding -march=rv32imac -mabi=ilp32 -lgcc -static -nostartfiles -O -std=gnu99" CACHE INTERNAL "C Compiler options")
set(CMAKE_EXE_LINKER_FLAGS "--xref -static -T ${LINKER_SCRIPT}" CACHE INTERNAL "Linker options")
# Add executable with custom linking commands
add_executable(main.elf ${SOURCES})
# Replace default link command to use `ld` directly without `-Wl,` prefixes.
set_target_properties(main.elf PROPERTIES
LINKER_LANGUAGE C
LINK_FLAGS "-nostdlib -e 0"
# Custom linking command
CMAKE_C_LINK_EXECUTABLE "${TC_PREFIX}ld <LINK_FLAGS> <OBJECTS> -o <TARGET> ${CMAKE_EXE_LINKER_FLAGS}"
)
# Generates the binary with objcopy.
add_custom_command(
OUTPUT main.bin
DEPENDS 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"
# )
|