From 05b36cb0f5ac65bef06ed5b42fa87dde31f9fad6 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Tue, 6 Jan 2026 12:19:42 +0100 Subject: [PATCH 1/4] Exclude node registry functions from desktop frontend builds This reduces compile times and file sizes --- Cargo.lock | 1 + frontend/wasm/Cargo.toml | 3 ++- node-graph/node-macro/Cargo.toml | 3 +++ node-graph/node-macro/src/codegen.rs | 40 +++++++++++++++------------- 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9aad2d2bbc..ce4bcaf338 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2481,6 +2481,7 @@ dependencies = [ "js-sys", "log", "math-parser", + "node-macro", "ron", "serde", "serde-wasm-bindgen", diff --git a/frontend/wasm/Cargo.toml b/frontend/wasm/Cargo.toml index a18b3facdf..a4d21762b9 100644 --- a/frontend/wasm/Cargo.toml +++ b/frontend/wasm/Cargo.toml @@ -14,7 +14,7 @@ license = "Apache-2.0" default = ["gpu", "shader-nodes"] gpu = ["editor/gpu"] shader-nodes = ["graphene-std/shader-nodes", "gpu"] -native = [] +native = ["node-macro/disable-registration"] [lib] crate-type = ["cdylib", "rlib"] @@ -39,6 +39,7 @@ wgpu = { workspace = true } web-sys = { workspace = true } ron = { workspace = true } serde_json = { workspace = true } +node-macro = { workspace = true } [package.metadata.wasm-pack.profile.dev] wasm-opt = false diff --git a/node-graph/node-macro/Cargo.toml b/node-graph/node-macro/Cargo.toml index a162ed7870..d8f9f5d568 100644 --- a/node-graph/node-macro/Cargo.toml +++ b/node-graph/node-macro/Cargo.toml @@ -13,6 +13,9 @@ license = "Apache-2.0" [lib] proc-macro = true +[features] +disable-registration = [] + [dependencies] # Workspace dependencies syn = { workspace = true } diff --git a/node-graph/node-macro/src/codegen.rs b/node-graph/node-macro/src/codegen.rs index 5758c7c0d8..49b04d959a 100644 --- a/node-graph/node-macro/src/codegen.rs +++ b/node-graph/node-macro/src/codegen.rs @@ -678,25 +678,29 @@ fn generate_register_node_impl(parsed: &ParsedNodeFn, field_names: &[&Ident], st } let registry_name = format_ident!("__node_registry_{}_{}", NODE_ID.fetch_add(1, std::sync::atomic::Ordering::SeqCst), struct_name); - Ok(quote! { + if cfg!(feature = "disable-registration") { + Ok(quote!()) + } else { + Ok(quote! { - #[cfg_attr(not(target_family = "wasm"), ctor)] - fn register_node() { - let mut registry = NODE_REGISTRY.lock().unwrap(); - registry.insert( - #identifier(), - vec![ - #(#constructors,)* - ] - ); - } - #[cfg(target_family = "wasm")] - #[unsafe(no_mangle)] - extern "C" fn #registry_name() { - register_node(); - register_metadata(); - } - }) + #[cfg_attr(not(target_family = "wasm"), ctor)] + fn register_node() { + let mut registry = NODE_REGISTRY.lock().unwrap(); + registry.insert( + #identifier(), + vec![ + #(#constructors,)* + ] + ); + } + #[cfg(target_family = "wasm")] + #[unsafe(no_mangle)] + extern "C" fn #registry_name() { + register_node(); + register_metadata(); + } + }) + } } use crate::crate_ident::CrateIdent; From e3dd798344eeb7e866f72a26b5f7b13e97860741 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Tue, 6 Jan 2026 12:28:43 +0100 Subject: [PATCH 2/4] Use early return --- node-graph/node-macro/src/codegen.rs | 42 ++++++++++++++-------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/node-graph/node-macro/src/codegen.rs b/node-graph/node-macro/src/codegen.rs index 49b04d959a..137f7ff8c7 100644 --- a/node-graph/node-macro/src/codegen.rs +++ b/node-graph/node-macro/src/codegen.rs @@ -679,28 +679,28 @@ fn generate_register_node_impl(parsed: &ParsedNodeFn, field_names: &[&Ident], st let registry_name = format_ident!("__node_registry_{}_{}", NODE_ID.fetch_add(1, std::sync::atomic::Ordering::SeqCst), struct_name); if cfg!(feature = "disable-registration") { - Ok(quote!()) - } else { - Ok(quote! { - - #[cfg_attr(not(target_family = "wasm"), ctor)] - fn register_node() { - let mut registry = NODE_REGISTRY.lock().unwrap(); - registry.insert( - #identifier(), - vec![ - #(#constructors,)* - ] - ); - } - #[cfg(target_family = "wasm")] - #[unsafe(no_mangle)] - extern "C" fn #registry_name() { - register_node(); - register_metadata(); - } - }) + return Ok(quote!()); } + + Ok(quote! { + + #[cfg_attr(not(target_family = "wasm"), ctor)] + fn register_node() { + let mut registry = NODE_REGISTRY.lock().unwrap(); + registry.insert( + #identifier(), + vec![ + #(#constructors,)* + ] + ); + } + #[cfg(target_family = "wasm")] + #[unsafe(no_mangle)] + extern "C" fn #registry_name() { + register_node(); + register_metadata(); + } + }) } use crate::crate_ident::CrateIdent; From 46be42f4429e3250f0e46b3799bfbd56c51b4c6b Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Tue, 6 Jan 2026 12:32:48 +0100 Subject: [PATCH 3/4] Fix branch name in build-linux pipeline --- .github/workflows/build-linux-bundle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-linux-bundle.yml b/.github/workflows/build-linux-bundle.yml index 25a1e814c5..fe2e4e4b50 100644 --- a/.github/workflows/build-linux-bundle.yml +++ b/.github/workflows/build-linux-bundle.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: {} push: branches: - - main + - master jobs: build: From 884982418a7a8254b746a47abbded215afad0e9b Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Tue, 6 Jan 2026 13:01:21 +0100 Subject: [PATCH 4/4] Still generate native registration functions --- node-graph/node-macro/src/codegen.rs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/node-graph/node-macro/src/codegen.rs b/node-graph/node-macro/src/codegen.rs index 137f7ff8c7..aebf163ceb 100644 --- a/node-graph/node-macro/src/codegen.rs +++ b/node-graph/node-macro/src/codegen.rs @@ -678,22 +678,25 @@ fn generate_register_node_impl(parsed: &ParsedNodeFn, field_names: &[&Ident], st } let registry_name = format_ident!("__node_registry_{}_{}", NODE_ID.fetch_add(1, std::sync::atomic::Ordering::SeqCst), struct_name); + let native = quote! { + #[cfg_attr(not(target_family = "wasm"), ctor)] + fn register_node() { + let mut registry = NODE_REGISTRY.lock().unwrap(); + registry.insert( + #identifier(), + vec![ + #(#constructors,)* + ] + ); + } + }; if cfg!(feature = "disable-registration") { - return Ok(quote!()); + return Ok(native); } Ok(quote! { + #native - #[cfg_attr(not(target_family = "wasm"), ctor)] - fn register_node() { - let mut registry = NODE_REGISTRY.lock().unwrap(); - registry.insert( - #identifier(), - vec![ - #(#constructors,)* - ] - ); - } #[cfg(target_family = "wasm")] #[unsafe(no_mangle)] extern "C" fn #registry_name() {