diff --git a/devkit-cli.spec b/devkit-cli.spec new file mode 100644 index 0000000000000000000000000000000000000000..814f6855e96ae810a5c7bc036770668ec128a706 --- /dev/null +++ b/devkit-cli.spec @@ -0,0 +1,327 @@ +Name: devkit-cli +Summary: Huawei Kunpeng DevKit CLI +Version: 24.0.RC2 +Release: 1 +License: GPLv2 +ExclusiveOS: Linux +ExclusiveArch: aarch64 x86_64 +Packager: Huawei Kunpeng DevKit +Vendor: Huawei Kunpeng DevKit +URL: https://www.hikunpeng.com +BuildRoot: %{_tmppath}/%{name}-%{version}-root +Conflicts: %{name} < %{version}-%{release} +Provides: %{name} = %{version}-%{release} +Source0: https://kunpeng-repo.obs.cn-north-4.myhuaweicloud.com/Kunpeng%20DevKit/Kunpeng%20DevKit%20%{version}/DevKit-CLI-%{version}-Linux-Kunpeng.tar.gz +Source1: https://kunpeng-repo.obs.cn-north-4.myhuaweicloud.com/Kunpeng%20DevKit/Kunpeng%20DevKit%20%{version}/DevKit-CLI-%{version}-Linux-x86-64.tar.gz +Source2: devkit.sh +Prefix: /usr/local + +%description +This package contains the Huawei Kunpeng DevKit CLI + +%define devkit_name devkit +%define devkit_cli_pathname %{devkit_name} + +# 利用文件目录直接构建 默认setup会有权限修改 此处手动添加 +%prep +echo "downloading package..." +cd %{_sourcedir} +if [ %{_arch} == "aarch64" ]; then + tar -zxf DevKit-CLI-%{version}-Linux-Kunpeng.tar.gz +else + tar -zxf DevKit-CLI-%{version}-Linux-x86-64.tar.gz +fi + +%global debug_package %{nil} + +if [ %{_arch} == "aarch64" ]; then + cp -ar %{SOURCE0} %{_builddir}/DevKit-CLI-%{version}-Linux-Kunpeng + chmod -Rf a+rX,u+w,g-w,o-w ./DevKit-CLI-%{version}-Linux-Kunpeng +else + cp -ar %{SOURCE1} %{_builddir}/DevKit-CLI-%{version}-Linux-x86-64 + chmod -Rf a+rX,u+w,g-w,o-w ./DevKit-CLI-%{version}-Linux-x86-64 +fi + +%build + +%clean +rm -rf %{buildroot} + +%package -n %{devkit_name} +Summary: DevKit CLI Entrance +Autoreq: no +Autoprov: no + +%description -n %{devkit_name} +This package contains the DevKit CLI Entrance + +%pre -n %{devkit_name} +if [[ "$1" = "1" || "$1" = "2" ]] ; then #1: install 2: update + if [ -L /usr/sbin/devkit ]; then + unlink /usr/sbin/devkit + fi + if [ -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/devkit ]; then + rm -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/devkit + fi + if [ -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/.devkit ]; then + rm -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/.devkit + fi + if [ -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/execute.ini ]; then + rm -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/execute.ini + fi + if [ -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/README_ZH.md ]; then + rm -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/README_ZH.md + fi + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname} ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname} + fi + if [ -f /etc/bash_completion.d/devkit.sh ]; then + rm -f /etc/bash_completion.d/devkit.sh + fi +fi + +%post -n %{devkit_name} +ln -sf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/devkit /usr/sbin/devkit +echo "%{devkit_name} installed" + +%postun -n %{devkit_name} +if [[ "$1" = "0" ]] ; then #0: uninstall + if [ -L /usr/sbin/devkit ]; then + unlink /usr/sbin/devkit + fi + if [ -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/devkit ]; then + rm -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/devkit + fi + if [ -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/.devkit ]; then + rm -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/.devkit + fi + if [ -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/execute.ini ]; then + rm -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/execute.ini + fi + if [ -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/README_ZH.md ]; then + rm -f ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/README_ZH.md + fi + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname} ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname} + fi + if [ -f /etc/bash_completion.d/devkit.sh ]; then + rm -f /etc/bash_completion.d/devkit.sh + fi +fi +echo "%{devkit_name} uninstalled" + +if [ %{_arch} == "aarch64" ]; then + %package -n %{devkit_name}-tuner + Summary: DevKit CLI Tuner Plugin + Requires: %{devkit_name} = %{version} + Autoreq: no + Autoprov: no + + %description -n %{devkit_name}-tuner + This package contains the DevKit CLI Tuner Plugin + + %pre -n %{devkit_name}-tuner + if [[ "$1" = "1" || "$1" = "2" ]] ; then #1: install 2: update + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/tuner ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/tuner + fi + fi + + %post -n %{devkit_name}-tuner + echo "%{devkit_name}-tuner installed" + + %postun -n %{devkit_name}-tuner + if [[ "$1" = "0" ]] ; then #2: update + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/tuner ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/tuner + fi + fi + echo "%{devkit_name}-tuner uninstalled" + + %package -n %{devkit_name}-java-perf + Summary: DevKit CLI java-perf Plugin + Requires: %{devkit_name} = %{version} + Autoreq: no + Autoprov: no + + %description -n %{devkit_name}-java-perf + This package contains the DevKit CLI java-perf Plugin + + %pre -n %{devkit_name}-java-perf + if [[ "$1" = "1" || "$1" = "2" ]] ; then #1: install 2: update + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/java-perf ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/java-perf + fi + fi + + %post -n %{devkit_name}-java-perf + echo "%{devkit_name}-java-perf installed" + + %postun -n %{devkit_name}-java-perf + if [[ "$1" = "0" ]] ; then #2: update + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/java-perf ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/java-perf + fi + fi + echo "%{devkit_name}-java-perf uninstalled" + + %package -n %{devkit_name}-advisor + Summary: DevKit CLI Advisor Plugin + Requires: %{devkit_name} = %{version} + Autoreq: no + Autoprov: no + + %description -n %{devkit_name}-advisor + This package contains the DevKit CLI Advisor Plugin + + %pre -n %{devkit_name}-advisor + if [[ "$1" = "1" || "$1" = "2" ]] ; then #1: install 2: update + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/advisor ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/advisor + fi + fi + + %post -n %{devkit_name}-advisor + echo "%{devkit_name}-advisor installed" + + %postun -n %{devkit_name}-advisor + if [[ "$1" = "0" ]] ; then #2: update + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/advisor ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/advisor + fi + fi + echo "%{devkit_name}-advisor uninstalled" + +fi + +%package -n %{devkit_name}-porting +Summary: DevKit CLI Porting Plugin +Requires: %{devkit_name} = %{version} +Autoreq: no +Autoprov: no + +%description -n %{devkit_name}-porting +This package contains the DevKit CLI Porting Plugin + +%pre -n %{devkit_name}-porting +if [[ "$1" = "1" || "$1" = "2" ]] ; then #1: install 2: update + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/porting ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/porting + fi +fi + +%post -n %{devkit_name}-porting +echo "%{devkit_name}-porting installed" + +%postun -n %{devkit_name}-porting +if [[ "$1" = "0" ]] ; then #2: update + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/porting ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/porting + fi +fi +echo "%{devkit_name}-porting uninstalled" + +%package -n %{devkit_name}-sys-mig +Summary: DevKit CLI Sys-Mig Plugin +Requires: %{devkit_name} = %{version} +Autoreq: no +Autoprov: no + +%description -n %{devkit_name}-sys-mig +This package contains the DevKit CLI Sys-Mig Plugin + +%pre -n %{devkit_name}-sys-mig +if [[ "$1" = "1" || "$1" = "2" ]] ; then #1: install 2: update + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/sys-mig ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/sys-mig + fi +fi + +%post -n %{devkit_name}-sys-mig +echo "%{devkit_name}-sys-mig installed" + +%postun -n %{devkit_name}-sys-mig +if [[ "$1" = "0" ]] ; then #2: update + if [ -d ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/sys-mig ]; then + rm -rf ${RPM_INSTALL_PREFIX}/%{devkit_cli_pathname}/sys-mig + fi +fi +echo "%{devkit_name}-sys-mig uninstalled" + + +%install +# 未setup源码 故此处需要cd到指定文件 +if [ %{_arch} == "aarch64" ]; then + cd %{SOURCE0} +else + cd %{SOURCE1} +fi +mkdir -p %{buildroot}/etc/bash_completion.d +install -m 644 %{SOURCE2} %{buildroot}/etc/bash_completion.d + +mkdir -p %{buildroot}%{prefix}/%{devkit_cli_pathname} +install -m 755 devkit .devkit %{buildroot}%{prefix}/%{devkit_cli_pathname} +install -m 644 execute.ini README_ZH.md %{buildroot}%{prefix}/%{devkit_cli_pathname} + +if [ %{_arch} == "aarch64" ]; then + cp -rf tuner %{buildroot}%{prefix}/%{devkit_cli_pathname} + cp -rf advisor %{buildroot}%{prefix}/%{devkit_cli_pathname} + cp -rf java-perf %{buildroot}%{prefix}/%{devkit_cli_pathname} +fi + +cp -rf porting %{buildroot}%{prefix}/%{devkit_cli_pathname} +cp -rf sys-mig %{buildroot}%{prefix}/%{devkit_cli_pathname} + +if [ %{_arch} == "aarch64" ]; then + %files -n %{devkit_name}-tuner + %defattr(755,root,root,755) + %{prefix}/%{devkit_cli_pathname}/tuner/libtuner.so + %{prefix}/%{devkit_cli_pathname}/tuner/bin + %{prefix}/%{devkit_cli_pathname}/tuner/lib + %defattr(644,root,root,755) + %{prefix}/%{devkit_cli_pathname}/tuner/include + %{prefix}/%{devkit_cli_pathname}/tuner/docs + %defattr(1777,root,root,1777) + %{prefix}/%{devkit_cli_pathname}/tuner/data + + %files -n %{devkit_name}-java-perf + %defattr(755,root,root,755) + %{prefix}/%{devkit_cli_pathname}/java-perf + %defattr(1777,root,root,1777) + %{prefix}/%{devkit_cli_pathname}/java-perf/data + + %files -n %{devkit_name}-advisor + %defattr(700,root,root,700) + %{prefix}/%{devkit_cli_pathname}/advisor +fi + +%files -n %{devkit_name} +%defattr(755,root,root,755) +%{prefix}/%{devkit_cli_pathname}/devkit +%{prefix}/%{devkit_cli_pathname}/.devkit +%defattr(644,root,root,-) +/etc/bash_completion.d/devkit.sh +%{prefix}/%{devkit_cli_pathname}/execute.ini +%{prefix}/%{devkit_cli_pathname}/README_ZH.md + +%files -n %{devkit_name}-porting +%defattr(700,root,root,700) +%{prefix}/%{devkit_cli_pathname}/porting + +%files -n %{devkit_name}-sys-mig +%defattr(1777,root,root,1777) +%{prefix}/%{devkit_cli_pathname}/sys-mig +%{prefix}/%{devkit_cli_pathname}/sys-mig/nodes +%{prefix}/%{devkit_cli_pathname}/sys-mig/report +%{prefix}/%{devkit_cli_pathname}/sys-mig/resources +%{prefix}/%{devkit_cli_pathname}/sys-mig/template +%{prefix}/%{devkit_cli_pathname}/sys-mig/logs + +%changelog +* Tue May 07 2024 Huawei Kunpeng DevKit-1.0.2-1 +- Second Spec Version +- Plugin tuner add roofline,hotspot,miss,llc-ddr task +- Add java-perf plugin + +* Tue Feb 06 2024 Huawei Kunpeng DevKit-1.0.1-1 +- First Spec Version Include DevKit-CLI \ No newline at end of file diff --git a/devkit.sh b/devkit.sh new file mode 100644 index 0000000000000000000000000000000000000000..f6985a819bb7df47183cfa10928f3d7cdffc6339 --- /dev/null +++ b/devkit.sh @@ -0,0 +1,70 @@ +# bash completion for devkit +# Copied from the DevKit CLI packages + +_devkit() +{ + local cur prev opts arch + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + + # 检查当前的架构 + arch=$(uname -m) + + case "${prev}" in + devkit) + if [[ "${arch}" == "aarch64" ]]; then + # aarch64 架构下全部支持, 包含 tuner 和 advisor,目前report仅tuner在用 + opts="help version porting sys-mig tuner java-perf advisor report" + + else + opts="help version porting sys-mig" + fi + ;; + porting) + opts="help src-mig pkg-mig" + ;; + sys-mig) + opts="-h" + ;; + tuner) + if [[ "${arch}" == "aarch64" ]]; then + opts="help topdown numafast hpc-perf roofline miss hotspot memory" + else + opts="" + fi + ;; + java-perf) + if [[ "${arch}" == "aarch64" ]]; then + opts="help hotspot" + else + opts="" + fi + ;; + advisor) + if [[ "${arch}" == "aarch64" ]]; then + opts="help mode-check byte-align mem-cons vec-check constr-check" + else + opts="" + fi + ;; + src-mig | pkg-mig) + opts="-h" + ;; + topdown | numafast | hpc-perf | roofline | miss | hotspot | memory | \ + mode-check | byte-align | mem-cons | vec-check | constr-check) + if [[ "${arch}" == "aarch64" ]]; then + opts="-h" + else + opts="" + fi + ;; + *) + opts="" + ;; + esac + + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 +} +complete -F _devkit devkit \ No newline at end of file