From 54dfc1d55d5e721bb09c95bbcac5f4ee2fc57746 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Wed, 22 Jun 2022 09:12:23 +0200 Subject: [PATCH] rake: replace with more common make file --- Makefile | 69 ++++++++++++++++++++++++++++++ Rakefile | 125 ------------------------------------------------------- 2 files changed, 69 insertions(+), 125 deletions(-) create mode 100644 Makefile delete mode 100644 Rakefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b7d4541 --- /dev/null +++ b/Makefile @@ -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} diff --git a/Rakefile b/Rakefile deleted file mode 100644 index 6dc81c8..0000000 --- a/Rakefile +++ /dev/null @@ -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