board/Makefile

101 lines
3.9 KiB
Makefile
Raw Permalink Normal View History

# project file name (use for schematic and board layout)
NAME ?= template
2023-02-18 13:34:32 +01:00
SUBSHEET ?=
# path to KiCad CLI
2023-03-30 11:37:22 +02:00
KICAD = kicad-cli
# path to qeda
QEDA := qeda
2023-03-30 22:11:15 +02:00
# path to KiBOM
2023-11-30 18:23:08 +01:00
KIBOM := kibom
2022-08-10 17:43:30 +02:00
# path to InteractiveHtmlBom
2023-03-30 11:38:14 +02:00
IBOMGEN := ~/.local/share/kicad/7.0/3rdparty/plugins/org_openscopeproject_InteractiveHtmlBom/generate_interactive_bom.py
# read project version
VERSION := $(shell cat version)
# current date for stamping output
DATE = $(shell date +%Y-%m-%d)
2022-07-04 10:17:51 +02:00
# revision based on number of changes on schematic or board layout
REVISION := $(shell git log --pretty=oneline "${NAME}.kicad_sch" "${NAME}.kicad_pcb" | wc -l)
# generate file with version information
VERSIONED_EXT = kicad_sch kicad_pcb kicad_pro json
define version_rule
%.versioned.$1: %.$1
cp $$< $$@
sed --in-place 's/\$$$$version\$$$$/${VERSION}/g' $$@
sed --in-place 's/\$$$$date\$$$$/${DATE}/g' $$@
sed --in-place 's/\$$$$revision\$$$$/${REVISION}/g' $$@
2023-02-18 13:34:32 +01:00
sed --in-place 's/\.kicad_sch/.versioned.kicad_sch/g' $$@
endef
$(foreach EXT,$(VERSIONED_EXT),$(eval $(call version_rule,$(EXT))))
2023-02-18 13:34:32 +01:00
VERSIONED_SHEET = $(foreach SHEET,$(NAME) $(SUBSHEET),$(SHEET).versioned.kicad_sch)
2022-08-10 14:45:31 +02:00
FABRICATION_DIR := fabrication
IBOM := ${FABRICATION_DIR}/ibom.html
2023-11-30 18:22:11 +01:00
all: $(VERSIONED_SHEET) ${NAME}.sch.pdf ${NAME}.brd-top.png ${NAME}.brd-bot.png ${NAME}.bom.csv ${NAME}.3d.step fab
2022-08-10 14:45:31 +02:00
fab: ${FABRICATION_DIR} ${IBOM}
# generate fabrication files (gerbers/drill/BoM/PnP)
${FABRICATION_DIR}: ${NAME}.versioned.kicad_sch ${NAME}.versioned.kicad_pcb
2023-10-15 07:36:03 +02:00
kikit fab jlcpcb --no-drc --assembly --field JLCPCB,LCSC --schematic $^ $@
# generate fabrication files (gerbers/drill/uncorrected PnP)
#${FABRICATION_DIR}: ${NAME}.versioned.kicad_pcb
# mkdir -p ${FABRICATION_DIR}
# $(KICAD) pcb export gerbers --output ${FABRICATION_DIR} $<
# $(KICAD) pcb export drill --output ${FABRICATION_DIR}/ $<
# $(KICAD) pcb export pos --output ${FABRICATION_DIR}/${NAME}.versioned.pos $<
2022-08-10 14:45:31 +02:00
# generate interactive BoM
${IBOM}: ${NAME}.versioned.kicad_pcb
2023-03-30 11:38:14 +02:00
python $(IBOMGEN) --no-browser --dest-dir `dirname $@` --name-format `basename $@ ".html"` --show-fields "Value" $< &>/dev/null
# generate symbols and footprints from parts
lib:
$(QEDA) generate qeda
# generate printable version (PDF) of schematic
%.sch.pdf: %.versioned.kicad_sch %.versioned.kicad_pro
$(KICAD) sch export pdf --output $@ $<
# generate render from layout (top side)
%.brd-top.png: %.versioned.kicad_pcb
pcbdraw plot --silent --no-components --dpi 600 --side front $< $@
# generate render from layout (bottom side)
%.brd-bot.png: %.versioned.kicad_pcb
pcbdraw plot --silent --no-components --dpi 600 --side back $< $@
# export Bill of Material (as CSV)
2023-02-06 12:44:40 +01:00
%.bom.xml: %.versioned.kicad_sch %.versioned.kicad_pro
$(KICAD) sch export python-bom --output $@ $<
2023-11-30 18:22:11 +01:00
# export 3D model
%.3d.step: %.versioned.kicad_pcb
$(KICAD) pcb export step --output $@ $<
2023-02-06 12:44:40 +01:00
# export Bill of Material (as CSV)
%.bom.csv: %.bom.xml
2023-11-30 18:23:08 +01:00
$(KIBOM) $< $@
# generate panel
PANEL_DIR := panel
panel: panel.kicad_pcb
panel.kicad_pcb: ${NAME}.versioned.kicad_pcb ${NAME}.versioned.kicad_pro ${NAME}.versioned.kicad_sch ${NAME}.versioned.json
kikit panelize -p ${NAME}.versioned.json ${NAME}.versioned.kicad_pcb $@
sed --in-place 's/\"missing_courtyard\": \"warning\"/\"missing_courtyard\": \"ignore\"/g' $(patsubst %.kicad_pcb,%.kicad_pro,$@) # the mouse bites don't have a courtyard
kikit fab jlcpcb --assembly --missingError --field JLCPCB,LCSC --schematic ${NAME}.versioned.kicad_sch $@ ${PANEL_DIR}
2022-07-13 11:10:21 +02:00
pcbdraw --silent $@ --dpi 600 panel.brd-top.png
pcbdraw --silent $@ --dpi 600 --back panel.brd-bot.png
clean:
rm -f $(foreach EXT,$(VERSIONED_EXT),${NAME}.versioned.$(EXT))
rm -f ${NAME}.sch.pdf ${NAME}.brd-top.png ${NAME}.brd-bot.png ${NAME}.versioned.xml ${NAME}.bom.csv
rm -f ${NAME}.versioned.kicad_prl ${NAME}.versioned.kicad_pro-bak ${NAME}.versioned.xml ${NAME}.versioned.csv
2022-08-10 14:45:31 +02:00
rm -f ${IBOM}
rm -rf ${FABRICATION_DIR}
rm -f panel.kicad_pcb panel.kicad_pro
rm -rf ${PANEL_DIR}