aboutsummaryrefslogtreecommitdiff
path: root/rv64cpu/sw/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'rv64cpu/sw/CMakeLists.txt')
-rw-r--r--rv64cpu/sw/CMakeLists.txt71
1 files changed, 71 insertions, 0 deletions
diff --git a/rv64cpu/sw/CMakeLists.txt b/rv64cpu/sw/CMakeLists.txt
new file mode 100644
index 0000000..c43580f
--- /dev/null
+++ b/rv64cpu/sw/CMakeLists.txt
@@ -0,0 +1,71 @@
+# ─── Software Build (Bare-Metal) ─────────────────────────────────────────────────
+#
+# This CMakeLists.txt is only included when BUILD_SW=ON and requires
+# the RISC-V cross-compilation toolchain:
+#
+# cmake -B build_sw -DBUILD_SW=ON \
+# -DCMAKE_TOOLCHAIN_FILE=tools/toolchain-riscv64.cmake
+#
+# ─────────────────────────────────────────────────────────────────────────────────
+
+enable_language(ASM)
+
+set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/common/link.ld)
+set(STARTUP_SRC ${CMAKE_CURRENT_SOURCE_DIR}/common/start.S)
+
+# ─── Helper: create a bare-metal firmware target ─────────────────────────────────
+function(add_firmware)
+ cmake_parse_arguments(FW "" "NAME" "SOURCES" ${ARGN})
+
+ add_executable(${FW_NAME}.elf
+ ${STARTUP_SRC}
+ ${FW_SOURCES}
+ )
+
+ target_include_directories(${FW_NAME}.elf PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}/common
+ )
+
+ target_link_options(${FW_NAME}.elf PRIVATE
+ -T${LINKER_SCRIPT}
+ -Wl,-Map=${FW_NAME}.map
+ )
+
+ # Generate .bin
+ add_custom_command(TARGET ${FW_NAME}.elf POST_BUILD
+ COMMAND ${CMAKE_OBJCOPY} -O binary
+ ${FW_NAME}.elf ${FW_NAME}.bin
+ COMMENT "Generating ${FW_NAME}.bin"
+ )
+
+ # Generate .hex (for $readmemh)
+ add_custom_command(TARGET ${FW_NAME}.elf POST_BUILD
+ COMMAND ${CMAKE_OBJCOPY} -O verilog
+ ${FW_NAME}.elf ${FW_NAME}.hex
+ COMMENT "Generating ${FW_NAME}.hex"
+ )
+
+ # Print size
+ add_custom_command(TARGET ${FW_NAME}.elf POST_BUILD
+ COMMAND ${CMAKE_SIZE} ${FW_NAME}.elf
+ )
+endfunction()
+
+# ═══════════════════════════════════════════════════════════════════════════════════
+# Firmware Targets — uncomment as you create the source files
+# ═══════════════════════════════════════════════════════════════════════════════════
+#
+# add_firmware(
+# NAME hello_uart
+# SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/baremetal/hello_uart/main.c
+# )
+#
+# add_firmware(
+# NAME timer_irq
+# SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/baremetal/timer_irq/main.c
+# )
+#
+# add_firmware(
+# NAME cache_test
+# SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/baremetal/cache_test/main.c
+# )