[pypy-svn] r58980 - pypy/branch/cbuild-refactor/pypy/translator/platform
pedronis at codespeak.net
pedronis at codespeak.net
Sat Oct 11 16:20:49 CEST 2008
Author: pedronis
Date: Sat Oct 11 16:20:47 2008
New Revision: 58980
Modified:
pypy/branch/cbuild-refactor/pypy/translator/platform/darwin.py
pypy/branch/cbuild-refactor/pypy/translator/platform/linux.py
Log:
(fijal, pedronis)
more makefile generation
Modified: pypy/branch/cbuild-refactor/pypy/translator/platform/darwin.py
==============================================================================
--- pypy/branch/cbuild-refactor/pypy/translator/platform/darwin.py (original)
+++ pypy/branch/cbuild-refactor/pypy/translator/platform/darwin.py Sat Oct 11 16:20:47 2008
@@ -3,8 +3,9 @@
from pypy.translator.platform import linux # xxx
class Darwin(linux.Linux): # xxx
- link_extra = []
+ link_flags = []
cflags = ['-O3', '-fomit-frame-pointer']
+ # -mdynamic-no-pic for standalone
def __init__(self, cc='gcc'):
self.cc = cc
Modified: pypy/branch/cbuild-refactor/pypy/translator/platform/linux.py
==============================================================================
--- pypy/branch/cbuild-refactor/pypy/translator/platform/linux.py (original)
+++ pypy/branch/cbuild-refactor/pypy/translator/platform/linux.py Sat Oct 11 16:20:47 2008
@@ -81,20 +81,29 @@
f.flush()
class Linux(Platform):
- link_extra = ['-pthread']
+ link_flags = ['-pthread']
cflags = ['-O3', '-pthread', '-fomit-frame-pointer']
def __init__(self, cc='gcc'):
self.cc = cc
+ def _libs(self, libraries):
+ return ['-l%s' % (lib,) for lib in libraries]
+
+ def _libdirs(self, library_dirs):
+ return ['-L%s' % (ldir,) for ldir in library_dirs]
+
+ def _includedirs(self, include_dirs):
+ return ['-I%s' % (idir,) for idir in include_dirs]
+
def _compile_args_from_eci(self, eci):
- include_dirs = ['-I%s' % (idir,) for idir in eci.include_dirs]
+ include_dirs = self._includedirs(eci.include_dirs)
return (self.cflags + list(eci.compile_extra) + include_dirs)
def _link_args_from_eci(self, eci):
- library_dirs = ['-L%s' % (ldir,) for ldir in eci.library_dirs]
- libraries = ['-l%s' % (lib,) for lib in eci.libraries]
- return (library_dirs + libraries + self.link_extra +
+ library_dirs = self._libdirs(eci.library_dirs)
+ libraries = self._libs(eci.libraries)
+ return (library_dirs + libraries + self.link_flags +
list(eci.link_extra))
def _args_for_shared(self, args):
@@ -149,20 +158,51 @@
return ExecutionResult(returncode, stdout, stderr)
def gen_makefile(self, cfiles, eci, exe_name=None, path=None):
+ cfiles = [py.path.local(f) for f in cfiles]
+ cfiles += [py.path.local(f) for f in eci.separate_module_files]
+
+ if path is None:
+ path = cfiles[0].dirpath()
+ else:
+ path = py.path.local(path)
+
+ pypypath = py.path.local(autopath.pypydir)
+
+ def pathrel(fpath):
+ if fpath.dirpath() == path:
+ return fpath.basename
+ elif fpath.dirpath().dirpath() == path.dirpath():
+ return '../' + fpath.relto(path.dirpath())
+ else:
+ return str(fpath)
+
+ def pypyrel(fpath):
+ rel = py.path.local(fpath).relto(pypypath)
+ if rel:
+ return os.path.join('$(PYPYDIR)', rel)
+ else:
+ return fpath
+
+ rel_cfiles = [pathrel(cfile) for cfile in cfiles]
+ rel_ofiles = [rel_cfile[:-2]+'.o' for rel_cfile in rel_cfiles]
+
+ rel_includedirs = [pypyrel(incldir) for incldir in eci.include_dirs]
+
m = GnuMakefile()
- # XXX cfiles relative to path
m.comment('automatically generated makefile')
definitions = [
('PYPYDIR', str(autopath.pypy_dir)),
('TARGET', exe_name.basename),
('DEFAULT_TARGET', '$(TARGET)'),
- ('SOURCES', whacked_cfiles),
- ('OBJECTS', whacked_ofiles),
- ('LIBS', whacked_libs),
+ ('SOURCES', rel_cfiles),
+ ('OBJECTS', rel_ofiles),
+ ('LIBS', self._libs(eci.libraries)),
+ ('LIBDIRS', self._libdirs(eci.library_dirs)),
+ ('INCLUDEDIRS', self._includedirs(rel_includedirs)),
+ ('CFLAGS', self.cflags + list(eci.compile_extra)),
+ ('LDFLAGS', self.link_flags + list(eci.link_extra)),
+ ('CC', self.cc)
]
for args in definitions:
m.definition(*args)
- # <hack>
- #for includedir in eci.include_dirs:
- # if includedir.relto
- # </hack>
+
More information about the Pypy-commit
mailing list