2025-11-26 10:46:44 +01:00
|
|
|
# KiCad WebAssembly Port
|
|
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
Run KiCad PCBnew in the browser using WebAssembly.
|
2025-11-26 10:46:44 +01:00
|
|
|
|
2026-01-03 07:31:46 +01:00
|
|
|
## Quick Start
|
|
|
|
|
|
|
|
|
|
### Full Build (KiCad + All Tests)
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 1. Initialize submodules
|
|
|
|
|
git submodule update --init --recursive
|
|
|
|
|
|
|
|
|
|
# 2. Build KiCad WASM (Docker, ~10 min incremental, ~1-2 hours full)
|
|
|
|
|
./docker/build.sh
|
|
|
|
|
|
|
|
|
|
# 3. Build wxWidgets for local testing
|
|
|
|
|
./scripts/build-wxuniversal-wasm.sh
|
|
|
|
|
|
|
|
|
|
# 4. Build wxWidgets test apps
|
|
|
|
|
./scripts/build-wasm-test.sh
|
|
|
|
|
|
|
|
|
|
# 5. Run all tests
|
|
|
|
|
cd tests && npm install
|
|
|
|
|
npm test # wxWidgets tests (256 tests)
|
|
|
|
|
npm run test:kicad # KiCad tests (2 tests)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### wxWidgets Only (No Docker)
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-03-13 12:26:48 +01:00
|
|
|
# Requires: Node.js 18+ (Emscripten SDK auto-installed on first build)
|
2026-01-03 07:31:46 +01:00
|
|
|
./scripts/build-wxuniversal-wasm.sh
|
|
|
|
|
./scripts/build-wasm-test.sh
|
|
|
|
|
cd tests && npm install && npm test
|
|
|
|
|
```
|
|
|
|
|
|
2025-11-26 10:46:44 +01:00
|
|
|
## Project Structure
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
kicad-wasm/
|
2025-12-27 11:13:17 +01:00
|
|
|
├── kicad/ # KiCad source (git submodule)
|
|
|
|
|
├── wxwidgets/ # wxWidgets source (git submodule)
|
|
|
|
|
├── wasm/ # WASM compatibility layer
|
2025-12-27 14:06:23 +01:00
|
|
|
│ ├── bindings/ # Embind bindings for JavaScript
|
|
|
|
|
│ ├── cmake/ # CMake find modules
|
2025-12-27 11:13:17 +01:00
|
|
|
│ ├── kiplatform/ # Platform abstraction (app, UI, printing)
|
|
|
|
|
│ ├── libcontext/ # Coroutine/fiber implementation
|
2025-12-27 14:06:23 +01:00
|
|
|
│ ├── shims/ # Runtime JavaScript shims
|
|
|
|
|
│ └── stubs/ # Stub implementations (libgit2, curl)
|
2025-12-27 11:13:17 +01:00
|
|
|
├── scripts/ # Build scripts
|
|
|
|
|
│ ├── build-wxuniversal-wasm.sh # Build wxWidgets for WASM
|
|
|
|
|
│ ├── build-wasm-test.sh # Build wxWidgets test apps
|
|
|
|
|
│ ├── deps/ # Dependency build scripts
|
|
|
|
|
│ ├── kicad/ # KiCad build scripts
|
2025-12-27 14:06:23 +01:00
|
|
|
│ ├── common/ # Shared utilities
|
|
|
|
|
│ └── config/ # Build config wrappers
|
2025-12-27 11:13:17 +01:00
|
|
|
├── docker/ # Docker build environment
|
|
|
|
|
├── tests/ # Playwright E2E tests
|
2025-12-27 14:06:23 +01:00
|
|
|
│ ├── e2e/ # Test specs
|
|
|
|
|
│ └── apps/ # WASM test applications
|
|
|
|
|
├── tools/ # External tools (binaryen)
|
|
|
|
|
└── output/ # Build output (pcbnew.js, pcbnew.wasm)
|
2025-11-26 10:46:44 +01:00
|
|
|
```
|
|
|
|
|
|
2026-01-06 16:17:52 +01:00
|
|
|
## Feature Branches
|
|
|
|
|
|
|
|
|
|
Each feature branch has a folder in `features/<branch-name>/` containing:
|
|
|
|
|
- Documentation and research notes
|
|
|
|
|
- `root.patch` - changes to main repo
|
|
|
|
|
- `kicad.patch` - changes to KiCad fork
|
|
|
|
|
- `wxwidgets.patch` - changes to wxWidgets fork
|
|
|
|
|
|
|
|
|
|
Generate patches: `./scripts/create-feature-patches.sh [branch-name]`
|
|
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
## Two Build Workflows
|
2025-11-26 10:46:44 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
### 1. KiCad Build (Docker)
|
2025-11-26 10:46:44 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
Full KiCad PCBnew build using Docker:
|
2025-11-26 10:46:44 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
```bash
|
|
|
|
|
# Build KiCad WASM
|
|
|
|
|
./docker/build.sh
|
2025-11-26 10:46:44 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
# Copy output to test directory
|
|
|
|
|
./tests/scripts/setup-kicad-wasm.sh
|
2025-11-26 10:46:44 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
# Run KiCad tests
|
|
|
|
|
cd tests && npm install && npm run test:kicad
|
|
|
|
|
```
|
2025-11-26 10:46:44 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
Output: `output/pcbnew.js`, `output/pcbnew.wasm`
|
2025-11-26 10:46:44 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
See [build.md](build.md) for detailed build documentation.
|
2025-11-26 16:33:48 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
### 2. wxWidgets Test Apps (Local)
|
2025-11-26 16:33:48 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
Build standalone wxWidgets test apps for feature testing:
|
2025-11-26 16:33:48 +01:00
|
|
|
|
|
|
|
|
```bash
|
2025-12-27 11:13:17 +01:00
|
|
|
# Build wxWidgets for WASM
|
|
|
|
|
./scripts/build-wxuniversal-wasm.sh
|
2025-11-26 16:33:48 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
# Build test apps
|
|
|
|
|
./scripts/build-wasm-test.sh
|
2025-11-26 16:33:48 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
# Run wxWidgets tests
|
|
|
|
|
cd tests && npm install && npm test
|
2025-11-26 16:33:48 +01:00
|
|
|
```
|
|
|
|
|
|
2025-12-27 14:06:23 +01:00
|
|
|
Output: `tests/apps/standalone/`
|
2025-11-26 10:46:44 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
## Prerequisites
|
2025-11-26 16:33:48 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
### For KiCad Build (Docker)
|
|
|
|
|
- Docker Desktop with 16GB+ RAM allocated
|
|
|
|
|
- 10+ GB disk space for build cache
|
2025-11-26 16:33:48 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
### For wxWidgets Build (Local)
|
|
|
|
|
- Node.js 18+ (for tests)
|
2026-03-13 12:26:48 +01:00
|
|
|
- Emscripten SDK (auto-installed on first build)
|
2025-11-26 16:33:48 +01:00
|
|
|
|
|
|
|
|
```bash
|
2025-12-27 11:13:17 +01:00
|
|
|
# Initialize submodules
|
|
|
|
|
git submodule update --init --recursive
|
2026-03-13 12:26:48 +01:00
|
|
|
|
|
|
|
|
# Install Emscripten SDK (auto-runs on first build, or run manually)
|
|
|
|
|
./scripts/setup-emsdk.sh
|
2025-12-27 11:13:17 +01:00
|
|
|
```
|
2025-11-26 16:33:48 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
## Testing
|
2025-11-26 16:33:48 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
```bash
|
|
|
|
|
cd tests
|
|
|
|
|
npm install
|
2025-11-26 16:33:48 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
# Run all tests
|
|
|
|
|
npm test
|
2025-11-26 16:33:48 +01:00
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
# Run specific tests
|
|
|
|
|
npm run test:kicad # KiCad tests only
|
|
|
|
|
npx playwright test menu # Menu tests only
|
2025-11-26 16:33:48 +01:00
|
|
|
```
|
|
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
See [tests/README.md](tests/README.md) for test documentation.
|
|
|
|
|
|
2025-11-26 16:33:48 +01:00
|
|
|
## Current Status
|
|
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
- **wxWidgets WASM**: Core widgets working (menus, dialogs, grids, trees, OpenGL)
|
|
|
|
|
- **KiCad PCBnew**: Builds and loads in browser, canvas rendering working
|
|
|
|
|
- **In Progress**: Testing wxWidgets features used by KiCad
|
|
|
|
|
|
|
|
|
|
## Documentation
|
|
|
|
|
|
|
|
|
|
- [Build System](build.md) - Docker build details
|
|
|
|
|
- [Docker README](docker/README.md) - Container setup
|
|
|
|
|
- [Tests README](tests/README.md) - Test infrastructure
|
2025-11-26 16:33:48 +01:00
|
|
|
|
2025-11-26 10:46:44 +01:00
|
|
|
## License
|
|
|
|
|
|
2025-12-27 11:13:17 +01:00
|
|
|
KiCad is GPL-3.0. This project follows the same license.
|