summaryrefslogtreecommitdiffstats
path: root/tools/thumb-cc.py
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2011-05-18 20:04:20 +0000
committerRafaël Carré <rafael.carre@gmail.com>2011-05-18 20:04:20 +0000
commit9b6910c348fd9870d63e9d0736717f00bb2fbdf6 (patch)
tree6fd7dce073d2cb2a93082fd38152f73ee81d3a1f /tools/thumb-cc.py
parent7eb0db250cc1cfe54d7c061e7ffa65b34a058c1d (diff)
downloadrockbox-9b6910c348fd9870d63e9d0736717f00bb2fbdf6.tar.gz
rockbox-9b6910c348fd9870d63e9d0736717f00bb2fbdf6.tar.bz2
rockbox-9b6910c348fd9870d63e9d0736717f00bb2fbdf6.zip
thumb-cc.py: simplify
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29897 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'tools/thumb-cc.py')
-rwxr-xr-xtools/thumb-cc.py70
1 files changed, 16 insertions, 54 deletions
diff --git a/tools/thumb-cc.py b/tools/thumb-cc.py
index 1015284447..2c83474695 100755
--- a/tools/thumb-cc.py
+++ b/tools/thumb-cc.py
@@ -7,7 +7,7 @@
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
#
-# Copyright © 2010 Rafaël Carré <rafael.carre@gmail>
+# Copyright © 2010-2011 Rafaël Carré <rafael.carre@gmail>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -16,65 +16,27 @@
#
# 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()
+from sys import argv, stderr, stdout
+from subprocess import Popen, PIPE
+from os import execv
- 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
+args = 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)
+ execv(args[0], args) # not actually compiling
-if len(split) == 1: # output doesn't end in .o
- run_gcc(args)
+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
-dirname = os.path.dirname(output)
-thumb_output = tempfile.mktemp(suffix='.o', prefix=split[0], dir=dirname)
+args.append('-mthumb-interwork') # thumb-interwork is required
+gcc = Popen(args + ['-mthumb'], stdout=PIPE, stderr=PIPE)
+(out, err) = gcc.communicate()
-args.append('-mthumb-interwork')
+if gcc.returncode != 0: # thumb failed, try outputting arm
+ execv(args[0], args)
-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)
+stdout.write(out)
+stderr.write(err)