diff --git a/gen_init_cpio.c b/gen_init_cpio.c
index 75e9561b..406c4d0a 100644
--- a/gen_init_cpio.c
+++ b/gen_init_cpio.c
@@ -453,6 +453,7 @@ static int cpio_mkfile(const char *name, const char *location,
 		    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) {
@@ -463,6 +464,7 @@ static int cpio_mkfile(const char *name, const char *location,
 			}
 			/* short or failed copy falls back to read/write... */
 		}
+#endif
 
 		while (size) {
 			unsigned char filebuf[65536];
@@ -671,7 +673,10 @@ int main (int argc, char *argv[])
 			break;
 		case 'o':
 			outfd = open(optarg,
-				     O_WRONLY | O_CREAT | O_LARGEFILE | O_TRUNC,
+#ifdef O_LARGEFILE
+				     O_LARGEFILE |
+#endif
+				     O_WRONLY | O_CREAT | O_TRUNC,
 				     0600);
 			if (outfd < 0) {
 				fprintf(stderr, "failed to open %s\n", optarg);
