DCK=podman
IMAGE_NAME=gowin
WORKDIR=.

DCK_VOLUMES=-v $(WORKDIR):/work
DCK_RUN=$(DCK) run $(DCK_VOLUMES) $(IMAGE_NAME)
DCK_RUN_IT=$(DCK) run $(DCK_VOLUMES) -it $(IMAGE_NAME)

RTL_DIR=RTL/
RTL_SV=$(shell find $(RTL_DIR) -name "*.sv")
RTL_SVV = $(patsubst %.sv,%.v,$(RTL_SV))
RTL_SOURCE=$(RTL_SVV) $(shell find $(RTL_DIR) -name "*.v")

DEVICE_PATH=$(shell lsusb | grep "0403:6010" | sed -E "s/Bus ([0-9]{3}) Device ([0-9]{3}).*/\/dev\/bus\/usb\/\1\/\2/g")
DCK_DEVICES=--device $(DEVICE_PATH)

.PHONY: build_image bash clean

## Build the container
build_image:
	$(DCK) build -t $(IMAGE_NAME) .

## Get a bash shell inside the container
bash:
	$(DCK_RUN_IT) /bin/bash

gw_sh:
	$(DCK_RUN_IT) gw_sh

impl/pnr/build.fs: $(RTL_SVV) build.tcl
	$(DCK_RUN) "RTL_FILES=\"$(shell find $(RTL_DIR) -name *.v)\" gw_sh build.tcl"

flash: impl/pnr/build.fs
	if [ -z "$(DEVICE_PATH)" ]; then \
		echo "Device not found."; \
	else \
		$(DCK) run --privileged --device /dev/bus/usb:/dev/bus/usb $(DCK_VOLUMES) gowin "openFPGALoader impl/pnr/build.fs"; \
	fi

%.v: %.sv
	$(DCK_RUN) "sv2v --write=adjacent $<"

clean: 
	rm -rf $(RTL_SVV)
	rm -rf impl

