| #!/usr/bin/python |
| |
| from __future__ import print_function |
| import os |
| import sys |
| import time |
| |
| class CompilerWrapper(): |
| def __init__(self, argv): |
| self.args = argv |
| self.execargs = [] |
| self.real_compiler = None |
| self.argv0 = None |
| self.append_flags = [] |
| self.prepend_flags = [] |
| self.custom_flags = { |
| '--gomacc-path': None |
| } |
| |
| def set_real_compiler(self): |
| """Find the real compiler with the absolute path.""" |
| compiler_path = os.path.dirname(os.path.abspath(__file__)) |
| if os.path.islink(__file__): |
| compiler = os.path.basename(os.readlink(__file__)) |
| else: |
| compiler = os.path.basename(os.path.abspath(__file__)) |
| self.real_compiler = os.path.join( |
| compiler_path, |
| "40337694-a816-11e9-ad6c-9bcb01b061bd") |
| self.argv0 = self.real_compiler |
| |
| def process_gomacc_command(self): |
| """Return the gomacc command if '--gomacc-path' is set.""" |
| gomacc = self.custom_flags['--gomacc-path'] |
| if gomacc and os.path.isfile(gomacc): |
| self.argv0 = gomacc |
| self.execargs += [gomacc] |
| |
| def parse_custom_flags(self): |
| i = 0 |
| args = [] |
| while i < len(self.args): |
| if self.args[i] in self.custom_flags: |
| self.custom_flags[self.args[i]] = self.args[i + 1] |
| i = i + 2 |
| else: |
| args.append(self.args[i]) |
| i = i + 1 |
| self.args = args |
| |
| def add_flags(self): |
| self.args = self.prepend_flags + self.args + self.append_flags |
| |
| def print_deprecation_warning(self): |
| print("Android GCC has been deprecated in favor of Clang, and will be removed from\n" |
| "Android in 2020-01 as per the deprecation plan in:\n" |
| "https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+/master/GCC_4_9_DEPRECATION.md\n\n", |
| file=sys.stderr) |
| |
| |
| def invoke_compiler(self): |
| self.print_deprecation_warning() |
| self.set_real_compiler() |
| self.parse_custom_flags() |
| self.process_gomacc_command() |
| self.add_flags() |
| self.execargs += [self.real_compiler] + self.args |
| time.sleep(3) |
| os.execv(self.argv0, self.execargs) |
| |
| |
| def main(argv): |
| cw = CompilerWrapper(argv[1:]) |
| cw.invoke_compiler() |
| |
| if __name__ == "__main__": |
| main(sys.argv) |