8 changed files with 264 additions and 240 deletions
@ -1,10 +1,14 @@
|
||||
(import |
||||
( |
||||
import |
||||
( |
||||
let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in |
||||
fetchTarball { |
||||
url = lock.nodes.flake-compat.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; |
||||
sha256 = lock.nodes.flake-compat.locked.narHash; |
||||
} |
||||
let |
||||
lock = builtins.fromJSON (builtins.readFile ./flake.lock); |
||||
in |
||||
fetchTarball { |
||||
url = lock.nodes.flake-compat.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; |
||||
sha256 = lock.nodes.flake-compat.locked.narHash; |
||||
} |
||||
) |
||||
{ src = ./.; } |
||||
).defaultNix |
||||
{src = ./.;} |
||||
) |
||||
.defaultNix |
||||
|
||||
@ -1,100 +1,93 @@
|
||||
{ lib |
||||
, pkgsBuildHost |
||||
, rust |
||||
, stdenv |
||||
{ |
||||
lib, |
||||
pkgsBuildHost, |
||||
rust, |
||||
stdenv, |
||||
}: |
||||
|
||||
lib.optionalAttrs stdenv.hostPlatform.isStatic { |
||||
ROCKSDB_STATIC = ""; |
||||
} |
||||
// |
||||
{ |
||||
// { |
||||
CARGO_BUILD_RUSTFLAGS = |
||||
lib.concatStringsSep |
||||
" " |
||||
([] |
||||
# This disables PIE for static builds, which isn't great in terms of |
||||
# security. Unfortunately, my hand is forced because nixpkgs' |
||||
# `libstdc++.a` is built without `-fPIE`, which precludes us from |
||||
# leaving PIE enabled. |
||||
++ lib.optionals |
||||
stdenv.hostPlatform.isStatic |
||||
[ "-C" "relocation-model=static" ] |
||||
++ lib.optionals |
||||
(stdenv.buildPlatform.config != stdenv.hostPlatform.config) |
||||
[ "-l" "c" ] |
||||
++ lib.optionals |
||||
# This check has to match the one [here][0]. We only need to set |
||||
# these flags when using a different linker. Don't ask me why, though, |
||||
# because I don't know. All I know is it breaks otherwise. |
||||
# |
||||
# [0]: https://github.com/NixOS/nixpkgs/blob/5cdb38bb16c6d0a38779db14fcc766bc1b2394d6/pkgs/build-support/rust/lib/default.nix#L37-L40 |
||||
( |
||||
# Nixpkgs doesn't check for x86_64 here but we do, because I |
||||
# observed a failure building statically for x86_64 without |
||||
# including it here. Linkers are weird. |
||||
(stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isx86_64) |
||||
&& stdenv.hostPlatform.isStatic |
||||
&& !stdenv.isDarwin |
||||
&& !stdenv.cc.bintools.isLLVM |
||||
) |
||||
[ |
||||
"-l" |
||||
"stdc++" |
||||
"-L" |
||||
"${stdenv.cc.cc.lib}/${stdenv.hostPlatform.config}/lib" |
||||
] |
||||
); |
||||
" " |
||||
( |
||||
[] |
||||
# This disables PIE for static builds, which isn't great in terms of |
||||
# security. Unfortunately, my hand is forced because nixpkgs' |
||||
# `libstdc++.a` is built without `-fPIE`, which precludes us from |
||||
# leaving PIE enabled. |
||||
++ lib.optionals |
||||
stdenv.hostPlatform.isStatic |
||||
["-C" "relocation-model=static"] |
||||
++ lib.optionals |
||||
(stdenv.buildPlatform.config != stdenv.hostPlatform.config) |
||||
["-l" "c"] |
||||
++ lib.optionals |
||||
# This check has to match the one [here][0]. We only need to set |
||||
# these flags when using a different linker. Don't ask me why, though, |
||||
# because I don't know. All I know is it breaks otherwise. |
||||
# |
||||
# [0]: https://github.com/NixOS/nixpkgs/blob/5cdb38bb16c6d0a38779db14fcc766bc1b2394d6/pkgs/build-support/rust/lib/default.nix#L37-L40 |
||||
( |
||||
# Nixpkgs doesn't check for x86_64 here but we do, because I |
||||
# observed a failure building statically for x86_64 without |
||||
# including it here. Linkers are weird. |
||||
(stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isx86_64) |
||||
&& stdenv.hostPlatform.isStatic |
||||
&& !stdenv.isDarwin |
||||
&& !stdenv.cc.bintools.isLLVM |
||||
) |
||||
[ |
||||
"-l" |
||||
"stdc++" |
||||
"-L" |
||||
"${stdenv.cc.cc.lib}/${stdenv.hostPlatform.config}/lib" |
||||
] |
||||
); |
||||
} |
||||
|
||||
# What follows is stolen from [here][0]. Its purpose is to properly configure |
||||
# compilers and linkers for various stages of the build, and even covers the |
||||
# case of build scripts that need native code compiled and run on the build |
||||
# platform (I think). |
||||
# |
||||
# [0]: https://github.com/NixOS/nixpkgs/blob/5cdb38bb16c6d0a38779db14fcc766bc1b2394d6/pkgs/build-support/rust/lib/default.nix#L57-L80 |
||||
// |
||||
( |
||||
// ( |
||||
let |
||||
inherit (rust.lib) envVars; |
||||
in |
||||
lib.optionalAttrs |
||||
lib.optionalAttrs |
||||
(stdenv.targetPlatform.rust.rustcTarget |
||||
!= stdenv.hostPlatform.rust.rustcTarget) |
||||
( |
||||
let |
||||
inherit (stdenv.targetPlatform.rust) cargoEnvVarTarget; |
||||
in |
||||
{ |
||||
in { |
||||
"CC_${cargoEnvVarTarget}" = envVars.ccForTarget; |
||||
"CXX_${cargoEnvVarTarget}" = envVars.cxxForTarget; |
||||
"CARGO_TARGET_${cargoEnvVarTarget}_LINKER" = |
||||
envVars.linkerForTarget; |
||||
} |
||||
) |
||||
// |
||||
( |
||||
let |
||||
inherit (stdenv.hostPlatform.rust) cargoEnvVarTarget rustcTarget; |
||||
in |
||||
{ |
||||
"CC_${cargoEnvVarTarget}" = envVars.ccForHost; |
||||
"CXX_${cargoEnvVarTarget}" = envVars.cxxForHost; |
||||
"CARGO_TARGET_${cargoEnvVarTarget}_LINKER" = envVars.linkerForHost; |
||||
CARGO_BUILD_TARGET = rustcTarget; |
||||
} |
||||
) |
||||
// |
||||
( |
||||
let |
||||
inherit (stdenv.buildPlatform.rust) cargoEnvVarTarget; |
||||
in |
||||
{ |
||||
"CC_${cargoEnvVarTarget}" = envVars.ccForBuild; |
||||
"CXX_${cargoEnvVarTarget}" = envVars.cxxForBuild; |
||||
"CARGO_TARGET_${cargoEnvVarTarget}_LINKER" = envVars.linkerForBuild; |
||||
HOST_CC = "${pkgsBuildHost.stdenv.cc}/bin/cc"; |
||||
HOST_CXX = "${pkgsBuildHost.stdenv.cc}/bin/c++"; |
||||
} |
||||
) |
||||
// ( |
||||
let |
||||
inherit (stdenv.hostPlatform.rust) cargoEnvVarTarget rustcTarget; |
||||
in { |
||||
"CC_${cargoEnvVarTarget}" = envVars.ccForHost; |
||||
"CXX_${cargoEnvVarTarget}" = envVars.cxxForHost; |
||||
"CARGO_TARGET_${cargoEnvVarTarget}_LINKER" = envVars.linkerForHost; |
||||
CARGO_BUILD_TARGET = rustcTarget; |
||||
} |
||||
) |
||||
// ( |
||||
let |
||||
inherit (stdenv.buildPlatform.rust) cargoEnvVarTarget; |
||||
in { |
||||
"CC_${cargoEnvVarTarget}" = envVars.ccForBuild; |
||||
"CXX_${cargoEnvVarTarget}" = envVars.cxxForBuild; |
||||
"CARGO_TARGET_${cargoEnvVarTarget}_LINKER" = envVars.linkerForBuild; |
||||
HOST_CC = "${pkgsBuildHost.stdenv.cc}/bin/cc"; |
||||
HOST_CXX = "${pkgsBuildHost.stdenv.cc}/bin/c++"; |
||||
} |
||||
) |
||||
) |
||||
|
||||
@ -1,61 +1,69 @@
|
||||
# Keep sorted |
||||
{ cargo-deb |
||||
, default |
||||
, engage |
||||
, go |
||||
, inputs |
||||
, jq |
||||
, lychee |
||||
, mdbook |
||||
, mkShell |
||||
, olm |
||||
, system |
||||
, taplo |
||||
, toolchain |
||||
{ |
||||
alejandra, |
||||
cargo-deb, |
||||
default, |
||||
engage, |
||||
go, |
||||
inputs, |
||||
jq, |
||||
lychee, |
||||
mdbook, |
||||
mkShell, |
||||
olm, |
||||
system, |
||||
taplo, |
||||
toolchain, |
||||
}: |
||||
|
||||
mkShell { |
||||
env = default.env // { |
||||
# Rust Analyzer needs to be able to find the path to default crate |
||||
# sources, and it can read this environment variable to do so. The |
||||
# `rust-src` component is required in order for this to work. |
||||
RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library"; |
||||
}; |
||||
env = |
||||
default.env |
||||
// { |
||||
# Rust Analyzer needs to be able to find the path to default crate |
||||
# sources, and it can read this environment variable to do so. The |
||||
# `rust-src` component is required in order for this to work. |
||||
RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library"; |
||||
}; |
||||
|
||||
# Development tools |
||||
nativeBuildInputs = default.nativeBuildInputs ++ [ |
||||
# Always use nightly rustfmt because most of its options are unstable |
||||
# |
||||
# This needs to come before `toolchain` in this list, otherwise |
||||
# `$PATH` will have stable rustfmt instead. |
||||
inputs.fenix.packages.${system}.latest.rustfmt |
||||
nativeBuildInputs = |
||||
default.nativeBuildInputs |
||||
++ [ |
||||
# Always use nightly rustfmt because most of its options are unstable |
||||
# |
||||
# This needs to come before `toolchain` in this list, otherwise |
||||
# `$PATH` will have stable rustfmt instead. |
||||
inputs.fenix.packages.${system}.latest.rustfmt |
||||
|
||||
# rust itself |
||||
toolchain |
||||
|
||||
# rust itself |
||||
toolchain |
||||
# CI tests |
||||
engage |
||||
|
||||
# CI tests |
||||
engage |
||||
# format toml files |
||||
taplo |
||||
|
||||
# format toml files |
||||
taplo |
||||
# Needed for producing Debian packages |
||||
cargo-deb |
||||
|
||||
# Needed for producing Debian packages |
||||
cargo-deb |
||||
# Needed for our script for Complement |
||||
jq |
||||
|
||||
# Needed for our script for Complement |
||||
jq |
||||
# Needed for Complement |
||||
go |
||||
olm |
||||
|
||||
# Needed for Complement |
||||
go |
||||
olm |
||||
# Needed for our script for Complement |
||||
jq |
||||
|
||||
# Needed for our script for Complement |
||||
jq |
||||
# Needed for finding broken markdown links |
||||
lychee |
||||
|
||||
# Needed for finding broken markdown links |
||||
lychee |
||||
# Useful for editing the book locally |
||||
mdbook |
||||
|
||||
# Useful for editing the book locally |
||||
mdbook |
||||
]; |
||||
# nix formatter |
||||
alejandra |
||||
]; |
||||
} |
||||
|
||||
Loading…
Reference in new issue