This document lists some software known to build successfully, and any special procedures necessary.

Software notes

sbase

Builds without issue.

mcpp

Builds without issue. Requires CFLAGS=-D_POSIX_C_SOURCE=200112L.

binutils

On musl systems, you must define long double to match double (as below) to avoid errors in unused static inline functions in musl's math.h. Note: this is a hack and won't be ABI-incompatible with musl; things will break if any functions with long double get called.

-struct type typeldouble = FLTTYPE(TYPELDOUBLE, 16, NULL);  // XXX: not supported by qbe
+struct type typeldouble = FLTTYPE(TYPELDOUBLE, 8, &f64);

Requires several patches available here: https://github.com/michaelforney/binutils-gdb/tree/cproc-fixes

Configure with

./configure --disable-gdb --disable-plugins --disable-readline

gcc 4.7

Requires a number of patches available here: https://github.com/michaelforney/gcc/tree/cproc-fixes

Also requires gmp headers modified for C99 inline semantics: https://hg.sr.ht/~mcf/gmp-6.1/rev/53195faa26dfeafeacd57f54035373988e2a16a3

Build with

git clone -b cc-fixes https://github.com/michaelforney/gcc
cd gcc
hg clone https://hg.sr.ht/~mcf/gmp-6.1 gmp
(cd gmp && aux_dir=. ltdl_dir=. ./.bootstrap)
./configure --disable-multilib --disable-bootstrap --disable-lto --enable-languages=c,c++
make

zstd

Requires disabling CPU identification inline assembly and deprecation warnings.

diff --git a/lib/common/cpu.h b/lib/common/cpu.h
index 5f0923fc..10dd7d7f 100644
--- a/lib/common/cpu.h
+++ b/lib/common/cpu.h
@@ -52,6 +52,7 @@ MEM_STATIC ZSTD_cpuid_t ZSTD_cpuid(void) {
             f7c = (U32)reg[2];
         }
     }
+#elif 1
 #elif defined(__i386__) && defined(__PIC__) && !defined(__clang__) && defined(__GNUC__)
     /* The following block like the normal cpuid branch below, but gcc
      * reserves ebx for use of its pic register so we must specially

Build with

make CC=cproc CFLAGS='-DZDICT_DISABLE_DEPRECATE_WARNINGS -DZBUFF_DISABLE_DEPRECATE_WARNINGS' zstd

st

Requires a few changes to avoid wide string literals and including math.h on musl targets.

diff --git a/config.def.h b/config.def.h
index 482901e..bd963ae 100644
--- a/config.def.h
+++ b/config.def.h
@@ -32,7 +32,7 @@ static float chscale = 1.0;
  *
  * More advanced example: L" `'\"()[]{}"
  */
-wchar_t *worddelimiters = L" ";
+wchar_t *worddelimiters = (wchar_t[]){' ', 0};
 
 /* selection timeouts (in milliseconds) */
 static unsigned int doubleclicktimeout = 300;
diff --git a/x.c b/x.c
index 5828a3b..6e006cc 100644
--- a/x.c
+++ b/x.c
@@ -1,6 +1,5 @@
 /* See LICENSE for license details. */
 #include <errno.h>
-#include <math.h>
 #include <limits.h>
 #include <locale.h>
 #include <signal.h>
@@ -15,6 +14,8 @@
 #include <X11/Xft/Xft.h>
 #include <X11/XKBlib.h>
 
+float ceilf(float);
+
 static char *argv0;
 #include "arg.h"
 #include "st.h"

oasis

One of the main goals of cproc is to compile the entire oasis linux system (excluding kernel and libc). This is a work in progress, but many packages have patches to fix various ISO C conformance issues, enabling them to be built. See the patch directories in the oasis package tree for the patches used.

Currently the following build successfully:

The following still need more work:

About this wiki

commit f12ae432305a0cdef1bf46ce1617637eaaf72cbc
Author: Michael Forney <mforney@mforney.org>
Date:   2019-11-20T12:43:53-08:00

driver: Pass -std=* through to the preprocessor

This will prevent the preprocessor from defining several unreserved
identifiers when built with an ISO C language standard, which may conflict
with identifiers used by the program being built.
Clone this wiki
https://git.sr.ht/~mcf/cproc (read-only)
git@git.sr.ht:~mcf/cproc (read/write)