PACKAGE = com.lumenradio.devops.uart-to-dmx-board
VERSION = B
ARTICLE_NO = 205-1014

VENV := .venv
PYTHON := $(VENV)/bin/python
PIP := $(VENV)/bin/pip

KICADNAME = uart-to-dmx-board

BUILDDIR = build

$(BUILDDIR):
	mkdir -p $(BUILDDIR)

$(BUILDDIR)/$(KICADNAME).pdf: $(KICADNAME).kicad_pcb
	mkdir -p $(BUILDDIR)
	kicad-cli sch export pdf $(KICADNAME).kicad_sch --output $(BUILDDIR)/$(KICADNAME).pdf

$(BUILDDIR)/gerbers: $(KICADNAME).kicad_pcb
	mkdir -p $(BUILDDIR)/gerbers
	kicad-cli pcb export gerbers \
	--output $(BUILDDIR) \
	--layers F.Cu,B.Cu,F.Paste,B.Paste,F.Silkscreen,B.Silkscreen,F.Mask,B.Mask,Edge.Cuts \
	--subtract-soldermask \
	--use-drill-file-origin \
	--precision 6 \
	$(KICADNAME).kicad_pcb
	cp $(BUILDDIR)/$(KICADNAME)-F_Cu.gtl $(BUILDDIR)/gerbers/$(KICADNAME).GTL && \
	cp $(BUILDDIR)/$(KICADNAME)-B_Cu.gbl $(BUILDDIR)/gerbers/$(KICADNAME).GBL && \
	cp $(BUILDDIR)/$(KICADNAME)-F_Silkscreen.gto $(BUILDDIR)/gerbers/$(KICADNAME).GTO && \
	cp $(BUILDDIR)/$(KICADNAME)-B_Silkscreen.gbo $(BUILDDIR)/gerbers/$(KICADNAME).GBO && \
	cp $(BUILDDIR)/$(KICADNAME)-F_Mask.gts $(BUILDDIR)/gerbers/$(KICADNAME).GTS && \
	cp $(BUILDDIR)/$(KICADNAME)-B_Mask.gbs $(BUILDDIR)/gerbers/$(KICADNAME).GBS && \
	cp $(BUILDDIR)/$(KICADNAME)-Edge_Cuts.gm1 $(BUILDDIR)/gerbers/$(KICADNAME).GML && \
	cp $(BUILDDIR)/$(KICADNAME)-F_Paste.gtp $(BUILDDIR)/gerbers/$(KICADNAME)-F_Paste.gbr && \
	cp $(BUILDDIR)/$(KICADNAME)-B_Paste.gbp $(BUILDDIR)/gerbers/$(KICADNAME)-B_Paste.gbr
	kicad-cli pcb export drill \
	--output $(BUILDDIR) \
	--format excellon \
	--drill-origin absolute \
	--excellon-units mm \
	--excellon-zeros-format decimal \
	--excellon-separate-th \
	$(KICADNAME).kicad_pcb
	cp $(BUILDDIR)/$(KICADNAME)-PTH.drl $(BUILDDIR)/gerbers/$(KICADNAME)-PTH.TXT && \
	cp $(BUILDDIR)/$(KICADNAME)-NPTH.drl $(BUILDDIR)/gerbers/$(KICADNAME)-NPTH.TXT

$(BUILDDIR)/$(KICADNAME)_gerbers.zip: $(BUILDDIR)/gerbers
	zip -j $(BUILDDIR)/$(KICADNAME)_gerbers.zip $(BUILDDIR)/gerbers/*


configure-ftdi:
	@if ! [ "$(shell id -u)" = 0 ]; then \
		echo "You need to run this target as root"; \
		exit 1; \
	fi
	@serial=$$(head -c 5 /dev/urandom | base32 | tr -d '=' | cut -c1-8); \
	sed -i "s/^serial=\".*\"/serial=\"$$serial\"/" ftdi-eeprom.conf; \
	echo "Updated serial to $$serial"
	@echo "Attempting to flash the FT231XS chip..."	
	ftdi_eeprom --device i:0x0403:0x6015 --build-eeprom ftdi-eeprom.conf
	ftdi_eeprom --device i:0x0403:0x6015 --flash-eeprom ftdi-eeprom.conf

pdf: $(BUILDDIR)/$(KICADNAME).pdf

drill: $(BUILDDIR)/$(KICADNAME)-PTH.drl

zip: $(BUILDDIR)/$(KICADNAME)_gerbers.zip

.PHONY : clean test check 
clean:
	rm -rf $(BUILDDIR)
	rm -rf $(VENV)
	rm -rf dist

# Create venv
$(VENV)/bin/activate: pyproject.toml
	python3 -m venv $(VENV)
	$(PIP) install --upgrade pip setuptools wheel

dev: venv
	$(PIP) install -e ".[dev]"

dist: dev
	$(PYTHON) -m build

venv: $(VENV)/bin/activate


BLACK_ARGS ?=

black: venv
	@echo "Running black code formatter..."
	$(PYTHON) -m black $(BLACK_ARGS) src tests

check: dist
	$(VENV)/bin/twine check dist/*

test:
	$(PYTHON) -m pytest --cov=src/lr_modbus --cov-report=term-missing

publish-test: check
	@if [ -z "$$TEST_PYPI_TOKEN" ]; then echo "ERROR: set TEST_PYPI_TOKEN"; exit 2; fi
	$(VENV)/bin/twine upload \
		--verbose \
		--repository-url https://test.pypi.org/legacy/ \
		-u __token__ -p $$TEST_PYPI_TOKEN dist/*

publish: check
	@if [ -z "$$PYPI_TOKEN" ]; then echo "ERROR: set PYPI_TOKEN"; exit 2; fi
	$(VENV)/bin/twine upload -u __token__ -p $$PYPI_TOKEN dist/*