2022-06-22 09:12:23 +02:00
# project file name (use for schematic and board layout)
2023-09-25 02:48:09 +02:00
NAME ?= wled_chain
2023-02-18 13:34:32 +01:00
SUBSHEET ?=
2023-02-06 12:43:39 +01:00
# path to KiCad CLI
2023-03-30 11:37:22 +02:00
KICAD = kicad-cli
2022-06-22 09:12:23 +02:00
# 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
2022-06-22 09:12:23 +02:00
# 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)
2022-06-22 09:12:23 +02:00
# generate file with version information
VERSIONED_EXT = kicad_sch kicad_pcb kicad_pro json
d e f i n e v e r s i o n _ r u l e
%.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' $$ @
2022-06-22 09:12:23 +02:00
e n d e f
$( 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-06-22 09:12:23 +02:00
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 }
2022-06-22 09:12:23 +02:00
# generate fabrication files (gerbers/drill/BoM/PnP)
2023-03-30 22:12:23 +02:00
${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 $^ $@
2023-03-30 22:12:23 +02:00
# 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
2022-06-22 09:12:23 +02:00
# generate symbols and footprints from parts
lib :
$( QEDA) generate qeda
# generate printable version (PDF) of schematic
%.sch.pdf : %.versioned .kicad_sch %.versioned .kicad_pro
2023-02-06 12:43:39 +01:00
$( KICAD) sch export pdf --output $@ $<
2022-06-22 09:12:23 +02:00
# generate render from layout (top side)
%.brd-top.png : %.versioned .kicad_pcb
2023-02-06 12:45:17 +01:00
pcbdraw plot --silent $< --dpi 600 --side front $@
2022-06-22 09:12:23 +02:00
# generate render from layout (bottom side)
%.brd-bot.png : %.versioned .kicad_pcb
2023-02-06 12:45:17 +01:00
pcbdraw plot --silent $< --dpi 600 --side back $@
2022-06-22 09:12:23 +02:00
# 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) $< $@
2022-06-22 09:12:23 +02:00
# 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
2023-08-08 08:08:49 +02:00
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
2022-06-22 09:12:23 +02:00
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 }
2022-06-22 09:12:23 +02:00
rm -rf ${ FABRICATION_DIR }
rm -f panel.kicad_pcb panel.kicad_pro
rm -rf ${ PANEL_DIR }