Skip to content

Commit

Permalink
allow manual specification of optimization levels
Browse files Browse the repository at this point in the history
  • Loading branch information
moni-dz committed Dec 24, 2023
1 parent d8d7d00 commit f8e03dc
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 37 deletions.
46 changes: 25 additions & 21 deletions overlays/stdenvs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,15 @@ _:
{
flake.overlays.stdenvs = final: prev:
let
commonFlags = [
"-Ofast"
/*
optlevel would be one of: 0, 1, 2, 3, s, z, fast
Consult your compiler's documentation.
Summary for clang anyway: https://gist.github.com/lolo32/fd8ce29b218ac2d93a9e
*/
commonFlags = optlevel: [
"-O${optlevel}"
"-pipe"
"-ffloat-store"
"-fexcess-precision=fast"
Expand All @@ -21,42 +28,39 @@ _:
"-frounding-math"
"-fsingle-precision-constant"
"-ftree-vectorize"
# not supported on clang yet, and isn't ignored
# "-fcx-limited-range"
# "-fcx-fortran-rules"
];

/*
Example:
{ lib, clangStdenv, ... }:
(lib.optimizeStdenv "armv9-a" clangStdenv).mkDerivation { ... }
(lib.optimizeStdenv' "cortex-a78" clangStdenv).mkDerivation { ... }
(lib.optimizeStdenv "armv9-a" "3" clangStdenv).mkDerivation { ... }
(lib.optimizeStdenv' "cortex-a78" "fast" clangStdenv).mkDerivation { ... }
*/
optimizeStdenv = march: prev.stdenvAdapters.withCFlags (commonFlags ++ [ "-march=${march}" ]);
optimizeStdenv' = mcpu: prev.stdenvAdapters.withCFlags (commonFlags ++ [ "-mcpu=${mcpu}" ]);
optimizeStdenv = march: optlevel: prev.stdenvAdapters.withCFlags ((commonFlags optlevel) ++ [ "-march=${march}" ]);
optimizeStdenv' = mcpu: optlevel: prev.stdenvAdapters.withCFlags ((commonFlags optlevel) ++ [ "-mcpu=${mcpu}" ]);

/*
Example:
{ lib, stdenv, ... }:
(lib.optimizeStdenvWithNative stdenv).mkDerivation { ... }
(lib.optimizeStdenvWithNative stdenv "s").mkDerivation { ... }
*/
optimizeStdenvWithNative = stdenv: prev.stdenvAdapters.impureUseNativeOptimizations (prev.stdenvAdapters.withCFlags commonFlags stdenv);
optimizeStdenvWithNative = optlevel: stdenv: prev.stdenvAdapters.impureUseNativeOptimizations (prev.stdenvAdapters.withCFlags (commonFlags optlevel) stdenv);
in
{
lib = prev.lib.extend (_: _: { inherit optimizeStdenv optimizeStdenv' optimizeStdenvWithNative; });
optimizedV4Stdenv = final.lib.optimizeStdenv "x86-64-v4" prev.stdenv;
optimizedV3Stdenv = final.lib.optimizeStdenv "x86-64-v3" prev.stdenv;
optimizedV2Stdenv = final.lib.optimizeStdenv "x86-64-v2" prev.stdenv;
optimizedNativeStdenv = prev.lib.warn "using native optimizations, forfeiting reproducibility" final.lib.optimizeStdenvWithNative prev.stdenv;
optimizedV4ClangStdenv = final.lib.optimizeStdenv "x86-64-v4" prev.llvmPackages_latest.stdenv;
optimizedV3ClangStdenv = final.lib.optimizeStdenv "x86-64-v3" prev.llvmPackages_latest.stdenv;
optimizedV2ClangStdenv = final.lib.optimizeStdenv "x86-64-v2" prev.llvmPackages_latest.stdenv;
optimizedNativeClangStdenv = prev.lib.warn "using native optimizations, forfeiting reproducibility" final.lib.optimizeStdenvWithNative prev.llvmPackages_latest.stdenv;
appleM1Stdenv = final.lib.optimizeStdenv' "apple-m1" prev.llvmPackages_latest.stdenv;
appleM2Stdenv = final.lib.optimizeStdenv' "apple-m2" prev.llvmPackages_latest.stdenv;
optimizedV4Stdenv = final.lib.optimizeStdenv "x86-64-v4" "fast" prev.stdenv;
optimizedV3Stdenv = final.lib.optimizeStdenv "x86-64-v3" "fast" prev.stdenv;
optimizedV2Stdenv = final.lib.optimizeStdenv "x86-64-v2" "fast" prev.stdenv;
optimizedNativeStdenv = prev.lib.warn "using native optimizations, forfeiting reproducibility" final.lib.optimizeStdenvWithNative "fast" prev.stdenv;
optimizedV4ClangStdenv = final.lib.optimizeStdenv "x86-64-v4" "fast" prev.llvmPackages_latest.stdenv;
optimizedV3ClangStdenv = final.lib.optimizeStdenv "x86-64-v3" "fast" prev.llvmPackages_latest.stdenv;
optimizedV2ClangStdenv = final.lib.optimizeStdenv "x86-64-v2" "fast" prev.llvmPackages_latest.stdenv;
optimizedNativeClangStdenv = prev.lib.warn "using native optimizations, forfeiting reproducibility" final.lib.optimizeStdenvWithNative "fast" prev.llvmPackages_latest.stdenv;
appleM1Stdenv = final.lib.optimizeStdenv' "apple-m1" "fast" prev.llvmPackages_latest.stdenv;
appleM2Stdenv = final.lib.optimizeStdenv' "apple-m2" "fast" prev.llvmPackages_latest.stdenv;
};
}
33 changes: 19 additions & 14 deletions overlays/terminal-emulators.nix
Original file line number Diff line number Diff line change
@@ -1,23 +1,28 @@
{ inputs, getPackage, ... }:

{
flake.overlays.terminal-emulators = _: prev: {
wezterm-git = prev.darwin.apple_sdk_11_0.callPackage "${inputs.nixpkgs}/pkgs/applications/terminal-emulators/wezterm" {
inherit (prev.darwin.apple_sdk_11_0.frameworks) Cocoa CoreGraphics Foundation UserNotifications System;
flake.overlays.terminal-emulators = _: prev:
let
wez-pkg = getPackage "wezterm" prev;
in
{
wezterm-git = prev.darwin.apple_sdk_11_0.callPackage "${inputs.nixpkgs}/pkgs/applications/terminal-emulators/wezterm" {
inherit (prev.darwin.apple_sdk_11_0.frameworks) Cocoa CoreGraphics Foundation UserNotifications System;

rustPlatform = prev.rustPlatform // {
buildRustPackage = args: prev.rustPlatform.buildRustPackage (args // rec {
inherit (getPackage "wezterm" prev) src version;
cargoLock = {
lockFile = "${src}/Cargo.lock";
rustPlatform = prev.rustPlatform // {
buildRustPackage = args: prev.rustPlatform.buildRustPackage (args // rec {
inherit (wez-pkg) src;
version = prev.lib.strings.substring 0 7 wez-pkg.version;
cargoLock = {
lockFile = "${src}/Cargo.lock";

outputHashes = {
"xcb-1.2.1" = "sha256-zkuW5ATix3WXBAj2hzum1MJ5JTX3+uVQ01R1vL6F1rY=";
"xcb-imdkit-0.2.0" = "sha256-L+NKD0rsCk9bFABQF4FZi9YoqBHr4VAZeKAWgsaAegw=";
outputHashes = {
"xcb-1.2.1" = "sha256-zkuW5ATix3WXBAj2hzum1MJ5JTX3+uVQ01R1vL6F1rY=";
"xcb-imdkit-0.2.0" = "sha256-L+NKD0rsCk9bFABQF4FZi9YoqBHr4VAZeKAWgsaAegw=";
};
};
};
});
});
};
};
};
};
}
4 changes: 2 additions & 2 deletions pkgs/geyser/default.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{ lib, stdenvNoCC, fetchurl, jre, makeBinaryWrapper }:

stdenvNoCC.mkDerivation (finalAttrs: {
stdenvNoCC.mkDerivation {
pname = "geyser";
version = "340";

Expand Down Expand Up @@ -36,4 +36,4 @@ stdenvNoCC.mkDerivation (finalAttrs: {
platforms = lib.platforms.unix;
mainProgram = "geyser";
};
})
}

0 comments on commit f8e03dc

Please sign in to comment.