aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md5
-rw-r--r--doc/software.md46
2 files changed, 49 insertions, 2 deletions
diff --git a/README.md b/README.md
index 85ea24b..9e04fca 100644
--- a/README.md
+++ b/README.md
@@ -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