summaryrefslogtreecommitdiffstats
path: root/pkgs/development/compilers/gambit/gambit-support.nix
blob: ce1d14411ed23f10bf274fce7dc8e45f6b95116e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{ pkgs, lib }:

rec {
  stable-params = {
    stable = true;
    defaultRuntimeOptions = "iL,fL,-L,tL";
    buildRuntimeOptions = "i8,f8,-8,t8";
    targets = "js"; # arm,java,js,php,python,riscv-32,riscv-64,ruby,x86,x86-64
    #fixStamp = _: _: _: "";
    fixStamp = git-version: stampYmd: stampHms: ''
      echo "Fixing timestamp recipe in Makefile"
      substituteInPlace configure \
        --replace "$(grep '^PACKAGE_VERSION=.*$' configure)" 'PACKAGE_VERSION="v${git-version}"' \
        --replace "$(grep '^PACKAGE_STRING=.*$' configure)" 'PACKAGE_STRING="Gambit v${git-version}"' ;
      substituteInPlace include/makefile.in \
        --replace "\$\$(\$(GIT) describe --tag --always | sed 's/-bootstrap\$\$//')" "v${git-version}" \
        --replace "echo > stamp.h;" "(echo '#define ___STAMP_VERSION \"v${git-version}\"'; echo '#define ___STAMP_YMD ${toString stampYmd}'; echo '#define ___STAMP_HMS ${toString stampHms}';) > stamp.h;";
      grep -i ' version=\|echo..#define ___STAMP_VERSION' include/makefile.in # XXX DEBUG -- REMOVE ME
    '';
    modules = true;
    extraOptions = [ "CFLAGS=-foptimize-sibling-calls" ];
  };

  unstable-params = stable-params // {
    stable = false;
    extraOptions = [ ]; # "CFLAGS=-foptimize-sibling-calls" not necessary in latest unstable
  };

  export-gambopt = params: "export GAMBOPT=${params.buildRuntimeOptions} ;";

  gambit-bootstrap = import ./bootstrap.nix pkgs;

  meta = {
    description = "Optimizing Scheme to C compiler";
    homepage = "http://gambitscheme.org";
    license = lib.licenses.lgpl21Only; # dual, also asl20
    # NB regarding platforms: continuously tested on Linux x86_64 and regularly tested on macOS x86_64.
    # *should* work everywhere.
    platforms = lib.platforms.unix;
    maintainers = with lib.maintainers; [
      thoughtpolice
      raskin
      fare
    ];
  };
}