示例#1
0
文件: build.py 项目: chrisspen/ino
 def recursive_inc_lib_flags(self, libdirs):
     flags = SpaceList()
     for d in libdirs:
         flags.append('-I' + d)
         # recursive=True creates so many include directories that it exceeds avg-gcc's maximum list length.
         flags.extend('-I' + subd for subd in list_subdirs(d, recursive=False, exclude=['examples']))
     return flags
示例#2
0
文件: build.py 项目: zenoamaro/ino
 def inc_lib_flags(self, libdirs, recursive=False):
     flags = SpaceList()
     for d in libdirs:
         flags.append('-I' + d)
         if recursive:
             flags.extend('-I' + subd for subd in list_subdirs(d, recursive=True, exclude=['examples']))
     return flags
示例#3
0
    def setup_flags(self, board_key):
        board = self.e.board_model(board_key)
        mcu = '-mmcu=' + board['build']['mcu']
        self.e['cflags'] = SpaceList([
            mcu,
            '-ffunction-sections',
            '-fdata-sections',
            '-g',
            '-Os',
            '-w',
            '-DF_CPU=' + board['build']['f_cpu'],
            '-DARDUINO=' + str(self.e.arduino_lib_version.as_int()),
            '-I' + self.e['arduino_core_dir'],
        ])

        if self.e.arduino_lib_version.major:
            variant_dir = os.path.join(self.e.arduino_variants_dir,
                                       board['build']['variant'])
            self.e.cflags.append('-I' + variant_dir)

        self.e['cxxflags'] = SpaceList(['-fno-exceptions'])
        self.e['elfflags'] = SpaceList(['-Os', '-Wl,--gc-sections', mcu])

        self.e['names'] = {
            'obj': '%s.o',
            'lib': 'lib%s.a',
        }
示例#4
0
    def scan_dependencies(self):
        self.e['deps'] = SpaceList()

        lib_dirs = [self.e.arduino_core_dir] + list_subdirs(self.e.lib_dir) + list_subdirs(self.e.arduino_libraries_dir)
        inc_flags = self.recursive_inc_lib_flags(lib_dirs)

        # If lib A depends on lib B it have to appear before B in final
        # list so that linker could link all together correctly
        # but order of `_scan_dependencies` is not defined, so...
        
        # 1. Get dependencies of sources in arbitrary order
        used_libs = list(self._scan_dependencies(self.e.src_dir, lib_dirs, inc_flags))

        # 2. Get dependencies of dependency libs themselves: existing dependencies
        # are moved to the end of list maintaining order, new dependencies are appended
        scanned_libs = set()
        while scanned_libs != set(used_libs):
            for lib in set(used_libs) - scanned_libs:
                dep_libs = self._scan_dependencies(lib, lib_dirs, inc_flags)

                i = 0
                for ulib in used_libs[:]:
                    if ulib in dep_libs:
                        # dependency lib used already, move it to the tail
                        used_libs.append(used_libs.pop(i))
                        dep_libs.remove(ulib)
                    else:
                        i += 1

                # append new dependencies to the tail
                used_libs.extend(dep_libs)
                scanned_libs.add(lib)

        self.e['used_libs'] = used_libs
        self.e['cppflags'].extend(self.recursive_inc_lib_flags(used_libs))
示例#5
0
def glob(dir, *patterns, **kwargs):
    recursive = kwargs.get('recursive', True)
    subdir = kwargs.get('subdir', '')

    result = SpaceList()
    scan_dir = os.path.join(dir, subdir)
    for entry in os.listdir(scan_dir):
        path = os.path.join(scan_dir, entry)
        if os.path.isdir(path) and recursive:
            subglob = glob(dir, *patterns, recursive=True,
                           subdir=os.path.join(subdir, entry))
            result.extend(subglob)
        elif os.path.isfile(path) and any(fnmatch.fnmatch(entry, p) for p in patterns):
            result.append(GlobFile(os.path.join(subdir, entry), dir))

    return result
示例#6
0
 def recursive_inc_lib_flags(self, libdirs):
     flags = SpaceList()
     for d in libdirs:
         flags.append('-I' + d)
         flags.extend('-I' + subd for subd in list_subdirs(
             d, recursive=False, exclude=['examples']))
     return flags
示例#7
0
文件: build.py 项目: chrisspen/ino
 def recursive_inc_lib_flags(self, libdirs):
     flags = SpaceList()
     for d in libdirs:
         flags.append('-I' + d)
         # recursive=True creates so many include directories that it exceeds avg-gcc's maximum list length.
         flags.extend('-I' + subd for subd in list_subdirs(
             d, recursive=False, exclude=['examples']))
     return flags
示例#8
0
    def scan_dependencies(self):
        self.e['deps'] = SpaceList()

        lib_dirs = list_subdirs(self.e.lib_dir) + list_subdirs(
            self.e.arduino_libraries_dir)
        inc_flags = self.recursive_inc_lib_flags(lib_dirs)

        used_libs = self._scan_dependencies(self.e.src_dir, lib_dirs,
                                            inc_flags)
        scanned_libs = set()
        while scanned_libs != used_libs:
            for lib_dir in list(used_libs - scanned_libs):
                used_libs |= self._scan_dependencies(lib_dir, lib_dirs,
                                                     inc_flags)
                scanned_libs.add(lib_dir)

        self.e['extra_libs'] = list(used_libs)
        self.e['cflags'].extend(self.recursive_inc_lib_flags(used_libs))
示例#9
0
def glob(dir, *patterns, **kwargs):
    recursive = kwargs.get('recursive', True)
    subdir = kwargs.get('subdir', '')

    result = SpaceList()
    scan_dir = os.path.join(dir, subdir)
    if not os.path.isdir(scan_dir):
        return result

    for entry in os.listdir(scan_dir):
        path = os.path.join(scan_dir, entry)
        if os.path.isdir(path) and recursive:
            subglob = glob(dir, *patterns, recursive=True,
                           subdir=os.path.join(subdir, entry))
            result.extend(subglob)
        elif os.path.isfile(path) and any(fnmatch.fnmatch(entry, p) for p in patterns):
            result.append(GlobFile(os.path.join(subdir, entry), dir))

    return result
示例#10
0
文件: build.py 项目: amoose136/ino
    def setup_flags(self, args):
        board = self.e.board_model(args.board_model)
        mcu = '-mmcu=' + board['build']['mcu']
        # Hard-code the flags that are essential to building the sketch
        self.e['cppflags'] = SpaceList([
            mcu,
            '-DF_CPU=' + board['build']['f_cpu'],
            '-DARDUINO=' + str(self.e.arduino_lib_version.as_int()),
            '-I' + self.e['arduino_core_dir'],
        ]) 
        # Add additional flags as specified
        self.e['cppflags'] += SpaceList(shlex.split(args.cppflags))

        if 'vid' in board['build']:
            self.e['cppflags'].append('-DUSB_VID=%s' % board['build']['vid'])
        if 'pid' in board['build']:
            self.e['cppflags'].append('-DUSB_PID=%s' % board['build']['pid'])
            
        if self.e.arduino_lib_version.major:
            variant_dir = self.e.arduino_variants_dir
            self.e.cppflags.append('-I' + variant_dir)

        self.e.cppflags.append('-I' + self.e.src_dir)
        self.e.cppflags.append('-I' + self.e.lib_dir)

        self.e['cflags'] = SpaceList(shlex.split(args.cflags))
        self.e['cxxflags'] = SpaceList(shlex.split(args.cxxflags))

        # Again, hard-code the flags that are essential to building the sketch
        self.e['ldflags'] = SpaceList([mcu])
        self.e['ldflags'] += SpaceList([
            '-Wl,' + flag for flag in shlex.split(args.ldflags)
        ])

        self.e['names'] = {
            'obj': '%s.o',
            'lib': 'lib%s.a',
            'cpp': '%s.cpp',
            'deps': '%s.d',
        }
示例#11
0
文件: build.py 项目: theJenix/ino
 def recursive_inc_lib_flags(self, dashcmd, libdirs):
     flags = SpaceList()
     for d in libdirs:
         flags.append(dashcmd + d)
         flags.extend(dashcmd + subd for subd in list_subdirs(d, recursive=True, exclude=['examples']))
     return flags
示例#12
0
文件: build.py 项目: BBBSnowball/ino
 def recursive_inc_lib_flags(self, libdirs):
     flags = SpaceList()
     for d in libdirs:
         flags.append('-I' + d)
         flags.extend('-I' + subd for subd in list_subdirs(d, recursive=True, exclude=['examples', "extras"]))
     return flags
示例#13
0
文件: build.py 项目: josh-kaplan/ino
 def recursive_inc_lib_flags(self, libdirs):
     flags = SpaceList()
     for d in libdirs:
         flags.append("-I" + d)
         flags.extend("-I" + subd for subd in list_subdirs(d, recursive=False, exclude=["examples"]))
     return flags
示例#14
0
    def setup_flags(self, args):
        board = self.e.board_model(args.board_model)
        cpu, mcu = '', ''
        if 'cpu' in board['build']:
            cpu = '-mcpu=' + board['build']['cpu']
        elif 'mcu' in board['build']:
            mcu = '-mmcu=' + board['build']['mcu']
        if 'f_cpu' in board['build']:
            f_cpu = board['build']['f_cpu']
        else:
            raise KeyError('No valid source of f_cpu option')

        # Hard-code the flags that are essential to building the sketch
        self.e['cppflags'] = SpaceList([
            cpu,
            mcu,
            '-DF_CPU=' + f_cpu,
            '-DARDUINO=' + str(self.e.arduino_lib_version.as_int()),
            '-I' + self.e['arduino_core_dir'],
        ])
        # Add additional flags as specified
        self.e['cppflags'] += SpaceList(shlex.split(args.cppflags))
        self._appendNumberedEntries(self.e['cppflags'],
                                    board['build'],
                                    'option',
                                    start=1)
        self._appendNumberedEntries(self.e['cppflags'], board['build'],
                                    'define')

        if 'vid' in board['build']:
            self.e['cppflags'].append('-DUSB_VID=%s' % board['build']['vid'])
        if 'pid' in board['build']:
            self.e['cppflags'].append('-DUSB_PID=%s' % board['build']['pid'])

        if board['name'].lower().startswith('teensy'):
            pass
        elif self.e.arduino_lib_version.major:
            variant_dir = os.path.join(self.e.arduino_variants_dir,
                                       board['build']['variant'])
            self.e.cppflags.append('-I' + variant_dir)

        self.e['cflags'] = SpaceList(shlex.split(args.cflags))
        self.e['cxxflags'] = SpaceList(shlex.split(args.cxxflags))
        self._appendNumberedEntries(self.e['cxxflags'],
                                    board['build'],
                                    'cppoption',
                                    start=1)

        # Again, hard-code the flags that are essential to building the sketch
        self.e['ldflags'] = SpaceList([cpu, mcu])
        self.e['ldflags'] += SpaceList(
            ['-Wl,' + flag for flag in shlex.split(args.ldflags)])
        self._appendNumberedEntries(self.e['ldflags'],
                                    board['build'],
                                    'linkoption',
                                    start=1)
        self._appendNumberedEntries(self.e['ldflags'],
                                    board['build'],
                                    'additionalobject',
                                    start=1)

        if 'linkscript' in board['build']:
            script = self.e.find_arduino_tool(board['build']['linkscript'],
                                              ['hardware', '*', 'cores', '*'],
                                              human_name='Link script')
            self.e['ldflags'] = SpaceList(['-T' + script]) + \
                                self.e['ldflags']

        self.e['names'] = {
            'obj': '%s.o',
            'lib': 'lib%s.a',
            'cpp': '%s.cpp',
            'deps': '%s.d',
        }