Example #1
0
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)
Example #2
0
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)
Example #3
0
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
Example #4
0
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)
Example #5
0
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
Example #6
0
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