def ruler_for(sources, source_dir='', obj_dir='', prefix=''): rulers = [] for source in sources: obj = src_to_asm(source) if re.match(r'^.*\.c$', source): rulers.append(templates.get('c_asm_ruler') % { 'obj': os.path.join(obj_dir, '-'.join([prefix, obj])), 'source': os.path.join(source_dir, source) }) else: rulers.append(templates.get('cxx_asm_ruler') % { 'obj': os.path.join(obj_dir, '-'.join([prefix, obj])), 'source': os.path.join(source_dir, source) }) return '\n\n'.join(rulers)
def linker_ruler_for(objs, out=''): rulers = [] for obj in objs: rulers.append(templates.get('static_link') % { 'obj': obj, 'lib': out }) return '\n'.join(rulers)
def core_ruler(sources, prefix, obj_dir, library): rst = [] for src in sources: obj = os.path.join(obj_dir, '-'.join([prefix, src_to_obj(src)])) rst.append(templates.get('static_link') % { 'obj': obj, 'lib': os.path.join('binary', library) }) return rst
def obj_ruler_for(sources, source_dir='', obj_dir='', prefix=''): rulers = [] for source in sources: obj = src_to_obj(source) rulers.append(templates.get('asm_obj_ruler') % { 'obj': os.path.join(obj_dir, '-'.join([prefix, obj])), 'source': os.path.join(obj_dir, '-'.join([prefix, src_to_asm(source)])) }) return '\n\n'.join(rulers)
def create_main(**params): project_home = params.get('project_home') params.update( version=__version__, project_name=project_home.split(os.path.sep)[-1] ) filename = os.path.sep.join([project_home, 'src', 'main.cc']) rst = '?' rst = 'S' if os.path.isfile(filename) else 'C' if rst == 'C': with codecs.open(filename, 'w', 'utf-8') as fd: fd.write(templates.get('main.cc' if params.get('variant') != 'avr' else 'avr-main.cc') % params) return rst
def create_or_update_makefile(sdk_source_dir, **params): project_home = params.get('project_home') sources = scan_for_sources(params.get('source_dir')) core_sources = scan_for_sources(sdk_source_dir) libs = detect_libraries(**params) params.update( libs_rulers=''.join([lib_ruler_for(name, conf) for name, conf in libs.items()]), lib_deps=' '.join(['binary/%s.a' % name for name in libs.keys()]), pgrextra=gen_pgr_extra(**params), version=__version__, clock_hz=int((params.get('clock', 0) or 0) * 10 ** 6), project_name=project_home.split(os.path.sep)[-1], core_obj_dep=' '.join( sources_to_objects(core_sources, prefix='core') ), core_ruler=''.join(core_ruler(core_sources, 'core', 'tmp', 'core.a')), obj_dep=' '.join( sources_to_objects(sources, prefix='sketch') ), asm_dep=' '.join( sources_to_asm(sources, prefix='sketch') ), asm_rulers=asm_ruler_for(sources, 'src', 'tmp', 'sketch'), obj_rulers=obj_ruler_for(sources, 'src', 'tmp', 'sketch'), core_asm_rulers=asm_ruler_for(core_sources, sdk_source_dir, 'tmp', 'core'), core_obj_rulers=obj_ruler_for(core_sources, sdk_source_dir, 'tmp', 'core'), ) filename = os.path.join(project_home, 'Makefile') rst = '?' rst = 'U' if os.path.isfile(filename) else 'C' with codecs.open(filename, 'w', 'utf-8') as fd: fd.write(templates.get('Makefile' if params.get('variant') != 'avr' else 'avr-Makefile') % params) return rst