Example #1
0
def install_arduino_toolchain(bii):
    '''Arduino Toolchain uses AVR-GCC & AVR-G++ compilers
    '''
    hive_disk_image = bii.hive_disk_image
    user_io = bii.user_io
    paths = hive_disk_image.paths
    arduino_cmake = load_resource(DEV_ARDUINO_DIR, "cmake/Arduino.cmake")
    bii_ard_path = os.path.join(paths.bii, "Platform/Arduino.cmake")
    save_blob_if_modified(bii_ard_path, Blob(arduino_cmake))

    toolchain = load_resource(DEV_ARDUINO_DIR, "cmake/arduino_toolchain.cmake")
    bii_ard_path = os.path.join(paths.bii, "arduino_toolchain.cmake")

    arduino_sdk_path = hive_disk_image.settings.arduino.sdk
    toolchain += 'SET(ARDUINO_SDK_PATH "%s")\n' % arduino_sdk_path

    SDK_PATH_LIBRARIES = '''SET(SDK_PATH_LIBS "{{libs_dir}}")
        SET(ALL_LIBS_DIR    {% for name in libs_names %}
                            ${SDK_PATH_LIBS}/{{name}}/src
                            ${SDK_PATH_LIBS}/{{name}}
                            {% endfor %})
        INCLUDE_DIRECTORIES(${ALL_LIBS_DIR})
        '''

    SDK_PATH_AVR_LIBS = '''
    SET(SDK_AVR_PATH_LIBS "{{libs_dir}}")
    SET(ALL_LIBS_DIR    {% for name in libs_names %}
                        ${SDK_AVR_PATH_LIBS}/{{name}}/src
                        ${SDK_AVR_PATH_LIBS}/{{name}}
                        {% endfor %})
    INCLUDE_DIRECTORIES(${ALL_LIBS_DIR})
        '''

    libraries_info, libs_recurse_names = _get_libraries_folders(user_io, hive_disk_image)
    libraries_path, list_libraries = libraries_info['common']
    include_libraries_path = Template(SDK_PATH_LIBRARIES).render(libs_dir=libraries_path,
                                                                 libs_names=list_libraries)
    avr_libs_info = libraries_info.get('avr')
    if avr_libs_info:
        libs_path, list_libraries = avr_libs_info
        include_libraries_path += Template(SDK_PATH_AVR_LIBS).render(libs_dir=libs_path,
                                                                     libs_names=list_libraries)

    toolchain += include_libraries_path
    settings = hive_disk_image.settings.arduino
    boards_settings = cmake_board_settings(settings.sdk, settings.version)
    # Problems with encoding of 1.5.8, yun with accent
    boards_settings = boards_settings.decode("utf-8").encode("ascii", "ignore")
    toolchain += boards_settings

    set_lib_recurses = ["set(%s_RECURSE True)" % lib for lib in libs_recurse_names]
    toolchain += "\n".join(set_lib_recurses)
    modified = save_blob_if_modified(bii_ard_path, Blob(toolchain))
    if modified:
        user_io.out.warn("Arduino toolchain defined, regenerating project")
        hive_disk_image.delete_build_folder()

    user_io.out.write('Creating toolchain for Arduino\n', Color.BRIGHT_BLUE)
    user_io.out.success('Run "bii configure -t arduino" to activate it')
    user_io.out.success('Run "bii configure -t" to disable it')
Example #2
0
def create_noderunner(project_path, blocks_folder, deps_folder):
    if platform.system() == 'Windows':
        runner = "noderunner.bat"
    else:
        runner = "noderunner.sh"
    runners_template = load_resource(DEV_NODE_DIR, os.path.join("runners", runner))
    runner_path = os.path.join(project_path, runner)
    runner_content = runners_template.format(blocks_path=blocks_folder, deps_path=deps_folder)
    save(runner_path, runner_content)
    os.chmod(runner_path, stat.S_IRWXU)
Example #3
0
def create_noderunner(project_path, blocks_folder, deps_folder):
    if platform.system() == 'Windows':
        runner = "noderunner.bat"
    else:
        runner = "noderunner.sh"
    runners_template = load_resource(DEV_NODE_DIR,
                                     os.path.join("runners", runner))
    runner_path = os.path.join(project_path, runner)
    runner_content = runners_template.format(blocks_path=blocks_folder,
                                             deps_path=deps_folder)
    save(runner_path, runner_content)
    os.chmod(runner_path, stat.S_IRWXU)
Example #4
0
def regenerate_arduino_settings_cmake(bii):
    '''
    Regenerate arduino_settings.cmake from current settings
    '''
    hive_disk_image = bii.hive_disk_image
    current_settings = hive_disk_image.settings

    # Now process settings
    arduino_settings_cmake = load_resource(DEV_ARDUINO_DIR, "cmake/arduino_settings.cmake")

    ard_settings = current_settings.arduino
    board = board_mapping.get(ard_settings.board, ard_settings.board)
    arduino_settings_cmake = arduino_settings_cmake.format(board=board,
                                                           port=ard_settings.port,
                                                           programmer=ard_settings.programmer
                                                           or "usbtinyisp",
                                                           serial="")
    settings_path = os.path.join(hive_disk_image.paths.bii,
                                 "arduino_settings.cmake")
    save_blob_if_modified(settings_path, Blob(arduino_settings_cmake))
Example #5
0
    def _create_cmakelists(self, block_targets):
        '''creates 3 files:
        CMakeLists.txt, only if not existing, including the other two files
        bii_targets.cmake, the file containing the ADD_LIBRARY and ADD_EXECUTABLES, with the
                        configuration of flags per target and files
        bii_vars.cmake, is a file with variables declarations that are afterwards used in
                        bii_targets.cmake'''
        cmakelists_path = os.path.join(self.bii_paths.cmake, "CMakeLists.txt")
        bii_macros_path = os.path.join(self.bii_paths.cmake, 'biicode.cmake')
        bii_macros_content = load_resource(DEV_CPP_DIR, "cmake/biicode.cmake")

        self._create_default_blocks_cmakelists(block_targets)
        # following is a virtual call, may call child class method
        cmakelists_content = self._get_project_cmakelists(block_targets)

        a = save_blob_if_modified(cmakelists_path, Blob(cmakelists_content))
        b = self._create_vars_cmake_files(block_targets)
        c = save_blob_if_modified(bii_macros_path, Blob(bii_macros_content))

        return a or b or c
Example #6
0
def regenerate_arduino_settings_cmake(bii):
    '''
    Regenerate arduino_settings.cmake from current settings
    '''
    hive_disk_image = bii.hive_disk_image
    current_settings = hive_disk_image.settings

    # Now process settings
    arduino_settings_cmake = load_resource(DEV_ARDUINO_DIR,
                                           "cmake/arduino_settings.cmake")

    ard_settings = current_settings.arduino
    board = board_mapping.get(ard_settings.board, ard_settings.board)
    arduino_settings_cmake = arduino_settings_cmake.format(
        board=board,
        port=ard_settings.port,
        programmer=ard_settings.programmer or "usbtinyisp",
        serial="")
    settings_path = os.path.join(hive_disk_image.paths.bii,
                                 "arduino_settings.cmake")
    save_blob_if_modified(settings_path, Blob(arduino_settings_cmake))
Example #7
0
    def _get_project_cmakelists(self, block_targets):
        cmakelists_template = load_resource(DEV_CPP_DIR,
                                            "cmake/CMakeLists.txt")

        blocks_include = []
        blocks_prebuild_step = []

        root_block = self.bii_paths.root_block
        CMAKELISTS_INCLUDES = "BII_INCLUDE_BLOCK({path_block_name})"
        CMAKELISTS_PREBUILD = "BII_PREBUILD_STEP({path_block_name})"
        for block_name, block_target in block_targets.iteritems():
            if block_target.is_dep:
                rel_block_path = self.bii_paths.deps_relative
            else:
                rel_block_path = self.bii_paths.blocks_relative
            if block_name == root_block:
                block_path = root_block
            else:
                block_path = os.path.join(rel_block_path,
                                          block_target.block_name).replace(
                                              '\\', '/')
            blocks_include.append(
                CMAKELISTS_INCLUDES.format(path_block_name=block_path))
            blocks_prebuild_step.append(
                CMAKELISTS_PREBUILD.format(path_block_name=block_path))

        biicode_env_dir = self.bii_paths.user_bii_home.replace('\\', '/')
        return cmakelists_template.format(
            project_name=self.bii_paths.project_name,
            prebuild_steps="\n".join(blocks_prebuild_step),
            include_blocks="\n".join(blocks_include),
            biicode_env_dir=biicode_env_dir,
            blocks=self.bii_paths.blocks_relative,
            deps=self.bii_paths.deps_relative,
            cmake=self.bii_paths.cmake_relative,
            bin=self.bii_paths.bin_relative,
            lib=self.bii_paths.lib_relative,
            project_root=self.bii_paths.project_root.replace('\\', '/'))
Example #8
0
def install_arduino_toolchain(bii):
    '''Arduino Toolchain uses AVR-GCC & AVR-G++ compilers
    '''
    hive_disk_image = bii.hive_disk_image
    user_io = bii.user_io
    paths = hive_disk_image.paths
    arduino_cmake = load_resource(DEV_ARDUINO_DIR, "cmake/Arduino.cmake")
    bii_ard_path = os.path.join(paths.bii, "Platform/Arduino.cmake")
    save_blob_if_modified(bii_ard_path, Blob(arduino_cmake))

    toolchain = load_resource(DEV_ARDUINO_DIR, "cmake/arduino_toolchain.cmake")
    bii_ard_path = os.path.join(paths.bii, "arduino_toolchain.cmake")

    arduino_sdk_path = hive_disk_image.settings.arduino.sdk
    toolchain += 'SET(ARDUINO_SDK_PATH "%s")\n' % arduino_sdk_path

    SDK_PATH_LIBRARIES = '''SET(SDK_PATH_LIBS "{{libs_dir}}")
        SET(ALL_LIBS_DIR    {% for name in libs_names %}
                            ${SDK_PATH_LIBS}/{{name}}/src
                            ${SDK_PATH_LIBS}/{{name}}
                            {% endfor %})
        INCLUDE_DIRECTORIES(${ALL_LIBS_DIR})
        '''

    SDK_PATH_AVR_LIBS = '''
    SET(SDK_AVR_PATH_LIBS "{{libs_dir}}")
    SET(ALL_LIBS_DIR    {% for name in libs_names %}
                        ${SDK_AVR_PATH_LIBS}/{{name}}/src
                        ${SDK_AVR_PATH_LIBS}/{{name}}
                        {% endfor %})
    INCLUDE_DIRECTORIES(${ALL_LIBS_DIR})
        '''

    libraries_info, libs_recurse_names = _get_libraries_folders(
        user_io, hive_disk_image)
    libraries_path, list_libraries = libraries_info['common']
    include_libraries_path = Template(SDK_PATH_LIBRARIES).render(
        libs_dir=libraries_path, libs_names=list_libraries)
    avr_libs_info = libraries_info.get('avr')
    if avr_libs_info:
        libs_path, list_libraries = avr_libs_info
        include_libraries_path += Template(SDK_PATH_AVR_LIBS).render(
            libs_dir=libs_path, libs_names=list_libraries)

    toolchain += include_libraries_path
    settings = hive_disk_image.settings.arduino
    boards_settings = cmake_board_settings(settings.sdk, settings.version)
    # Problems with encoding of 1.5.8, yun with accent
    boards_settings = boards_settings.decode("utf-8").encode("ascii", "ignore")
    toolchain += boards_settings

    set_lib_recurses = [
        "set(%s_RECURSE True)" % lib for lib in libs_recurse_names
    ]
    toolchain += "\n".join(set_lib_recurses)
    modified = save_blob_if_modified(bii_ard_path, Blob(toolchain))
    if modified:
        user_io.out.warn("Arduino toolchain defined, regenerating project")
        hive_disk_image.delete_build_folder()

    user_io.out.write('Creating toolchain for Arduino\n', Color.BRIGHT_BLUE)
    user_io.out.success('Run "bii configure -t arduino" to activate it')
    user_io.out.success('Run "bii configure -t" to disable it')