# https://www.cse.iitd.ac.in/~cs5070217/csl718/assignment1/ss_install_instructions.html { bison, fetchurl, flex, multiStdenv, stdenv_32bit, strace }: let host = "i686-pc-linux"; target = "sslittle-na-sstrix"; gcc-version = "2.7.2.3"; makeflags = "LANGUAGES=c CC=\"$CC -m32 $CFLAGS\" prefix=$out"; in multiStdenv.mkDerivation { pname = "SimpleScalar"; version = "1998-08-11"; # !!! nativeBuildInputs = [ flex bison ]; sourceRoot = "."; srcs = [ (fetchTarball { name = "simplesim-3.0"; url = "https://www.cse.iitd.ac.in/~cs5070217/csl718/simplesim-3v0d.tgz"; sha256 = "sha256:022rlniimzl30c1874765hl001dxc716vfwm40ij256h1qk2dwgw"; }) (fetchTarball { name = "simpleutils-990811"; url = "https://www.cse.iitd.ac.in/~cs5070217/csl718/simpleutils-990811.tar.gz"; sha256 = "sha256:0w952z382s7ghrxwrad7fd058b1kj5ad1abh8idxwwk47va72cdf"; }) ]; # El código es muy viejo y Nix usa opciones muy estrictas por defecto CFLAGS = "-O3 -Wno-error=format-security"; # Algunas tarballs vienen sin directorio de primer nivel y además requieren arreglos postUnpack = let simpletools = fetchurl { url = "https://www.cse.iitd.ac.in/~cs5070217/csl718/simpletools-2v0.tgz"; sha256 = "sha256-FTDTqyQWZCnuNPmTcu3Hcjgp4pHNoUcC0GOGhSJV9Iw="; }; gcc-ss = fetchurl { url = "https://www.cse.iitd.ac.in/~cs5070217/csl718/gcc-${gcc-version}.ss.tar.gz"; sha256 = "sha256-3R3wsLmxoN3MkEW4gaxnhIyTBs0CUiSiH7C1/hF2atM="; }; ar-and-ranlib = fetchurl { url = "https://www.cse.iitd.ac.in/~cs5070217/csl718/ar_and_ranlib.tar.gz"; sha256 = "sha256-MRTO6cAg3WeXlk3jDy2lVuiSXDRz1+LLa2XDkBDygMU="; }; in '' tar xf ${simpletools} rm -r gcc-2.6.3 tar xf ${gcc-ss} mkdir ar-and-ranlib tar xf ${ar-and-ranlib} -C ar-and-ranlib chmod -R +w gcc-${gcc-version} ar-and-ranlib ''; patches = [ ./0001-fix-case-of-YY_CURRENT_BUFFER.patch ./0002-define-sys_nerr.patch ./0003-fix-obstack.h-post-increment.patch ./0004-stdarg.h-instead-of-varargs.h.patch ]; postPatch = '' patchelf \ --set-interpreter "$(<${stdenv_32bit.cc}/nix-support/dynamic-linker-m32)" \ ar-and-ranlib/{ar,ranlib} ''; configurePhase = '' BUILD=$PWD cd $BUILD/simplesim-3.0 make config-pisa cd $BUILD/simpleutils-990811 ./configure --host=${host} --target=${target} --with-gnu-as --with-gnu-ld --prefix=$out cd $BUILD/gcc-${gcc-version} ./configure --host=${host} --target=${target} --with-gnu-as --with-gnu-ld --prefix=$out ''; buildPhase = '' make -C $BUILD/simplesim-3.0 make -C $BUILD/simpleutils-990811 # GCC necesita binutils para compilar make -C $BUILD/simpleutils-990811 install cp $BUILD/ar-and-ranlib/{ar,ranlib} $out/${target}/bin/ cd $BUILD/gcc-${gcc-version} mkdir -p $out/lib cp patched/sys/cdefs.h $BUILD/${target}/include/sys/cdefs.h cp -r $BUILD/${target} $out/ cp $BUILD/${target}/lib/{libc.a,crt0.o} $out/lib/ sed -i '130s@-I/usr/include@-I./include@' Makefile ! make ${makeflags} sed -i 's/\(return "FIXME\\n\)/\1\\/g' insn-output.c PATH="$out/${target}/bin:$PATH" make ${makeflags} ''; installPhase = '' cp $BUILD/simplesim-3.0/{sim-{outorder,cache,profile,bpred,eio,safe,fast},sysprobe} $out/bin/ PATH="$out/${target}/bin:$PATH" make -C $BUILD/gcc-${gcc-version} ${makeflags} install ''; }