Merged to master at 5e3ed80f093b..d135f0f66150 (from, to] You can see the entire diff with 'git diff' or at https://github.com/brho/akaros/compare/5e3ed80f093b...d135f0f66150
Careful with this. It'll grow the size of your initramfs a lot. I didn't do a good before-and-after, but my kern/kfs/bin is large now: $ du -h kern/kfs/bin/ 4.5M kern/kfs/bin/tests/utest 4.6M kern/kfs/bin/tests 137M kern/kfs/bin/ on another machine that is a few patches back, it's only 42 MB for bin. my current machine might have a few extra binaries floating around, but not 100 MB worth. This might pop up as an issue if you're moving the kernel around or loading things directly. $ du -h obj/kern/* 191M obj/kern/akaros-kernel 191M obj/kern/akaros-kernel-64b 30M obj/kern/akaros-kernel.asm 50M obj/kern/akaros-kernel.gz 176M obj/kern/initramfs.cpio 176M obj/kern/initramfs.cpio.o 180K obj/kern/ksyms.map 212K obj/kern/ksyms-refl.c 4.0K obj/kern/ksyms-refl.d 296K obj/kern/ksyms-refl.o Barret On 2016-08-11 at 12:41 Dan Cross <[email protected]> wrote: > Add a Makefile and patchset to build coreutils for Akaros. > > Note that we hack the Makefile to fake manpage generation, > as this requires running the output of the freshly-built > commands through 'help2man'. But since those commands target > Akaros, they won't run on the build machine (which will > typically run some sort of POSIXy operating system like > Linux). > > Change-Id: Icf3e17107184a4b024582e41063e251fe1b07880 > Signed-off-by: Dan Cross <[email protected]> > --- > tools/sys-apps/coreutils/Makefile | 57 +++++ > .../akaros-patches/8.25/coreutils-8.25.patch | 233 > +++++++++++++++++++++ 2 files changed, 290 insertions(+) > create mode 100644 tools/sys-apps/coreutils/Makefile > create mode 100644 > tools/sys-apps/coreutils/akaros-patches/8.25/coreutils-8.25.patch > > diff --git a/tools/sys-apps/coreutils/Makefile > b/tools/sys-apps/coreutils/Makefile new file mode 100644 > index 0000000..97bb9d6 > --- /dev/null > +++ b/tools/sys-apps/coreutils/Makefile > @@ -0,0 +1,57 @@ > +include ../../Makefrag > + > +########## Package-specific variables > +version := 8.25 > +src-dir = coreutils-$(version) > +build-dir = $(src-dir)/build > +tarball = coreutils-$(version).tar.xz > +fetch-url = http://ftp.gnu.org/gnu/coreutils/$(tarball) > +config-opts = --prefix=/usr \ > + --bindir=/bin \ > + --disable-nls \ > + --host=x86_64-ucb-akaros \ > + --build=i686-pc-linux-gnu > + > +########## Generic Infrastructure > + > +PHONY := all > +all: make > + > +%.tar.xz: > + $(Q)wget $(fetch-url) > + > +akaros-patches := $(sort $(wildcard akaros-patches/$(version)/*)) > + > +$(build-dir): $(tarball) $(akaros-patches) > + rm -fr $(src-dir) > + tar -xf $< > + $(Q)mkdir $(build-dir) > && \ > + for i in $(akaros-patches); > do \ > + (cd $(src-dir) && patch -p1 > < ../$$i); \ > + done > + > +PHONY += config > +$(build-dir)/Makefile config: $(build-dir) > + cd $(build-dir) && env ../configure $(config-opts) && \ > + sed -i '/^.run_help2man = .*dummy-man/s/^.//' Makefile && \ > + sed -i '/^run_help2man = .*help2man/d' Makefile > + > +PHONY += make > +make: config > + $(Q)$(MAKE) -C $(build-dir) > + > +PHONY += install > +install: make > + $(Q)$(MAKE) -C $(build-dir) install-exec DESTDIR=$(KFS_ROOT) > + > +PHONY += clean > +clean: > + $(Q)[ -d $(build-dir) ] > && \ > + [ -f $(build-dir)/Makefile ] > && \ > + $(MAKE) -C $(build-dir) clean || true > + > +PHONY += mrproper > +mrproper: > + $(Q)rm -rf $(src-dir) > + > +.PHONY: $(PHONY) > diff --git > a/tools/sys-apps/coreutils/akaros-patches/8.25/coreutils-8.25.patch > b/tools/sys-apps/coreutils/akaros-patches/8.25/coreutils-8.25.patch > new file mode 100644 index 0000000..560a835 --- /dev/null > +++ > b/tools/sys-apps/coreutils/akaros-patches/8.25/coreutils-8.25.patch > @@ -0,0 +1,233 @@ +diff -ur > coreutils-8.25.dist/build-aux/config.guess > coreutils-8.25/build-aux/config.guess +--- > coreutils-8.25.dist/build-aux/config.guess 2016-01-16 > 12:11:09.000000000 -0500 ++++ > coreutils-8.25/build-aux/config.guess 2016-05-25 > 13:45:03.633843452 -0400 +@@ -233,6 +233,10 @@ > + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` > + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} > + exit ;; > ++ *:Akaros:*:*) > ++ UNAME_MACHINE_ARCH=x86_64 > ++ echo x86_64-ucb-akaros1.0 > ++ exit ;; > + *:OpenBSD:*:*) > + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` > + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} > +diff -ur coreutils-8.25.dist/build-aux/config.sub > coreutils-8.25/build-aux/config.sub +--- > coreutils-8.25.dist/build-aux/config.sub 2016-01-16 > 12:11:09.000000000 -0500 ++++ > coreutils-8.25/build-aux/config.sub 2016-05-25 > 13:45:28.554516328 -0400 +@@ -1378,7 +1378,7 @@ > + | -hpux* | -unos* | -osf* | -luna* | -dgux* | > -auroraux* | -solaris* \ > + | -sym* | -kopensolaris* | -plan9* \ > + | -amigaos* | -amigados* | -msdos* | -newsos* | > -unicos* | -aof* \ +- | -aos* | -aros* | -cloudabi* | > -sortix* \ ++ | -akaros* | -aos* | -aros* | -cloudabi* | > -sortix* \ > + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | > -mvs* \ > + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | > -xenix* \ > + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* > \ +diff -ur coreutils-8.25.dist/lib/strerror.c > coreutils-8.25/lib/strerror.c +--- > coreutils-8.25.dist/lib/strerror.c 2016-01-01 > 08:45:55.000000000 -0500 ++++ coreutils-8.25/lib/strerror.c > 2016-05-25 14:00:06.510268916 -0400 +@@ -38,14 +38,13 @@ > + { > + static char buf[STACKBUF_LEN]; > + size_t len; > ++ const char *estr = errstr(); > + > + /* Cast away const, due to the historical signature of strerror; > + callers should not be modifying the string. */ > + const char *msg = strerror_override (n); > +- if (msg) > +- return (char *) msg; > +- > +- msg = strerror (n); > ++ if (!msg) > ++ msg = strerror (n); > + > + /* Our strerror_r implementation might use the system's strerror > + buffer, so all other clients of strerror have to see the error > +@@ -66,5 +65,11 @@ > + if (sizeof buf <= len) > + abort (); > + > +- return memcpy (buf, msg, len + 1); > ++ memcpy (buf, msg, len + 1); > ++ if (estr && *estr) { > ++ memcpy(buf + len, ", ", 2); > ++ memcpy(buf + len + 2, estr, strlen(estr) + 1); > ++ } > ++ > ++ return buf; > + } > +diff -ur coreutils-8.25.dist/src/echo.c coreutils-8.25/src/echo.c > +--- coreutils-8.25.dist/src/echo.c 2016-01-01 > 08:48:50.000000000 -0500 ++++ coreutils-8.25/src/echo.c > 2016-07-15 14:53:14.351486065 -0400 +@@ -111,6 +111,8 @@ > + bool allow_options = > + (! getenv ("POSIXLY_CORRECT") > + || (! DEFAULT_ECHO_TO_XPG && 1 < argc && STREQ (argv[1], > "-n"))); ++ char *buf, *b; > ++ size_t len; > + > + /* System V machines already have a /bin/sh with a v9 behavior. > + Use the identical behavior for these machines so that the > +@@ -189,6 +191,20 @@ > + > + just_echo: > + > ++ len = 0; > ++ for (int i = 0; i < argc; i++) > ++ { > ++ len += 1; > ++ len += strlen (argv[i]); > ++ } > ++ buf = calloc(1, len); > ++ if (buf == NULL) > ++ { > ++ perror("malloc failed"); > ++ exit(EXIT_FAILURE); > ++ } > ++ b = buf; > ++ > + if (do_v9) > + { > + while (argc > 0) > +@@ -243,30 +259,34 @@ > + case '\\': break; > + > + not_an_escape: > +- default: putchar ('\\'); break; > ++ default: *b++ = '\\'; break; > + } > + } > +- putchar (c); > ++ *b++ = c; > + } > + argc--; > + argv++; > + if (argc > 0) > +- putchar (' '); > ++ *b++ = ' '; > + } > + } > + else > + { > + while (argc > 0) > + { > +- fputs (argv[0], stdout); > ++ len = strlen(argv[0]); > ++ memmove(b, argv[0], len); > ++ b += len; > + argc--; > + argv++; > + if (argc > 0) > +- putchar (' '); > ++ *b++ = ' '; > + } > + } > + > + if (display_return) > +- putchar ('\n'); > ++ *b++ = '\n'; > ++ write(1, buf, b - buf); > ++ free(buf); > + return EXIT_SUCCESS; > + } > +diff -ur coreutils-8.25.dist/src/ls.c coreutils-8.25/src/ls.c > +--- coreutils-8.25.dist/src/ls.c 2016-01-14 > 07:16:23.000000000 -0500 ++++ coreutils-8.25/src/ls.c > 2016-05-25 13:50:13.426213819 -0400 +@@ -3203,6 +3203,7 @@ > + if (nlink_width < b_len) > + nlink_width = b_len; > + > ++#ifndef __ros__ > + if (S_ISCHR (f->stat.st_mode) || S_ISBLK > (f->stat.st_mode)) > + { > + char buf[INT_BUFSIZE_BOUND (uintmax_t)]; > +@@ -3218,6 +3219,7 @@ > + } > + else > + { > ++#endif > + char buf[LONGEST_HUMAN_READABLE + 1]; > + uintmax_t size = unsigned_file_size (f->stat.st_size); > + int len = mbswidth (human_readable (size, buf, > +@@ -3226,7 +3228,9 @@ > + 0); > + if (file_size_width < len) > + file_size_width = len; > ++#ifndef __ros__ > + } > ++#endif > + } > + } > + > +@@ -3951,6 +3955,7 @@ > + p = buf; > + } > + > ++#ifndef __ros__ > + if (f->stat_ok > + && (S_ISCHR (f->stat.st_mode) || S_ISBLK (f->stat.st_mode))) > + { > +@@ -3968,6 +3973,7 @@ > + } > + else > + { > ++#endif > + char hbuf[LONGEST_HUMAN_READABLE + 1]; > + char const *size = > + (! f->stat_ok > +@@ -3981,7 +3987,9 @@ > + while ((*p++ = *size++)) > + continue; > + p[-1] = ' '; > ++#ifndef __ros__ > + } > ++#endif > + > + when_local = localtime (&when_timespec.tv_sec); > + s = 0; > +diff -ur coreutils-8.25.dist/src/mknod.c coreutils-8.25/src/mknod.c > +--- coreutils-8.25.dist/src/mknod.c 2016-01-01 > 08:48:50.000000000 -0500 ++++ coreutils-8.25/src/mknod.c > 2016-05-25 13:52:28.825875896 -0400 +@@ -91,6 +91,7 @@ > + int > + main (int argc, char **argv) > + { > ++#ifndef __ros__ > + mode_t newmode; > + char const *specified_mode = NULL; > + int optc; > +@@ -269,6 +270,9 @@ > + if (specified_mode && lchmod (argv[optind], newmode) != 0) > + error (EXIT_FAILURE, errno, _("cannot set permissions of %s"), > + quoteaf (argv[optind])); > ++#else > ++ error (EXIT_FAILURE, EINVAL, _("Akaros does not support mknod.")); > ++#endif > + > + return EXIT_SUCCESS; > + } > +diff -ur coreutils-8.25.dist/src/stat.c coreutils-8.25/src/stat.c > +--- coreutils-8.25.dist/src/stat.c 2016-01-13 > 06:16:39.000000000 -0500 ++++ coreutils-8.25/src/stat.c > 2016-05-25 13:53:24.807390596 -0400 +@@ -1049,15 +1049,19 @@ > + out_string (pformat, prefix_len, > + gw_ent ? gw_ent->gr_name : "UNKNOWN"); > + break; > ++#ifndef __ros__ > + case 't': > + out_uint_x (pformat, prefix_len, major (statbuf->st_rdev)); > + break; > ++#endif > + case 'm': > + fail |= out_mount_point (filename, pformat, prefix_len, > statbuf); > + break; > ++#ifndef __ros__ > + case 'T': > + out_uint_x (pformat, prefix_len, minor (statbuf->st_rdev)); > + break; > ++#endif > + case 's': > + out_int (pformat, prefix_len, statbuf->st_size); > + break; -- You received this message because you are subscribed to the Google Groups "Akaros" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
