From 3258f1044da458cbd3ea65160e45ae1f10c7bb02 Mon Sep 17 00:00:00 2001 From: funman Date: Wed, 18 May 2011 20:04:20 +0000 Subject: [PATCH] thumb-cc.py: simplify git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29897 a1c6a512-1295-4272-9138-f99709370657 --- tools/thumb-cc.py | 122 +++++++++++++++++++----------------------------------- 1 file changed, 42 insertions(+), 80 deletions(-) rewrite tools/thumb-cc.py (62%) diff --git a/tools/thumb-cc.py b/tools/thumb-cc.py dissimilarity index 62% index 101528444..2c8347469 100755 --- a/tools/thumb-cc.py +++ b/tools/thumb-cc.py @@ -1,80 +1,42 @@ -#!/usr/bin/python -# -*- coding: utf8 -*- -# __________ __ ___. -# Open \______ \ ____ ____ | | _\_ |__ _______ ___ -# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -# \/ \/ \/ \/ \/ -# -# Copyright © 2010 Rafaël Carré -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# - -import sys -import os -import subprocess -import tempfile - - -def run_gcc(args): - os.execv(args[0], args) # run real gcc - -def get_output(args): - output = False - for i in args: - if output == True: - return i - elif i == '-o': - output = True - - -def try_thumb(args, output): - thumb_args = args + ['-mthumb'] - thumb_args[thumb_args.index('-o') + 1] = output - thumb_gcc = subprocess.Popen(thumb_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - (stdout, stderr) = thumb_gcc.communicate() - - if thumb_gcc.returncode != 0: # building failed - return False - - # building with thumb succeeded, show our output - #sys.stderr.write(bytes.decode(stderr)) - #sys.stdout.write(bytes.decode(stdout)) - sys.stderr.write(stderr) - sys.stdout.write(stdout) - return True - -##### main - - -args=sys.argv[1:] # remove script path - -for opt in ['-E', '-MM', '-v', '--version']: - if opt in args: - run_gcc(args) - -output = get_output(args) -split = output.rsplit('.o', 1) - -if len(split) == 1: # output doesn't end in .o - run_gcc(args) - -dirname = os.path.dirname(output) -thumb_output = tempfile.mktemp(suffix='.o', prefix=split[0], dir=dirname) - -args.append('-mthumb-interwork') - -if try_thumb(args, thumb_output): - os.rename(thumb_output, output) - sys.exit(0) -else: - #sys.stderr.write('skipped ' + os.path.basename(output) + '\n') - run_gcc(args) +#!/usr/bin/python +# -*- coding: utf8 -*- +# __________ __ ___. +# Open \______ \ ____ ____ | | _\_ |__ _______ ___ +# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / +# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < +# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ +# \/ \/ \/ \/ \/ +# +# Copyright © 2010-2011 Rafaël Carré +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. + +from sys import argv, stderr, stdout +from subprocess import Popen, PIPE +from os import execv + +args = argv[1:] # remove script path + +for opt in ['-E', '-MM', '-v', '--version']: + if opt in args: + execv(args[0], args) # not actually compiling + +if '-o' in args and args.index('-o') < len(args) - 1: + if len(args[args.index('-o') + 1].rsplit('.o', 1)) == 1: + execv(args[0], args) # output doesn't end in .o + +args.append('-mthumb-interwork') # thumb-interwork is required +gcc = Popen(args + ['-mthumb'], stdout=PIPE, stderr=PIPE) +(out, err) = gcc.communicate() + +if gcc.returncode != 0: # thumb failed, try outputting arm + execv(args[0], args) + +stdout.write(out) +stderr.write(err) -- 2.11.4.GIT