Here's a patch that makes ccc generate native object files instead of bitcode files. This makes it work better with the native toolchains, which should make testing random apps easier. I'll commit this unless anyone has a good reason or finds any bugs in the code :)

Anders

Index: utils/ccc
===================================================================
--- utils/ccc   (revision 46878)
+++ utils/ccc   (working copy)
@@ -11,15 +11,18 @@
 #
 
##===----------------------------------------------------------------------===##
 
+import os
 import sys
 import subprocess
+import tempfile
 
 def error(message):
     print >> sys.stderr, 'ccc: ' + message
     sys.exit(1)
 
-def run(args):
-    print >> sys.stderr, ' '.join(args)
+def run(args, silent=False):
+    if not silent:
+        print >> sys.stderr, ' '.join(args)
     code = subprocess.call(args)
     if code > 255:
         code = 1
@@ -30,12 +33,37 @@
     command = 'clang -E'.split()
     run(command + args)
 
-def compile(args):
-    command = 'clang -emit-llvm-bc'.split()
-    run(command + args)
+def compile(args, obj_name):
+    # First, compile the c file into a temporary .bc file
+    bc_fd, bc_name = tempfile.mkstemp('.bc', 'ccc')
+    command = ['clang', '-emit-llvm-bc'] + args + ['-o', bc_name]
+    run(command)
 
+    # Next, perform some necessary optimizations
+    bcopt_fd, bcopt_name = tempfile.mkstemp('.bc', 'ccc')
+    command = ['opt', '-globaldce', bc_name, '-f', '-o', bcopt_name]
+    run(command)
+    
+    os.unlink(bc_name)
+    os.close(bc_fd)
+
+    # Compile the .bc file into an .s file
+    asm_fd, asm_name = tempfile.mkstemp('.s', 'ccc')
+    command = ['llc', bcopt_name, '-f', '-o', asm_name]
+    run(command)
+
+    os.unlink(bcopt_name)
+    os.close(bcopt_fd)
+    
+    # Assemble the .s file
+    command = ['gcc', '-c', asm_name, '-o', obj_name]
+    run(command)
+    
+    os.unlink(asm_name)
+    os.close(asm_fd)
+
 def link(args):
-    command = 'llvm-ld -native'.split()
+    command = 'gcc'.split()
     run(command + args)
 
 def extension(path):
@@ -92,7 +120,7 @@
             link_opts.append(arg)
         
         # Options with one argument that should be ignored
-        if arg in ['--param', '-arch', '-u']:
+        if arg in ['--param', '-arch']:
             i += 1
 
         # Prefix matches for the compile mode
@@ -117,7 +145,7 @@
             link_opts.append(arg)
 
         # Options with one argument that should pass through
-        if arg in ['-framework']:
+        if arg in ['-framework', '-u', '-undefined']:
             link_opts.append(arg)
             link_opts.append(args[i+1])
             i += 1
@@ -185,8 +213,8 @@
                 coutput = changeextension(file, "o")
             else:
                 coutput = output
-            args = ['-x', language, '-o', coutput, file] + compile_opts
-            compile(args)
+            args = ['-x', language, file] + compile_opts
+            compile(args, coutput)
             language = ''
 
     if action == 'link':
@@ -194,8 +222,8 @@
             ext = extension(file)
             if ext != "o" and ext != "a":
                 out = changeextension(file, "o")
-                args = ['-o', out, file] + compile_opts
-                compile(args)
+                args = [file] + compile_opts
+                compile(args, out)
                 files[i] = out
         if not output:
             output = 'a.out'

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
cfe-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

Reply via email to