@@ -936,7 +936,63 @@ def get_frameworks_in_current_env():
936936 env .AddPostAction ("checkprogsize" , silent_action )
937937
938938 if IS_WINDOWS :
939- env .AddBuildMiddleware (smart_include_length_shorten )
939+ # Integrate smart_include_length_shorten with existing middlewares
940+ existing_middlewares = list (env .get ("__PIO_BUILD_MIDDLEWARES" , []))
941+
942+ if existing_middlewares :
943+ # Wrap user middlewares to work together with smart_include_length_shorten
944+ def integrated_middleware (env , node ):
945+ # Create a custom env.Object wrapper that intercepts calls
946+ original_object = env .Object
947+ result_holder = {"result" : None , "called" : False }
948+
949+ def custom_object_wrapper (_node , ** kwargs ):
950+ # User middleware called env.Object - capture it
951+ result_holder ["called" ] = True
952+ result_holder ["kwargs" ] = kwargs
953+ # Don't actually compile yet, just return a marker
954+ return None
955+
956+ # Temporarily replace env.Object
957+ env .Object = custom_object_wrapper
958+
959+ # Call user middleware - it will call our wrapper
960+ for middleware_func , _ in existing_middlewares :
961+ middleware_func (env , node )
962+
963+ # Restore original env.Object
964+ env .Object = original_object
965+
966+ # Now compile with smart_include_length_shorten
967+ if result_holder ["called" ] and result_holder .get ("kwargs" ):
968+ # User middleware wants custom flags - merge them
969+ user_kwargs = result_holder ["kwargs" ]
970+
971+ # Temporarily apply user's custom flags to env
972+ old_values = {}
973+ for key , value in user_kwargs .items ():
974+ if key in env :
975+ old_values [key ] = env [key ]
976+ env [key ] = value
977+
978+ # Compile with smart_include_length_shorten
979+ result = smart_include_length_shorten (env , node )
980+
981+ # Restore original env values
982+ for key , value in old_values .items ():
983+ env [key ] = value
984+
985+ return result
986+ else :
987+ # No custom flags, just use smart_include_length_shorten
988+ return smart_include_length_shorten (env , node )
989+
990+ # Replace all middlewares with the integrated one
991+ env ["__PIO_BUILD_MIDDLEWARES" ] = []
992+ env .AddBuildMiddleware (integrated_middleware )
993+ else :
994+ # No user middlewares, just add smart_include_length_shorten
995+ env .AddBuildMiddleware (smart_include_length_shorten )
940996
941997 build_script_path = str (Path (FRAMEWORK_DIR ) / "tools" / "pioarduino-build.py" )
942998 SConscript (build_script_path )
0 commit comments