Enable 3D viewer in KiCad WASM build

Build the 3D viewer code for WASM instead of stubbing it out.
This is simpler to maintain than complex header stubs.

Changes:
- Enable KICAD_BUILD_3D_VIEWER_WASM=ON in build script
- Remove -gsource-map to avoid OOM in wasm-emscripten-finalize
- Add OpenGL stubs for fixed-function pipeline (WebGL ES 2.0 only)
- Add GLU stub for gluErrorString
- Add NNG stub for IPC API (sockets don't work in WASM)
- Add PCBnew scripting stub
- Expand curl and libgit2 stubs

The 3D viewer code compiles but won't render at runtime since
OpenGL GAL is disabled and Cairo GAL is used instead.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Viktor Vaczi 2025-12-21 14:21:29 +01:00
commit 898e079ef2
10 changed files with 1017 additions and 7 deletions

66
wasm/stubs/nng_stub.c Normal file
View file

@ -0,0 +1,66 @@
/*
* NNG stub implementation for KiCad WASM build
* Socket-based IPC is not supported in browsers.
* These stubs allow the code to compile but return errors indicating unsupported.
*/
#include "nng/nng.h"
// All NNG operations fail in WASM since sockets aren't available
// Using NNG_ENOENT as a generic "not available" error
int nng_rep0_open(nng_socket *s) {
if (s) {
s->id = -1;
}
return NNG_ENOENT;
}
int nng_listener_create(nng_listener *l, nng_socket s, const char *url) {
(void)s;
(void)url;
if (l) {
l->id = -1;
}
return NNG_ENOENT;
}
int nng_socket_set_ms(nng_socket s, const char *opt, nng_duration dur) {
(void)s;
(void)opt;
(void)dur;
return NNG_ENOENT;
}
int nng_listener_start(nng_listener l, int flags) {
(void)l;
(void)flags;
return NNG_ENOENT;
}
int nng_recv(nng_socket s, void *data, size_t *sizep, int flags) {
(void)s;
(void)data;
(void)sizep;
(void)flags;
return NNG_ENOENT;
}
int nng_send(nng_socket s, void *data, size_t size, int flags) {
(void)s;
(void)data;
(void)size;
(void)flags;
return NNG_ENOENT;
}
int nng_close(nng_socket s) {
(void)s;
return 0; // Close always succeeds
}
void nng_free(void *ptr, size_t size) {
(void)ptr;
(void)size;
// Nothing to free in stub
}