You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.1 KiB
80 lines
2.1 KiB
.PHONY: \
|
|
all rb gdb \
|
|
lall lrb lgdb \
|
|
clean flash openocd shell wipe
|
|
|
|
DOCKER_IMAGE ?= riscv-ubuntu
|
|
DOCKER_CMD ?= docker run --rm -it -v ${PWD}:/project
|
|
DOCKER_TEMP ?= docker-temp-$(shell date +%s)
|
|
LOCALHOST ?= localhost
|
|
|
|
MESON_FILE := meson.build
|
|
MESON_CROSS ?= meson_cross_riscv.txt
|
|
MESON_DIR ?= mbuild
|
|
|
|
OPENOCD_DIR ?= $(dir $(shell command -v openocd))/..
|
|
|
|
TRANSLATE_COMPILE_COMMANDS := \
|
|
sed -i -e "s%"'"'"/project/%"'"'"$$(readlink -f .)/%" ${MESON_DIR}/compile_commands.json ; \
|
|
sed -i -e "s%riscv32-unknown-elf-gcc %\0 -isystem=$$(readlink -f ./.docker_includes) %" ${MESON_DIR}/compile_commands.json
|
|
|
|
all: .have_docker
|
|
${DOCKER_CMD} ${DOCKER_IMAGE} make lall
|
|
${TRANSLATE_COMPILE_COMMANDS}
|
|
wipe: clean all
|
|
|
|
lall: ${MESON_DIR}
|
|
meson compile -C ${MESON_DIR}
|
|
|
|
${MESON_DIR}: ${MESON_FILE} ${MESON_CROSS}
|
|
meson setup $@ --cross-file ${MESON_CROSS}
|
|
|
|
rb: .have_docker
|
|
${DOCKER_CMD} ${DOCKER_IMAGE} make lrb
|
|
${TRANSLATE_COMPILE_COMMANDS}
|
|
|
|
lrb:
|
|
rm -rf ${MESON_DIR}
|
|
meson setup ${MESON_DIR} --cross-file ${MESON_CROSS}
|
|
meson compile -C ${MESON_DIR}
|
|
|
|
clean:
|
|
rm -rf ${MESON_DIR}
|
|
rm -f .have_docker
|
|
rm -rf .docker_includes
|
|
|
|
shell: .have_docker
|
|
${DOCKER_CMD} ${DOCKER_IMAGE} bash
|
|
|
|
flash: all
|
|
${OPENOCD_DIR}/bin/openocd \
|
|
-s ${OPENOCD_DIR}/scripts \
|
|
-f ./wch-riscv.cfg \
|
|
-c init -c halt \
|
|
-c "program $(shell readlink -f ${MESON_DIR}/firmware-for-make.hex) verify reset" \
|
|
-c resume -c exit
|
|
|
|
openocd:
|
|
${OPENOCD_DIR}/bin/openocd \
|
|
-s ${OPENOCD_DIR}/scripts \
|
|
-f ./wch-riscv.cfg \
|
|
-c init
|
|
|
|
gdb: .have_docker
|
|
${DOCKER_CMD} --add-host=host.docker.internal:host-gateway \
|
|
-e COLUMNS=$(shell tput cols) -e LINES=$(shell tput lines) -e TERM \
|
|
${DOCKER_IMAGE} make LOCALHOST=host.docker.internal lgdb
|
|
|
|
lgdb:
|
|
cd ${MESON_DIR} && \
|
|
riscv32-unknown-elf-gdb ./firmware-for-make.elf -ex "tar ext ${LOCALHOST}:3333"
|
|
|
|
.have_docker: Dockerfile
|
|
docker build -t ${DOCKER_IMAGE} \
|
|
--build-arg uid=$(shell id -u) --build-arg gid=$(shell id -g) \
|
|
.
|
|
docker create --name ${DOCKER_TEMP} ${DOCKER_IMAGE}
|
|
docker cp ${DOCKER_TEMP}:/usr/local/riscv32-unknown-elf/include .docker_includes
|
|
docker rm ${DOCKER_TEMP}
|
|
touch $@
|