From a99436b6bf2eda86eb6388352509f4b308b85801 Mon Sep 17 00:00:00 2001 From: Silvano Cerza <3314350+silvanocerza@users.noreply.github.com> Date: Thu, 10 Jun 2021 11:50:35 +0200 Subject: [PATCH] Change index format to differentiate upload commands by OS (#50) --- generator/generator.py | 44 ++++++++++++++---- .../testdata/module_firmware_index.json | 33 ++++++++++--- .../testdata/module_firmware_index.json.sig | Bin 438 -> 438 bytes indexes/firmwareindex/firmwareindex.go | 43 ++++++++++------- indexes/firmwareindex/firmwareindex_test.go | 16 ------- .../testdata/module_firmware_index.json | 33 ++++++++++--- .../testdata/module_firmware_index.json.sig | Bin 438 -> 438 bytes 7 files changed, 113 insertions(+), 56 deletions(-) diff --git a/generator/generator.py b/generator/generator.py index 3f581767..41966856 100644 --- a/generator/generator.py +++ b/generator/generator.py @@ -71,9 +71,9 @@ def create_firmware_data(binary, module, version): } -def get_uploader_id(tools, tool_executable): +def get_uploader_id(tools, tool_name): for t in tools: - if t["name"] == tool_executable: + if t["name"] == tool_name: packager = t["packager"] name = t["name"] version = t["version"] @@ -118,15 +118,27 @@ def create_upload_data(fqbn, installed_cores): # noqa: C901 installed_json_data = json.load(f) if f"{tool}.cmd" in platform_upload_data: - tool_executable = platform_upload_data[f"{tool}.cmd"] + tool_executable_generic = platform_upload_data[f"{tool}.cmd"] + tool_executable_linux = platform_upload_data.get(f"{tool}.cmd.linux", tool_executable_generic) + tool_executable_windows = platform_upload_data.get(f"{tool}.cmd.windows", "") + tool_executable_macosx = platform_upload_data.get(f"{tool}.cmd.macosx", "") + tool_name = tool_executable_generic elif f"{tool}.cmd.path" in platform_upload_data: - tool_executable = platform_upload_data[f"{tool}.cmd.path"].split("/")[-1] + tool_executable_generic = "/".join(platform_upload_data[f"{tool}.cmd.path"].split("/")[1:]) + tool_executable_linux = platform_upload_data.get(f"{tool}.cmd.path.linux", tool_executable_generic) + tool_executable_windows = platform_upload_data.get(f"{tool}.cmd.path.windows", "") + tool_executable_macosx = platform_upload_data.get(f"{tool}.cmd.path.macosx", "") + tool_name = tool_executable_generic.split("/")[-1] - if tool_executable == "rp2040load": - tool_executable = "rp2040tools" + tool_config_path = "" + if f"{tool}.config.path" in platform_upload_data: + tool_config_path = "/".join(platform_upload_data[f"{tool}.config.path"].split("/")[1:]) + + if tool_name == "rp2040load": + tool_name = "rp2040tools" tools = installed_json_data["packages"][0]["platforms"][0]["toolsDependencies"] - upload_data["uploader"] = get_uploader_id(tools, tool_executable) + upload_data["uploader"] = get_uploader_id(tools, tool_name) if "upload.use_1200bps_touch" in board_upload_data: upload_data["upload.use_1200bps_touch"] = bool(board_upload_data["upload.use_1200bps_touch"]) @@ -140,6 +152,7 @@ def create_upload_data(fqbn, installed_cores): # noqa: C901 .replace("{path}/{cmd}", "{uploader}") .replace("{cmd.path}", "{uploader}") .replace("{build.path}/{build.project_name}", "{loader.sketch}") + .replace("{config.path}", f"{{tool_dir}}/{tool_config_path}") .replace('\\"', "") ) @@ -163,7 +176,22 @@ def create_upload_data(fqbn, installed_cores): # noqa: C901 for k, v in {**board_upload_data, **params}.items(): command = command.replace(f"{{{k}}}", v) - upload_data["uploader.command"] = command + # This is ugly as hell and I don't care + upload_data["uploader.command"] = {} + if tool_executable_linux: + upload_data["uploader.command"]["linux"] = command.replace( + "{uploader}", f"{{tool_dir}}/{tool_executable_linux}" + ) + + if tool_executable_windows: + upload_data["uploader.command"]["windows"] = command.replace( + "{uploader}", f"{{tool_dir}}\\{tool_executable_windows}" + ) + + if tool_executable_macosx: + upload_data["uploader.command"]["macosx"] = command.replace( + "{uploader}", f"{{tool_dir}}/{tool_executable_macosx}" + ) return upload_data diff --git a/indexes/download/testdata/module_firmware_index.json b/indexes/download/testdata/module_firmware_index.json index 89ec7faf..0cced4e7 100644 --- a/indexes/download/testdata/module_firmware_index.json +++ b/indexes/download/testdata/module_firmware_index.json @@ -41,7 +41,10 @@ "uploader": "arduino:bossac@1.7.0-arduino3", "upload.use_1200bps_touch": true, "upload.wait_for_upload_port": true, - "uploader.command": "\"{uploader}\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R" + "uploader.command": { + "linux": "\"{tool_dir}/bossac\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R", + "windows": "\"{tool_dir}\\bossac.exe\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R" + } }, { "fqbn": "arduino:samd:mkrwifi1010", @@ -148,7 +151,10 @@ "uploader": "arduino:bossac@1.7.0-arduino3", "upload.use_1200bps_touch": true, "upload.wait_for_upload_port": true, - "uploader.command": "\"{uploader}\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R" + "uploader.command": { + "linux": "\"{tool_dir}/bossac\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R", + "windows": "\"{tool_dir}\\bossac.exe\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R" + } }, { "fqbn": "arduino:samd:nano_33_iot", @@ -255,7 +261,10 @@ "uploader": "arduino:bossac@1.7.0-arduino3", "upload.use_1200bps_touch": true, "upload.wait_for_upload_port": true, - "uploader.command": "\"{uploader}\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R" + "uploader.command": { + "linux": "\"{tool_dir}/bossac\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R", + "windows": "\"{tool_dir}\\bossac.exe\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R" + } }, { "fqbn": "arduino:samd:mkrvidor4000", @@ -357,7 +366,10 @@ "uploader": "arduino:bossac@1.7.0-arduino3", "upload.use_1200bps_touch": true, "upload.wait_for_upload_port": true, - "uploader.command": "\"{uploader}\" -i -d --port={serial.port.file} -I -U true -i -e -w \"{loader.sketch}.bin\" -R" + "uploader.command": { + "linux": "\"{tool_dir}/bossac\" -i -d --port={serial.port.file} -I -U true -i -e -w \"{loader.sketch}.bin\" -R", + "windows": "\"{tool_dir}\\bossac.exe\" -i -d --port={serial.port.file} -I -U true -i -e -w \"{loader.sketch}.bin\" -R" + } }, { "fqbn": "arduino:megaavr:uno2018", @@ -448,7 +460,9 @@ "module": "NINA", "name": "Arduino Uno WiFi Rev2", "uploader": "arduino:avrdude@6.3.0-arduino17", - "uploader.command": "\"{uploader}\" \"-C{config.path}\" -v -patmega4809 -cxplainedmini_updi -Pusb -b115200 -e -D \"-Uflash:w:{loader.sketch}.hex:i\" \"-Ufuse2:w:0x01:m\" \"-Ufuse5:w:0xC9:m\" \"-Ufuse8:w:0x02:m\" " + "uploader.command": { + "linux": "\"{tool_dir}/bin/avrdude\" \"-C{tool_dir}/etc/avrdude.conf\" -v -patmega4809 -cxplainedmini_updi -Pusb -b115200 -e -D \"-Uflash:w:{loader.sketch}.hex:i\" \"-Ufuse2:w:0x01:m\" \"-Ufuse5:w:0xC9:m\" \"-Ufuse8:w:0x02:m\" " + } }, { "fqbn": "arduino:samd:mkrnb1500", @@ -485,7 +499,10 @@ "uploader": "arduino:bossac@1.7.0-arduino3", "upload.use_1200bps_touch": true, "upload.wait_for_upload_port": true, - "uploader.command": "\"{uploader}\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R" + "uploader.command": { + "linux": "\"{tool_dir}/bossac\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R", + "windows": "\"{tool_dir}\\bossac.exe\" -i -d --port={serial.port.file} -U true -i -e -w -v \"{loader.sketch}.bin\" -R" + } }, { "fqbn": "arduino:mbed_nano:nanorp2040connect", @@ -508,6 +525,8 @@ "uploader": "arduino:rp2040tools@1.0.2", "upload.use_1200bps_touch": true, "upload.wait_for_upload_port": true, - "uploader.command": "\"{uploader}\" -v -D \"{loader.sketch}.elf\"" + "uploader.command": { + "linux": "\"{tool_dir}/rp2040load\" -v -D \"{loader.sketch}.elf\"" + } } ] \ No newline at end of file diff --git a/indexes/download/testdata/module_firmware_index.json.sig b/indexes/download/testdata/module_firmware_index.json.sig index 7eff359167be658a3e4877faf83ec12cb0a12c52..7cd3f15103640436275e22d2ce86cffa47caf7a7 100644 GIT binary patch delta 413 zcmV;O0b>5P1GWQ@BY(l&d;kgw5Q6g8$Hk&5bNE{f0Mz|^^39OKmm7b(ziEyb+ydRl zW{31o+Lxpe9bf-Hm2S^+jK*^rdBIH18$yZ9E|*e^!P_!7KJZ+` zLsof@kF27uIv3O=vf!VNLoBjpJK^w1|4E-FCTI?VOdgnYiGQucZoto#6usUu?w2LA z_MY_iLlA4;$y(eV)$85aDuM!ae_NZdd1t~%X~i$_SrAm#a0AXS^C-b0`o8&?$H>9%3X9V{wEMV8{T0-{MvBQ9F@j6-I&pdEUS1G+>rs|zkD-arOkQn7 zr--fNMhie#tbZvqHlgt$&_!u+@F7NixmzU_Dd8wvU9RTuwq`Q_|C_ z^7%Bk-9j2`PPkgidOHH3>4UN`yrrzM(mrE|tH(3T%ofY&NiTp8BEh!7B9Wsy?gRBZ HbJ;u76UNq| delta 413 zcmV;O0b>5P1GWQ@BY(hma{vkn5Q6g8$Hk&5b4gnZ{y(audV1XIu{$nz(0U0<$*Q?F z)$A3Au~}iZdEic|!<{=CtilZQW~y!fmmptGNbcngSF0$#=|z6#zDmqZ3pmTPY2}@Y zzkXKxy=^1;DH^bEMpbs}TsKI(44dp{?vse8=Gcrm+Y^82_#E z9C(9jlK*IZT*noShGm)enCOr|+YdhGdsw$?Q=Uo~%O_k(046Fm$i-6U?u?+;L-dXW zT^783Q71;Zcq{e;^TA3iE+f^0!SC_1bI=v=neRu@EKie}sLh5P1GWQ@BY(l&d;kgw5Q6g8$Hk&5bNE{f0Mz|^^39OKmm7b(ziEyb+ydRl zW{31o+Lxpe9bf-Hm2S^+jK*^rdBIH18$yZ9E|*e^!P_!7KJZ+` zLsof@kF27uIv3O=vf!VNLoBjpJK^w1|4E-FCTI?VOdgnYiGQucZoto#6usUu?w2LA z_MY_iLlA4;$y(eV)$85aDuM!ae_NZdd1t~%X~i$_SrAm#a0AXS^C-b0`o8&?$H>9%3X9V{wEMV8{T0-{MvBQ9F@j6-I&pdEUS1G+>rs|zkD-arOkQn7 zr--fNMhie#tbZvqHlgt$&_!u+@F7NixmzU_Dd8wvU9RTuwq`Q_|C_ z^7%Bk-9j2`PPkgidOHH3>4UN`yrrzM(mrE|tH(3T%ofY&NiTp8BEh!7B9Wsy?gRBZ HbJ;u76UNq| delta 413 zcmV;O0b>5P1GWQ@BY(hma{vkn5Q6g8$Hk&5b4gnZ{y(audV1XIu{$nz(0U0<$*Q?F z)$A3Au~}iZdEic|!<{=CtilZQW~y!fmmptGNbcngSF0$#=|z6#zDmqZ3pmTPY2}@Y zzkXKxy=^1;DH^bEMpbs}TsKI(44dp{?vse8=Gcrm+Y^82_#E z9C(9jlK*IZT*noShGm)enCOr|+YdhGdsw$?Q=Uo~%O_k(046Fm$i-6U?u?+;L-dXW zT^783Q71;Zcq{e;^TA3iE+f^0!SC_1bI=v=neRu@EKie}sLh