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