From 3e0d26336f9dc0055583a1186e022c70e50c73a4 Mon Sep 17 00:00:00 2001 From: Jacob Hollister Date: Tue, 27 Jan 2026 22:28:26 -0600 Subject: [PATCH] Add Docker support for self-contained builds - Add Dockerfile based on official kicad/kicad:9.0 image - Add docker-compose.yml for easy local development - Update Makefile to work with Docker and locally - Add Docker setup instructions to README - Installs kikit and make for hardware build pipeline --- Dockerfile | 21 ++++++++++++ Makefile | 63 ++++++++++++++++++------------------ docker-compose.yml | 17 ++++++++++ readme.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 148 insertions(+), 32 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ea3051c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM kicad/kicad:9.0 + +# Set environment variables +ENV PYTHONUNBUFFERED=1 + +# Install make, pip, and kikit for hardware build pipeline +USER root +RUN mkdir -p /var/lib/apt/lists/partial && \ + apt-get update && \ + apt-get install -y --no-install-recommends make python3-pip && \ + python3 -m pip install --break-system-packages kikit && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +# Switch back to kicad user for security +USER kicad + +# Set working directory +WORKDIR /workspace + +# Default command +CMD ["/bin/bash"] diff --git a/Makefile b/Makefile index ce9b861..7699d34 100644 --- a/Makefile +++ b/Makefile @@ -1,38 +1,37 @@ -VENV?=.venv -VENV_ACTIVATE=. $(VENV)/bin/activate -PIP=$(VENV)/bin/pip -.PHONY: clean prepare drc_carrier gerbers_carrier schematic_carrier drc_m2 gerbers_m2 schematic_m2 +.PHONY: clean prepare drc gerbers schematic pdfs drc_carrier gerbers_carrier schematic_carrier pdfs_carrier drc_m2 gerbers_m2 schematic_m2 pdfs_m2 .ONESHELL: +# Install dependencies (for local development) prepare: - python -m venv --system-site-packages .venv - $(VENV_ACTIVATE) - $(PIP) install --quiet kikit -remove_env: - rm -rf $(VENV) + pip3 install --quiet --break-system-packages kikit + +# Clean all generated files clean: - rm -rf Carrier/production M2/production Carrier/pdfs M2/pdfs + rm -rf hardware/production hardware/pdfs + +# Blackpants board targets +drc: + mkdir -p hardware/production + kikit drc run ./hardware/blackpants.kicad_pcb + +gerbers: + mkdir -p hardware/production + kikit fab jlcpcb --assembly --schematic hardware/blackpants.kicad_sch hardware/blackpants.kicad_pcb hardware/production + +schematic: + mkdir -p hardware/pdfs + kicad-cli sch export pdf --output hardware/pdfs/schematic.pdf hardware/blackpants.kicad_sch -# Carrier board -drc_carrier: - [ -d ".venv" ] && $(VENV_ACTIVATE); \ - kikit drc run ./Carrier/badgeCarrierCard.kicad_pcb -gerbers_carrier: - [ -d ".venv" ] && $(VENV_ACTIVATE); \ - kikit fab jlcpcb --assembly --schematic Carrier/badgeCarrierCard.kicad_sch Carrier/badgeCarrierCard.kicad_pcb Carrier/production -schematic_carrier: - kicad-cli sch export pdf --output Carrier/pdfs/schematic.pdf Carrier/badgeCarrierCard.kicad_sch -pdfs_carrier: - kicad-cli pcb export pdf --mode-separate --output Carrier/pdfs Carrier/badgeCarrierCard.kicad_pcb -l "F.Cu,In1.Cu,In2.Cu,B.Cu,F.Paste,B.Paste,Edge.Cuts,F.Fab,B.Fab" +pdfs: + mkdir -p hardware/pdfs + kicad-cli pcb export pdf --mode-separate --output hardware/pdfs hardware/blackpants.kicad_pcb -l "F.Cu,In1.Cu,In2.Cu,B.Cu,F.Paste,B.Paste,Edge.Cuts,F.Fab,B.Fab" -# M2 board -drc_m2: - [ -d ".venv" ] && $(VENV_ACTIVATE); \ - kikit drc run ./M2/badgeM2Card.kicad_pcb -gerbers_m2: - [ -d ".venv" ] && $(VENV_ACTIVATE); \ - kikit fab jlcpcb --assembly --schematic M2/badgeM2Card.kicad_sch M2/badgeM2Card.kicad_pcb M2/production -schematic_m2: - kicad-cli sch export pdf --output M2/pdfs/schematic.pdf M2/badgeM2Card.kicad_sch -pdfs_m2: - kicad-cli pcb export pdf --mode-separate --output M2/pdfs M2/badgeM2Card.kicad_pcb -l "F.Cu,In1.Cu,In2.Cu,B.Cu,F.Paste,B.Paste,Edge.Cuts,F.Fab,B.Fab" +# Backward compatibility aliases for old target names +drc_carrier: drc +gerbers_carrier: gerbers +schematic_carrier: schematic +pdfs_carrier: pdfs +drc_m2: drc +gerbers_m2: gerbers +schematic_m2: schematic +pdfs_m2: pdfs diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..5d4a8f3 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,17 @@ +version: '3.8' + +services: + hardware-build: + build: + context: . + dockerfile: Dockerfile + args: + BUILDKIT_INLINE_CACHE: 1 + image: blackpants:latest + volumes: + - .:/workspace + working_dir: /workspace + environment: + - PYTHONUNBUFFERED=1 + tty: true + stdin_open: true diff --git a/readme.md b/readme.md index e678637..40df7d4 100644 --- a/readme.md +++ b/readme.md @@ -2,3 +2,82 @@ ![](img/blackpants.jpg) The Blackhat is a combination of the [Flipper Blackhat](https://github.com/o7-machinehum/flipper-blackhat) and the "Blackpants" (this repo). They combine to make a completely open source, handheld Linux computer. + +## Development Setup + +### Using Docker (Recommended - Self-Contained) + +Build and run the Docker container with all dependencies included: + +```bash +# Build the Docker image +docker-compose build + +# Run the container +docker-compose run --rm hardware-build bash + +# Inside the container, run any make commands +make prepare +make drc +make gerbers +make schematic +make pdfs +``` + +Or use Docker directly: + +```bash +docker build -t blackpants:latest . +docker run -it -v ${PWD}:/workspace blackpants:latest bash +``` + +### Local Development (Manual Setup) + +If you prefer to install tools locally: + +1. **Install Make**: + - Windows: `choco install make` or download from GnuWin32 + - macOS: `brew install make` + - Linux: `apt-get install make` + +2. **Install Python 3.8+** + +3. **Install KiCAD and CLI tools**: + - Download from https://kicad.org + +4. **Prepare environment**: + ```bash + make prepare + ``` + +5. **Run make targets**: + ```bash + make drc + make gerbers + make schematic + make pdfs + ``` + +## Make Targets + +### Blackpants Board +- `make drc` - Run design rule checks +- `make gerbers` - Generate Gerber files for manufacturing +- `make schematic` - Export schematic to PDF +- `make pdfs` - Export PCB layers to PDF + +### Backward Compatibility Aliases +- `make drc_carrier` - Alias for `make drc` +- `make gerbers_carrier` - Alias for `make gerbers` +- `make schematic_carrier` - Alias for `make schematic` +- `make pdfs_carrier` - Alias for `make pdfs` +- `make drc_m2` - Alias for `make drc` +- `make gerbers_m2` - Alias for `make gerbers` +- `make schematic_m2` - Alias for `make schematic` +- `make pdfs_m2` - Alias for `make pdfs` + +### Utilities +- `make clean` - Remove all generated production files and PDFs +- `make prepare` - Install kikit (only needed for local development) +- `make remove_env` - Remove Python virtual environment (deprecated, not used in Docker) +