aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt58
1 files changed, 58 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..ee1147f
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,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")