Fil-C on Nix

Filnix wiki

mbrock/filnix

nanofil/bench/programs.nix

The benchmark's programs: for a C compiler cc (a path), a derivation per program with its executable at the top of $out. NANOFIL_OPT selects nanofil's mode when cc is nanofil-cc.

λpkgs, filcc
let
6luaFlags=
"-O2 -std=gnu99 -DLUA_USE_LINUX -DLUA_USE_JUMPTABLE=0"
used by progs
7sqliteFlags=
"-O2 -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_MATH_FUNCTIONS"
used by progs
8progs=
9zlib=
10src=
pkgs.zlib.src
11exe=
"minigzip"
12build=
λcc
mkdir p && tar -xf $src -C p --strip-components=1
(cd p && CC=${filcc}/bin/clang ./configure --static >/dev/null)
make -C p -j$NIX_BUILD_CORES CC=${cc} libz.a minigzip >/dev/null
cp p/minigzip $out/
18lua=
19src=
pkgs.lua5_4.src
20exe=
"lua"
21build=
λcc
mkdir p && tar -xf $src -C p --strip-components=1
make -C p/src -j$NIX_BUILD_CORES CC=${cc} CFLAGS="${luaFlags}" SYSLIBS="-Wl,-E -ldl" lua >/dev/null
cp p/src/lua $out/
26bzip2=
27src=
pkgs.bzip2.src
28exe=
"bzip2"
29build=
λcc
mkdir p && tar -xf $src -C p --strip-components=1
make -C p -j$NIX_BUILD_CORES CC=${cc} bzip2 >/dev/null
cp p/bzip2 $out/
34lz4=
35src=
pkgs.lz4.src
36exe=
"lz4"
37build=
λcc
cp -r $src p && chmod -R u+w p
make -C p/programs -j$NIX_BUILD_CORES CC=${cc} lz4 >/dev/null
cp p/programs/lz4 $out/

The amalgamation nix/sqlite.nix generates; sqlite3.c needs about 3 GB of Prolog stack in nanofil (NANOFIL_STACK_LIMIT).

44sqlite=
45src=
import../nix/sqlite.nix inherit pkgs filcc;.amalgamation
46exe=
"sqlite3"
47build=
λcc
export NANOFIL_STACK_LIMIT=4000000000
${cc} ${sqliteFlags} -I$src -c $src/sqlite3.c -o sqlite3.o &
${cc} ${sqliteFlags} -I$src -c $src/shell.c -o shell.o
wait $!
${cc} -o $out/sqlite3 shell.o sqlite3.o -lm
uses luaFlags sqliteFlags used by build
in
57inherit
progs

build NAME LABEL CC OPT [EXTRA]: program NAME built by CC with NANOFIL_OPT=OPT; EXTRA runs after the build, in the build directory.

60build=
λname label cc opt extra
pkgs.runCommandCC"nanofil-bench-${name}-${label}" src = progs.${name}.src;
mkdir $out
export NANOFIL_OPT="${opt}"
${progs.${name}.buildcc}
uses progs