Skip to content

Commit

Permalink
Merge pull request #5472 from systeminit/fnichol/si-fs-nix-build
Browse files Browse the repository at this point in the history
build(nix): create si-fs-standalone Nix pkg for a Nix-free binary
  • Loading branch information
fnichol authored Feb 13, 2025
2 parents 29baab8 + 74e5de8 commit 63067d9
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 15 deletions.
2 changes: 0 additions & 2 deletions bin/si-fs/BUCK
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
load(
"@prelude-si//:macros.bzl",
"docker_image",
"nix_omnibus_pkg",
"rust_binary",
)

Expand Down
80 changes: 67 additions & 13 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
};

outputs = {
self,
nixpkgs,
flake-utils,
rust-overlay,
Expand Down Expand Up @@ -109,18 +108,60 @@
flyctl
azure-cli
govc
(pkgs.python3.withPackages (p: with p; [
cfn-lint
]))
(pkgs.python3.withPackages (p:
with p; [
cfn-lint
]))
deno
];

standaloneBinaryDerivation = {
pkgName,
fromPkg,
bin ? pkgs.lib.strings.removeSuffix "-standalone" pkgName,
}:
pkgs.stdenv.mkDerivation {
name = pkgName;
__impure = true;
src = ./.;
buildInputs = [fromPkg];
installPhase = ''
install -Dv "${fromPkg}/bin/${bin}" "$out/bin/${bin}"
'';
postFixup =
""
+ pkgs.lib.optionalString (pkgs.stdenv.isDarwin) ''
nix_lib="$(otool -L "$out/bin/$name" \
| grep libiconv.dylib \
| awk '{print $1}'
)"
install_name_tool \
-change \
"$nix_lib" \
/usr/lib/libiconv.2.dylib \
"$out/bin/$name" \
2>/dev/null
''
+ pkgs.lib.optionalString (pkgs.stdenv.isLinux) ''
patchelf \
--set-interpreter "${systemInterpreter}" \
--remove-rpath \
"$out/bin/${bin}"
'';
dontPatchELF = true;
dontAutoPatchELF = true;
};

buck2Derivation = {
pathPrefix,
pkgName,
extraBuildInputs ? [],
stdBuildPhase ? ''
buck2 build @//mode/release "$buck2_target" --verbose 8 --out "build/$name-$system"
buck2 build \
@//mode/release \
"$buck2_target" \
--verbose 8 \
--out "build/$name-$system"
'',
extraBuildPhase ? "",
installPhase,
Expand All @@ -129,7 +170,7 @@
dontAutoPatchELF ? false,
postFixup ? "",
}:
pkgs.stdenv.mkDerivation rec {
pkgs.stdenv.mkDerivation {
name = pkgName;
buck2_target = "//${pathPrefix}/${pkgName}";
__impure = true;
Expand All @@ -156,7 +197,8 @@
'';
configurePhase = ''
export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
export BINDGEN_EXTRA_CLANG_ARGS="$(< ${pkgs.stdenv.cc}/nix-support/libc-crt1-cflags) \
export BINDGEN_EXTRA_CLANG_ARGS="\
$(< ${pkgs.stdenv.cc}/nix-support/libc-crt1-cflags) \
$(< ${pkgs.stdenv.cc}/nix-support/libc-cflags) \
$(< ${pkgs.stdenv.cc}/nix-support/cc-cflags) \
$(< ${pkgs.stdenv.cc}/nix-support/libcxx-cxxflags) \
Expand Down Expand Up @@ -258,14 +300,18 @@
# is where we expect it. This gets droppped into the rootfs as
# /lib64/ld-linux-x86-64.so.2 -> /nix/store/*/ld-linux-x86-64.20.2
mkdir -p $out/lib64
ln -sf ${pkgs.glibc}/lib/ld-linux-x86-64.so.2 $out/lib64/ld-linux-x86-64.so.2
ln -sf ${pkgs.glibc}/lib/ld-linux-aarch64.so.1 $out/lib64/ld-linux-aarch64.so.1
ln -sf \
"${pkgs.glibc}/lib/ld-linux-x86-64.so.2" \
"$out/lib64/ld-linux-x86-64.so.2"
ln -sf \
"${pkgs.glibc}/lib/ld-linux-aarch64.so.1" \
"$out/lib64/ld-linux-aarch64.so.1"
wrapProgram $out/bin/lang-js \
--set LD_LIBRARY_PATH "${pkgs.lib.makeLibraryPath [
pkgs.glibc
pkgs.gcc-unwrapped.lib
]}" \
pkgs.glibc
pkgs.gcc-unwrapped.lib
]}" \
--set DENO_DIR "$out/cache" \
--prefix PATH : ${pkgs.lib.makeBinPath langJsExtraPkgs} \
--run 'cd "$(dirname "$0")"'
Expand All @@ -284,6 +330,13 @@

sdf = binDerivation {pkgName = "sdf";};

si-fs = binDerivation {pkgName = "si-fs";};

si-fs-standalone = standaloneBinaryDerivation {
pkgName = "si-fs-standalone";
fromPkg = packages.si-fs;
};

veritech = binDerivation {pkgName = "veritech";};

web = appDerivation rec {
Expand Down Expand Up @@ -312,7 +365,8 @@
# Env Vars so bindgen can find libclang
shellHook = ''
export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
export BINDGEN_EXTRA_CLANG_ARGS="$(< ${pkgs.stdenv.cc}/nix-support/libc-crt1-cflags) \
export BINDGEN_EXTRA_CLANG_ARGS="\
$(< ${pkgs.stdenv.cc}/nix-support/libc-crt1-cflags) \
$(< ${pkgs.stdenv.cc}/nix-support/libc-cflags) \
$(< ${pkgs.stdenv.cc}/nix-support/cc-cflags) \
$(< ${pkgs.stdenv.cc}/nix-support/libcxx-cxxflags) \
Expand Down

0 comments on commit 63067d9

Please sign in to comment.