#
# Copyright (C) 2024 Til Kaiser
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=mstflint
PKG_VERSION:=4.29.0
PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-1.tar.gz
PKG_SOURCE_URL:=https://github.com/Mellanox/$(PKG_NAME)/releases/download/v$(PKG_VERSION)-1
PKG_SOURCE_DATE:=2024-08-13
PKG_HASH:=1bd048146f1fe0493d4770b244b02e32981b49caed068fd96a22700103220654

PKG_MAINTAINER:=Til Kaiser <mail@tk154.de>
PKG_LICENSE:=GPL-2.0-only
PKG_LICENSE_FILES:=COPYING

PKG_FIXUP:=autoreconf
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1

include $(INCLUDE_DIR)/package.mk

define Package/mstflint
  SECTION:=Utilities
  CATEGORY:=Utilities
  TITLE:=Mellanox Firmware Burning and Diagnostics Tools
  URL:=https://github.com/Mellanox/mstflint
  DEPENDS:=@!(mips||mips64||mipsel) \
    +libcurl +libexpat +liblzma +libopenssl \
    +libsqlite3 +libstdcpp +libxml2 +zlib
endef

define Package/mstflint/description
  This package contains a burning tool and diagnostic
  tools for Mellanox manufactured HCA/NIC cards.

  Package Contents:
    mflash lib
      This lib provides low level Flash
      access through Mellanox HCAs.
    mtcr lib (implemented in mtcr.h file)
      This lib enables access to HCA hardware registers.
    mstregdump
      This utility dumps hardware registers from
      Mellanox hardware for later analysis by Mellanox.
    mstvpd
      This utility dumps the on-card VPD.
    mstmcra
      This debug utility reads/writes a to/from
      the device configuration register space.
    mstconfig
      This tool sets or queries non-volatile
      configurable options for Mellanox HCAs.
    mstfwmanager
      Mellanox firmware update and query utility which scans
      the system for available Mellanox devices (only mst
      PCI devices) and performs the necessary firmware updates.
    mstreg
      The mlxreg utility allows users to obtain information
      regarding supported access registers, such as their
      fields and attributes.
    mstfwtrace
      The mstfwtrace utility extracts and prints trace messages
      generated by the firmware running on 5th generation
      devices iRISCs. This tool supports secure FW flow only.
    mstlink
      The mstlink tool is used to check and debug
      link status and issues related to them.
endef

define Package/mstflint/config
  config PACKAGE_MSTFLINT_INCLUDE_PYTHON
    bool "Include Python-dependent tools"
    default y
    depends on PACKAGE_mstflint
    select PACKAGE_python3-ctypes
    select PACKAGE_python3-logging
    select PACKAGE_python3-xml
    help
      All mstflint tools including the following Python-dependent:
        msftwreset, mstfwtrace, mstprivhost,
        mstresourcedump, mstresourceparse
endef

CONFIGURE_ARGS += \
	--enable-fw-mgr \
	--disable-inband \
	--enable-adb-generic-tools

TARGET_CFLAGS += \
	-D_GNU_SOURCE \
	-I$(STAGING_DIR)/usr/include/libxml2

define Build/InstallDev
	$(INSTALL_DIR) $(1)/usr/include
	$(CP) $(PKG_INSTALL_DIR)/usr/include/mstflint $(1)/usr/include/

	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/mstflint $(1)/usr/lib/
endef

define Package/mstflint/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstarchive $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstconfig $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstcongestion $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstflint $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstfwctrl $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstfwmanager $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstlink $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstmcra $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstmread $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstmtserver $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstmwrite $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstreg $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstregdump $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstvpd $(1)/usr/bin/

	$(INSTALL_DIR) $(1)/usr/share/mstflint
	$(CP) $(PKG_INSTALL_DIR)/usr/share/mstflint $(1)/usr/share/

ifeq ($(CONFIG_PACKAGE_MSTFLINT_INCLUDE_PYTHON),y)
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstfwreset $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstfwtrace $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstprivhost $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstresourcedump $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mstresourceparse $(1)/usr/bin/

	$(INSTALL_DIR) $(1)/usr/lib/mstflint
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/mstflint/python_tools $(1)/usr/lib/mstflint/
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/mstflint/sdk $(1)/usr/lib/mstflint/
endif
endef

$(eval $(call BuildPackage,mstflint))
