From 7e800a9929717a35e012e5458494435f1a118a93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20P=C5=99evr=C3=A1til?= Date: Wed, 9 Oct 2024 18:49:01 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Optimize=20non-AST=20compi?= =?UTF-8?q?lation=20on=20CLI=20with=20Solidity=20>=3D=200.8.28?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wake/compiler/compiler.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/wake/compiler/compiler.py b/wake/compiler/compiler.py index a89ed362..1aca1864 100644 --- a/wake/compiler/compiler.py +++ b/wake/compiler/compiler.py @@ -648,6 +648,25 @@ def create_build_settings( return settings + @staticmethod + def optimize_build_settings( + settings: SolcInputSettings, + modified_source_units: Iterable[str], + ) -> SolcInputSettings: + if settings.output_selection is not None and "*" in settings.output_selection["*"]: + new_selection = {} + if "" in settings.output_selection["*"]: + new_selection[""] = settings.output_selection["*"][""] + + for source_unit in modified_source_units: + new_selection[source_unit] = settings.output_selection["*"]["*"] + + ret = settings.model_copy() + ret.output_selection = new_selection + return ret + else: + return settings + def determine_solc_versions( self, compilation_units: Iterable[CompilationUnit], @@ -1006,6 +1025,7 @@ async def compile( files_to_compile = set( source_units_to_paths[source_unit] for source_unit in graph.nodes ) + source_units_to_compile = set(graph.nodes) if not incremental: compilation_units = self.merge_compilation_units( @@ -1027,6 +1047,7 @@ async def compile( # TODO this is not needed? graph contains hash of modified files # files_to_compile = set(modified_files.keys()) files_to_compile = set() + source_units_to_compile = set() for source_unit in graph.nodes: if ( @@ -1037,6 +1058,7 @@ async def compile( != graph.nodes[source_unit]["hash"] ): files_to_compile.add(source_units_to_paths[source_unit]) + source_units_to_compile.add(source_unit) for source_unit, info in self._latest_build_info.source_units_info.items(): if source_unit not in graph.nodes: @@ -1117,11 +1139,16 @@ async def compile( tasks = [] for compilation_unit, target_version in zip(compilation_units, target_versions): + if target_version >= "0.8.28": + settings = self.optimize_build_settings(build_settings[compilation_unit.subproject], compilation_unit.source_unit_names & source_units_to_compile) + else: + settings = build_settings[compilation_unit.subproject] + task = asyncio.create_task( self.compile_unit_raw( compilation_unit, target_version, - build_settings[compilation_unit.subproject], + settings, logger, ) )