4
4
import json
5
5
import logging
6
6
import os
7
- from pathlib import Path
8
7
import shutil
9
8
import subprocess
10
- from typing import TYPE_CHECKING , Dict , List , Optional , Union , Any
9
+ from pathlib import Path
10
+ from typing import TYPE_CHECKING , Any , Dict , List , Optional , Union
11
11
12
12
from crytic_compile .compilation_unit import CompilationUnit
13
13
from crytic_compile .compiler .compiler import CompilerVersion
14
14
from crytic_compile .platform .exceptions import InvalidCompilation
15
- from crytic_compile .platform .solc import Solc , get_version , is_optimized , relative_to_short
15
+ from crytic_compile .platform .solc import (
16
+ Solc ,
17
+ get_version ,
18
+ is_optimized ,
19
+ relative_to_short ,
20
+ )
16
21
from crytic_compile .platform .types import Type
17
22
from crytic_compile .utils .naming import convert_filename
18
23
@@ -166,7 +171,6 @@ def run_solc_standard_json(
166
171
" " .join (cmd ),
167
172
)
168
173
try :
169
-
170
174
with subprocess .Popen (
171
175
cmd ,
172
176
stdin = subprocess .PIPE ,
@@ -176,7 +180,6 @@ def run_solc_standard_json(
176
180
executable = shutil .which (cmd [0 ]),
177
181
** additional_kwargs ,
178
182
) as process :
179
-
180
183
stdout_b , stderr_b = process .communicate (json .dumps (solc_input ).encode ("utf-8" ))
181
184
stdout , stderr = (
182
185
stdout_b .decode (),
@@ -457,7 +460,7 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: Any) -> None:
457
460
Args:
458
461
crytic_compile (CryticCompile): Associated CryticCompile object
459
462
**kwargs: optional arguments. Used: "solc", "solc_disable_warnings", "solc_args", "solc_working_dir",
460
- "solc_remaps"
463
+ "solc_remaps", "solc_env"
461
464
"""
462
465
463
466
solc : str = kwargs .get ("solc" , "solc" )
@@ -466,13 +469,16 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: Any) -> None:
466
469
467
470
solc_remaps : Optional [Union [str , List [str ]]] = kwargs .get ("solc_remaps" , None )
468
471
solc_working_dir : Optional [str ] = kwargs .get ("solc_working_dir" , None )
472
+ solc_env : Optional [Dict ] = kwargs .get ("solc_env" , None )
469
473
470
474
compilation_unit = CompilationUnit (crytic_compile , "standard_json" )
471
475
472
476
compilation_unit .compiler_version = CompilerVersion (
473
477
compiler = "solc" ,
474
- version = get_version (solc , None ),
475
- optimized = is_optimized (solc_arguments ),
478
+ version = get_version (solc , solc_env ),
479
+ optimized = is_optimized (solc_arguments )
480
+ or self .to_dict ().get ("settings" , {}).get ("optimizer" , {}).get ("enabled" , False ),
481
+ optimize_runs = self .to_dict ().get ("settings" , {}).get ("optimizer" , {}).get ("runs" , None ),
476
482
)
477
483
478
484
add_optimization (
@@ -493,6 +499,7 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: Any) -> None:
493
499
self .to_dict (),
494
500
compilation_unit .compiler_version ,
495
501
solc_disable_warnings = solc_disable_warnings ,
502
+ working_dir = solc_working_dir ,
496
503
)
497
504
498
505
parse_standard_json_output (
0 commit comments