Unverified Commit 245a5d60 authored by 7c6f434c's avatar 7c6f434c Committed by GitHub
Browse files

Merge pull request #261120 from MuKnIO/gerbil-0.18

Gerbil 0.18
parents 7ac98903 dbee0d9a
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -5,7 +5,8 @@
  stampYmd ? 0, stampHms ? 0,
  gambit-support,
  optimizationSetting ? "-O1",
  gambit-params ? pkgs.gambit-support.stable-params }:
  gambit-params ? pkgs.gambit-support.stable-params,
  rev ? git-version }:

# Note that according to a benchmark run by Marc Feeley on May 2018,
# clang is 10x (with default settings) to 15% (with -O2) slower than GCC at compiling
@@ -30,6 +31,11 @@ gccStdenv.mkDerivation rec {
  inherit src version git-version;
  bootstrap = gambit-support.gambit-bootstrap;

  passthru = {
    inherit src version git-version rev stampYmd stampHms optimizationSetting openssl;
  };


  nativeBuildInputs = [ git autoconf ];

  # TODO: if/when we can get all the library packages we depend on to have static versions,
@@ -47,6 +53,7 @@ gccStdenv.mkDerivation rec {
    "--enable-c-opt=${optimizationSetting}"
    "--enable-c-opt-rts=-O2"
    "--enable-gcc-opts"
    "--enable-trust-c-tco"
    "--enable-shared"
    "--enable-absolute-shared-libs" # Yes, NixOS will want an absolute path, and fix it.
    "--enable-openssl"
@@ -70,6 +77,9 @@ gccStdenv.mkDerivation rec {
    # "--enable-char-size=1" # default is 4
    # "--enable-march=native" # Nope, makes it not work on machines older than the builder
  ] ++ gambit-params.extraOptions
    # TODO: pick an appropriate architecture to optimize on on x86-64?
    # https://gcc.gnu.org/onlinedocs/gcc-4.8.4/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options
    # ++ lib.optional pkgs.stdenv.isx86_64 "--enable-march=core-avx2"
    # Do not enable poll on darwin due to https://github.com/gambit/gambit/issues/498
    ++ lib.optional (!gccStdenv.isDarwin) "--enable-poll";

+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@

callPackage ./build.nix rec {
  version = "4.9.5";
  git-version = version;
  git-version = "v${version}";
  src = fetchurl {
    url = "https://gambitscheme.org/4.9.5/gambit-v4_9_5.tgz";
    sha256 = "sha256-4o74218OexFZcgwVAFPcq498TK4fDlyDiUR5cHP4wdw=";
+5 −4
Original line number Diff line number Diff line
@@ -13,16 +13,17 @@ rec {
        --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 "echo > stamp.h;" "(echo '#define ___STAMP_VERSION \"${git-version}\"'; echo '#define ___STAMP_YMD ${toString stampYmd}'; echo '#define ___STAMP_HMS ${toString stampHms}';) > stamp.h;";
        --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 = [];
    extraOptions = ["--enable-trust-c-tco" "CFLAGS=-foptimize-sibling-calls"];
    extraOptions = ["CFLAGS=-foptimize-sibling-calls"];
  };

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

  export-gambopt = params : "export GAMBOPT=${params.buildRuntimeOptions} ;";
+8 −7
Original line number Diff line number Diff line
{ callPackage, fetchFromGitHub, gambit-support }:

callPackage ./build.nix {
  version = "unstable-2023-08-06";
  git-version = "4.9.5-5-gf1fbe9aa";
  stampYmd = 20230806;
  stampHms = 195822;
callPackage ./build.nix rec {
  version = "unstable-2023-10-07";
  git-version = "4.9.5-59-g342399c7";
  stampYmd = 20231007;
  stampHms = 170745;
  rev = "342399c736ec560c0ff4faeaeb9599b45633f26c";
  src = fetchFromGitHub {
    owner = "gambit";
    repo = "gambit";
    rev = "f1fbe9aa0f461e89f2a91bc050c1373ee6d66482";
    sha256 = "0b0gd6cwj8zxwcqglpsnmanysiq4mvma2mrgdfr6qy99avhbhzxm";
    inherit rev;
    sha256 = "121pj6lxihjjnfq33lq4m5hi461xbs9f41qd4l46556dr15cyf8f";
  };
  gambit-params = gambit-support.unstable-params;
}
+58 −25
Original line number Diff line number Diff line
{ pkgs, gccStdenv, lib, coreutils,
  openssl, zlib, sqlite, libxml2, libyaml, libmysqlclient, lmdb, leveldb, postgresql,
  version, git-version,
  openssl, zlib, sqlite,
  version, git-version, src,
  gambit-support,
  gambit ? pkgs.gambit, gambit-params ? pkgs.gambit-support.stable-params, src }:
  gambit-git-version,
  gambit-stampYmd,
  gambit-stampHms,
  gambit-params }:

# We use Gambit, that works 10x better with GCC than Clang. See ../gambit/build.nix
let stdenv = gccStdenv; in
@@ -12,16 +15,13 @@ stdenv.mkDerivation rec {
  inherit version;
  inherit src;

  buildInputs_libraries = [ openssl zlib sqlite libxml2 libyaml libmysqlclient lmdb leveldb postgresql ];
  buildInputs_libraries = [ openssl zlib sqlite ];

  # TODO: either fix all of Gerbil's dependencies to provide static libraries,
  # or give up and delete all tentative support for static libraries.
  #buildInputs_staticLibraries = map makeStaticLibraries buildInputs_libraries;

  buildInputs = [ gambit ]
    ++ buildInputs_libraries; # ++ buildInputs_staticLibraries;

  env.NIX_CFLAGS_COMPILE = "-I${libmysqlclient}/include/mysql -L${libmysqlclient}/lib/mysql";
  buildInputs = buildInputs_libraries;

  postPatch = ''
    echo '(define (gerbil-version-string) "v${git-version}")' > src/gerbil/runtime/gx-version.scm ;
@@ -29,6 +29,17 @@ stdenv.mkDerivation rec {
    grep -Fl '#!/usr/bin/env' `find . -type f -executable` | while read f ; do
      substituteInPlace "$f" --replace '#!/usr/bin/env' '#!${coreutils}/bin/env' ;
    done ;
    substituteInPlace ./configure --replace 'set -e' 'set -e ; git () { echo "v${git-version}" ;}' ;
    substituteInPlace ./src/build/build-version.scm --replace "with-exception-catcher" '(lambda _ "v${git-version}")' ;
    #rmdir src/gambit
    #cp -a ${pkgs.gambit-unstable.src} ./src/gambit
    chmod -R u+w ./src/gambit
    ( cd src/gambit ; ${gambit-params.fixStamp gambit-git-version gambit-stampYmd gambit-stampHms} )
    for f in src/bootstrap/gerbil/compiler/driver__0.scm \
             src/build/build-libgerbil.ss \
             src/gerbil/compiler/driver.ss ; do
      substituteInPlace "$f" --replace '"gcc"' '"${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}gcc"' ;
    done
  '';

## TODO: make static compilation work.
@@ -40,26 +51,42 @@ stdenv.mkDerivation rec {
# OPENSSL_LIBSSL=${makeStaticLibraries openssl}/lib/libssl.a # MISSING!
# ZLIB=${makeStaticLibraries zlib}/lib/libz.a
# SQLITE=${makeStaticLibraries sqlite}/lib/sqlite.a # MISSING!
# LIBXML2=${makeStaticLibraries libxml2}/lib/libxml2.a # MISSING!
# YAML=${makeStaticLibraries libyaml}/lib/libyaml.a # MISSING!
# MYSQL=${makeStaticLibraries libmysqlclient}/lib/mariadb/libmariadb.a
# LMDB=${makeStaticLibraries lmdb}/lib/mysql/libmysqlclient_r.a # MISSING!
# LEVELDB=${makeStaticLibraries leveldb}/lib/libleveldb.a
# EOF

  configureFlags = [
    "--prefix=$out/gerbil"
    "--enable-zlib"
    "--enable-sqlite"
    "--enable-shared"
    "--disable-deprecated"
    "--enable-march=" # Avoid non-portable invalid instructions
  ];

  configurePhase = ''
    (cd src && ./configure \
      --prefix=$out/gerbil \
      --with-gambit=${gambit}/gambit \
      --enable-libxml \
      --enable-libyaml \
      --enable-zlib \
      --enable-sqlite \
      --enable-mysql \
      --enable-lmdb \
      --enable-leveldb)
    export CC=${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}gcc \
           CXX=${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}g++ \
           CPP=${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}cpp \
           CXXCPP=${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}cpp \
           LD=${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}ld \
           XMKMF=${coreutils}/bin/false
    unset CFLAGS LDFLAGS LIBS CPPFLAGS CXXFLAGS
    (cd src/gambit ; ${gambit-params.fixStamp gambit-git-version gambit-stampYmd gambit-stampHms})
    ./configure ${builtins.concatStringsSep " " configureFlags}
    (cd src/gambit ;
    substituteInPlace config.status \
      ${lib.optionalString (gccStdenv.isDarwin && !gambit-params.stable)
         ''--replace "/usr/local/opt/openssl@1.1" "${lib.getLib openssl}"''} \
        --replace "/usr/local/opt/openssl" "${lib.getLib openssl}"
    ./config.status
    )
  '';

  extraLdOptions = [
      "-L${zlib}/lib"
      "-L${openssl.out}/lib"
      "-L${sqlite.out}/lib"
    ];

  buildPhase = ''
    runHook preBuild

@@ -68,7 +95,7 @@ stdenv.mkDerivation rec {
    export GERBIL_BUILD_CORES=$NIX_BUILD_CORES
    export GERBIL_GXC=$PWD/bin/gxc
    export GERBIL_BASE=$PWD
    export GERBIL_HOME=$PWD
    export GERBIL_PREFIX=$PWD
    export GERBIL_PATH=$PWD/lib
    export PATH=$PWD/bin:$PATH
    ${gambit-support.export-gambopt gambit-params}
@@ -76,13 +103,17 @@ stdenv.mkDerivation rec {
    # Build, replacing make by build.sh
    ( cd src && sh build.sh )

    f=build/lib/libgerbil.so.ldd ; [ -f $f ] && :
    substituteInPlace "$f" --replace '(' \
      '(${lib.strings.concatStrings (map (x: "\"${x}\" " ) extraLdOptions)}'

    runHook postBuild
  '';

  installPhase = ''
    runHook preInstall
    mkdir -p $out/gerbil $out/bin
    (cd src; ./install)
    ./install.sh
    (cd $out/bin ; ln -s ../gerbil/bin/* .)
    runHook postInstall
  '';
@@ -98,4 +129,6 @@ stdenv.mkDerivation rec {
    platforms   = lib.platforms.unix;
    maintainers = with lib.maintainers; [ fare ];
  };

  outputsToInstall = [ "out" ];
}
Loading