diff options
-rw-r--r-- | README.md | 5 | ||||
-rw-r--r-- | doc/software.md | 46 |
2 files changed, 49 insertions, 2 deletions
@@ -6,8 +6,8 @@ the [ISC] license. Several GNU C [extensions] are also implemented. There is still much to do and some parts of the code are a little rough, -but it currently implements most of the language, is self-hosting, -and capable of building some useful software. +but it currently implements most of the language and is capable of +building some useful [software] including itself, `binutils`, and more. It was inspired by several other small C compilers including [8cc], [c], and [scc]. @@ -74,6 +74,7 @@ Please report any issues to https://todo.sr.ht/~mcf/cc-issues. [C11]: http://port70.net/~nsz/c/c11/n1570.html [ISC]: https://git.sr.ht/~mcf/cc/blob/master/LICENSE [extensions]: https://git.sr.ht/~mcf/cc/tree/master/doc/extensions.md +[software]: https://git.sr.ht/~mcf/cc/tree/master/doc/software.md [8cc]: https://github.com/rui314/8cc [c]: https://github.com/andrewchambers/c [scc]: http://www.simple-cc.org/ diff --git a/doc/software.md b/doc/software.md new file mode 100644 index 0000000..86a9215 --- /dev/null +++ b/doc/software.md @@ -0,0 +1,46 @@ +# Software notes + +This document lists some software known to build successfully, and any +special procedures necessary. + +## [sbase] + +Builds without issue as of [ef9f6f35]. + +[sbase]: https://core.suckless.org/sbase/ +[ef9f6f35]: https://git.suckless.org/sbase/commit/ef9f6f359a0762b738302ae05822514d72b70450.html + +## [binutils] + +QBE must be built with `NPred` (in `all.h` at least 297). + +On glibc systems, you must make sure to include `crtbegin.o` and +`crtend.o` from gcc at the end of `startfiles` and beginning of `endfiles` +respectively. + +On musl systems, you must define `long double` to match `double` to +avoid errors in unused `static inline` functions in musl's `math.h`. + +Requires several patches available here: +https://github.com/michaelforney/binutils-gdb/ + +- Fix function pointer subtraction in `bfd/doc/chew.c` (applied upstream). +- Skip unsupported `LDFLAGS`, only tested to work against `CXX` by + configure, but applied to `CC` as well. +- Disable `long double` support in `_bfd_doprnt`. +- Alter some ifdefs to avoid statement expressions and VLAs. +- Implement `pex_unix_exec_child` with `posix_spawn` instead of `vfork` + and subtle `volatile` usage. +- Make `regcomp` and `regexec` match the header declaration in usage of + `restrict`. +- Don't declare `vasprintf` unless it was checked for and not + found. Several subdirectories in binutils include `libiberty.h`, + but don't use `vasprintf`, causing conflicting declarations with libc + in usage of `restrict`. +- Make sure `config.h` is included in `arlex.c` so that the appropriate + feature-test macros get defined to expose `strdup`. + +Configure with + + ./configure CC=/path/to/cc CFLAGS_FOR_BUILD=-D_GNU_SOURCE \ + --disable-intl --disable-gdb --disable-plugins --disable-readline |