File: arm.py

package info (click to toggle)
pypy 5.6.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 97,040 kB
  • ctags: 185,069
  • sloc: python: 1,147,862; ansic: 49,642; cpp: 5,245; asm: 5,169; makefile: 529; sh: 481; xml: 232; lisp: 45
file content (77 lines) | stat: -rw-r--r-- 3,072 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from rpython.translator.platform.linux import Linux
from rpython.translator.platform.posix import _run_subprocess, GnuMakefile
from rpython.translator.platform import ExecutionResult, log
from os import getenv

SB2 = getenv('SB2')
if SB2 is None:
    log.error('SB2: Provide a path to the sb2 rootfs for the target in env variable SB2')
    assert 0

sb2_params = getenv('SB2OPT')
if sb2_params is None:
    log.info('Pass additional options to sb2 in SB2OPT')
    SB2ARGS = []
else:
    SB2ARGS = sb2_params.split(' ')

class ARM(Linux):
    name = "arm"
    shared_only = ('-fPIC',)

    available_librarydirs = [SB2 + '/lib/arm-linux-gnueabi/',
                             SB2 + '/lib/arm-linux-gnueabihf/',
                             SB2 + '/lib/aarch64-linux-gnu/',
                             SB2 + '/usr/lib/arm-linux-gnueabi/',
                             SB2 + '/usr/lib/arm-linux-gnueabihf/',
                             SB2 + '/usr/lib/aarch64-linux-gnu/']

    available_includedirs = [SB2 + '/usr/include/arm-linux-gnueabi/',
                             SB2 + '/usr/include/arm-linux-gnueabihf/',
                             SB2 + '/usr/include/aarch64-linux-gnu/']
    copied_cache = {}


    def _invent_new_name(self, basepath, base):
        pth = basepath.join(base)
        num = 0
        while pth.check():
            pth = basepath.join('%s_%d' % (base,num))
            num += 1
        return pth.ensure(dir=1)

    def _execute_c_compiler(self, cc, args, outname, cwd=None):
        log.execute('sb2 ' + ' '.join(SB2ARGS) + ' ' + cc + ' ' + ' '.join(args))
        args = SB2ARGS + [cc] + args
        returncode, stdout, stderr = _run_subprocess('sb2', args)
        self._handle_error(returncode, stderr, stdout, outname)

    def execute(self, executable, args=[], env=None):
        if isinstance(args, str):
            args = ' '.join(SB2ARGS) + ' ' + str(executable) + ' ' + args
            log.message('executing sb2 ' + args)
        else:
            args = SB2ARGS + [str(executable)] + args
            log.message('executing sb2 ' + ' '.join(args))
        returncode, stdout, stderr = _run_subprocess('sb2', args,
                                                     env)
        return ExecutionResult(returncode, stdout, stderr)

    def include_dirs_for_libffi(self):
        return self.available_includedirs

    def library_dirs_for_libffi(self):
        return self.available_librarydirs

    def _preprocess_library_dirs(self, library_dirs):
        return list(library_dirs) + self.available_librarydirs

    def execute_makefile(self, path_to_makefile, extra_opts=[]):
        if isinstance(path_to_makefile, GnuMakefile):
            path = path_to_makefile.makefile_dir
        else:
            path = path_to_makefile
        log.execute('sb2 %s make %s in %s' % (' '.join(SB2ARGS), " ".join(extra_opts), path))
        returncode, stdout, stderr = _run_subprocess(
            'sb2', SB2ARGS + ['make', '-C', str(path)] + extra_opts)
        self._handle_error(returncode, stdout, stderr, path.join('make'))