aboutsummaryrefslogtreecommitdiff
path: root/rv64cpu/tools/toolchain-riscv64.cmake
blob: c177fda79e0f970454eda22f1f1233856c6ec95b (plain)
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
# ─── RISC-V 64 Bare-Metal Toolchain File ─────────────────────────────────────────
#
# Usage: cmake -B build_sw -DCMAKE_TOOLCHAIN_FILE=tools/toolchain-riscv64.cmake
#

set(CMAKE_SYSTEM_NAME      Generic)
set(CMAKE_SYSTEM_PROCESSOR riscv64)

# ─── Toolchain binaries ─────────────────────────────────────────────────────────
set(CROSS_PREFIX "riscv64-unknown-elf-" CACHE STRING "Cross compiler prefix")

set(CMAKE_C_COMPILER       ${CROSS_PREFIX}gcc)
set(CMAKE_CXX_COMPILER     ${CROSS_PREFIX}g++)
set(CMAKE_ASM_COMPILER     ${CROSS_PREFIX}gcc)
set(CMAKE_OBJCOPY          ${CROSS_PREFIX}objcopy)
set(CMAKE_OBJDUMP          ${CROSS_PREFIX}objdump)
set(CMAKE_SIZE             ${CROSS_PREFIX}size)

# ─── Architecture flags ─────────────────────────────────────────────────────────
set(RISCV_ARCH  "rv64ima"   CACHE STRING "RISC-V ISA string")
set(RISCV_ABI   "lp64"     CACHE STRING "RISC-V ABI")

set(CMAKE_C_FLAGS_INIT     "-march=${RISCV_ARCH} -mabi=${RISCV_ABI} -nostdlib -ffreestanding -fno-builtin -mcmodel=medany")
set(CMAKE_CXX_FLAGS_INIT   "${CMAKE_C_FLAGS_INIT} -fno-exceptions -fno-rtti")
set(CMAKE_ASM_FLAGS_INIT   "-march=${RISCV_ARCH} -mabi=${RISCV_ABI}")

set(CMAKE_EXE_LINKER_FLAGS_INIT "-nostartfiles -static -Wl,--gc-sections")

# ─── Search paths ───────────────────────────────────────────────────────────────
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM  NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY  ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE  ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE  ONLY)

# ─── Disable compiler checks (bare-metal can't run test binaries) ────────────────
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)