Blob


1 .SUFFIXES:
2 .SUFFIXES: .c .S .o .elf
4 PREFIX = /usr/local
5 TARGET = riscv64-unknown-linux-musl
6 HOSTOS != if test -e 'config.mk.local'; then echo 'local'; else uname; fi
7 CROSS = ./tools/bin/${TARGET}
8 CONFIG = config.mk.${HOSTOS}
10 include ${CONFIG}
12 COPT = -g -O2
13 CFLAGS = ${CFLAGS_OS} ${COPT} -std=c2x
14 LDFLAGS = ${LDFLAGS_OS} -lpthread
16 OBJ = src/rvemu.o src/ecall.o src/cpu.o src/exec.o
17 T = asm
18 PROGS = examples/test.elf \
19 examples/echo.elf \
20 examples/cat.elf \
21 examples/hello.elf \
22 examples/asm.elf
24 all: rvemu ${PROGS}
26 od: examples/$T.elf
27 ${CROSS}-objdump -d examples/$T.elf | less
29 run: rvemu ${PROGS}
30 mkdir -p rootfs/bin
31 cp -f rvemu rootfs/bin
32 cp -f ${PROGS} rootfs/bin
33 cp -f test.txt rootfs/
34 ${CHROOT} rootfs /bin/rvemu /bin/$T.elf
36 distclean: clean
37 (cd tools; ${MAKE} distclean)
39 clean:
40 rm -f rvemu src/*.o examples/*.elf *.core src/syscalls.h
41 rm -rf rootfs
43 install: rvemu
44 mkdir -p ${DESTDIR}${PREFIX}/bin
45 cp -f rvemu ${DESTDIR}${PREFIX}/bin/
48 rvemu: ${OBJ}
49 ${CC} -o $@ ${OBJ} ${LDFLAGS}
51 src/ecall.o: src/syscalls.h
53 src/syscalls.h: src/syscalls.inc
54 sed 's/^\.set \(SYS_[a-z0-9_]*\), \([0-9]*\)$$/#define \1 \2/' \
55 < src/syscalls.inc > $@
57 .c.o:
58 ${CC} -c -o $@ $< ${CFLAGS}
61 .c.elf:
62 ${CROSS}-gcc -g -o $@ $< -Og
64 .S.elf:
65 ${CROSS}-gcc -g -o $@ $<