From a6c89ad9753c098b9fc7e13979c77583096f5f32 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Mon, 24 Nov 2025 08:41:13 +0100 Subject: [PATCH 1/3] Add optimized Cura build profile for mixed C++ standards Introduces cura_build_optimized.jinja to handle mixed C++ standard requirements across components, platform-specific options, and build optimizations. Includes settings for compiler standards, shared library configurations, plugin disabling, and parallelization for improved build performance. --- profiles/cura_build_optimized.jinja | 101 ++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 profiles/cura_build_optimized.jinja diff --git a/profiles/cura_build_optimized.jinja b/profiles/cura_build_optimized.jinja new file mode 100644 index 0000000..9b82f13 --- /dev/null +++ b/profiles/cura_build_optimized.jinja @@ -0,0 +1,101 @@ +include(default) + +# Optimized Cura Build Profile +# Generated based on C++ compatibility analysis +# Handles mixed C++ standard requirements across components + +[replace_requires] +{% if platform.system() == 'Linux' %} +# FIXME: once gRPC is updated to 1.67.0 or higher +# Using 255.10 or higher https://github.com/conan-io/conan-center-index/issues/24889 +# https://github.com/conan-io/conan-center-index/blob/879e140d9438ab491aceea766d0cf0ae3595dae8/recipes/grpc/all/conanfile.py#L122 +libsystemd/*: libsystemd/[>=255.10] +{% endif %} + +[settings] +# Default C++ standard for components that support it (libSavitar, libnest2d) +compiler.cppstd=17 + +# C++20 overrides for components that require it +curaengine*:compiler.cppstd=20 +curaengine_plugin_infill_generate*:compiler.cppstd=20 +curaengine_plugin_gradual_flow*:compiler.cppstd=20 +curaengine_grpc_definitions*:compiler.cppstd=20 +scripta*:compiler.cppstd=20 +umspatial*:compiler.cppstd=20 +dulcificum*:compiler.cppstd=20 +uvula*:compiler.cppstd=20 +curator/*:compiler.cppstd=20 +arcus*:compiler.cppstd=20 +pyarcus*:compiler.cppstd=20 + +# Optimize build type for release builds +build_type=Release + +[options] +# gRPC optimizations - disable unused plugins +asio-grpc/*:local_allocator=recycling_allocator +grpc/*:csharp_plugin=False +grpc/*:node_plugin=False +grpc/*:objective_c_plugin=False +grpc/*:php_plugin=False +grpc/*:ruby_plugin=False +grpc/*:python_plugin=False + +# Boost header-only for better compatibility +boost/*:header_only=True + +# Platform-specific optimizations +{% if platform.system() == 'Linux' %} +openssl/*:shared=True +{% endif %} + +# Python bindings - shared libraries for proper module loading +pyarcus/*:shared=True +pysavitar/*:shared=True +pynest2d/*:shared=True +cpython/*:shared=True +cpython/*:with_tkinter=False +cpython/*:with_curses=False + +# Python dependencies - required for ARM64 builds +mpdecimal/*:shared=True + +# Dulcificum library configuration +{% if platform.system() == 'Windows' %} +dulcificum/*:shared=False +{% else %} +dulcificum/*:shared=True +{% endif %} + +# Core library configurations +clipper/*:shared=True +arcus/*:shared=True + +# OneTBB configuration - disable tbbproxy for ARM64 compatibility +onetbb/*:tbbproxy=False + +# Optimization flags +{% if platform.system() == 'Windows' %} +curaengine/*:enable_more_compiler_optimization_flags=True +{% endif %} + +# Disable testing for faster builds +curaengine/*:enable_benchmarks=False +curaengine/*:enable_extensive_warnings=False + +[conf] +# Skip tests to speed up builds +tools.build:skip_test=True + +# Compiler-specific optimizations +{% if platform.system() == 'Windows' %} +tools.cmake.cmaketoolchain:generator=Ninja +{% endif %} + +# Memory optimization for large builds +tools.system.package_manager:mode=install +tools.system.package_manager:sudo=True + +# Build parallelization +tools.build:jobs={{ os.cpu_count() }} \ No newline at end of file From 362581e4a64b765dd6289fb0943de5d23c964c0e Mon Sep 17 00:00:00 2001 From: HellAholic Date: Tue, 2 Dec 2025 10:43:51 +0100 Subject: [PATCH 2/3] Update ARM64 Windows settings in cura.jinja, remove optimized profile Added specific shared library and option settings for ARM64 Windows in cura.jinja to improve compatibility. Removed the cura_build_optimized.jinja profile, consolidating build configuration into the main profile. --- profiles/cura.jinja | 8 +++ profiles/cura_build_optimized.jinja | 101 ---------------------------- 2 files changed, 8 insertions(+), 101 deletions(-) delete mode 100644 profiles/cura_build_optimized.jinja diff --git a/profiles/cura.jinja b/profiles/cura.jinja index 0d7f1a0..45ba58b 100644 --- a/profiles/cura.jinja +++ b/profiles/cura.jinja @@ -46,3 +46,11 @@ dulcificum/*:shared=False dulcificum/*:shared=True {% endif %} clipper/*:shared=True +{% if platform.system() == 'Windows' and platform.machine() in ['arm64', 'aarch64', 'ARM64'] %} +# ARM64 Windows: CPython requires mpdecimal as shared library +mpdecimal/*:shared=True +# ARM64 Windows: Arcus needs to be shared for proper Python binding +arcus/*:shared=True +# ARM64 Windows: Disable tbbproxy (not available on ARM64 platforms) +onetbb/*:tbbproxy=False +{% endif %} diff --git a/profiles/cura_build_optimized.jinja b/profiles/cura_build_optimized.jinja deleted file mode 100644 index 9b82f13..0000000 --- a/profiles/cura_build_optimized.jinja +++ /dev/null @@ -1,101 +0,0 @@ -include(default) - -# Optimized Cura Build Profile -# Generated based on C++ compatibility analysis -# Handles mixed C++ standard requirements across components - -[replace_requires] -{% if platform.system() == 'Linux' %} -# FIXME: once gRPC is updated to 1.67.0 or higher -# Using 255.10 or higher https://github.com/conan-io/conan-center-index/issues/24889 -# https://github.com/conan-io/conan-center-index/blob/879e140d9438ab491aceea766d0cf0ae3595dae8/recipes/grpc/all/conanfile.py#L122 -libsystemd/*: libsystemd/[>=255.10] -{% endif %} - -[settings] -# Default C++ standard for components that support it (libSavitar, libnest2d) -compiler.cppstd=17 - -# C++20 overrides for components that require it -curaengine*:compiler.cppstd=20 -curaengine_plugin_infill_generate*:compiler.cppstd=20 -curaengine_plugin_gradual_flow*:compiler.cppstd=20 -curaengine_grpc_definitions*:compiler.cppstd=20 -scripta*:compiler.cppstd=20 -umspatial*:compiler.cppstd=20 -dulcificum*:compiler.cppstd=20 -uvula*:compiler.cppstd=20 -curator/*:compiler.cppstd=20 -arcus*:compiler.cppstd=20 -pyarcus*:compiler.cppstd=20 - -# Optimize build type for release builds -build_type=Release - -[options] -# gRPC optimizations - disable unused plugins -asio-grpc/*:local_allocator=recycling_allocator -grpc/*:csharp_plugin=False -grpc/*:node_plugin=False -grpc/*:objective_c_plugin=False -grpc/*:php_plugin=False -grpc/*:ruby_plugin=False -grpc/*:python_plugin=False - -# Boost header-only for better compatibility -boost/*:header_only=True - -# Platform-specific optimizations -{% if platform.system() == 'Linux' %} -openssl/*:shared=True -{% endif %} - -# Python bindings - shared libraries for proper module loading -pyarcus/*:shared=True -pysavitar/*:shared=True -pynest2d/*:shared=True -cpython/*:shared=True -cpython/*:with_tkinter=False -cpython/*:with_curses=False - -# Python dependencies - required for ARM64 builds -mpdecimal/*:shared=True - -# Dulcificum library configuration -{% if platform.system() == 'Windows' %} -dulcificum/*:shared=False -{% else %} -dulcificum/*:shared=True -{% endif %} - -# Core library configurations -clipper/*:shared=True -arcus/*:shared=True - -# OneTBB configuration - disable tbbproxy for ARM64 compatibility -onetbb/*:tbbproxy=False - -# Optimization flags -{% if platform.system() == 'Windows' %} -curaengine/*:enable_more_compiler_optimization_flags=True -{% endif %} - -# Disable testing for faster builds -curaengine/*:enable_benchmarks=False -curaengine/*:enable_extensive_warnings=False - -[conf] -# Skip tests to speed up builds -tools.build:skip_test=True - -# Compiler-specific optimizations -{% if platform.system() == 'Windows' %} -tools.cmake.cmaketoolchain:generator=Ninja -{% endif %} - -# Memory optimization for large builds -tools.system.package_manager:mode=install -tools.system.package_manager:sudo=True - -# Build parallelization -tools.build:jobs={{ os.cpu_count() }} \ No newline at end of file From 413dfd540e3ea3d87d889c674def1b52dc9e4a98 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Tue, 2 Dec 2025 11:47:13 +0100 Subject: [PATCH 3/3] Improve OS and architecture detection for pip requirements Enhances the logic for selecting pip requirements by considering OS and architecture-specific keys, including normalized architecture names. This allows for more precise dependency resolution based on the target environment. --- extensions/generators/VirtualPythonEnv.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/extensions/generators/VirtualPythonEnv.py b/extensions/generators/VirtualPythonEnv.py index 65b4993..b847d9c 100644 --- a/extensions/generators/VirtualPythonEnv.py +++ b/extensions/generators/VirtualPythonEnv.py @@ -153,7 +153,26 @@ class VirtualPythonEnv: if hasattr(conanfile, "conan_data") and conanfile.conan_data is not None and data_key in conanfile.conan_data: pip_requirements_data = conanfile.conan_data[data_key] - for system in (system for system in pip_requirements_data if system in ("any_os", actual_os)): + + # Build list of applicable system keys: any_os, OS name, and OS_architecture combinations + actual_arch = str(conanfile.settings.arch) if hasattr(conanfile.settings, "arch") else None + system_keys = ["any_os", actual_os] + + # Add architecture-specific keys (e.g., "Windows_x64", "Linux_x86_64") + if actual_arch: + # Map Conan architecture names to common naming conventions + arch_mapping = { + "x86_64": "x64", + "armv8": "arm64", + "armv8_32": "arm", + } + normalized_arch = arch_mapping.get(actual_arch, actual_arch) + system_keys.append(f"{actual_os}_{normalized_arch}") + # Also try with original arch name + if normalized_arch != actual_arch: + system_keys.append(f"{actual_os}_{actual_arch}") + + for system in (system for system in pip_requirements_data if system in system_keys): for package_name, package_desc in pip_requirements_data[system].items(): try: