From f5c5ccd23622402a1a14a4074a53c1fc395ecf34 Mon Sep 17 00:00:00 2001 From: Mark Mentovai Date: Fri, 29 May 2026 12:56:42 -0400 Subject: [PATCH] kernel: fix gen_init_cpio build on macOS hosts Kernel ae18b94099b0 (2025-08-20, in 6.18) introduced a dependency on the Linux-specific O_LARGEFILE, and kernel 97169cd6d95b (2025-08-20, in 6.18) introduced a dependency on the Linux-specific copy_file_range. Both of these commits were a part of the https://lore.kernel.org/all/20250819032607.28727-1-ddiss@suse.de/ series. These new dependencies may not be available on non-Linux systems, although it is possible to cross-build Linux on non-Linux build hosts, and it is appropriate to run tools like gen_init_cpio on such build hosts. It is straightforward to avoid these Linux-specific features when not building on Linux. This fixes: HOSTCC usr/gen_init_cpio usr/gen_init_cpio.c:460:16: error: call to undeclared function 'copy_file_range'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 460 | this_read = copy_file_range(file, NULL, outfd, N... | ^ usr/gen_init_cpio.c:677:31: error: use of undeclared identifier 'O_LARGEFILE' 677 | O_WRONLY | O_CREAT | O_LARGEFILE | O_TRUNC, | ^~~~~~~~~~~ 2 errors generated. gmake[7]: *** [scripts/Makefile.host:114: usr/gen_init_cpio] Error 1 Signed-off-by: Mark Mentovai Link: https://github.com/openwrt/openwrt/pull/23612 Signed-off-by: Robert Marko --- .../201-gen_init_cpio_portability.patch | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 target/linux/generic/hack-6.18/201-gen_init_cpio_portability.patch diff --git a/target/linux/generic/hack-6.18/201-gen_init_cpio_portability.patch b/target/linux/generic/hack-6.18/201-gen_init_cpio_portability.patch new file mode 100644 index 0000000000..6704f2b469 --- /dev/null +++ b/target/linux/generic/hack-6.18/201-gen_init_cpio_portability.patch @@ -0,0 +1,52 @@ +From 60e044199e773df4863405dba0f7abe16a43282d Mon Sep 17 00:00:00 2001 +From: Mark Mentovai +Date: Fri, 29 May 2026 12:48:31 -0400 +Subject: [PATCH] gen_init_cpio: fix build on macOS hosts + +ae18b94099b0 (2025-08-20, in 6.18) introduced a dependency on the +Linux-specific O_LARGEFILE, and 97169cd6d95b (2025-08-20, in 6.18) +introduced a dependency on the Linux-specific copy_file_range. Both of +these commits were a part of the +https://lore.kernel.org/all/20250819032607.28727-1-ddiss@suse.de/ +series. These new dependencies may not be available on non-Linux +systems, although it is possible to cross-build Linux on non-Linux build +hosts, and it is appropriate to run tools like gen_init_cpio on such +build hosts. It is straightforward to avoid these Linux-specific +features when not building on Linux. + +Signed-off-by: Mark Mentovai +--- + usr/gen_init_cpio.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +--- a/usr/gen_init_cpio.c ++++ b/usr/gen_init_cpio.c +@@ -456,6 +456,7 @@ static int cpio_mkfile(const char *name, + push_pad(namepadlen ? namepadlen : padlen(offset, 4)) < 0) + goto error; + ++#ifdef __linux__ + if (size) { + this_read = copy_file_range(file, NULL, outfd, NULL, size, 0); + if (this_read > 0) { +@@ -466,6 +467,7 @@ static int cpio_mkfile(const char *name, + } + /* short or failed copy falls back to read/write... */ + } ++#endif + + while (size) { + unsigned char filebuf[65536]; +@@ -674,7 +676,11 @@ int main (int argc, char *argv[]) + break; + case 'o': + outfd = open(optarg, +- O_WRONLY | O_CREAT | O_LARGEFILE | O_TRUNC, ++ O_WRONLY | O_CREAT | O_TRUNC ++#ifdef O_LARGEFILE ++ | O_LARGEFILE ++#endif ++ , + 0600); + if (outfd < 0) { + fprintf(stderr, "failed to open %s\n", optarg);