summaryrefslogtreecommitdiffstats
path: root/debug/risc-v-gsp-rm-vm/firmware/uproc_demo/Makefile
blob: f390f08e694152c261e876e0df4cd4e1356bd82d (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
# risc-v-gsp-rm-debugger uproc demo firmware (RISC-V 64, bare metal)
#
# Uses clang + lld (no riscv64 GCC required):
#   CC=clang, LD=ld.lld (absolute path to llvm-18 lld by default).
# Override with: make CC=... LLD=...

# `?=` does not override make's built-in CC=cc, so choose clang explicitly;
# a command-line `make CC=...` still wins.
CC      := clang
LLD     ?= $(shell command -v ld.lld 2>/dev/null || echo /usr/lib/llvm-18/bin/ld.lld)
BUILD   := build
TARGET  := $(BUILD)/uproc_demo.elf

CFLAGS  := --target=riscv64-unknown-elf -march=rv64imac -mabi=lp64 \
           -mcmodel=medany -mno-relax -ffreestanding -nostdlib -fno-builtin \
           -fno-stack-protector -O2 -Wall -Wextra -I.
LDFLAGS := --ld-path=$(LLD) -nostdlib -static -Wl,-T,linker.ld -Wl,--no-relax
SRCS    := start.S main.c

.PHONY: all clean dump

all: $(TARGET)

$(TARGET): $(SRCS) linker.ld ge_uart.h
	@mkdir -p $(BUILD)
	$(CC) $(CFLAGS) $(SRCS) $(LDFLAGS) -o $@
	@echo "built $@"

dump: $(TARGET)
	@llvm-objdump-18 -d --no-show-raw-insn $(TARGET) | head -80 2>/dev/null || \
	  objdump -d $(TARGET) | head -80

clean:
	rm -rf $(BUILD)