[pypy-svn] r57720 - in pypy/branch/cross-compilation/pypy: config rlib translator/c translator/tool translator/tool/test

fijal at codespeak.net fijal at codespeak.net
Mon Sep 1 14:35:25 CEST 2008


Author: fijal
Date: Mon Sep  1 14:35:23 2008
New Revision: 57720

Modified:
   pypy/branch/cross-compilation/pypy/config/translationoption.py
   pypy/branch/cross-compilation/pypy/rlib/pyplatform.py
   pypy/branch/cross-compilation/pypy/translator/c/genc.py
   pypy/branch/cross-compilation/pypy/translator/tool/cbuild.py
   pypy/branch/cross-compilation/pypy/translator/tool/test/test_cbuild.py
Log:
Refactor platform dependencies a bit. Now there is a global
in rlib.pyplatform.platform which should contain all platform-dependent
configuration details.

cbuild.py now uses cc from translation config (needs a test)


Modified: pypy/branch/cross-compilation/pypy/config/translationoption.py
==============================================================================
--- pypy/branch/cross-compilation/pypy/config/translationoption.py	(original)
+++ pypy/branch/cross-compilation/pypy/config/translationoption.py	Mon Sep  1 14:35:23 2008
@@ -346,7 +346,8 @@
 ]
 
 def set_platform(config, platform):
-    from pypy.rlib.pyplatform import Platform, Maemo
+    from pypy.rlib.pyplatform import Platform, Maemo, OverloadCompilerPlatform
+    from pypy.rlib import pyplatform
     from pypy.translator.tool.cbuild import ExternalCompilationInfo
     if isinstance(platform, str):
         if platform == 'maemo':
@@ -356,9 +357,8 @@
         else:
             raise NotImplementedError('Platform = %s' % (platform,))
     assert isinstance(platform, Platform)
-    # XXX evil hackery
-    func_defs = list(ExternalCompilationInfo.__init__.func_defaults)
-    func_defs[-1] = platform
-    ExternalCompilationInfo.__init__.im_func.func_defaults = tuple(func_defs)
+    pyplatform.platform = platform
+    if config.translation.cc:
+        pyplatform.platform = OverloadCompilerPlatform(platform,
+                                                       config.translation.cc)
 
-        

Modified: pypy/branch/cross-compilation/pypy/rlib/pyplatform.py
==============================================================================
--- pypy/branch/cross-compilation/pypy/rlib/pyplatform.py	(original)
+++ pypy/branch/cross-compilation/pypy/rlib/pyplatform.py	Mon Sep  1 14:35:23 2008
@@ -25,7 +25,22 @@
 
 class Maemo(Platform):
     def get_compiler(self):
+        # XXX how to make this reliable???
         return '/scratchbox/compilers/cs2005q3.2-glibc-arm/bin/sbox-arm-linux-gcc'
     
     def execute(self, cmd):
         return py.process.cmdexec('/scratchbox/login ' + cmd)
+
+class OverloadCompilerPlatform(Platform):
+    def __init__(self, previous_platform, cc):
+        self.previous_platform = previous_platform
+        self.cc = cc
+
+    def get_compiler(self):
+        return self.cc
+
+    def execute(self, cmd):
+        return self.previous_platform.execute(cmd)
+
+platform = Platform()
+

Modified: pypy/branch/cross-compilation/pypy/translator/c/genc.py
==============================================================================
--- pypy/branch/cross-compilation/pypy/translator/c/genc.py	(original)
+++ pypy/branch/cross-compilation/pypy/translator/c/genc.py	Mon Sep  1 14:35:23 2008
@@ -313,9 +313,6 @@
         return getfunctionptr(bk.getdesc(self.entrypoint).getuniquegraph())
 
     def getccompiler(self):
-        # XXX note that overwritten cc here will not affect already
-        #     performed steps in cbuild.py
-        #     completely unsure how to get rid of this inconsistency
         cc = self.config.translation.cc
         # Copy extrafiles to target directory, if needed
         extrafiles = []

Modified: pypy/branch/cross-compilation/pypy/translator/tool/cbuild.py
==============================================================================
--- pypy/branch/cross-compilation/pypy/translator/tool/cbuild.py	(original)
+++ pypy/branch/cross-compilation/pypy/translator/tool/cbuild.py	Mon Sep  1 14:35:23 2008
@@ -9,7 +9,6 @@
 log = py.log.Producer("cbuild")
 py.log.setconsumer("cbuild", ansi_log)
 from pypy.tool.udir import udir
-from pypy.rlib.pyplatform import Platform
 
 debug = 0
 
@@ -41,7 +40,7 @@
                  compile_extra           = [],
                  link_extra              = [],
                  frameworks              = [],
-                 platform                = Platform()):
+                 platform                = None):
         """
         pre_include_bits: list of pieces of text that should be put at the top
         of the generated .c files, before any #include.  They shouldn't
@@ -89,6 +88,9 @@
             value = locals()[name]
             assert isinstance(value, (list, tuple))
             setattr(self, name, tuple(value))
+        if platform is None:
+            from pypy.rlib import pyplatform
+            platform = pyplatform.platform
         self.platform = platform
 
     def from_compiler_flags(cls, flags):

Modified: pypy/branch/cross-compilation/pypy/translator/tool/test/test_cbuild.py
==============================================================================
--- pypy/branch/cross-compilation/pypy/translator/tool/test/test_cbuild.py	(original)
+++ pypy/branch/cross-compilation/pypy/translator/tool/test/test_cbuild.py	Mon Sep  1 14:35:23 2008
@@ -213,3 +213,4 @@
         py.test.raises(py.process.cmdexec.Error, py.process.cmdexec, output)
         result = eci.platform.execute(output)
         assert result.startswith('4.0')
+



More information about the Pypy-commit mailing list