Subject: Re: Fix build of rkdeveloptool

From: phodina <[email-masked]>
Date: Thu, 15 Dec 2022 20:36:09 +0000

Hi Ludo’,

speaking of lost patches this one is little bit annoying as it does not even build.

Excerpt of the build log, build failure caused probably by introducing stricter compilation flags in `gnu-build-system`:

starting phase `build'
make[1]: Entering directory '/tmp/guix-build-rkdeveloptool-1.3-0.6e92ebc.drv-0/source'
g++ -DHAVE_CONFIG_H -I. -I./cfg -Wall -Werror -Wextra -Wreturn-type -fno-strict-aliasing -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE -I/gnu/store/vjlg2z75qwbwxdp5qiklcdx7df9xvbb2-libusb-1.0.24/include/libusb-1.0 -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.cpp
g++ -DHAVE_CONFIG_H -I. -I./cfg -Wall -Werror -Wextra -Wreturn-type -fno-strict-aliasing -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE -I/gnu/store/vjlg2z75qwbwxdp5qiklcdx7df9xvbb2-libusb-1.0.24/include/libusb-1.0 -g -O2 -MT crc.o -MD -MP -MF .deps/crc.Tpo -c -o crc.o crc.cpp
g++ -DHAVE_CONFIG_H -I. -I./cfg -Wall -Werror -Wextra -Wreturn-type -fno-strict-aliasing -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE -I/gnu/store/vjlg2z75qwbwxdp5qiklcdx7df9xvbb2-libusb-1.0.24/include/libusb-1.0 -g -O2 -MT RKBoot.o -MD -MP -MF .deps/RKBoot.Tpo -c -o RKBoot.o RKBoot.cpp
g++ -DHAVE_CONFIG_H -I. -I./cfg -Wall -Werror -Wextra -Wreturn-type -fno-strict-aliasing -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE -I/gnu/store/vjlg2z75qwbwxdp5qiklcdx7df9xvbb2-libusb-1.0.24/include/libusb-1.0 -g -O2 -MT RKComm.o -MD -MP -MF .deps/RKComm.Tpo -c -o RKComm.o RKComm.cpp
g++ -DHAVE_CONFIG_H -I. -I./cfg -Wall -Werror -Wextra -Wreturn-type -fno-strict-aliasing -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE -I/gnu/store/vjlg2z75qwbwxdp5qiklcdx7df9xvbb2-libusb-1.0.24/include/libusb-1.0 -g -O2 -MT RKDevice.o -MD -MP -MF .deps/RKDevice.Tpo -c -o RKDevice.o RKDevice.cpp
g++ -DHAVE_CONFIG_H -I. -I./cfg -Wall -Werror -Wextra -Wreturn-type -fno-strict-aliasing -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE -I/gnu/store/vjlg2z75qwbwxdp5qiklcdx7df9xvbb2-libusb-1.0.24/include/libusb-1.0 -g -O2 -MT RKImage.o -MD -MP -MF .deps/RKImage.Tpo -c -o RKImage.o RKImage.cpp
g++ -DHAVE_CONFIG_H -I. -I./cfg -Wall -Werror -Wextra -Wreturn-type -fno-strict-aliasing -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE -I/gnu/store/vjlg2z75qwbwxdp5qiklcdx7df9xvbb2-libusb-1.0.24/include/libusb-1.0 -g -O2 -MT RKLog.o -MD -MP -MF .deps/RKLog.Tpo -c -o RKLog.o RKLog.cpp
g++ -DHAVE_CONFIG_H -I. -I./cfg -Wall -Werror -Wextra -Wreturn-type -fno-strict-aliasing -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE -I/gnu/store/vjlg2z75qwbwxdp5qiklcdx7df9xvbb2-libusb-1.0.24/include/libusb-1.0 -g -O2 -MT RKScan.o -MD -MP -MF .deps/RKScan.Tpo -c -o RKScan.o RKScan.cpp
mv -f .deps/RKBoot.Tpo .deps/RKBoot.Po
mv -f .deps/RKImage.Tpo .deps/RKImage.Po
mv -f .deps/RKLog.Tpo .deps/RKLog.Po
mv -f .deps/RKDevice.Tpo .deps/RKDevice.Po
mv -f .deps/RKComm.Tpo .deps/RKComm.Po
mv -f .deps/crc.Tpo .deps/crc.Po
mv -f .deps/RKScan.Tpo .deps/RKScan.Po
main.cpp: In function ‘bool _Z9mergeBootv.part.0()’:
main.cpp:1541:36: error: ‘%s’ directive output may be truncated writing up to 557 bytes into a region of size 5 [-Werror=format-truncation=]
1541 | snprintf(buffer, sizeof(buffer), "%s", chip);
| ^~
......
1582 | chipType = convertChipType(chip + 2);
| ~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:1541:10: note: ‘snprintf’ output between 1 and 558 bytes into a destination of size 5
1541 | snprintf(buffer, sizeof(buffer), "%s", chip);
| ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors
make[1]: *** [Makefile:473: main.o] Error 1
make[1]: Leaving directory '/tmp/guix-build-rkdeveloptool-1.3-0.6e92ebc.drv-0/source'
make: *** [Makefile:493: all-recursive] Error 1
error: in phase 'build': uncaught exception:
%exception #<&invoke-error program: "make" arguments: ("-j" "16") exit-status: 2 term-signal: #f stop-signal: #f>
phase `build' failed after 2.2 seconds
command "make" "-j" "16" failed with status 2
builder for `/gnu/store/srykckhmy9lpdg2gl6702vs71b20apsj-rkdeveloptool-1.3-0.6e92ebc.drv' failed with exit code 1
build of /gnu/store/srykckhmy9lpdg2gl6702vs71b20apsj-rkdeveloptool-1.3-0.6e92ebc.drv failed
View build log at '/var/log/guix/drvs/sr/ykckhmy9lpdg2gl6702vs71b20apsj-rkdeveloptool-1.3-0.6e92ebc.drv.gz'.guix build: error: build of `/gnu/store/srykckhmy9lpdg2gl6702vs71b20apsj-rkdeveloptool-1.3-0.6e92ebc.drv' failed
------- Original Message -------
On Monday, February 21st, 2022 at 1:43 PM, phodina <[email-masked]> wrote:

> Hi,
>
> Here's fix of the rkdeveloptool package which fails to build due to GCC complaining about the truncation error.
>
> See https://github.com/rockchip-linux/rkdeveloptool/pull/62.
>
> ----
> Petr

From eb44f022cd5a15fe54e503052abde7f6c7a25821 Mon Sep 17 00:00:00 2001
From: Petr Hodina <[email-masked]>
Date: Mon, 21 Feb 2022 13:33:41 +0100
Subject: [PATCH v2 2/2] gnu: Add rkdeveloptool-pine64.

* gnu/packages/hardware.scm (rkdeveloptool-pine64): New variable.
* gnu/local.mk: Add patches.
* gnu/packages/patches/rkdeveloptool-pine64-dump-over-2gib.patch: New file.
* gnu/packages/patches/rkdeveloptool-pine64-speed-up-xfer.patch: New file.

diff --git a/gnu/local.mk b/gnu/local.mk
index c01b063d17..520fcb77a2 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1811,6 +1811,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/retroarch-LIBRETRO_DIRECTORY.patch	\
   %D%/packages/patches/r-mixedpower-r2power.patch		\
   %D%/packages/patches/rkdeveloptool-fix-format-truncation.patch \
+  %D%/packages/patches/rkdeveloptool-pine64-dump-over-2gib.patch \
+  %D%/packages/patches/rkdeveloptool-pine64-speed-up-xfer.patch \
   %D%/packages/patches/rnp-add-version.cmake.patch		\
   %D%/packages/patches/rnp-disable-ruby-rnp-tests.patch		\
   %D%/packages/patches/rnp-unbundle-googletest.patch		\
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index 255b077eaa..5c17b84141 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -1143,6 +1143,45 @@ (define-public rkdeveloptool
 as the Pinebook Pro.")
       (license license:gpl2+))))
 
+(define-public rkdeveloptool-pine64
+  (package
+    (name "rkdeveloptool-pine64")
+    (version "1.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url
+                     "https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (patches (search-patches
+                        ;; https://github.com/tpwrules/nixos-pinenote/blob/96d2c9158edb9da59afcb952cc864fada18382f9/nix/rkdeveloptool/0001-fix-large-dumps.patch
+                        "rkdeveloptool-pine64-dump-over-2gib.patch"
+                        ;; https://github.com/tpwrules/nixos-pinenote/blob/96d2c9158edb9da59afcb952cc864fada18382f9/nix/rkdeveloptool/0001-speed-up-xfer.patch
+                        "rkdeveloptool-pine64-speed-up-xfer.patch"))
+              (sha256
+               (base32
+                "0nh9592mllygycnxbw91vg58wwais7w3w62rl9gcvc4m3i909b1z"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:tests? #f ;no test suite
+       #:phases (modify-phases %standard-phases
+                  ;; attempts to place the file into the udev pkg read-only path
+                  (add-after 'unpack 'fix-udev-path
+                    (lambda* _
+                      (substitute* "meson.build"
+                        (("udev_rules_dir,")
+                         (string-append "'" %output "/lib/udev/rules.d',"))))))))
+    (native-inputs (list pkg-config))
+    (inputs (list eudev libusb))
+    (synopsis "Read from and write to RockChicp devices over USB")
+    (description
+     "Rkdeveloptool is a fastboot-like CLI tool to read from and
+write to RockChip devices over USB.  Supports PineNote and Quartz64 as well
+as other Pine64 RK devices.")
+    (home-page "https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool")
+    (license license:gpl2+)))
+
 (define-public usbguard
   (package
     (name "usbguard")
diff --git a/gnu/packages/patches/rkdeveloptool-pine64-dump-over-2gib.patch b/gnu/packages/patches/rkdeveloptool-pine64-dump-over-2gib.patch
new file mode 100644
index 0000000000..e2c7328bfa
--- /dev/null
+++ b/gnu/packages/patches/rkdeveloptool-pine64-dump-over-2gib.patch
@@ -0,0 +1,54 @@
+diff --git a/main.cpp b/main.cpp
+index 029f0e2..e40bce2 100644
+--- a/main.cpp
++++ b/main.cpp
+@@ -2455,12 +2455,6 @@ bool read_lba(
+ 
+ 	if (!check_device_type(dev, RKUSB_LOADER | RKUSB_MASKROM))
+ 		return false;
+-	if (uiLen % 512) {
+-		fprintf(stderr, "Length must be a multiple of sector size (%d)\n",
+-				SECTOR_SIZE);
+-		return false;
+-	}
+-	uiLen /= 512;
+ 
+ 	if (!bRet) {
+ 		fprintf(stderr, "Read LBA quit, creating comm object failed!\n");
+@@ -3265,7 +3259,7 @@ bool handle_command(int argc, char *argv[], CRKScan *pScan) {
+ 				bRet = get_lba_from_gpt(master_gpt, argv[2], &lba, &lba_end);
+ 				if (bRet) {
+ 					bSuccess = read_lba(dev, (u32)lba,
+-							((u32)(lba_end - lba + 1)) * 512, argv[3]);
++							(u32)(lba_end - lba + 1), argv[3]);
+ 				} else {
+ 					fprintf(stderr, "Could not find the %s partition\n", argv[2]);
+ 				}
+@@ -3276,7 +3270,7 @@ bool handle_command(int argc, char *argv[], CRKScan *pScan) {
+ 	} else if (strcmp(strCmd.c_str(), "RL") == 0 ||
+ 			strcmp(strCmd.c_str(), "READ") == 0) {
+ 		char *pszEnd;
+-		UINT uiBegin, uiLen;
++		UINT uiBegin;
+ 		if (argc != 5)
+ 			fprintf(stderr, "Usage: rkdeveloptool read start-sector num-bytes "
+ 				   "filename\n");
+@@ -3285,11 +3279,15 @@ bool handle_command(int argc, char *argv[], CRKScan *pScan) {
+ 			if (*pszEnd)
+ 				fprintf(stderr, "Begin is invalid, please check!\n");
+ 			else {
+-				uiLen = strtoul(argv[3], &pszEnd, 0);
++				unsigned long long len = strtoull(argv[3], &pszEnd, 0);
+ 				if (*pszEnd)
+ 					fprintf(stderr, "Len is invalid, please check!\n");
+-				else {
+-					bSuccess = read_lba(dev, uiBegin, uiLen, argv[4]);
++				else if (len % 512) {
++					fprintf(stderr, "Length must be a multiple of sector size (%d)\n",
++                		SECTOR_SIZE);
++				} else {
++					len /= 512;
++					bSuccess = read_lba(dev, uiBegin, len, argv[4]);
+ 				}
+ 			}
+ 		}
-- 
2.37.2

From cebf1356add8d5299e71abf45fb71b5afe5a30ee Mon Sep 17 00:00:00 2001
From: Petr Hodina <[email-masked]>
Date: Mon, 21 Feb 2022 13:25:16 +0100
Subject: [PATCH v2 1/2] gnu: rkdeveloptool: Fix build. Apply 'guix style'.

* gnu/packages/hardware.scm (rkdeveloptool): Update to newer commit 46bb4c.
  Apply 'guix style'
  [source]: Apply patch to fix GCC format truncation error.
  [arguments]: Add phase after install to install udev rules.
* gnu/local.mk: Add patch.
* gnu/packages/patches/rkdeveloptool-fix-format-truncation.patch: New file.

diff --git a/gnu/local.mk b/gnu/local.mk
index 9443dd617a..c01b063d17 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1810,6 +1810,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/restic-0.9.6-fix-tests-for-go1.15.patch	\
   %D%/packages/patches/retroarch-LIBRETRO_DIRECTORY.patch	\
   %D%/packages/patches/r-mixedpower-r2power.patch		\
+  %D%/packages/patches/rkdeveloptool-fix-format-truncation.patch \
   %D%/packages/patches/rnp-add-version.cmake.patch		\
   %D%/packages/patches/rnp-disable-ruby-rnp-tests.patch		\
   %D%/packages/patches/rnp-unbundle-googletest.patch		\
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index f392bb8c16..255b077eaa 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -1108,29 +1108,38 @@ (define-public wavemon
     (license license:gpl3+)))
 
 (define-public rkdeveloptool
-  (let ((commit "6e92ebcf8b1812da02663494a68972f956e490d3")
-        (revision "0"))
+  (let ((commit "46bb4c073624226c3f05b37b9ecc50bbcf543f5a")
+        (revision "1"))
     (package
       (name "rkdeveloptool")
-      (version (git-version "1.3" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/rockchip-linux/rkdeveloptool")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0zwrkqfxd671iy69v3q0844gfdpm1yk51i9qh2rqc969bd8glxga"))))
+      (version (git-version "1.32" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/rockchip-linux/rkdeveloptool")
+                      (commit commit)))
+                ;; https://github.com/rockchip-linux/rkdeveloptool/pull/62
+                (patches (search-patches
+                          "rkdeveloptool-fix-format-truncation.patch"))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0kb2ylsrqqrdf4np66yxmk96kdc5g8nvjx13gifpm5rshv5770bq"))))
       (build-system gnu-build-system)
-      (native-inputs
-       (list autoconf automake pkg-config))
-      (inputs
-       (list libusb))
+      (arguments
+       `(#:phases (modify-phases %standard-phases
+                    (add-after 'install 'install-udev-rules
+                      (lambda* (#:key outputs #:allow-other-keys)
+                        (let ((udev (string-append (assoc-ref outputs "out")
+                                                   "/lib/udev/rules.d")))
+                          (mkdir-p udev)
+                          (install-file "99-rk-rockusb.rules" udev)))))))
+      (native-inputs (list autoconf automake pkg-config))
+      (inputs (list libusb))
       (home-page "https://github.com/rockchip-linux/rkdeveloptool")
-      (synopsis "Read from and write to RockChicp devices over USB")
+      (synopsis "Read/write to rockchip devices over USB")
       (description
-       "Rkdeveloptool can read from and write to RockChip devices over USB, such
+       "Rkdeveloptool can read from and write to rockchip devices over USB, such
 as the Pinebook Pro.")
       (license license:gpl2+))))
 
diff --git a/gnu/packages/patches/rkdeveloptool-fix-format-truncation.patch b/gnu/packages/patches/rkdeveloptool-fix-format-truncation.patch
new file mode 100644
index 0000000000..fd9a193e76
--- /dev/null
+++ b/gnu/packages/patches/rkdeveloptool-fix-format-truncation.patch
@@ -0,0 +1,22 @@
+From bc9e5f03d71b3dd4360721f4df3524c1dcba9bc8 Mon Sep 17 00:00:00 2001
+From: Petr Hodina <[email-masked]>
+Date: Mon, 21 Feb 2022 13:00:53 +0100
+Subject: [PATCH] Fix format truncation for GCC >7.1.
+
+
+diff --git a/main.cpp b/main.cpp
+index 72bd94b..800db0b 100644
+--- a/main.cpp
++++ b/main.cpp
+@@ -1490,7 +1490,7 @@ static bool saveEntry(FILE* outFile, char* path, rk_entry_type type,
+ static inline uint32_t convertChipType(const char* chip) {
+ 	char buffer[5];
+ 	memset(buffer, 0, sizeof(buffer));
+-	snprintf(buffer, sizeof(buffer), "%s", chip);
++	memcpy(buffer, chip, 4);
+ 	return buffer[0] << 24 | buffer[1] << 16 | buffer[2] << 8 | buffer[3];
+ }
+ 
+-- 
+2.34.0
+
-- 
2.37.2