rake: replace with more common make file
This commit is contained in:
parent
991fb55439
commit
54dfc1d55d
69
Makefile
Normal file
69
Makefile
Normal file
@ -0,0 +1,69 @@
|
||||
# project file name (use for schematic and board layout)
|
||||
NAME ?= template
|
||||
# path to qeda
|
||||
QEDA := qeda
|
||||
|
||||
# read project version
|
||||
VERSION := $(shell cat version)
|
||||
# current date for stamping output
|
||||
DATE = $(shell date +%Y-%m-%d)
|
||||
# revision based on number of changes on schematic or board layout and current git commit
|
||||
REVISION := $(shell git log --pretty=oneline "${NAME}.kicad_sch" "${NAME}.kicad_pcb" | wc -l) $(shell git rev-parse --short HEAD)
|
||||
|
||||
# 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' $$@
|
||||
endef
|
||||
$(foreach EXT,$(VERSIONED_EXT),$(eval $(call version_rule,$(EXT))))
|
||||
|
||||
all: ${NAME}.sch.pdf ${NAME}.brd-top.png ${NAME}.brd-bot.png ${NAME}.bom.csv
|
||||
|
||||
# generate fabrication files (gerbers/drill/BoM/PnP)
|
||||
FABRICATION_DIR := fabrication
|
||||
fabrication: ${NAME}.versioned.kicad_sch ${NAME}.versioned.kicad_pcb
|
||||
kikit fab jlcpcb --drc --assembly --schematic $^ ${FABRICATION_DIR}
|
||||
|
||||
# generate symbols and footprints from parts
|
||||
lib:
|
||||
$(QEDA) generate qeda
|
||||
|
||||
# generate printable version (PDF) of schematic
|
||||
%.sch.pdf: %.versioned.kicad_sch %.versioned.kicad_pro
|
||||
eeschema_do export $< .
|
||||
mv $*.versioned.pdf $@
|
||||
|
||||
# generate render from layout (top side)
|
||||
%.brd-top.png: %.versioned.kicad_pcb
|
||||
pcbdraw --silent $< --dpi 600 $@
|
||||
|
||||
# generate render from layout (bottom side)
|
||||
%.brd-bot.png: %.versioned.kicad_pcb
|
||||
pcbdraw --silent $< --dpi 600 --back $@
|
||||
|
||||
# export Bill of Material (as CSV)
|
||||
%.bom.csv: %.versioned.kicad_sch %.versioned.kicad_pro
|
||||
eeschema_do bom_xml $< .
|
||||
kibom $*.versioned.xml $@
|
||||
|
||||
# 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 $@
|
||||
pcbdraw --silent $@ --dpi 600 panel.brd-top.png
|
||||
pcbdraw --silent $@ --dpi 600 --back panel.brd-bot.png
|
||||
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 --drc --assembly --missingError --schematic ${NAME}.versioned.kicad_sch $@ ${PANEL_DIR}
|
||||
|
||||
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
|
||||
rm -rf ${FABRICATION_DIR}
|
||||
rm -f panel.kicad_pcb panel.kicad_pro
|
||||
rm -rf ${PANEL_DIR}
|
125
Rakefile
125
Rakefile
@ -1,125 +0,0 @@
|
||||
# encoding: utf-8
|
||||
# ruby: 2.1.0
|
||||
=begin
|
||||
Rakefile to manage hardware projects
|
||||
|
||||
uses following tools:
|
||||
- QEDA https://github.com/qeda/qeda
|
||||
- PcbDraw https://github.com/yaqwsx/PcbDraw
|
||||
- KiKit https://github.com/yaqwsx/KiKit
|
||||
- KiAuto https://github.com/INTI-CMNB/KiAuto
|
||||
- KiBoM https://github.com/SchrodingersGat/KiBoM
|
||||
|
||||
Rakefile instead of Makefile for better text file parsing capabilities.
|
||||
=end
|
||||
require 'rake/clean'
|
||||
require 'csv' # to export BOM and costs
|
||||
|
||||
# =================
|
||||
# project variables
|
||||
# =================
|
||||
|
||||
# common name used for file names
|
||||
name = ENV["NAME"] || "template"
|
||||
# project version, read from "version" file
|
||||
raise "define project version in 'version' file" unless File.exist? "version"
|
||||
version = IO.read("version").split("\n")[0]
|
||||
# current date for stamping output
|
||||
date = Time.now.strftime("%Y-%m-%d")
|
||||
# revision based on number of changes on schematic or board layout and current git commit
|
||||
changes = `git log --pretty=oneline "#{name}.kicad_sch" "#{name}.kicad_pcb" | wc -l`.chomp.to_i
|
||||
commit = `git rev-parse --short HEAD`.chomp
|
||||
revision = "#{changes} #{commit}"
|
||||
|
||||
# path to qeda"
|
||||
qeda = "~/tmp/qeda/bin/qeda"
|
||||
|
||||
# ==========
|
||||
# main tasks
|
||||
# ==========
|
||||
|
||||
desc "main building task"
|
||||
task :default => [:print, :fabrication, :bom]
|
||||
|
||||
desc "print schematic and layout (as pdf)"
|
||||
prints = [ "#{name}.sch.pdf", "#{name}.brd-top.png", "#{name}.brd-bot.png" ]
|
||||
task :print => prints
|
||||
CLEAN.include([ "#{name}.versioned.kicad_sch", "#{name}.versioned.kicad_pcb" ])
|
||||
CLOBBER.include(prints)
|
||||
|
||||
desc "generate fabrication files (gerbers/drill/BoM/PnP)"
|
||||
FABRICATION_DIR = "fabrication"
|
||||
task :fabrication => [ "#{name}.versioned.kicad_sch", "#{name}.versioned.kicad_pcb" ] do |t|
|
||||
sh "kikit fab jlcpcb --drc --assembly --missingError --schematic #{t.prerequisites[0]} #{t.prerequisites[1]} #{FABRICATION_DIR}"
|
||||
end
|
||||
CLEAN.include(FABRICATION_DIR)
|
||||
|
||||
desc "generate symbols and footprints from parts"
|
||||
task :lib => :library
|
||||
task :library do
|
||||
sh "#{qeda} config output kicad"
|
||||
sh "#{qeda} generate qeda"
|
||||
end
|
||||
|
||||
desc "export Bill of Material (as CSV)"
|
||||
boms = [ "#{name}.bom.csv" ]
|
||||
task :bom => boms
|
||||
CLEAN.include([ "#{name}.versioned.xml" ])
|
||||
CLOBBER.include(boms)
|
||||
|
||||
desc "generate panel"
|
||||
PANEL_DIR = "panel"
|
||||
panels = ["panel.kicad_pcb", "panel.kicad_pro", "panel.top.png", "panel.bot.png"]
|
||||
task :panel => panels
|
||||
CLOBBER.include(panels)
|
||||
CLOBBER.include(PANEL_DIR)
|
||||
|
||||
# ===============
|
||||
# file generation
|
||||
# ===============
|
||||
|
||||
desc "generate file with version information"
|
||||
VERSIONED = [".kicad_sch", ".kicad_pcb", ".kicad_pro", ".json"]
|
||||
VERSIONED.each do |ext|
|
||||
rule ".versioned" + ext => ext do |t|
|
||||
sh "cp #{t.source} #{t.name}"
|
||||
sh "sed --in-place 's/\\$version\\$/#{version}/g' #{t.name}"
|
||||
sh "sed --in-place 's/\\$date\\$/#{date}/g' #{t.name}"
|
||||
sh "sed --in-place 's/\\$revision\\$/#{revision}/g' #{t.name}"
|
||||
end
|
||||
end
|
||||
|
||||
desc "generate printable version (PDF) of schematic"
|
||||
rule ".sch.pdf" => [".versioned.kicad_sch", ".versioned.kicad_pro"] do |t|
|
||||
sh "eeschema_do export #{t.prerequisites[0]} ."
|
||||
sh "mv #{t.prerequisites[0].split('.kicad_sch')[0]}.pdf #{t.name}"
|
||||
end
|
||||
|
||||
desc "generate render from layout (top side)"
|
||||
rule ".brd-top.png" => ".versioned.kicad_pcb" do |t|
|
||||
sh "pcbdraw --silent #{t.source} --dpi 600 #{t.name}"
|
||||
end
|
||||
|
||||
desc "generate render from layout (bottom side)"
|
||||
rule ".brd-bot.png" => ".versioned.kicad_pcb" do |t|
|
||||
sh "pcbdraw --silent #{t.source} --dpi 600 --back #{t.name}"
|
||||
end
|
||||
|
||||
desc "generate netlist"
|
||||
rule ".versioned.xml" => ".versioned.kicad_sch" do |t|
|
||||
sh "eeschema_do bom_xml #{t.source} ."
|
||||
end
|
||||
|
||||
desc "generate BOM"
|
||||
rule ".bom.csv" => ".versioned.xml" do |t|
|
||||
sh "kibom #{t.source} #{t.name}"
|
||||
end
|
||||
|
||||
desc "generate panel"
|
||||
rule panels[0] => ["#{name}.versioned.kicad_pcb", "#{name}.versioned.kicad_pro", "#{name}.versioned.kicad_sch", "panel.versioned.json"] do |t|
|
||||
sh "kikit panelize -p #{t.prerequisites[3]} #{t.prerequisites[0]} #{panels[0]}"
|
||||
sh "pcbdraw --silent #{t.name} --dpi 600 #{panels[2]}"
|
||||
sh "pcbdraw --silent #{t.name} --dpi 600 --back #{panels[3]}"
|
||||
sh "sed --in-place 's/\"missing_courtyard\": \"warning\"/\"missing_courtyard\": \"ignore\"/g' #{panels[1]}" # the mouse bites don't have a courtyard
|
||||
sh "kikit fab jlcpcb --drc --assembly --missingError --schematic #{t.prerequisites[2]} #{panels[0]} #{PANEL_DIR}"
|
||||
end
|
Loading…
Reference in New Issue
Block a user