Add CMake override modules, stub implementations, and patches to build KiCad without CURL, libgit2, OpenCASCADE, and ngspice dependencies. - cmake/: Find modules that provide stub targets when deps disabled - stubs/include/: Header stubs for curl, git2, ngspice, OCC - stubs/src/: Implementation stubs for disabled features - patches/: Consolidated patch for KiCad source modifications - scripts/: Build helper scripts Verified full native build on macOS with all optional deps disabled. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
157 lines
4.5 KiB
Markdown
157 lines
4.5 KiB
Markdown
# KiCad WebAssembly Port
|
|
|
|
Experimental project to run KiCad's core logic in WebAssembly.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
kicad-wasm/
|
|
├── kicad/ # KiCad source (git submodule)
|
|
├── patches/ # Patches for KiCad source
|
|
│ └── 0001-wasm-optional-deps.patch
|
|
├── stubs/ # Stub implementations for disabled deps
|
|
│ ├── include/ # Stub headers
|
|
│ │ ├── curl/ # CURL stub headers
|
|
│ │ ├── git2.h # libgit2 stub header
|
|
│ │ ├── ngspice/ # ngspice stub headers
|
|
│ │ └── Standard_Version.hxx # OCC stub header
|
|
│ └── src/ # Stub source files
|
|
│ ├── disabled_features_stubs.cpp
|
|
│ ├── occ_stubs.cpp
|
|
│ ├── panel_git_repos_stub.cpp
|
|
│ └── kicad_git_all_stubs.cpp
|
|
├── cmake/ # CMake override modules
|
|
│ ├── FindCURL.cmake
|
|
│ ├── Findlibgit2.cmake
|
|
│ ├── Findngspice.cmake
|
|
│ └── FindOCC.cmake
|
|
├── scripts/ # Build scripts
|
|
└── docs/ # Documentation
|
|
```
|
|
|
|
## Goals
|
|
|
|
1. **Phase 1**: Build KiCad with optional deps disabled (curl, git, OCC, ngspice) ✅ **Complete**
|
|
2. **Phase 2**: Extract core computation code as standalone library
|
|
3. **Phase 3**: Compile core to WebAssembly
|
|
4. **Phase 4**: Run native GUI with Wasm worker backend
|
|
5. **Phase 5**: Browser-based UI
|
|
|
|
## Documentation
|
|
|
|
- [Implementation Plan](docs/IMPLEMENTATION_PLAN.md)
|
|
- [Knowledge Base (Summary)](docs/KNOWLEDGE_BASE.md)
|
|
- [Knowledge Base (Full)](docs/KNOWLEDGE_BASE_FULL.md)
|
|
|
|
## Design Decisions
|
|
|
|
- **Memory**: Serialize/deserialize on every operation (proof of concept)
|
|
- **Threading**: Web Workers (browser-first design)
|
|
- **Updates**: Full board re-serialization
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
|
|
- CMake 3.22+
|
|
- C++20 compiler (GCC 10+, Clang 12+, or MSVC 2019+)
|
|
- wxWidgets 3.2+
|
|
- Required libraries
|
|
|
|
#### macOS (Homebrew)
|
|
|
|
```bash
|
|
brew install cmake wxwidgets boost cairo pixman freetype harfbuzz fontconfig \
|
|
glm glew swig protobuf pkg-config nng python@3.14 zstd unixodbc
|
|
```
|
|
|
|
#### Ubuntu/Debian
|
|
|
|
```bash
|
|
sudo apt install cmake build-essential libwxgtk3.2-dev libboost-all-dev \
|
|
libcairo2-dev libpixman-1-dev libfreetype-dev libharfbuzz-dev \
|
|
libfontconfig-dev libglm-dev libglew-dev swig libprotobuf-dev \
|
|
protobuf-compiler libnng-dev python3-dev libzstd-dev
|
|
```
|
|
|
|
### Quick Start (with dependencies disabled)
|
|
|
|
```bash
|
|
# Clone with submodules
|
|
git clone --recursive <repo-url>
|
|
cd kicad-wasm
|
|
|
|
# Apply patches to KiCad source
|
|
cd kicad
|
|
git apply ../patches/0001-wasm-optional-deps.patch
|
|
cd ..
|
|
|
|
# Build
|
|
mkdir build && cd build
|
|
cmake ../kicad \
|
|
-DCMAKE_MODULE_PATH="$(pwd)/../cmake" \
|
|
-DKICAD_USE_CURL=OFF \
|
|
-DKICAD_USE_GIT=OFF \
|
|
-DKICAD_USE_OCC=OFF \
|
|
-DKICAD_USE_NGSPICE=OFF \
|
|
-DKICAD_SCRIPTING_WXPYTHON=OFF
|
|
make -j$(nproc)
|
|
```
|
|
|
|
### Build Options
|
|
|
|
| Option | Default | Description |
|
|
|--------|---------|-------------|
|
|
| `KICAD_USE_CURL` | ON | Enable network features (PCM, update check) |
|
|
| `KICAD_USE_GIT` | ON | Enable git integration |
|
|
| `KICAD_USE_OCC` | ON | Enable OpenCASCADE (STEP import/export) |
|
|
| `KICAD_USE_NGSPICE` | ON | Enable SPICE simulation |
|
|
| `KICAD_USE_DATABASE` | ON | Enable database libraries (ODBC) |
|
|
|
|
### Using the Build Script
|
|
|
|
```bash
|
|
# Build with all optional deps disabled (default)
|
|
./scripts/build.sh
|
|
|
|
# Build with specific features enabled
|
|
./scripts/build.sh --with-curl --with-git
|
|
|
|
# Clean build
|
|
./scripts/build.sh --clean
|
|
|
|
# Debug build
|
|
./scripts/build.sh --debug
|
|
|
|
# Just configure, don't build
|
|
./scripts/build.sh --configure-only
|
|
|
|
# See all options
|
|
./scripts/build.sh --help
|
|
```
|
|
|
|
## Current Status
|
|
|
|
### Phase 1 Complete
|
|
- CMake override modules for optional dependencies (FindOCC, Findngspice, FindCURL, Findlibgit2)
|
|
- Stub headers and implementations for disabled features
|
|
- KiCad source patches (`patches/0001-wasm-optional-deps.patch`)
|
|
- Full native build verified on macOS with all optional deps disabled
|
|
|
|
### Built Components
|
|
- `kicad` - Main application
|
|
- `kicad-cli` - Command line interface
|
|
- `_pcbnew.kiface` - PCB editor
|
|
- `_eeschema.kiface` - Schematic editor
|
|
- `_cvpcb.kiface` - Component to footprint association
|
|
- `_gerbview.kiface` - Gerber viewer
|
|
- `_pl_editor.kiface` - Page layout editor
|
|
- `_pcb_calculator.kiface` - PCB calculator
|
|
|
|
### Next Steps
|
|
- Verify build on Linux/Windows
|
|
- Begin Phase 2 (core library extraction)
|
|
|
|
## License
|
|
|
|
KiCad is GPL-3.0. This wrapper/tooling follows the same license.
|