blob: f406a526a02464b6ad05614c1f3d26cd8974961e (
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
|
# green-eye 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)
|