This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
The following commit(s) were added to refs/heads/master by this push:
new 7bfd62361 system/nxdiag: Add Espressif's HAL version
7bfd62361 is described below
commit 7bfd6236169078f4569665e9bd49495c64b5abe7
Author: Lucas Saavedra Vaz <[email protected]>
AuthorDate: Tue Jun 27 18:08:36 2023 -0300
system/nxdiag: Add Espressif's HAL version
Adds the currently used ESP HAL version to NXdiag's output.
---
system/nxdiag/Makefile | 32 ++++++-
system/nxdiag/nxdiag.c | 1 +
tools/host_sysinfo.py | 249 ++++++++++++++++++++++++++++---------------------
3 files changed, 171 insertions(+), 111 deletions(-)
diff --git a/system/nxdiag/Makefile b/system/nxdiag/Makefile
index d82d2eb95..ca8f7c776 100644
--- a/system/nxdiag/Makefile
+++ b/system/nxdiag/Makefile
@@ -20,7 +20,8 @@
include $(APPDIR)/Make.defs
-NXTOOLSDIR = $(APPDIR)/tools
+NXTOOLSDIR = $(APPDIR)$(DELIM)tools
+NXDIAGDIR = $(APPDIR)$(DELIM)system$(DELIM)nxdiag
# Sysinfo application info
@@ -58,12 +59,29 @@ endif
# Vendor-specific checks
+# Espressif
+
ifeq ($(CONFIG_SYSTEM_NXDIAG_ESPRESSIF),y)
+
+ARCH_ESP_HALDIR =
$(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)chip$(DELIM)esp-hal-3rdparty
+
+# If the esp-hal-3rdparty directory is not in the arch directory, then it can
be
+# cloned to the nxdiag directory for debugging purposes.
+HALDIR := $(shell if [ -d $(ARCH_ESP_HALDIR)$(DELIM).git ]; then echo
"$(ARCH_ESP_HALDIR)"; else echo "$(NXDIAGDIR)$(DELIM)esp-hal-3rdparty"; fi)
+
+INFO_DEPS += espressif_prepare
+
+espressif_prepare:
+ifeq ($(HALDIR),$(ARCH_ESP_HALDIR))
+ (cd ${HALDIR} && git fetch -q --depth=10000 && git fetch -q --tags)
+endif
+
ifdef ESPTOOL_BINDIR
-NXDIAG_FLAGS += --espressif "$(ESPTOOL_BINDIR)"
+NXDIAG_FLAGS += --espressif "$(ESPTOOL_BINDIR)" "$(HALDIR)"
else
-NXDIAG_FLAGS += --espressif "$(TOPDIR)"
+NXDIAG_FLAGS += --espressif "$(TOPDIR)" "$(HALDIR)"
endif
+
endif
# Common build
@@ -77,8 +95,12 @@ checkpython3:
exit 1; \
fi
-sysinfo.h : checkpython3
- @python3 $(NXTOOLSDIR)$(DELIM)host_sysinfo.py $(NXDIAG_FLAGS) >
sysinfo.h || (echo "host_sysinfo.py failed $$?"; exit 1)
+sysinfo.h : checkpython3 $(INFO_DEPS)
+ @python3 $(NXTOOLSDIR)$(DELIM)host_sysinfo.py $(NXDIAG_FLAGS) >
sysinfo.h
+ if ([ $$? -ne 0 ]); then \
+ echo "ERROR: Failed to generate sysinfo.h"; \
+ exit 1; \
+ fi
context:: sysinfo.h
diff --git a/system/nxdiag/nxdiag.c b/system/nxdiag/nxdiag.c
index c15c30bee..b3e56240e 100644
--- a/system/nxdiag/nxdiag.c
+++ b/system/nxdiag/nxdiag.c
@@ -344,6 +344,7 @@ int main(int argc, char *argv[])
printf("Toolchain version:\n");
print_array(ESPRESSIF_TOOLCHAIN, ESPRESSIF_TOOLCHAIN_ARRAY_SIZE);
printf("Esptool version: %s\n\n", ESPRESSIF_ESPTOOL);
+ printf("HAL version: %s\n\n", ESPRESSIF_HAL);
#endif
}
diff --git a/tools/host_sysinfo.py b/tools/host_sysinfo.py
index c76a01fc6..4904038f0 100755
--- a/tools/host_sysinfo.py
+++ b/tools/host_sysinfo.py
@@ -25,6 +25,139 @@ class validate_flags_arg(argparse.Action):
setattr(namespace, self.dest, values)
+# Vendor specific functions #
+
+# Espressif #
+
+
+def get_espressif_bootloader_version(bindir):
+ """
+ Get the bootloader version for Espressif chips from the bootloader binary.
This
+ function works on Linux, Windows, and macOS.
+
+ Args:
+ bindir (str): The path to the bootloader binary directory.
+
+ Returns:
+ dict: A dictionary containing the bootloader version for each chip.
+ """
+
+ regex = r"^(?=.*\bv\d+(\.\d+){1,2}\b).+$"
+ bootloader_chips = [
+ "esp32",
+ "esp32s2",
+ "esp32s3",
+ "esp32c2",
+ "esp32c3",
+ "esp32c6",
+ "esp32h2",
+ ]
+ bootloader_version = {}
+
+ for chip in bootloader_chips:
+ file = "bootloader-{}.bin".format(chip)
+ path = os.path.join(bindir, file)
+
+ if os.path.isfile(path):
+ if platform.system() == "Linux":
+ process = subprocess.Popen(["strings", path],
stdout=subprocess.PIPE)
+ elif platform.system() == "Windows":
+ process = subprocess.Popen(
+ [
+ "powershell",
+ "Get-Content -Raw -Encoding Byte {} |".format(path)
+ + " % { [char[]]$_ -join \"\" } | Select-String
-Pattern '[\\x20-\\x7E]+'"
+ + " -AllMatches | % { $_.Matches } | % { $_.Value }",
+ ],
+ stdout=subprocess.PIPE,
+ )
+ elif platform.system() == "Darwin":
+ process = subprocess.Popen(
+ ["strings", "-", path], stdout=subprocess.PIPE
+ )
+ else:
+ bootloader_version[chip] = "Not supported on host OS"
+ break
+
+ output, error = process.communicate()
+ strings_out = output.decode("utf-8", errors="ignore")
+ matches = re.finditer(regex, strings_out, re.MULTILINE)
+
+ try:
+ bootloader_version[chip] = next(matches).group(0)
+ except StopIteration:
+ bootloader_version[chip] = "Unknown"
+
+ else:
+ bootloader_version[chip] = "Bootloader image not found"
+
+ return bootloader_version
+
+
+def get_espressif_toolchain_version():
+ """
+ Get the version of different toolchains used by Espressif chips.
+
+ Args:
+ None.
+
+ Returns:
+ dict: A dictionary containing the toolchain version for each toolchain.
+ """
+
+ toolchain_version = {}
+ toolchain_bins = [
+ "clang",
+ "gcc",
+ "xtensa-esp32-elf-gcc",
+ "xtensa-esp32s2-elf-gcc",
+ "xtensa-esp32s3-elf-gcc",
+ "riscv32-esp-elf-gcc",
+ "riscv64-unknown-elf-gcc",
+ ]
+
+ for binary in toolchain_bins:
+ try:
+ version_output = subprocess.check_output(
+ [binary, "--version"], stderr=subprocess.STDOUT,
universal_newlines=True
+ )
+ version_lines = version_output.split("\n")
+ version = version_lines[0].strip()
+ toolchain_version[binary] = version
+ except (subprocess.CalledProcessError, FileNotFoundError):
+ toolchain_version[binary] = "Not found"
+
+ return toolchain_version
+
+
+def get_espressif_hal_version(hal_dir):
+ """
+ Get the version of the ESP HAL used by Espressif chips.
+
+ Args:
+ None.
+
+ Returns:
+ str: The ESP HAL version.
+ """
+
+ hal_version = "Not found"
+
+ try:
+ if os.path.isdir(os.path.join(hal_dir, ".git")):
+ hal_version_output = subprocess.check_output(
+ ["git", "describe", "--tags", "--always"],
+ cwd=hal_dir,
+ stderr=subprocess.STDOUT,
+ universal_newlines=True,
+ )
+ hal_version = hal_version_output.strip()
+ except (subprocess.CalledProcessError, FileNotFoundError):
+ pass
+
+ return hal_version
+
+
# Common functions #
@@ -417,112 +550,16 @@ def generate_header(args):
info["ESPRESSIF_ESPTOOL"].split("-")[1]
)
- output += "#endif /* __SYSTEM_INFO_H */\n"
-
- return output
-
-
-# Vendor specific functions #
-
-
-def get_espressif_bootloader_version(bindir):
- """
- Get the bootloader version for Espressif chips from the bootloader binary.
This
- function works on Linux, Windows, and macOS.
-
- Args:
- bindir (str): The path to the bootloader binary directory.
-
- Returns:
- dict: A dictionary containing the bootloader version for each chip.
- """
-
- regex = r"^(?=.*\bv\d+(\.\d+){1,2}\b).+$"
- bootloader_chips = [
- "esp32",
- "esp32s2",
- "esp32s3",
- "esp32c2",
- "esp32c3",
- "esp32c6",
- "esp32h2",
- ]
- bootloader_version = {}
-
- for chip in bootloader_chips:
- file = "bootloader-{}.bin".format(chip)
- path = os.path.join(bindir, file)
+ # Espressif HAL version
- if os.path.isfile(path):
- if platform.system() == "Linux":
- process = subprocess.Popen(["strings", path],
stdout=subprocess.PIPE)
- elif platform.system() == "Windows":
- process = subprocess.Popen(
- [
- "powershell",
- "Get-Content -Raw -Encoding Byte {} |".format(path)
- + " % { [char[]]$_ -join \"\" } | Select-String
-Pattern '[\\x20-\\x7E]+'"
- + " -AllMatches | % { $_.Matches } | % { $_.Value }",
- ],
- stdout=subprocess.PIPE,
- )
- elif platform.system() == "Darwin":
- process = subprocess.Popen(
- ["strings", "-", path], stdout=subprocess.PIPE
- )
- else:
- bootloader_version[chip] = "Not supported on host OS"
- break
-
- output, error = process.communicate()
- strings_out = output.decode("utf-8", errors="ignore")
- matches = re.finditer(regex, strings_out, re.MULTILINE)
-
- try:
- bootloader_version[chip] = next(matches).group(0)
- except StopIteration:
- bootloader_version[chip] = "Unknown"
-
- else:
- bootloader_version[chip] = "Bootloader image not found"
-
- return bootloader_version
-
-
-def get_espressif_toolchain_version():
- """
- Get the version of different toolchains used by Espressif chips.
-
- Args:
- None.
-
- Returns:
- dict: A dictionary containing the toolchain version for each toolchain.
- """
-
- toolchain_version = {}
- toolchain_bins = [
- "clang",
- "gcc",
- "xtensa-esp32-elf-gcc",
- "xtensa-esp32s2-elf-gcc",
- "xtensa-esp32s3-elf-gcc",
- "riscv32-esp-elf-gcc",
- "riscv64-unknown-elf-gcc",
- ]
+ info["ESPRESSIF_HAL"] = get_espressif_hal_version(args.espressif[1])
+ output += 'static const char ESPRESSIF_HAL[] = "{}";\n\n'.format(
+ info["ESPRESSIF_HAL"]
+ )
- for binary in toolchain_bins:
- try:
- version_output = subprocess.check_output(
- [binary, "--version"], stderr=subprocess.STDOUT,
universal_newlines=True
- )
- version_lines = version_output.split("\n")
- version = version_lines[0].strip()
- toolchain_version[binary] = version
- except (subprocess.CalledProcessError, FileNotFoundError):
- toolchain_version[binary] = "Not found"
+ output += "#endif /* __SYSTEM_INFO_H */\n"
- return toolchain_version
+ return output
# Main #
@@ -604,10 +641,10 @@ if __name__ == "__main__":
parser.add_argument(
"--espressif",
- nargs=1,
+ nargs=2,
default=[],
- metavar="ESPTOOL_BINDIR",
- help="Get Espressif specific information. Requires the path to the
bootloader binary directory.",
+ metavar=("ESPTOOL_BINDIR", "ESP_HAL_DIR"),
+ help="Get Espressif specific information. Requires the path to the
bootloader binary and ESP HAL directories.",
)
# Parse arguments