The goal here is to reduce the number of files that need to be edited when adding a new node. To register a node, one currently has to add a line to `node_geometry_register.cc` and `node_geometry_register.hh` (for geometry nodes). Those files can be generated automatically. There is a new `NOD_REGISTER_NODE` macro that nodes can use to register themselves. The macro is then discovered by `discover_nodes.py` that generates code that calls all the registration functions. The script also works when the register functions are in arbitrary namespaces. This allows simplifying the node code as well. In the past I tried a few times to get auto-registration working without resorting to code generation, but that never ended up working. The general idea for that would be to use non-trivial initialization for static variables. The issue always ends up being that the linker just discards those variables, because they are unused and it doesn't care if there are side effects in the initialization. Related discussion regarding using Python for code generation: https://devtalk.blender.org/t/code-generation-with-python/30558 Pull Request: https://projects.blender.org/blender/blender/pulls/110686
71 lines
1.5 KiB
CMake
71 lines
1.5 KiB
CMake
# SPDX-FileCopyrightText: 2021 Blender Foundation
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
set(INC
|
|
.
|
|
..
|
|
../intern
|
|
../../blenkernel
|
|
../../blentranslation
|
|
../../editors/include
|
|
../../functions
|
|
../../makesrna
|
|
../../windowmanager
|
|
)
|
|
|
|
set(INC_SYS
|
|
)
|
|
|
|
set(SRC
|
|
nodes/node_fn_align_euler_to_vector.cc
|
|
nodes/node_fn_boolean_math.cc
|
|
nodes/node_fn_combine_color.cc
|
|
nodes/node_fn_compare.cc
|
|
nodes/node_fn_float_to_int.cc
|
|
nodes/node_fn_input_bool.cc
|
|
nodes/node_fn_input_color.cc
|
|
nodes/node_fn_input_int.cc
|
|
nodes/node_fn_input_special_characters.cc
|
|
nodes/node_fn_input_string.cc
|
|
nodes/node_fn_input_vector.cc
|
|
nodes/node_fn_random_value.cc
|
|
nodes/node_fn_replace_string.cc
|
|
nodes/node_fn_rotate_euler.cc
|
|
nodes/node_fn_separate_color.cc
|
|
nodes/node_fn_slice_string.cc
|
|
nodes/node_fn_string_length.cc
|
|
nodes/node_fn_value_to_string.cc
|
|
|
|
node_function_util.cc
|
|
|
|
node_function_util.hh
|
|
)
|
|
|
|
set(LIB
|
|
PRIVATE bf::blenlib
|
|
PRIVATE bf::dna
|
|
bf_functions
|
|
PRIVATE bf::intern::guardedalloc
|
|
)
|
|
|
|
add_node_discovery(
|
|
bf_nodes_functions_generated
|
|
"${SRC}"
|
|
${CMAKE_CURRENT_BINARY_DIR}/register_function_nodes.cc
|
|
register_function_nodes
|
|
)
|
|
|
|
list(APPEND LIB
|
|
bf_nodes_functions_generated
|
|
)
|
|
|
|
|
|
blender_add_lib(bf_nodes_function "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
|
|
target_link_libraries(bf_nodes_functions_generated bf_nodes_function)
|
|
|
|
if(WITH_UNITY_BUILD)
|
|
set_target_properties(bf_nodes_function PROPERTIES UNITY_BUILD ON)
|
|
set_target_properties(bf_nodes_function PROPERTIES UNITY_BUILD_BATCH_SIZE 10)
|
|
endif()
|