1+ from subprocess import check_output , CalledProcessError
12from enum import Enum
23from shellblocks .compiler_archs .mips import CompilerArchMIPSBE , CompilerArchMIPSLE
34from shellblocks .compiler_archs .arm import CompilerArchARMLE
@@ -14,17 +15,42 @@ class CompilerArchOption(Enum):
1415 X86_64 = "x86_64"
1516
1617
18+ def get_current_platform ():
19+ try :
20+ machine_bytes = check_output (["gcc" , "-dumpmachine" ])
21+ except FileNotFoundError :
22+ return None
23+ except CalledProcessError :
24+ return None
25+
26+ machine = machine_bytes .decode ()
27+
28+ if "mips-" in machine :
29+ return CompilerArchOption .MIPSBE
30+ if "mipsel-" in machine :
31+ return CompilerArchOption .MIPSLE
32+ if "arm-" in machine :
33+ return CompilerArchOption .ARMLE
34+ if "x86_64-" in machine :
35+ return CompilerArchOption .X86_64
36+
37+ return None
38+
39+
1740def compiler_arch_to_object (arch : CompilerArchOption ) -> CompilerArch :
41+ current_platform = get_current_platform ()
42+ use_main_gcc = (current_platform == arch )
43+
1844 if arch == CompilerArchOption .MIPSBE :
19- return CompilerArchMIPSBE ()
45+ return CompilerArchMIPSBE (use_main_gcc )
2046 elif arch == CompilerArchOption .MIPSLE :
21- return CompilerArchMIPSLE ()
47+ return CompilerArchMIPSLE (use_main_gcc )
2248 elif arch == CompilerArchOption .ARMLE :
23- return CompilerArchARMLE ()
49+ return CompilerArchARMLE (use_main_gcc )
2450 elif arch == CompilerArchOption .X86 :
25- return CompilerArchX86 ()
51+ return CompilerArchX86 (CompilerArchOption . X86_64 == current_platform )
2652 elif arch == CompilerArchOption .X86_64 :
27- return CompilerArchX86_64 ()
53+ return CompilerArchX86_64 (use_main_gcc )
2854
2955 raise NotImplementedError ()
3056
0 commit comments