Realise that the libc core can safely call other libc core functions, even if
authorDavid Given <dg@cowlark.com>
Thu, 21 Jun 2018 21:24:23 +0000 (23:24 +0200)
committerDavid Given <dg@cowlark.com>
Thu, 21 Jun 2018 21:24:23 +0000 (23:24 +0200)
they're not defined in the core: so putw() can call stdio stuff, for example.
So the earlier concept of pureness isn't necessary. Rename accordingly.

74 files changed:
lang/cem/libcc.ansi/build.lua
lang/cem/libcc.ansi/core/README.md [new file with mode: 0644]
lang/cem/libcc.ansi/core/ctype/char.tab [moved from lang/cem/libcc.ansi/pure/ctype/char.tab with 100% similarity]
lang/cem/libcc.ansi/core/ctype/genfiles [moved from lang/cem/libcc.ansi/pure/ctype/genfiles with 100% similarity]
lang/cem/libcc.ansi/core/ctype/tolower.c [moved from lang/cem/libcc.ansi/pure/ctype/tolower.c with 100% similarity]
lang/cem/libcc.ansi/core/ctype/toupper.c [moved from lang/cem/libcc.ansi/pure/ctype/toupper.c with 100% similarity]
lang/cem/libcc.ansi/core/locale/localeconv.c [moved from lang/cem/libcc.ansi/pure/locale/localeconv.c with 100% similarity]
lang/cem/libcc.ansi/core/locale/setlocale.c [moved from lang/cem/libcc.ansi/pure/locale/setlocale.c with 100% similarity]
lang/cem/libcc.ansi/core/math/asin.c [moved from lang/cem/libcc.ansi/pure/math/asin.c with 100% similarity]
lang/cem/libcc.ansi/core/math/atan.c [moved from lang/cem/libcc.ansi/pure/math/atan.c with 100% similarity]
lang/cem/libcc.ansi/core/math/atan2.c [moved from lang/cem/libcc.ansi/pure/math/atan2.c with 100% similarity]
lang/cem/libcc.ansi/core/math/ceil.c [moved from lang/cem/libcc.ansi/pure/math/ceil.c with 100% similarity]
lang/cem/libcc.ansi/core/math/exp.c [moved from lang/cem/libcc.ansi/pure/math/exp.c with 100% similarity]
lang/cem/libcc.ansi/core/math/fabs.c [moved from lang/cem/libcc.ansi/pure/math/fabs.c with 100% similarity]
lang/cem/libcc.ansi/core/math/floor.c [moved from lang/cem/libcc.ansi/pure/math/floor.c with 100% similarity]
lang/cem/libcc.ansi/core/math/fmod.c [moved from lang/cem/libcc.ansi/pure/math/fmod.c with 100% similarity]
lang/cem/libcc.ansi/core/math/frexp.e [moved from lang/cem/libcc.ansi/pure/math/frexp.e with 100% similarity]
lang/cem/libcc.ansi/core/math/hugeval.c [moved from lang/cem/libcc.ansi/pure/math/hugeval.c with 100% similarity]
lang/cem/libcc.ansi/core/math/hypot.c [moved from lang/cem/libcc.ansi/pure/math/hypot.c with 100% similarity]
lang/cem/libcc.ansi/core/math/isnan.c [moved from lang/cem/libcc.ansi/pure/math/isnan.c with 100% similarity]
lang/cem/libcc.ansi/core/math/ldexp.c [moved from lang/cem/libcc.ansi/pure/math/ldexp.c with 100% similarity]
lang/cem/libcc.ansi/core/math/localmath.h [moved from lang/cem/libcc.ansi/pure/math/localmath.h with 100% similarity]
lang/cem/libcc.ansi/core/math/log.c [moved from lang/cem/libcc.ansi/pure/math/log.c with 100% similarity]
lang/cem/libcc.ansi/core/math/log10.c [moved from lang/cem/libcc.ansi/pure/math/log10.c with 100% similarity]
lang/cem/libcc.ansi/core/math/modf.e [moved from lang/cem/libcc.ansi/pure/math/modf.e with 100% similarity]
lang/cem/libcc.ansi/core/math/pow.c [moved from lang/cem/libcc.ansi/pure/math/pow.c with 100% similarity]
lang/cem/libcc.ansi/core/math/sin.c [moved from lang/cem/libcc.ansi/pure/math/sin.c with 100% similarity]
lang/cem/libcc.ansi/core/math/sinh.c [moved from lang/cem/libcc.ansi/pure/math/sinh.c with 100% similarity]
lang/cem/libcc.ansi/core/math/sqrt.c [moved from lang/cem/libcc.ansi/pure/math/sqrt.c with 100% similarity]
lang/cem/libcc.ansi/core/math/tan.c [moved from lang/cem/libcc.ansi/pure/math/tan.c with 100% similarity]
lang/cem/libcc.ansi/core/math/tanh.c [moved from lang/cem/libcc.ansi/pure/math/tanh.c with 100% similarity]
lang/cem/libcc.ansi/core/setjmp/setjmp.e [moved from lang/cem/libcc.ansi/pure/setjmp/setjmp.e with 100% similarity]
lang/cem/libcc.ansi/core/setjmp/sigmisc.c [moved from lang/cem/libcc.ansi/pure/setjmp/sigmisc.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/abs.c [moved from lang/cem/libcc.ansi/pure/stdlib/abs.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/atoi.c [moved from lang/cem/libcc.ansi/pure/stdlib/atoi.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/atol.c [moved from lang/cem/libcc.ansi/pure/stdlib/atol.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/bsearch.c [moved from lang/cem/libcc.ansi/pure/stdlib/bsearch.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/div.c [moved from lang/cem/libcc.ansi/pure/stdlib/div.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/getenv.c [moved from lang/cem/libcc.ansi/pure/stdlib/getenv.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/labs.c [moved from lang/cem/libcc.ansi/pure/stdlib/labs.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/ldiv.c [moved from lang/cem/libcc.ansi/pure/stdlib/ldiv.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/mblen.c [moved from lang/cem/libcc.ansi/pure/stdlib/mblen.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/mbstowcs.c [moved from lang/cem/libcc.ansi/pure/stdlib/mbstowcs.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/mbtowc.c [moved from lang/cem/libcc.ansi/pure/stdlib/mbtowc.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/putenv.c [moved from lang/cem/libcc.ansi/pure/stdlib/putenv.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/qsort.c [moved from lang/cem/libcc.ansi/pure/stdlib/qsort.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/rand.c [moved from lang/cem/libcc.ansi/pure/stdlib/rand.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/setenv.c [moved from lang/cem/libcc.ansi/pure/stdlib/setenv.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/strtol.c [moved from lang/cem/libcc.ansi/pure/stdlib/strtol.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/wcstombs.c [moved from lang/cem/libcc.ansi/pure/stdlib/wcstombs.c with 100% similarity]
lang/cem/libcc.ansi/core/stdlib/wctomb.c [moved from lang/cem/libcc.ansi/pure/stdlib/wctomb.c with 100% similarity]
lang/cem/libcc.ansi/core/string/memchr.c [moved from lang/cem/libcc.ansi/pure/string/memchr.c with 100% similarity]
lang/cem/libcc.ansi/core/string/memcmp.c [moved from lang/cem/libcc.ansi/pure/string/memcmp.c with 100% similarity]
lang/cem/libcc.ansi/core/string/memcpy.c [moved from lang/cem/libcc.ansi/pure/string/memcpy.c with 100% similarity]
lang/cem/libcc.ansi/core/string/memmove.c [moved from lang/cem/libcc.ansi/pure/string/memmove.c with 100% similarity]
lang/cem/libcc.ansi/core/string/memset.c [moved from lang/cem/libcc.ansi/pure/string/memset.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strcat.c [moved from lang/cem/libcc.ansi/pure/string/strcat.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strchr.c [moved from lang/cem/libcc.ansi/pure/string/strchr.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strcmp.c [moved from lang/cem/libcc.ansi/pure/string/strcmp.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strcoll.c [moved from lang/cem/libcc.ansi/pure/string/strcoll.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strcpy.c [moved from lang/cem/libcc.ansi/pure/string/strcpy.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strcspn.c [moved from lang/cem/libcc.ansi/pure/string/strcspn.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strdup.c [moved from lang/cem/libcc.ansi/pure/string/strdup.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strlen.c [moved from lang/cem/libcc.ansi/pure/string/strlen.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strncat.c [moved from lang/cem/libcc.ansi/pure/string/strncat.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strncmp.c [moved from lang/cem/libcc.ansi/pure/string/strncmp.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strncpy.c [moved from lang/cem/libcc.ansi/pure/string/strncpy.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strpbrk.c [moved from lang/cem/libcc.ansi/pure/string/strpbrk.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strrchr.c [moved from lang/cem/libcc.ansi/pure/string/strrchr.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strspn.c [moved from lang/cem/libcc.ansi/pure/string/strspn.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strstr.c [moved from lang/cem/libcc.ansi/pure/string/strstr.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strtok.c [moved from lang/cem/libcc.ansi/pure/string/strtok.c with 100% similarity]
lang/cem/libcc.ansi/core/string/strxfrm.c [moved from lang/cem/libcc.ansi/pure/string/strxfrm.c with 100% similarity]
lang/cem/libcc.ansi/pure/README.md [deleted file]

index c49bdf0..b40ec30 100644 (file)
@@ -2,12 +2,12 @@ include("plat/build.lua")
 
 tabgen {
        name = "ctype_tab",
-       srcs = { "./pure/ctype/char.tab" }
+       srcs = { "./core/ctype/char.tab" }
 }
 
 normalrule {
        name = "ctype_files",
-       ins = { "./pure/ctype/genfiles" },
+       ins = { "./core/ctype/genfiles" },
        outleaves = {
                "isalnum.c",
                "isalpha.c",
@@ -33,14 +33,14 @@ for _, plat in ipairs(vars.plats) do
                srcs = {
                        "+ctype_files",
                        "+ctype_tab",
-                       "./pure/string/*.c",
-                       "./pure/stdlib/*.c",
-                       "./pure/locale/*.c",
-                       "./pure/setjmp/*.c",
-                       "./pure/setjmp/*.e",
-                       "./pure/math/*.c", -- hypot.c
-                       "./pure/math/*.e",
-                       "./pure/ctype/*.c",
+                       "./core/string/*.c",
+                       "./core/stdlib/*.c",
+                       "./core/locale/*.c",
+                       "./core/setjmp/*.c",
+                       "./core/setjmp/*.e",
+                       "./core/math/*.c", -- hypot.c
+                       "./core/math/*.e",
+                       "./core/ctype/*.c",
                        "./errno/*.c",
                        "./malloc/*.c",
                        "./misc/environ.c", -- don't build everything here as it's all obsolete
@@ -56,7 +56,7 @@ for _, plat in ipairs(vars.plats) do
                        "lang/cem/libcc.ansi/headers+pkg",
                        "plat/"..plat.."/include+pkg",
                        "./malloc/malloc.h",
-                       "./pure/math/localmath.h",
+                       "./core/math/localmath.h",
                        "./stdio/loc_incl.h",
                        "./stdlib/ext_fmt.h",
                        "./time/loc_time.h",
diff --git a/lang/cem/libcc.ansi/core/README.md b/lang/cem/libcc.ansi/core/README.md
new file mode 100644 (file)
index 0000000..48243c8
--- /dev/null
@@ -0,0 +1,19 @@
+This directory contains the libc core: functions here may depend on other
+libc functions _only_ (so, no `unistd.h` stuff). Plats don't get to configure
+this, so nothing here should add any overhead if the function isn't linked.
+
+Examples of what goes here:
+
+  - `strcmp()` --- because it's pure code.
+  - `setjmp()` --- in EM, it's portable.
+  - `assert()` --- because it only calls other core functions (`fputs()`
+    and `abort()`).
+
+Examples of what doesn't go here:
+
+  - `malloc()` --- because it calls the `unistd.h` function `sbrk()` (and so a
+    plat might want to swap it out).
+  - stdio --- because it calls the `unistd.h` functions `read()`, `write()`
+    etc.
+  - `signal()` --- because it can't be implemented portably and needs to go
+    in the plat.
diff --git a/lang/cem/libcc.ansi/pure/README.md b/lang/cem/libcc.ansi/pure/README.md
deleted file mode 100644 (file)
index 4842058..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-This directory contains _only_ pure-code libc functions with no dependencies
-on anything other than other pure functions (for example: strcmp, div). There
-should be no reason why any platform won't want these in its libc.