at 23.11-beta 104 lines 3.2 kB view raw
1{ lib 2, kaem 3, mes-libc 4}: 5 6rec { 7 8 # Recompile libc: crt{1,n,i}, libtcc.a, libc.a, libgetopt.a 9 recompileLibc = 10 { tcc 11 , pname 12 , version 13 , src 14 , libtccOptions 15 }: 16 let 17 18 crt = kaem.runCommand "crt" {} '' 19 mkdir -p ''${out}/lib 20 ${tcc}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crt1.o ${mes-libc}/lib/crt1.c 21 ${tcc}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crtn.o ${mes-libc}/lib/crtn.c 22 ${tcc}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crti.o ${mes-libc}/lib/crti.c 23 ''; 24 25 library = lib: options: source: kaem.runCommand "${lib}.a" {} '' 26 ${tcc}/bin/tcc ${options} -c -o ${lib}.o ${source} 27 ${tcc}/bin/tcc -ar cr ''${out} ${lib}.o 28 ''; 29 30 libtcc1 = library "libtcc1" libtccOptions "${src}/lib/libtcc1.c"; 31 libc = library "libc" mes-libc.CFLAGS "${mes-libc}/lib/libc.c"; 32 libgetopt = library "libgetopt" mes-libc.CFLAGS "${mes-libc}/lib/libgetopt.c"; 33 in 34 kaem.runCommand "${pname}-libs-${version}" {} '' 35 mkdir -p ''${out}/lib 36 cp ${crt}/lib/crt1.o ''${out}/lib 37 cp ${crt}/lib/crtn.o ''${out}/lib 38 cp ${crt}/lib/crti.o ''${out}/lib 39 cp ${libtcc1} ''${out}/lib/libtcc1.a 40 cp ${libc} ''${out}/lib/libc.a 41 cp ${libgetopt} ''${out}/lib/libgetopt.a 42 ''; 43 44 buildTinyccMes = 45 { pname 46 , version 47 , src 48 , prev 49 , buildOptions 50 , libtccBuildOptions 51 , meta 52 }: 53 let 54 options = lib.strings.concatStringsSep " " buildOptions; 55 libtccOptions = lib.strings.concatStringsSep " " 56 (["-c" "-D" "TCC_TARGET_I386=1" ] ++ libtccBuildOptions); 57 compiler = kaem.runCommand "${pname}-${version}" { 58 inherit pname version meta; 59 passthru.tests = rec { 60 get-version = result: kaem.runCommand "${pname}-get-version-${version}" {} '' 61 ${result}/bin/tcc -version 62 mkdir ''${out} 63 ''; 64 chain = result: kaem.runCommand "${pname}-chain-${version}" {} '' 65 echo ${prev.compiler.tests.chain or prev.compiler.tests.get-version}; 66 ${result}/bin/tcc -version 67 mkdir ''${out} 68 ''; 69 }; 70 } '' 71 catm config.h 72 mkdir -p ''${out}/bin 73 ${prev.compiler}/bin/tcc \ 74 -B ${prev.libs}/lib \ 75 -g \ 76 -v \ 77 -o ''${out}/bin/tcc \ 78 -D BOOTSTRAP=1 \ 79 ${options} \ 80 -I . \ 81 -I ${src} \ 82 -D TCC_TARGET_I386=1 \ 83 -D CONFIG_TCCDIR=\"\" \ 84 -D CONFIG_SYSROOT=\"\" \ 85 -D CONFIG_TCC_CRTPREFIX=\"{B}\" \ 86 -D CONFIG_TCC_ELFINTERP=\"\" \ 87 -D CONFIG_TCC_LIBPATHS=\"{B}\" \ 88 -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes-libc}/include\" \ 89 -D TCC_LIBGCC=\"libc.a\" \ 90 -D TCC_LIBTCC1=\"libtcc1.a\" \ 91 -D CONFIG_TCCBOOT=1 \ 92 -D CONFIG_TCC_STATIC=1 \ 93 -D CONFIG_USE_LIBGCC=1 \ 94 -D TCC_MES_LIBC=1 \ 95 -D TCC_VERSION=\"${version}\" \ 96 -D ONE_SOURCE=1 \ 97 ${src}/tcc.c 98 ''; 99 libs = recompileLibc { 100 inherit pname version src libtccOptions; 101 tcc = compiler; 102 }; 103 in { inherit prev compiler libs; }; 104}