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

Software notes


Builds without issue.


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


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:

Configure with

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

gcc 4.7

Requires a number of patches available here:

Also requires gmp headers modified for C99 inline semantics:

Build with

git clone -b cc-fixes
cd gcc
hg clone gmp
(cd gmp && aux_dir=. ltdl_dir=. ./.bootstrap)
./configure --disable-multilib --disable-bootstrap --disable-lto --enable-languages=c,c++


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



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"


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 8e47cf45dfed44627fa6f73f8734f2149c661044
Author: Michael Forney <>
Date:   2020-01-31T13:41:04-08:00

eval: Allow casting address constants to integer types in constant expressions
Clone this wiki (read-only) (read/write)