From 4544f83d6555b9801a9a3396ff7b502cb4b416f7 Mon Sep 17 00:00:00 2001 From: fortuneteller2k Date: Sun, 24 Dec 2023 23:54:49 +0800 Subject: [PATCH] allow manual specification of optimization levels --- .github/workflows/build-darwin.yml | 2 +- overlays/stdenvs.nix | 46 ++++++++++++++++-------------- overlays/terminal-emulators.nix | 33 ++++++++++++--------- pkgs/geyser/default.nix | 4 +-- 4 files changed, 47 insertions(+), 38 deletions(-) diff --git a/.github/workflows/build-darwin.yml b/.github/workflows/build-darwin.yml index b4b7263..6fa88c1 100644 --- a/.github/workflows/build-darwin.yml +++ b/.github/workflows/build-darwin.yml @@ -29,4 +29,4 @@ jobs: with: name: fortuneteller2k authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - - run: nix build -L .#emacs-plus-git .#wezterm-git + - run: nix build -L .#wezterm-git diff --git a/overlays/stdenvs.nix b/overlays/stdenvs.nix index 4a23df0..6944a46 100644 --- a/overlays/stdenvs.nix +++ b/overlays/stdenvs.nix @@ -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" @@ -21,9 +28,6 @@ _: "-frounding-math" "-fsingle-precision-constant" "-ftree-vectorize" - # not supported on clang yet, and isn't ignored - # "-fcx-limited-range" - # "-fcx-fortran-rules" ]; /* @@ -31,32 +35,32 @@ _: { 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; }; } diff --git a/overlays/terminal-emulators.nix b/overlays/terminal-emulators.nix index f00a049..6b3a1db 100644 --- a/overlays/terminal-emulators.nix +++ b/overlays/terminal-emulators.nix @@ -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="; + }; }; - }; - }); + }); + }; }; }; - }; } diff --git a/pkgs/geyser/default.nix b/pkgs/geyser/default.nix index 625093b..c956df0 100644 --- a/pkgs/geyser/default.nix +++ b/pkgs/geyser/default.nix @@ -1,6 +1,6 @@ { lib, stdenvNoCC, fetchurl, jre, makeBinaryWrapper }: -stdenvNoCC.mkDerivation (finalAttrs: { +stdenvNoCC.mkDerivation { pname = "geyser"; version = "340"; @@ -36,4 +36,4 @@ stdenvNoCC.mkDerivation (finalAttrs: { platforms = lib.platforms.unix; mainProgram = "geyser"; }; -}) +}