Fork of the espurna firmware for `mhsw` switches
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

133 lines
4.1 KiB

#!/usr/bin/env python
#
# Copyright (C) 2019 by Maxim Prokhorov <prokhorov dot max at outlook dot com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
import time
import glob
import argparse
import atexit
import subprocess
import os
import sys
import datetime
from espurna_utils.display import Color, clr, print_warning
CUSTOM_HEADER = "espurna/config/custom.h"
if os.path.exists(CUSTOM_HEADER):
raise SystemExit(
clr(
Color.YELLOW,
"{} already exists, please run this script in a git-worktree(1) or a separate directory".format(
CUSTOM_HEADER
),
)
)
def try_remove(path):
try:
os.remove(path)
except: # pylint: disable=bare-except
print_warning("Please manually remove the file `{}`".format(path))
atexit.register(try_remove, CUSTOM_HEADER)
def main(args):
configurations = []
if not args.no_default:
configurations = list(glob.glob(args.default_configurations))
configurations.extend(x for x in (args.add or []))
if not configurations:
raise SystemExit(clr(Color.YELLOW, "No configurations selected"))
print(clr(Color.BOLD, "> Selected configurations:"))
for cfg in configurations:
print(cfg)
if args.list:
return
if not args.environment:
raise SystemExit(clr(Color.YELLOW, "No environment selected"))
print(clr(Color.BOLD, "> Selected environment: {}".format(args.environment)))
for cfg in configurations:
print(clr(Color.BOLD, "> Building {}".format(cfg)))
with open(CUSTOM_HEADER, "w") as custom_h:
def write(line):
sys.stdout.write(line)
custom_h.write(line)
name, _ = os.path.splitext(cfg)
name = os.path.basename(name)
write('#define MANUFACTURER "TEST_BUILD"\n')
write('#define DEVICE "{}"\n'.format(name.upper()))
with open(cfg, "r") as cfg_file:
for line in cfg_file:
write(line)
os_env = os.environ.copy()
os_env["PLATFORMIO_SRC_BUILD_FLAGS"] = "-DUSE_CUSTOM_H"
os_env["PLATFORMIO_BUILD_CACHE_DIR"] = "test/pio_cache"
cmd = ["platformio", "run", "-s", "-e", args.environment]
start = time.time()
subprocess.check_call(cmd, env=os_env)
end = time.time()
print(
clr(
Color.BOLD,
"> {}: {} bytes, {}".format(
cfg,
os.stat(
os.path.join(".pio", "build", args.environment, "firmware.bin")
).st_size,
datetime.timedelta(seconds=(end - start)),
),
)
)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"-l", "--list", action="store_true", help="List selected configurations"
)
parser.add_argument(
"-n",
"--no-default",
action="store_true",
help="Do not use default configurations (--default-configurations=...)",
)
parser.add_argument(
"-a",
"--add",
action="append",
help="Add path to selected configurations (can specify multiple times)",
)
parser.add_argument("-e", "--environment", help="PIO environment")
parser.add_argument(
"--default-configurations",
default="test/build/*.h",
help="(glob) default configuration headers",
)
main(parser.parse_args())