pcbjam/wasm/stubs/libgit2_stub.c
Viktor Vaczi 898e079ef2 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>
2025-12-21 14:21:29 +01:00

274 lines
5.4 KiB
C

/* libgit2 stub for WebAssembly builds
* Git functionality is not available in browser, but KiCad needs these symbols
*/
#include <stddef.h>
/* Error handling */
typedef struct {
char *message;
int klass;
} git_error;
static git_error stub_error = { "Git not available in WebAssembly", 0 };
int git_libgit2_init(void) {
return 1; /* Return 1 to indicate "initialized" */
}
int git_libgit2_shutdown(void) {
return 0;
}
const git_error* git_error_last(void) {
return &stub_error;
}
/* Repository operations - all return failure */
int git_repository_open(void **out, const char *path) {
*out = NULL;
return -1;
}
int git_repository_head(void **out, void *repo) {
*out = NULL;
return -1;
}
void git_repository_free(void *repo) {
(void)repo;
}
/* Reference operations */
const void* git_reference_target(const void *ref) {
(void)ref;
return NULL;
}
void git_reference_free(void *ref) {
(void)ref;
}
/* OID operations */
char* git_oid_tostr(char *out, size_t n, const void *id) {
if (out && n > 0) {
out[0] = '\0';
}
return out;
}
int git_oid_cmp(const void *a, const void *b) {
(void)a;
(void)b;
return 0;
}
/* Index operations */
int git_repository_index(void **out, void *repo) {
(void)repo;
*out = NULL;
return -1;
}
int git_index_add_bypath(void *index, const char *path) {
(void)index;
(void)path;
return -1;
}
int git_index_write(void *index) {
(void)index;
return -1;
}
int git_index_write_tree(void *out, void *index) {
(void)out;
(void)index;
return -1;
}
void git_index_free(void *index) {
(void)index;
}
/* Reference name to ID */
int git_reference_name_to_id(void *out, void *repo, const char *name) {
(void)out;
(void)repo;
(void)name;
return -1;
}
/* Commit operations */
int git_commit_lookup(void **out, void *repo, const void *id) {
(void)repo;
(void)id;
*out = NULL;
return -1;
}
int git_commit_tree(void **out, const void *commit) {
(void)commit;
*out = NULL;
return -1;
}
int git_commit_create(void *id, void *repo, const char *update_ref,
const void *author, const void *committer,
const char *encoding, const char *message,
const void *tree, size_t parent_count, const void **parents) {
(void)id; (void)repo; (void)update_ref;
(void)author; (void)committer;
(void)encoding; (void)message;
(void)tree; (void)parent_count; (void)parents;
return -1;
}
void git_commit_free(void *commit) {
(void)commit;
}
/* Tree operations */
int git_tree_lookup(void **out, void *repo, const void *id) {
(void)repo;
(void)id;
*out = NULL;
return -1;
}
void git_tree_free(void *tree) {
(void)tree;
}
/* Diff operations */
int git_diff_tree_to_tree(void **diff, void *repo, void *old_tree, void *new_tree, const void *opts) {
(void)repo;
(void)old_tree;
(void)new_tree;
(void)opts;
*diff = NULL;
return -1;
}
size_t git_diff_num_deltas(const void *diff) {
(void)diff;
return 0;
}
void git_diff_free(void *diff) {
(void)diff;
}
/* Signature operations */
int git_signature_now(void **out, const char *name, const char *email) {
(void)name;
(void)email;
*out = NULL;
return -1;
}
void git_signature_free(void *sig) {
(void)sig;
}
/* Additional functions needed by local_history.cpp */
char* git_oid_tostr_s(const void *oid) {
(void)oid;
return ""; /* Return empty string - static buffer not needed for stub */
}
int git_diff_tree_to_index(void **diff, void *repo, void *old_tree, void *index, const void *opts) {
(void)repo;
(void)old_tree;
(void)index;
(void)opts;
*diff = NULL;
return -1;
}
const void* git_diff_get_delta(const void *diff, size_t idx) {
(void)diff;
(void)idx;
return NULL;
}
int git_patch_from_diff(void **out, void *diff, size_t idx) {
(void)diff;
(void)idx;
*out = NULL;
return -1;
}
int git_patch_line_stats(size_t *total_context, size_t *total_additions, size_t *total_deletions, const void *patch) {
(void)patch;
if (total_context) *total_context = 0;
if (total_additions) *total_additions = 0;
if (total_deletions) *total_deletions = 0;
return 0;
}
void git_patch_free(void *patch) {
(void)patch;
}
int git_repository_init(void **out, const char *path, unsigned int is_bare) {
(void)path;
(void)is_bare;
*out = NULL;
return -1;
}
int git_reference_lookup(void **out, void *repo, const char *name) {
(void)repo;
(void)name;
*out = NULL;
return -1;
}
int git_object_lookup(void **out, void *repo, const void *id, int type) {
(void)repo;
(void)id;
(void)type;
*out = NULL;
return -1;
}
int git_tag_create_lightweight(void *oid, void *repo, const char *tag_name, const void *target, int force) {
(void)oid;
(void)repo;
(void)tag_name;
(void)target;
(void)force;
return -1;
}
void git_object_free(void *object) {
(void)object;
}
int git_reference_delete(void *ref) {
(void)ref;
return -1;
}
/* Git config operations */
int git_config_open_default(void **out) {
*out = NULL;
return -1;
}
int git_config_get_entry(void **out, const void *cfg, const char *name) {
(void)cfg;
(void)name;
*out = NULL;
return -1;
}
void git_config_entry_free(void *entry) {
(void)entry;
}
void git_config_free(void *cfg) {
(void)cfg;
}