{% set reports=[] -%} ee = {{ ee }} uuid = {{ project.uuid }} public_dir = {{ project.public_dir }} report_dir = {{ project.report_dir }} {%- if sch is defined %} sch = {{ sch | ninja_path }} sch_files = {{ sch_files | ninja_path }} {%- endif %} {%- if pcb is defined %} pcb = {{ pcb | ninja_path }} {%- endif %} {%- set log=log if log is defined else "--log=warn" %} rule kicad-gerber command = $ee kicad-gerber --pcb $in --output-dir $dir --index $out rule mkzip command = $ee mkzip --include $in --zip $out rule kicad-make-bom command = $ee kicad-make-bom {{ log }} --sch $sch --out $out --uuid $uuid rule pn-part-search-list description = pn-part-search-list supplier: $supplier command = $ee pn-part-search-list {{ log }} --in $in --out $out --supplier $supplier rule part-apply-function command = $ee part-apply-function {{ log }} --execution $execution --in $in --out $out $functions $arguments rule part-apply-souffle-pre command = $ee part-apply-souffle-pre {{ log }} --in $in --work $work rule souffle command = souffle $ -F $work/in -D $work/out $ --no-warn $ -I $work $ -I "{{ souffle_ee_src }}" $in rule part-apply-souffle-post command = $ee part-apply-souffle-post {{ log }} --in $in_sch --out $out --work $work rule part-find-requirements command = $ee part-find-requirements {{ log }} --in $in --out $out $report rule part-validate-parts command = $ee part-validate-parts {{ log }} --bom $bom --sch $sch --report $out --part-db $part_dbs rule digikey-search-parts command = $ee digikey-search-parts {{ log }} --in $in --out $out rule element14-search-parts command = $ee element14-search-parts {{ log }} --in $in --out $out rule create-bom command = $ee create-bom {{ log }} --schematic $schematic --part-db $part_dbs --out $out $strategy rule split-bom-by-supplier command = $ee split-bom-by-supplier {{ log }} --bom $in $part_dbs $suppliers $orders rule import-parts-yaml description = import-parts-yaml $in command = $ee import-parts-yaml {{ log }} --in $in --out $out rule drawio-decompress command = $ee drawio-decompress {{ log }} --in $in --out $out rule drawio-to-parts command = $ee drawio-to-parts {{ log }} --in $in --out $out $args rule part-from-excel command = $ee part-from-excel {{ log }} --in $in --out $out --sheet "$sheet" {% if gerber_zip is defined %} {%- set idx=(gerber_zip | parent_dir) + '/.idx' %} build {{ idx }}: kicad-gerber $pcb dir = {{ gerber_zip | parent_dir }} build {{ gerber_zip }}: mkzip {{ idx }} build gerbers: phony {{ gerber_zip }} default gerbers {%- endif %} {% if sch is defined -%} {%- set cfg = project.cfg["kicad-project"] %} build $public_dir/kicad/sch.xml: kicad-make-bom $sch {# build $public_dir/sch.xml: part-apply-function $public_dir/kicad/sch.xml execution = kicad {%- if cfg and "functions" in cfg and cfg["functions"] %} functions = --function {{ cfg["functions"] }} {%- endif %} {%- if cfg and "function-arguments" in cfg and cfg["function-arguments"] %} arguments = --argument {{ cfg["function-arguments"] }} {%- endif %} #} build $public_dir/kicad/souffle/facts.dl: part-apply-souffle-pre $public_dir/kicad/sch.xml work = $public_dir/kicad/souffle build $public_dir/kicad/souffle/out/fact.csv: souffle {{ kicad_souffle_dl if kicad_souffle_dl else souffle_ee_src + "/kicad.dl" }} | $public_dir/kicad/souffle/facts.dl work = $public_dir/kicad/souffle {#- includes = {{ (souffle_ee_src + "/kicad.dl") if kicad_souffle_dl else "" }}#} build $public_dir/sch.xml: part-apply-souffle-post $public_dir/kicad/souffle/out/fact.csv in_sch = $public_dir/kicad/sch.xml work = $public_dir/kicad/souffle {%- endif %} build $report_dir/part-validate-parts.rst: part-validate-parts $public_dir/bom.xml $public_dir/sch.xml sch = $public_dir/sch.xml bom = $public_dir/bom.xml part_dbs ={%- for s in suppliers %} {{ s.part_db }}{% endfor %} {%- set reports=reports+["$report_dir/part-validate-parts.rst"] %} {#- TODO: complete build $public_dir/requirements.xml | $report_dir/requirements.rst: part-find-requirements $public_dir/sch.xml report = --report $report_dir/requirements.rst {%- set reports=reports+["$report_dir/requirements.rst"] %} #} {% for s in suppliers %} {%- set cfg = project.cfg["supplier:" + s.key] if "supplier:" + s.key in project.cfg else None %} # Supplier {{ s.key }} build $public_dir/{{ s.key }}/pn-part-search-list.xml: pn-part-search-list $public_dir/sch.xml supplier = {{ s.key }} build $public_dir/{{ s.key }}/downloaded.xml | $public_dir/{{ s.key }}/downloaded.rst: {{ s.key }}-search-parts $public_dir/{{ s.key }}/pn-part-search-list.xml {%- set reports=reports+["$report_dir/" + s.key + "/downloaded.rst"] %} {# build $public_dir/{{ s.key }}/parts.xml: part-apply-function $public_dir/{{ s.key }}/downloaded.xml execution = {{ s.key }} {%- if cfg and "functions" in cfg and cfg["functions"] %} functions = --function {{ cfg["functions"] }} {%- endif %} {%- if cfg and "function-arguments" in cfg and cfg["function-arguments"] %} arguments = --argument {{ cfg["function-arguments"] }} {%- endif %} #} build $public_dir/{{ s.key }}/souffle/facts.dl: part-apply-souffle-pre $public_dir/{{ s.key }}/downloaded.xml work = $public_dir/{{ s.key }}/souffle {%- set main=souffle_ee_src + "/" + s.key + ".dl" %} {%- set alt="$public_dir/custom/" + s.key + "-souffle.dl" %} build $public_dir/{{ s.key }}/souffle/out/fact.csv: souffle {{ alt if is_file(alt) else main }} | {{ main }} $public_dir/{{ s.key }}/souffle/facts.dl work = $public_dir/{{ s.key }}/souffle build {{ s.part_db }}: part-apply-souffle-post $public_dir/{{ s.key }}/souffle/out/fact.csv in_sch = $public_dir/{{ s.key }}/downloaded.xml work = $public_dir/{{ s.key }}/souffle rule {{ s.key }}-create-bom command = $ee {{ s.key }}-create-bom {{ log }} --bom $in --out $out $part_dbs --allow-incomplete build {{ s.bom_output }}: {{ s.key }}-create-bom {{ s.bom_input }} part_dbs = --part-db {{ s.part_db }} {%- endfor %} {%- for f in parts_yaml_files %} {% set out=(f | parent_dir) / ((f | noext) + ".xml") %} build {{ out }}: import-parts-yaml {{ f }} # default {{ out }} {% endfor %} build $public_dir/bom.xml | $report_dir/bom.rst: create-bom $public_dir/sch.xml {%- for s in suppliers %} {{ s.part_db }}{% endfor %} schematic = $public_dir/sch.xml part_dbs = {%- for s in suppliers %} {{ s.part_db }}{% endfor %} {%- if project.cfg["create-bom"] and project.cfg["create-bom"]["strategy"] %} strategy = --strategy {{ project.cfg["create-bom"]["strategy"] }} {%- endif %} {%- set reports=reports+["$report_dir/bom.rst"] %} build {%- for s in suppliers %} {{ s.bom_input }}{% endfor %}: split-bom-by-supplier $public_dir/bom.xml | {%- for s in suppliers %} {{ s.part_db }}{% endfor %} part_dbs = {%- for s in suppliers %} --part-db {{ s.part_db }}{% endfor %} suppliers = {%- for s in suppliers %} --supplier {{ s.key }}={{ s.supplier.uri }}{% endfor %} orders = {%- for s in suppliers %} --order {{ s.key }}={{ s.bom_input }}{% endfor %} rule seeed-download-opl description = seeed-download-opl $opl command = $ee seeed-download-opl --out $out --opl $opl {%- if project.cfg.has_section("seeed-opl") %} {%- set opls=project.cfg["seeed-opl"]["opls"].split(",") %} build seeed-download-opls: phony {%- for opl in opls %} $public_dir/seeed/opl/{{ opl.strip() }}.xml{% endfor %} {%- for opl in opls %} {%- set opl=opl.strip() %} build $public_dir/seeed/opl/{{ opl }}.xml: seeed-download-opl opl = {{ opl }} {%- endfor %} {%- endif %} # Reports build ee-reports: phony {{ " ".join(reports) }} build ee-part-dbs: phony {%- for s in suppliers %} {{ s.part_db }}{% endfor %} build ee-orders: phony {%- for s in suppliers %} {{ s.bom_output }}{% endfor %} build ee-all: phony ee-reports ee-orders