Allow to initialise project with the specified embedded boards // Resolve #21

This commit is contained in:
Ivan Kravets
2014-12-29 20:22:01 +02:00
parent 82744afe58
commit af191834d1
7 changed files with 112 additions and 40 deletions

View File

@@ -8,15 +8,17 @@ from shutil import copyfile
import click
from platformio import app
from platformio.exception import ProjectInitialized
from platformio.util import get_source_dir
from platformio.exception import ProjectInitialized, UnknownBoard
from platformio.util import get_boards, get_source_dir
@click.command("init", short_help="Initialize new PlatformIO based project")
@click.option("--project-dir", "-d", default=getcwd(),
type=click.Path(exists=True, file_okay=False, dir_okay=True,
writable=True, resolve_path=True))
def cli(project_dir):
@click.option("--board", "-b", multiple=True, metavar="TYPE")
@click.option('--disable-auto-uploading', is_flag=True)
def cli(project_dir, board, disable_auto_uploading):
project_file = join(project_dir, "platformio.ini")
src_dir = join(project_dir, "src")
@@ -24,6 +26,10 @@ def cli(project_dir):
if all([isfile(project_file), isdir(src_dir), isdir(lib_dir)]):
raise ProjectInitialized()
builtin_boards = set(get_boards().keys())
if board and not set(board).issubset(builtin_boards):
raise UnknownBoard(", ".join(set(board).difference(builtin_boards)))
if project_dir == getcwd():
click.secho("The current working directory", fg="yellow", nl=False)
click.secho(" %s " % project_dir, fg="cyan", nl=False)
@@ -51,6 +57,8 @@ def cli(project_dir):
if not isfile(project_file):
copyfile(join(get_source_dir(), "projectconftpl.ini"),
project_file)
if board:
fill_project_envs(project_file, board, disable_auto_uploading)
click.secho(
"Project has been successfully initialized!\n"
"Now you can process it with `platformio run` command.",
@@ -58,3 +66,31 @@ def cli(project_dir):
)
else:
click.secho("Aborted by user", fg="red")
def fill_project_envs(project_file, board_types, disable_auto_uploading):
builtin_boards = get_boards()
content = []
for type_ in board_types:
if type_ not in builtin_boards:
continue
else:
content.append("")
data = builtin_boards[type_]
framework = data.get("build", {}).get("core", None)
if framework in ("msp430", "lm4f"):
framework = "energia"
content.append("[env:autogen_%s]" % type_)
content.append("platform = %s" % data['platform'])
if framework:
content.append("framework = %s" % framework)
content.append("board = %s" % type_)
content.append("%stargets = upload" % "# " if disable_auto_uploading
else "")
with open(project_file, "a") as f:
f.write("\n".join(content))