[pypy-svn] r49012 - pypy/dist/pypy/translator/llvm

rxe at codespeak.net rxe at codespeak.net
Sat Nov 24 03:02:25 CET 2007


Author: rxe
Date: Sat Nov 24 03:02:25 2007
New Revision: 49012

Modified:
   pypy/dist/pypy/translator/llvm/externs2ll.py
   pypy/dist/pypy/translator/llvm/extfuncnode.py
   pypy/dist/pypy/translator/llvm/genllvm.py
   pypy/dist/pypy/translator/llvm/node.py
Log:
an attempt to support to include dirs ....

Modified: pypy/dist/pypy/translator/llvm/externs2ll.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/externs2ll.py	(original)
+++ pypy/dist/pypy/translator/llvm/externs2ll.py	Sat Nov 24 03:02:25 2007
@@ -16,7 +16,7 @@
 def get_module_file(name):
     return os.path.join(get_llvm_cpath(), name)
 
-def get_ll(ccode, function_names, default_cconv):
+def get_ll(ccode, function_names, default_cconv, c_include_dirs):
     function_names += support_functions
     filename = str(udir.join("ccode.c"))
     f = open(filename, "w")
@@ -24,17 +24,14 @@
     f.close()
 
     plain = filename[:-2]
-    includes = get_incdirs()
-
+    includes = get_incdirs(c_include_dirs)
     if llvm_gcc_version() < 4.0:
         emit_llvm = ''
     else:
         emit_llvm = '-emit-llvm -O0'
         
-    # XXX localize this
-    include_path = '-I/sw/include'
-    cmd = "llvm-gcc %s %s %s -S %s.c -o %s.ll 2>&1" % (
-        include_path, includes, emit_llvm, plain, plain)
+    cmd = "llvm-gcc %s %s -S %s.c -o %s.ll 2>&1" % (
+        includes, emit_llvm, plain, plain)
 
     if os.system(cmd) != 0:
         raise Exception("Failed to run '%s'" % cmd)
@@ -106,10 +103,14 @@
 def get_llvm_cpath():
     return os.path.join(os.path.dirname(__file__), "module")
 
-def get_incdirs():
+def get_incdirs(c_include_dirs):
+
+    c_include_dirs
 
     import distutils.sysconfig
-    includes = (distutils.sysconfig.EXEC_PREFIX + "/include", 
+
+    includes = tuple(c_include_dirs) + ("/sw/include",
+                distutils.sysconfig.EXEC_PREFIX + "/include", 
                 distutils.sysconfig.EXEC_PREFIX + "/include/gc",
                 distutils.sysconfig.get_python_inc(),
                 get_c_cpath(),
@@ -120,7 +121,7 @@
         includestr += "-I %s " % ii
     return includestr
 
-def generate_llfile(db, entrynode, c_includes, c_sources, standalone, default_cconv):
+def generate_llfile(db, entrynode, c_include_dirs, c_includes, c_sources, standalone, default_cconv):
     ccode = []
     function_names = []
         
@@ -149,5 +150,5 @@
 
     # append our source file
     ccode.append(open(get_module_file('genexterns.c')).read())
-    llcode = get_ll("".join(ccode), function_names, default_cconv)
+    llcode = get_ll("".join(ccode), function_names, default_cconv, c_include_dirs)
     return llcode

Modified: pypy/dist/pypy/translator/llvm/extfuncnode.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/extfuncnode.py	(original)
+++ pypy/dist/pypy/translator/llvm/extfuncnode.py	Sat Nov 24 03:02:25 2007
@@ -10,16 +10,20 @@
 
     def external_c_source(self):
         # return a list of unique includes and sources in C
+        c_include_dirs = []
         c_includes = []
         c_sources = []
 
+        if hasattr(self.value, 'include_dirs'):
+            c_include_dirs = list(self.value.include_dirs)
+
         if hasattr(self.value, 'includes'):
             c_includes = list(self.value.includes)
 
         if hasattr(self.value, 'sources'):
             c_sources = list(self.value.sources)
 
-        return c_includes, c_sources
+        return c_include_dirs, c_includes, c_sources
 
     def writeglobalconstants(self, codewriter):
         pass

Modified: pypy/dist/pypy/translator/llvm/genllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/genllvm.py	(original)
+++ pypy/dist/pypy/translator/llvm/genllvm.py	Sat Nov 24 03:02:25 2007
@@ -185,11 +185,14 @@
         return c.value._obj 
 
     def generate_ll_externs(self, codewriter):
+        c_include_dirs = {}
         c_includes = {}
         c_sources = {}
 
         for node in self.db.getnodes():
-            includes, sources = node.external_c_source()            
+            include_dirs, includes, sources = node.external_c_source()            
+            for incdirin in include_dirs:
+                c_include_dirs[incdir] = True
             for include in includes:
                 c_includes[include] = True
             for source in sources:
@@ -197,6 +200,7 @@
 
         self.llcode = generate_llfile(self.db,
                                       self.entrynode,
+                                      c_include_dirs,
                                       c_includes,
                                       c_sources,
                                       self.standalone, 

Modified: pypy/dist/pypy/translator/llvm/node.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/node.py	(original)
+++ pypy/dist/pypy/translator/llvm/node.py	Sat Nov 24 03:02:25 2007
@@ -34,7 +34,7 @@
 
     def external_c_source(self):
         " return a list of unique includes and sources in C "
-        return [], []
+        return [], [], []
     
     def writesetupcode(self, codewriter):
         " pre entry-point setup "



More information about the Pypy-commit mailing list