#
# Makefile for generating gerbers and pngs.
# Tested on Advanced Circuits barebones, should work for 33 each, 
# gerbmerge, and Advanced Circuits. Pngs used for the fab modules 
# and the modella. 
#
# Copyright (C) 2011 Andy Bardagjy. 
#
# This makefile is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
# 
# This makefile is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
# 
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
#
# Andy Bardagjy
# June 21, 2011
#
# TODO
# Interesting bug, if there are no holes on the board, the script fails
# because no drd file is generated, so... I touch an empty drd file 
# so the build doesn't fail. This is kinda a kluge...
# 
# If there's no dimension layer, the build fails...
# 
# I should add document export: sch, brd
#

PROJECT?= XMOS_UPLI

WHITE?= \#FFFFFF
BLACK?= \#000000
DPI?= 2400

all: gerbers fab parts

# Component Side Gerber
$(PROJECT).cmp: $(PROJECT).brd
	eagle -X -dGERBER_RS274X -o$(PROJECT).cmp $(PROJECT).brd Top Pads Vias

# Solder Side Gerber
$(PROJECT).sol: $(PROJECT).brd
	eagle -X -dGERBER_RS274X -o$(PROJECT).sol $(PROJECT).brd Bottom Pads Vias

# Top Soldermask Gerber
$(PROJECT).stc: $(PROJECT).brd
	eagle -X -dGERBER_RS274X -o$(PROJECT).stc $(PROJECT).brd tStop

# Bottom Soldermask Gerber
$(PROJECT).sts: $(PROJECT).brd
	eagle -X -dGERBER_RS274X -o$(PROJECT).sts $(PROJECT).brd bStop

# Top Silkscreen Gerber
$(PROJECT).plc: $(PROJECT).brd
	eagle -X -dGERBER_RS274X -o$(PROJECT).plc $(PROJECT).brd Dimension tPlace tNames tValues

# Bottom Silkscreen Gerber
$(PROJECT).pls: $(PROJECT).brd
	eagle -X -dGERBER_RS274X -o$(PROJECT).pls $(PROJECT).brd Dimension bPlace bNames bValues

# Drills Xcellon
$(PROJECT).drd: $(PROJECT).brd
	# FIXME This is the drd hack (see top of file)
	rm -f $(PROJECT).drd
	touch $(PROJECT).drd
	eagle -X -dEXCELLON -o$(PROJECT).drd $(PROJECT).brd Drills Holes

# Board Outline Gerber
$(PROJECT).bor: $(PROJECT).brd
	eagle -X -dGERBER_RS274X -o$(PROJECT).bor $(PROJECT).brd Dimension

# Fab reference Frame
$(PROJECT).ref: $(PROJECT).brd
	eagle -X -dGERBER_RS274X -o$(PROJECT).ref $(PROJECT).brd RefereceFrame



# Top Copper PNG
# So you *can* do this with eagle commands, but the holes don't work out right.
# Gotta use gerbv to do this
#$(PROJECT)_cmp.png: $(PROJECT).brd
#	eagle -C "ratsnest; display none Top Pads Vias; export image $(PROJECT)_cmp.png monochrome 600; quit;" $(PROJECT).brd
#	convert $(PROJECT)_cmp.png -negate $(PROJECT)_cmp.png
$(PROJECT)_cmp.png: gerbers
	gerbv gerbers/$(PROJECT).cmp gerbers/$(PROJECT).ref -b$(BLACK) -f$(WHITE) -f$(BLACK) -B0 -D$(DPI) -o $(PROJECT)_cmp.png -xpng
	convert $(PROJECT)_cmp.png -colorspace gray +dither -colors 2 -normalize $(PROJECT)_cmp.png
	convert $(PROJECT)_cmp.png -mattecolor black -frame 25x25 $(PROJECT)_cmp.png
	convert $(PROJECT)_cmp.png -strip $(PROJECT)_cmp.png
	convert $(PROJECT)_cmp.png -units PixelsPerInch -density $(DPI) $(PROJECT)_cmp.png
	#convert $(PROJECT)_cmp.png -colorspace RGB $(PROJECT)_cmp.png
	convert $(PROJECT)_cmp.png -type TrueColormatte PNG32:$(PROJECT)_cmp.png

# Bottom Copper PNG
# So you *can* do this with eagle commands, but the holes don't work out right.
# Gotta use gerbv to do this
$(PROJECT)_sol.png: gerbers
	gerbv gerbers/$(PROJECT).sol gerbers/$(PROJECT).ref -b$(BLACK) -f$(WHITE) -f$(BLACK) -B0 -D$(DPI) -o $(PROJECT)_sol.png -xpng
	convert $(PROJECT)_sol.png -colorspace gray +dither -colors 2 -normalize $(PROJECT)_sol.png
	convert $(PROJECT)_sol.png -mattecolor black -frame 25x25 $(PROJECT)_sol.png
	convert $(PROJECT)_sol.png -strip $(PROJECT)_sol.png
	convert $(PROJECT)_sol.png -units PixelsPerInch -density $(DPI) $(PROJECT)_sol.png
	#convert $(PROJECT)_sol.png -colorspace RGB $(PROJECT)_sol.png
	convert $(PROJECT)_sol.png -type TrueColormatte PNG32:$(PROJECT)_sol.png

# BOARD PNG
$(PROJECT)_bor.png: gerbers
	gerbv gerbers/$(PROJECT).bor gerbers/$(PROJECT).ref -b$(WHITE) -f$(BLACK) -f$(WHITE) -B0 -D$(DPI) -o $(PROJECT)_bor.png -xpng
	convert $(PROJECT)_bor.png -colorspace gray +dither -colors 2 -normalize $(PROJECT)_bor.png
	convert $(PROJECT)_bor.png -mattecolor white -frame 25x25 $(PROJECT)_bor.png
	convert $(PROJECT)_bor.png -strip $(PROJECT)_bor.png
	convert $(PROJECT)_bor.png -fill black    -floodfill +0+0 white $(PROJECT)_bor.png
	convert $(PROJECT)_bor.png -units PixelsPerInch -density $(DPI) $(PROJECT)_bor.png
	#convert $(PROJECT)_bor.png -colorspace RGB $(PROJECT)_bor.png
	convert $(PROJECT)_bor.png -type TrueColormatte PNG32:$(PROJECT)_bor.png


# Drills PNG
# So you *can* do this with eagle commands, but the holes don't work out right.
# Gotta use gerbv to do this
#$(PROJECT)_drd.png: $(PROJECT).brd
#	eagle -C "ratsnest; display none Drills Holes Dimension; export image $(PROJECT)_drd.png monochrome 600; quit;" $(PROJECT).brd
$(PROJECT)_drd.png: gerbers
	gerbv gerbers/$(PROJECT).drd gerbers/$(PROJECT).ref -b$(WHITE) -f$(BLACK) -f$(WHITE) -B0 -D$(DPI) -o $(PROJECT)_drd.png -xpng
	convert $(PROJECT)_drd.png -colorspace gray +dither -colors 2 -normalize $(PROJECT)_drd.png
	convert $(PROJECT)_drd.png -mattecolor white -frame 25x25 $(PROJECT)_drd.png
	convert $(PROJECT)_drd.png -strip $(PROJECT)_drd.png
	convert $(PROJECT)_drd.png -units PixelsPerInch -density $(DPI) $(PROJECT)_drd.png
	#convert $(PROJECT)_drd.png -colorspace RGB $(PROJECT)_drd.png
	convert $(PROJECT)_drd.png -type TrueColormatte PNG32:$(PROJECT)_drd.png

gerbers: $(PROJECT).cmp $(PROJECT).sol $(PROJECT).stc $(PROJECT).sts $(PROJECT).plc $(PROJECT).pls $(PROJECT).drd $(PROJECT).bor $(PROJECT).ref
	mkdir -p gerbers
	mv $(PROJECT).{bor,cmp,drd,dri,gpi,sol,stc,sts,plc,pls,ref} gerbers/
	zip gerbers/$(PROJECT)_advanced.zip gerbers/*.{bor,drd,cmp,sol,stc,sts,plc,pls}
	zip gerbers/$(PROJECT)_barebones.zip gerbers/*.{bor,drd,cmp,sol}

# fab: $(PROJECT)_cmp.png $(PROJECT)_drd.png $(PROJECT)_sol.png
fab: $(PROJECT)_cmp.png $(PROJECT)_drd.png $(PROJECT)_sol.png $(PROJECT)_bor.png
	mkdir -p fab
	# mv $(PROJECT){_cmp.png,_sol.png,_drd.png} fab/
	mv $(PROJECT){_cmp.png,_drd.png,_sol.png,_bor.png} fab/
	rm -rf gerbers

view: gerbers
	#gerbv gerbers/$(PROJECT).{bor,drd,stc,plc,cmp,sts,pls,sol} &
	gerbv gerbers/$(PROJECT).{bor,drd,cmp,sol,ref} &

parts: $(PROJECT).sch
	eagle -C "export partlist $(PROJECT).txt; quit;" $(PROJECT).sch
	eagle_parts $(PROJECT).csv $(PROJECT).txt
	mkdir parts
	mv $(PROJECT).{csv,txt} parts

clean:
	rm -rf $(PROJECT).{csv,txt,bor,cmp,drd,dri,gpi,sol,zip,png,path,sts,stc,pls,plc}
	rm -rf *#*
	rm -rf gerbers fab parts
