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.
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",
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
"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",
--- /dev/null
+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.
+++ /dev/null
-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.