61 lines
1.6 KiB
Nix
61 lines
1.6 KiB
Nix
|
{ lib
|
||
|
, kaem
|
||
|
, ln-boot
|
||
|
, mes
|
||
|
, mes-libc
|
||
|
}:
|
||
|
let
|
||
|
pname = "mes-libc";
|
||
|
inherit (mes.compiler) version;
|
||
|
|
||
|
sources = (import ./sources.nix).x86.linux.gcc;
|
||
|
inherit (sources) libtcc1_SOURCES libc_gnu_SOURCES;
|
||
|
|
||
|
# Concatenate all source files into a convenient bundle
|
||
|
# "gcc" variants of source files (eg. "lib/linux/x86-mes-gcc") can also be
|
||
|
# compiled by tinycc
|
||
|
#
|
||
|
# Passing this many arguments is too much for kaem so we need to split
|
||
|
# the operation in two
|
||
|
firstLibc = lib.take 100 libc_gnu_SOURCES;
|
||
|
lastLibc = lib.drop 100 libc_gnu_SOURCES;
|
||
|
in
|
||
|
kaem.runCommand "${pname}-${version}" {
|
||
|
inherit pname version;
|
||
|
|
||
|
nativeBuildInputs = [ ln-boot ];
|
||
|
|
||
|
passthru.CFLAGS = "-DHAVE_CONFIG_H=1 -I${mes-libc}/include -I${mes-libc}/include/linux/x86";
|
||
|
|
||
|
meta = with lib; {
|
||
|
description = "The Mes C Library";
|
||
|
homepage = "https://www.gnu.org/software/mes";
|
||
|
license = licenses.gpl3Plus;
|
||
|
maintainers = teams.minimal-bootstrap.members;
|
||
|
platforms = [ "i686-linux" ];
|
||
|
};
|
||
|
} ''
|
||
|
cd ${mes.srcPrefix}
|
||
|
|
||
|
# mescc compiled libc.a
|
||
|
mkdir -p ''${out}/lib/x86-mes
|
||
|
|
||
|
# libc.c
|
||
|
catm ''${TMPDIR}/first.c ${lib.concatStringsSep " " firstLibc}
|
||
|
catm ''${out}/lib/libc.c ''${TMPDIR}/first.c ${lib.concatStringsSep " " lastLibc}
|
||
|
|
||
|
# crt{1,n,i}.c
|
||
|
cp lib/linux/x86-mes-gcc/crt1.c ''${out}/lib
|
||
|
cp lib/linux/x86-mes-gcc/crtn.c ''${out}/lib
|
||
|
cp lib/linux/x86-mes-gcc/crti.c ''${out}/lib
|
||
|
|
||
|
# libtcc1.c
|
||
|
catm ''${out}/lib/libtcc1.c ${lib.concatStringsSep " " libtcc1_SOURCES}
|
||
|
|
||
|
# getopt.c
|
||
|
cp lib/posix/getopt.c ''${out}/lib/libgetopt.c
|
||
|
|
||
|
# Install headers
|
||
|
ln -s ${mes.srcPrefix}/include ''${out}/include
|
||
|
''
|