Loading pkgs/development/compilers/gambit/build.nix +11 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading @@ -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" Loading @@ -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"; Loading pkgs/development/compilers/gambit/default.nix +1 −1 Original line number Diff line number Diff line Loading @@ -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="; Loading pkgs/development/compilers/gambit/gambit-support.nix +5 −4 Original line number Diff line number Diff line Loading @@ -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} ;"; Loading pkgs/development/compilers/gambit/unstable.nix +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; } pkgs/development/compilers/gerbil/build.nix +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 Loading @@ -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 ; Loading @@ -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. Loading @@ -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 Loading @@ -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} Loading @@ -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 ''; Loading @@ -98,4 +129,6 @@ stdenv.mkDerivation rec { platforms = lib.platforms.unix; maintainers = with lib.maintainers; [ fare ]; }; outputsToInstall = [ "out" ]; } Loading
pkgs/development/compilers/gambit/build.nix +11 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading @@ -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" Loading @@ -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"; Loading
pkgs/development/compilers/gambit/default.nix +1 −1 Original line number Diff line number Diff line Loading @@ -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="; Loading
pkgs/development/compilers/gambit/gambit-support.nix +5 −4 Original line number Diff line number Diff line Loading @@ -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} ;"; Loading
pkgs/development/compilers/gambit/unstable.nix +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; }
pkgs/development/compilers/gerbil/build.nix +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 Loading @@ -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 ; Loading @@ -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. Loading @@ -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 Loading @@ -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} Loading @@ -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 ''; Loading @@ -98,4 +129,6 @@ stdenv.mkDerivation rec { platforms = lib.platforms.unix; maintainers = with lib.maintainers; [ fare ]; }; outputsToInstall = [ "out" ]; }