From 3ae76fa64b95b40a6cc2ffa0a08ec7448107764b Mon Sep 17 00:00:00 2001 From: Siddharth Purohit Date: Wed, 6 Jan 2021 03:13:03 +0530 Subject: [PATCH] wscript: add generate tasklist for use by vscode extension --- wscript | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/wscript b/wscript index d7f0fde33d..1adddd72eb 100644 --- a/wscript +++ b/wscript @@ -7,12 +7,15 @@ import os.path import os import sys import subprocess +import json +import fnmatch sys.path.insert(0, 'Tools/ardupilotwaf/') import ardupilotwaf import boards from waflib import Build, ConfigSet, Configure, Context, Utils +from waflib.Configure import conf # TODO: implement a command 'waf help' that shows the basic tasks a # developer might want to do: e.g. how to configure a board, compile a @@ -40,6 +43,9 @@ def _set_build_context_variant(board): c.variant = board def init(ctx): + # Generate Task List, so that VS Code extension can keep track + # of changes to possible build targets + generate_tasklist(ctx, False) env = ConfigSet.ConfigSet() try: p = os.path.join(Context.out_dir, Build.CACHE_DIR, Build.CACHE_SUFFIX) @@ -399,6 +405,39 @@ def collect_dirs_to_recurse(bld, globs, **kw): def list_boards(ctx): print(*boards.get_boards_names()) +@conf +def ap_periph_boards(ctx): + return boards.get_ap_periph_boards() + +def generate_tasklist(ctx, do_print=True): + boardlist = boards.get_boards_names() + ap_periph_targets = boards.get_ap_periph_boards() + tasks = [] + with open(os.path.join(Context.top_dir, "tasklist.json"), "w") as tlist: + for board in boardlist: + task = {} + task['configure'] = board + if board in ap_periph_targets: + if 'sitl' not in board: + # we only support AP_Periph and bootloader builds + task['targets'] = ['AP_Periph', 'bootloader'] + else: + task['targets'] = ['AP_Periph'] + elif 'iofirmware' in board: + task['targets'] = ['iofirmware', 'bootloader'] + else: + if 'sitl' in board or 'SITL' in board: + task['targets'] = ['antennatracker', 'copter', 'heli', 'plane', 'rover', 'sub', 'replay'] + elif 'linux' in board: + task['targets'] = ['antennatracker', 'copter', 'heli', 'plane', 'rover', 'sub'] + else: + task['targets'] = ['antennatracker', 'copter', 'heli', 'plane', 'rover', 'sub', 'bootloader'] + task['buildOptions'] = '--upload' + tasks.append(task) + tlist.write(json.dumps(tasks)) + if do_print: + print(json.dumps(tasks)) + def board(ctx): env = ConfigSet.ConfigSet() try: