diff --git a/pio-tools/gzip-firmware.py b/pio-tools/gzip-firmware.py index 63394789e..5262f037d 100644 --- a/pio-tools/gzip-firmware.py +++ b/pio-tools/gzip-firmware.py @@ -28,7 +28,8 @@ def map_gzip(source, target, env): map_file.unlink() -env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", [map_gzip]) +if not tasmotapiolib.is_env_set(tasmotapiolib.DISABLE_MAP_GZ): + env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", [map_gzip]) # gzip only for ESP8266 if env["PIOPLATFORM"] != "espressif32": @@ -65,4 +66,5 @@ if env["PIOPLATFORM"] != "espressif32": ) ) - env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", [bin_gzip]) + if not tasmotapiolib.is_env_set(tasmotapiolib.DISABLE_BIN_GZ): + env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", [bin_gzip]) diff --git a/pio-tools/tasmotapiolib.py b/pio-tools/tasmotapiolib.py index 52ce83c9a..2d6fe22e9 100644 --- a/pio-tools/tasmotapiolib.py +++ b/pio-tools/tasmotapiolib.py @@ -1,5 +1,18 @@ """Supporting library for pio-tools scripts""" import pathlib +import os + +# Constants for environment variables that can be set to control build output file +# locations and formats + +# if set to 1, will not gzip esp8266 bin files +DISABLE_BIN_GZ = "TASMOTA_DISABLE_BIN_GZ" +# if set, an alternative ptah to put generated .bin files +BIN_DIR = "TASMOTA_BIN_DIR" +# if set to 1, will not gzip generated .map files +DISABLE_MAP_GZ = "TASMOTA_DISABLE_MAP_GZ" +# if set, an alternative path to put generated .map files +MAP_DIR = "TASMOTA_MAP_DIR" OUTPUT_DIR = pathlib.Path("build_output") @@ -13,7 +26,7 @@ def get_final_bin_path(env) -> pathlib.Path: """Path to the final destination for the .bin If the parent directory does not exist, it will be created""" - firmware_dir = OUTPUT_DIR / "firmware" + firmware_dir = get_override_path(BIN_DIR) firmware_dir.mkdir(parents=True, exist_ok=True) return firmware_dir / "{}.bin".format(get_variant(env)) @@ -22,7 +35,7 @@ def get_final_map_path(env) -> pathlib.Path: """Path to the final destination for the .map file If the parent directory does not exist, it will be created""" - map_dir = OUTPUT_DIR / "map" + map_dir = get_override_path(MAP_DIR) map_dir.mkdir(parents=True, exist_ok=True) return map_dir / "{}.map".format(get_variant(env)) @@ -47,3 +60,28 @@ def get_source_map_path(env) -> pathlib.Path: return fwmap_path raise FileNotFoundError + + +def get_override_path(pathtype) -> pathlib.Path: + """ + Returns a path to a givens override path if set, otherwise OUTPUT_DIR is used + + pathtype must be either MAP_DIR or BIN_DIR. + """ + override = os.environ.get(pathtype) + if override: + return pathlib.Path(override) + if pathtype == BIN_DIR: + return OUTPUT_DIR / "firmware" + elif pathtype == MAP_DIR: + return OUTPUT_DIR / "map" + raise ValueError + + +def is_env_set(name: str): + """True if the enviornment variable is set to `1`""" + val = os.environ.get(name.upper()) + if val: + val = val.strip() + return val == "1" + return False