blob: e937a80ef02ef9ddbc07184d5b472ce04d54a1d9 [file] [log] [blame]
#!/usr/bin/python
from __future__ import print_function
import os
import sys
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,
"7fefe5b2-2588-11e9-996b-2bbad94f2d53")
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
os.execv(self.argv0, self.execargs)
def main(argv):
cw = CompilerWrapper(argv[1:])
cw.invoke_compiler()
if __name__ == "__main__":
main(sys.argv)