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
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
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', }
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))
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
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
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
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))
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
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', }
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
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
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
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', }