aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: ee1147fb7009766443717c78315aa1dc613fc4c0 (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
cmake_minimum_required(VERSION 3.10)
project (ch537)

set (CMAKE_SYSTEM_NAME Generic) # Configure for Bare Metal.
set (CMAKE_SYSTEM_PROCESSOR riscv32)

set (TC_PREFIX riscv32-unknown-elf-)
# set (CMAKE_VERBOSE_MAKEFILE ON)

include_directories(include linker)

file (GLOB SOURCES "src/*.c")
file (GLOB LINKER_SCRIPT "linker/*.ld")

file (REAL_PATH "ch-flash/" CH_FLASH_DIR)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_FLAGS "-march=rv32imac -mabi=ilp32 -lgcc -static -nostartfiles -O -std=gnu99" CACHE INTERNAL "C Compiler options")
set(CMAKE_EXE_LINKER_FLAGS "--cref -static -T ${LINKER_SCRIPT}" CACHE INTERNAL "Linker options")

set (CMAKE_C_COMPILER ${TC_PREFIX}gcc CACHE INTERNAL "C Compiler")
set (CMAKE_OBJCOPY ${TC_PREFIX}objcopy CACHE INTERNAL "Object Copier")
set (CMAKE_EXE_LINKER_FLAGS_RELEASE "" CACHE INTERNAL "Linker options for release build type")

set (CMAKE_C_LINK_EXECUTABLE "${TC_PREFIX}ld <LINK_FLAGS> <OBJECTS> -o <TARGET>")
add_executable(main.elf ${SOURCES})
set_target_properties(main.elf PROPERTIES
    LINK_FLAGS "--nostdlib -e 0")

# 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} ARGS -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/ch-flash
  COMMAND ${CH_FLASH_DIR}/ch-flash -f main.bin
)

# add_custom_target(
#   debug
#   COMMAND "${TC_PREFIX}gdb" -tui -ex "tar ext :3333" -ex "file main.elf")