Repository navigation
Expand file tree
/
Copy pathmakefile
More file actions
283 lines (212 loc) · 12.6 KB
/
Copy pathmakefile
File metadata and controls
283 lines (212 loc) · 12.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
.PHONY: all cad cadquery clean gcode code pcb-review mainboard ledboard
all: cad pcb code
cad: cadquery build/pcb/main/pcb.step build/pcb/ledboard/ledboard.step
pcb: mainboard ledboard
code: build/code/oasis build/code/firmware build/code/demoserver
cadquery: build/cadquery/top.step build/cadquery/bottom.step build/cadquery/underplate.step build/cadquery/top_plug.step build/cadquery/mister_mount_cover.step build/cadquery/sensor_basket.step build/cadquery/oasis.glb
gcode: build/cadquery/top.gcode build/cadquery/bottom.gcode build/cadquery/underplate.gcode build/cadquery/top_plug.gcode build/cadquery/sensor_basket.gcode
mainboard: build/pcb/main/schematic.pdf build/pcb/main/pcb.pdf build/pcb/main/pcb.step build/pcb/main/drc_results.txt build/pcb/main/gerbers.zip build/pcb/main/bom.csv build/pcb/main/pos.csv build/pcb/main/pcb_back.svg build/pcb/main/pcb_front.svg build/pcb/main/pcb_in1.svg build/pcb/main/pcb_in2.svg build/pcb/main/pcb_frontback.svg build/pcb/main/pcb_front3d.png build/pcb/main/pcb_back3d.png
ledboard: build/pcb/ledboard/schematic.pdf build/pcb/ledboard/ledboard.pdf build/pcb/ledboard/ledboard.step build/pcb/ledboard/drc_results.txt build/pcb/ledboard/gerbers.zip build/pcb/ledboard/bom.csv build/pcb/ledboard/pos.csv build/pcb/ledboard/ledboard_front.svg build/pcb/ledboard/ledboard_frontback.svg build/pcb/ledboard/ledboard_front3d.png
clean:
rm -r build || true
cd code/client && cargo clean || true
cd code/demoserver && cargo clean || true
cd code/esp32 && cargo clean || true
cd code/terralib && cargo clean || true
rm -r pcb/main/production || true
rm -r pcb/ledboard/production || true
# CadQuery
################################################################################
build/cadquery/top.step: cadquery/oasis.py cadquery/util.py oasis_constants.py
@mkdir -p $(@D)
PYTHONPATH="./:$$PYTHONPATH" cq-cli --infile cadquery/oasis.py --expression="Top(TopProfile(),vent_holes=True).shape" --outfile $@
build/cadquery/underplate.step: cadquery/oasis.py cadquery/util.py oasis_constants.py
@mkdir -p $(@D)
PYTHONPATH="./:$$PYTHONPATH" cq-cli --infile cadquery/oasis.py --expression="Underplate(Top(TopProfile())).shape" --outfile $@
build/cadquery/bottom.step: cadquery/oasis.py cadquery/util.py oasis_constants.py
@mkdir -p $(@D)
PYTHONPATH="./:$$PYTHONPATH" cq-cli --infile cadquery/oasis.py --expression="Bottom(BottomProfile()).shape" --outfile $@
build/cadquery/top_plug.step: cadquery/oasis.py cadquery/util.py oasis_constants.py
@mkdir -p $(@D)
PYTHONPATH="./:$$PYTHONPATH" cq-cli --infile cadquery/oasis.py --expression="TopPlug().shape" --outfile $@
build/cadquery/mister_mount_cover.step: cadquery/oasis.py cadquery/util.py oasis_constants.py
@mkdir -p $(@D)
PYTHONPATH="./:$$PYTHONPATH" cq-cli --infile cadquery/oasis.py --expression="mister_mount_cover().rotate_x(180)" --outfile $@
build/cadquery/sensor_basket.step: cadquery/oasis.py cadquery/util.py oasis_constants.py
@mkdir -p $(@D)
PYTHONPATH="./:$$PYTHONPATH" cq-cli --infile cadquery/oasis.py --expression="SensorBasket(Sht30Board()).shape" --outfile $@
build/cadquery/oasis.glb: cadquery/oasis.py cadquery/util.py oasis_constants.py build/pcb/main/pcb.step build/pcb/ledboard/ledboard.step
@mkdir -p $(@D)
PYTHONPATH="./:$$PYTHONPATH" cq-cli --infile cadquery/oasis.py --expression="terrarium(explode=0, vent_holes=True)" --outfile $@
# GCode for 3d printing
# NOTE: I don't actually use these gcode files directly - I use a gui slicer
# (PrusaSlicer), but these are useful for getting estimates on filament usage,
# print times, etc.
################################################################################
SLICER_FLAGS = --export-gcode --filament-type PLA --brim-type outer_only
build/cadquery/top.gcode: build/cadquery/top.step
prusa-slicer $(SLICER_FLAGS) $^ --output $@
build/cadquery/bottom.gcode: build/cadquery/bottom.step
prusa-slicer $(SLICER_FLAGS) $^ --output $@
build/cadquery/underplate.gcode: build/cadquery/underplate.step
prusa-slicer $(SLICER_FLAGS) $^ --output $@
build/cadquery/top_plug.gcode: build/cadquery/top_plug.step
prusa-slicer $(SLICER_FLAGS) $^ --output $@
build/cadquery/mister_mount_cover.gcode: build/cadquery/mister_mount_cover.step
prusa-slicer $(SLICER_FLAGS) $^ --output $@
build/cadquery/sensor_basket.gcode: build/cadquery/sensor_basket.step
prusa-slicer $(SLICER_FLAGS) $^ --output $@
.PHONY: printtime
printtime: build/cadquery/bottom.gcode build/cadquery/top.gcode build/cadquery/underplate.gcode build/cadquery/top_plug.gcode build/cadquery/mister_mount_cover.gcode build/cadquery/sensor_basket.gcode
grep "estimated printing time (normal" $^
# KiCad main board
################################################################################
build/pcb/main/schematic.pdf: pcb/main/pcb.kicad_sch
@mkdir -p $(@D)
kicad-cli sch export pdf --output $@ $^
build/pcb/main/pcb.pdf: pcb/main/pcb.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export pdf -l F.Cu,F.Mask,F.Silkscreen,F.Courtyard,Edge.Cuts,B.Cu,B.Mask,B.Silkscreen,B.Courtyard --output $@ $^
# TODO: include courtyard and mask?
# TODO: not happy with any of these svg outputs
build/pcb/main/pcb_front.svg: pcb/main/pcb.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export svg --exclude-drawing-sheet -l F.Mask,F.Silkscreen,F.Cu,F.Courtyard,Edge.Cuts --output $@ $^
build/pcb/main/pcb_in1.svg: pcb/main/pcb.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export svg --exclude-drawing-sheet -l In1.Cu,Edge.Cuts --output $@ $^
build/pcb/main/pcb_in2.svg: pcb/main/pcb.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export svg --exclude-drawing-sheet -l In2.Cu,Edge.Cuts --output $@ $^
build/pcb/main/pcb_back.svg: pcb/main/pcb.kicad_pcb
@mkdir -p $(@D)
# TODO: --mirror
kicad-cli pcb export svg --exclude-drawing-sheet -l B.Mask,B.Silkscreen,B.Cu,B.Courtyard,Edge.Cuts --output $@ $^
build/pcb/main/pcb_frontback.svg: pcb/main/pcb.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export svg --exclude-drawing-sheet -l B.Cu,B.Courtyard,B.Silkscreen,F.Cu,F.Courtyard,F.Silkscreen,Edge.Cuts --output $@ $^
PCB_RENDER_ARGS=--quality high --perspective --floor --preset=follow_pcb_editor
# Consider adding --include-tracks --include-zones
# It looks cooler with them, but it takes longer to process and results in a larger / more complicated output
# TODO: kicad 9.0.3 seems to have broken something with step export. The file still exports, but the process exits with exit code 2. I added the `|| true` as a temporary workaround, but this is a total hack and should be removed when possible.
build/pcb/main/pcb.step: pcb/main/pcb.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export step --subst-models --output $@ $^ || true
build/pcb/main/pcb.glb: pcb/main/pcb.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export glb --include-pads --include-silkscreen --include-soldermask --include-tracks --include-zones --subst-models -o $@ $^
build/pcb/main/pcb_front3d.png: pcb/main/pcb.kicad_pcb
kicad-cli pcb render --side top --rotate ' -10,0,-90' $(PCB_RENDER_ARGS) --output $@ $^
build/pcb/main/pcb_back3d.png: pcb/main/pcb.kicad_pcb
kicad-cli pcb render --side bottom --rotate ' -10,0,-90' $(PCB_RENDER_ARGS) --output $@ $^
build/pcb/main/gerbers.zip build/pcb/main/bom.csv build/pcb/main/pos.csv &: pcb/main/pcb.kicad_pcb
mkdir -p build/pcb/main
PYTHONPATH="pcb/Fabrication-Toolkit:${PYTHONPATH}" python3 -m plugins.cli --path $^ --autoTranslate --autoFill
cp pcb/main/production/bom.csv build/pcb/main/bom.csv
cp pcb/main/production/positions.csv build/pcb/main/pos.csv
cp pcb/main/production/Terrarium_Control_Board*.zip build/pcb/main/gerbers.zip
# design rules check
build/pcb/main/drc_results.txt: pcb/main/pcb.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb drc --output $@ $^
.PHONY: main_drc
main_drc: build/pcb/main/drc_results.txt
cat build/pcb/main/drc_results.txt
# KiCad LED board
################################################################################
build/pcb/ledboard/schematic.pdf: pcb/ledboard/ledboard.kicad_sch
@mkdir -p $(@D)
kicad-cli sch export pdf --output $@ $^
build/pcb/ledboard/ledboard.pdf: pcb/ledboard/ledboard.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export pdf -l F.Cu,F.Mask,F.Silkscreen,F.Courtyard,Edge.Cuts,B.Cu,B.Mask,B.Silkscreen,B.Courtyard --output $@ $^
# TODO: include courtyard and mask?
# TODO: not happy with any of these svg outputs
build/pcb/ledboard/ledboard_front.svg: pcb/ledboard/ledboard.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export svg --exclude-drawing-sheet -l F.Silkscreen,F.Cu,F.Courtyard,Edge.Cuts --output $@ $^
build/pcb/ledboard/ledboard_frontback.svg: pcb/ledboard/ledboard.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export svg --exclude-drawing-sheet -l B.Cu,B.Courtyard,B.Silkscreen,F.Cu,F.Courtyard,F.Silkscreen,Edge.Cuts --output $@ $^
# Consider adding --include-tracks --include-zones
# It looks cooler with them, but it takes longer to process and results in a larger / more complicated output
build/pcb/ledboard/ledboard.step: pcb/ledboard/ledboard.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export step --subst-models --output $@ $^
build/pcb/ledboard/ledboard.glb: pcb/ledboard/ledboard.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb export glb --include-tracks --include-zones --subst-models -o $@ $^
build/pcb/ledboard/ledboard_front3d.png: pcb/ledboard/ledboard.kicad_pcb
kicad-cli pcb render --zoom 0.9 --side top --rotate ' -10,0,-90' $(PCB_RENDER_ARGS) --output $@ $^
build/pcb/ledboard/gerbers.zip build/pcb/ledboard/bom.csv build/pcb/ledboard/pos.csv &: pcb/ledboard/ledboard.kicad_pcb
mkdir -p build/pcb/ledboard
PYTHONPATH="pcb/Fabrication-Toolkit:${PYTHONPATH}" python3 -m plugins.cli --path $^ --autoTranslate --autoFill
cp pcb/ledboard/production/bom.csv build/pcb/ledboard/bom.csv
cp pcb/ledboard/production/positions.csv build/pcb/ledboard/pos.csv
cp pcb/ledboard/production/Terrarium_LED_Board*.zip build/pcb/ledboard/gerbers.zip
# design rules check
build/pcb/ledboard/drc_results.txt: pcb/ledboard/ledboard.kicad_pcb
@mkdir -p $(@D)
kicad-cli pcb drc --output $@ $^
.PHONY: drc_ledboard
drc_ledboard: build/pcb/ledboard/drc_results.txt
cat build/pcb/ledboard/drc_results.txt
# Rust code
################################################################################
# code that runs on esp32
# TODO: none of the below rust targets have their inputs fully specified, so you might change something relevant and make will not rebuild the affected output.
build/code/firmware: code/esp32 code/terralib
@mkdir -p $(@D)
cd code/esp32 && cargo build --release --bin oasis
cp code/esp32/target/riscv32imc-esp-espidf/release/oasis $@
build/code/binsize_info.txt: build/code/oasis
@mkdir -p $(@D)
cd code/esp32 && cargo espflash save-image --partition-table partitions.csv --chip esp32c3 --bin oasis /tmp/out.bin > /tmp/info.txt
cp /tmp/info.txt $@
# build esp32 code, flash it to the mcu connected over usb, reboot it, watch its output.
.PHONY: deploy-to-esp32
deploy-to-esp32:
cd code/esp32 && cargo run --release --bin oasis
# command-line client
build/code/oasis: code/client code/terralib
@mkdir -p $(@D)
cd code/client && cargo build --release
cp code/client/target/release/client $@
build/code/demoserver: code/demoserver code/terralib
@mkdir -p $(@D)
cd code/demoserver && cargo build --release
cp code/demoserver/target/release/demoserver $@
# note: esp32 directory is omitted below because `cargo test` would attempt to
# run the code on an actual esp32, not on the host computer.
# TODO: this should at least build the esp32 code
.PHONY: test-code
test-code: code
cd code/client && cargo test
cd code/demoserver && cargo test
cd code/terralib && cargo test
.PHONY: cargo-clippy
cargo-clippy:
cd code/client && cargo clippy
cd code/demoserver && cargo clippy
cd code/terralib && cargo clippy
cd code/esp32 && cargo clippy
.PHONY: cargo-clippy-fix
cargo-clippy-fix:
cd code/client && cargo clippy --fix --allow-dirty
cd code/demoserver && cargo clippy --fix --allow-dirty
cd code/terralib && cargo clippy --fix --allow-dirty
cd code/esp32 && cargo clippy --fix --allow-dirty
# Other
################################################################################
# check for typos
# Install with `cargo install typos-cli`
.PHONY: typos
typos:
typos README.md code/README.md pcb/README.md cadquery/* $(shell find code/**/src/ -name "*.rs") website/content/
.PHONY: update-website-photos
update-website-photos: pcb
convert -density 600 build/pcb/ledboard/schematic.pdf website/content/docs/electronics/ledboard_schematic.png
convert -density 600 build/pcb/main/schematic.pdf website/content/docs/electronics/mainboard_schematic.png
cp build/pcb/main/pcb_front3d.png website/content/docs/electronics/mainboard_front3d.png
cp build/pcb/main/pcb_back3d.png website/content/docs/electronics/mainboard_back3d.png
cp build/pcb/ledboard/ledboard_front3d.png website/content/docs/electronics/ledboard_front3d.png