Makefile.kicad: copy over from ben-wpan/makefiles/

This commit is contained in:
Werner Almesberger 2015-05-23 11:40:31 -03:00
parent 1a8beb2f15
commit fdabcc9b3e
2 changed files with 215 additions and 0 deletions

211
Makefile.kicad Normal file
View File

@ -0,0 +1,211 @@
#
# Makefile.kicad - Makefile template for KiCAD projects
#
# Written 2011, 2013 by Werner Almesberger
# Copyright 2011, 2013 Werner Almesberger
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
#
# Define before including this template:
#
# NAME project name
# VERSION "release" version number
#
ifndef TOP
TOP = ../..
endif
PLOT_BRD = pcbnew --plot=ps --plot-fill-all-zones
CPTX = $(TOP)/eda-tools/mlztx/cptx
GMERGE = $(TOP)/eda-tools/fab/gmerge
DRL2GERBER = $(TOP)/eda-tools/fab/drl2gerber
PRETTYGERBV = $(TOP)/eda-tools/fab/prettygerbv
POS2FAB = $(TOP)/eda-tools/fab/pos2fab
FPDOC = PATH=$$PATH:$(TOP)/eda-tools/fab:$(TOP)/eda-tools/fpd2pdf fpdoc
DIR = $(shell pwd | sed 's|.*/||')
SCH=$(shell pwd)/$(NAME).sch
BRD=$(shell pwd)/$(NAME).brd
.PHONY: all gen generate sch brd xpdf front back clean
.PHONY: gerber gerbv fab fab-pcb fab-smt overview
all:
@echo "make what ? target: gen sch brd xpdf front back clean"
@exit 1
gen generate:
eeschema --plot=ps $(SCH)
# need scripts
sch:
eeschema $(SCH)
brd:
pcbnew $(BRD)
xpdf:
xpdf $(NAME).pdf
front: $(NAME)-Front.ps
lpr $<
back: $(NAME)-Back.ps
lpr $<
# --- DIY production (toner transfer) -----------------------------------------
#
# Postscript for production of front/back layer, using the toner transfer
# method. Note that other artwork transfer methods may require different
# mirror settings.
#
# We use --ps-pads-drill-opt=none to avoid having any hole before drilling,
# which yields the best results with a CNC drill. For manual drilling, "real"
# would be preferrable. Do not use "small", for this created holes that are
# larger (!) than designed.
#
%-Front.ps: %.brd
$(PLOT_BRD) --layers=Front --plot-mirror $<
%-Back.ps: %.brd
$(PLOT_BRD) --layers=Back $<
# --- Industrial production ---------------------------------------------------
# $(call choose, basename, old-suffix, new-suffix)
choose = $(if $(wildcard $(1)-$(3)), $(1)-$(3), $(1)-$(2))
GERBERS = $(call choose, $(NAME),SilkS_Front.gto,F_SilkS.gto) \
$(call choose, $(NAME),Mask_Front.gts,F_Mask.gts) \
$(call choose, $(NAME),Front.gtl,F_Cu.gtl) \
$(call choose, $(NAME),Back.gbl,B_Cu.gbl) \
$(call choose, $(NAME),Mask_Back.gbs,B_Mask.gbs) \
$(call choose, $(NAME),PCB_Edges.gbr,Edge_Cuts.gbr) \
$(call choose, $(NAME),SoldP_Front.gtp,F_Paste.gtp)
PCB_FILES = README-PCB $(NAME)-front.png $(NAME)-back.png \
$(NAME)-PCB_Edges.dxf $(NAME).drl $(GERBERS)
SMT_FILES = README-SMT $(NAME)-front.png $(NAME)-bom.csv $(NAME)-pos.csv \
$(NAME)-footprints.pdf
gerber: $(GERBERS)
$(GERBERS): $(NAME).brd Makefile
pcbnew --plot=gerber --plot-aux-origin \
--layers=`pcbnew --list-layers $(BRD) | tr '\012' ,` \
--plot-fill-all-zones --plot-exclude-edge \
$(BRD)
$(GMERGE) $(NAME)-SilkS_Front.gto $(NAME)-Comments.gbr >_tmp \
|| { rm -rf _tmp; exit 1; }
mv _tmp $(NAME)-SilkS_Front.gto
fab: fab-pcb fab-smt
$(NAME)-PCB_Edges.dxf: $(NAME).brd
pcbnew --plot=dxf --plot-aux-origin --layers=PCB_Edges $(BRD)
$(NAME).drl: $(NAME).brd
pcbnew --drill --drill-aux-origin $(BRD)
fab-pcb: $(PCB_FILES)
mkdir -p fab
tar Ccfz .. fab/$(NAME)-pcb-$(VERSION).tar.gz \
$(PCB_FILES:%=$(DIR)/%)
cd ..; zip -l $(DIR)/fab/$(NAME)-pcb-$(VERSION).zip \
$(PCB_FILES:%=$(DIR)/%)
gerbv:
gerbv $(NAME)-SilkS_Front.gto \
$(NAME)-SoldP_Front.gtp \
$(NAME)-Front.gtl \
$(NAME)-Mask_Front.gts \
$(NAME)-Mask_Back.gbs \
$(NAME)-Back.gbl \
$(NAME)-PCB_Edges.gbr
$(NAME)Front.pos:
pcbnew --pos $(BRD)
%-pos.csv: %Front.pos %.cmp
$(POS2FAB) $^ >$@ || { rm -f "$@"; exit 1; }
../bom/$(NAME)-bom.csv:
$(MAKE) -C ../bom $(NAME)-bom.csv
%-bom.csv: ../bom/%-bom.csv
mv $< $@
%-footprints.pdf: %.pro %.cmp %Front.pos
$(FPDOC) -a FIDUCIAL $< "$@" || { rm -f "$@"; exit 1; }
fab-smt: $(SMT_FILES)
mkdir -p fab
tar Ccfz .. fab/$(NAME)-smt-$(VERSION).tar.gz \
$(SMT_FILES:%=$(DIR)/%)
cd ..; zip -l $(DIR)/fab/$(NAME)-smt-$(VERSION).zip \
$(SMT_FILES:%=$(DIR)/%)
upload:
qippl \
fab/$(NAME)-pcb-$(VERSION).tar.gz \
fab/$(NAME)-pcb-$(VERSION).zip \
fab/$(NAME)-smt-$(VERSION).tar.gz \
fab/$(NAME)-smt-$(VERSION).zip \
wpan/fab
# --- Overview images ---------------------------------------------------------
%-Drill.gbr: %.drl
$(DRL2GERBER) $^ >$@ || { rm -f "$@"; exit 1; }
$(NAME)-front.png: gerber $(NAME)-Drill.gbr
$(PRETTYGERBV) -d $(NAME)-Drill.gbr $(NAME) front \
$(NAME)-front.png
$(NAME)-back.png: gerber $(NAME)-Drill.gbr
$(PRETTYGERBV) -d $(NAME)-Drill.gbr $(NAME) back \
$(NAME)-back.png
$(NAME)-overview.png: gerber $(NAME)-Drill.gbr
$(PRETTYGERBV) -d $(NAME)-Drill.gbr $(NAME) all \
$(NAME)-overview.png
overview: $(NAME)-overview.png
display $(NAME)-overview.png
uoverview: $(NAME)-overview.png
qippl $(NAME)-overview.png \
wpan/tmp/$(NAME)-$(VERSION)-overview.png
# --- Cleanup -----------------------------------------------------------------
clean::
rm -f $(NAME)-Front.ps $(NAME)-Back.ps
rm -f $(NAME).drl $(NAME)-Drill.gbr
rm -f $(NAME)-PCB_Edges.gbr $(NAME)-PCB_Edges.dxf
rm -f $(NAME)-Front.gtl $(NAME)-Mask_Front.gts
rm -f $(NAME)-SilkS_Front.gto $(NAME)-SoldP_Front.gtp
rm -f $(NAME)-Back.gbl $(NAME)-Mask_Back.gbs
rm -f $(NAME)-SilkS_Back.gbo $(NAME)-SoldP_Back.gbp
rm -f $(NAME)-Comments.gbr $(NAME)-Drawings.gbr
rm -f $(NAME)-overview.png $(NAME)-front.png $(NAME)-back.png
rm -f $(NAME)Front.pos $(NAME)-pos.csv
rm -f $(NAME)-bom.csv $(NAME)-footprints.pdf
spotless:: clean
rm -f '$$'savepcb.000 '$$'savepcb.brd
rm -f $(NAME)-cache.lib $(NAME)-cache.bak
rm -f $(NAME).000
rm -f $(NAME).net

4
README
View File

@ -23,5 +23,9 @@ This is a collection of utilities for Electronic Design Automation:
- swpcmp: swap components in a layout
- Makefile.kicad: common makefile for KiCAD projects. Note that some of
the functions provided there use the command-lines patches for KiCAD
and therefore don't work with current versions of KiCAD.
Each utility can have its own licensing terms. They're specified in the
respective directory or in the file itself.