refactor(3p/nix): Build nix-daemon as a separate binary
Skips over all the monobinary stuff and moves to a separate binary for nix-daemon. This also replaces the flag parsing logic with absl::flags. This causes a behaviour change for --help, which no longer tries to display a man page but instead shows the actual command-line help. Note: This binary no longer links to the Boehm GC. Change-Id: Ib852e994b82f2d56e91262878c10650e656427a9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1622 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
This commit is contained in:
parent
229c1ed820
commit
1f12544179
4 changed files with 44 additions and 32 deletions
1
third_party/nix/default.nix
vendored
1
third_party/nix/default.nix
vendored
|
@ -121,7 +121,6 @@ in lib.fix (self: pkgs.llvmPackages.libcxxStdenv.mkDerivation {
|
||||||
ln -s $out/bin/nix $out/bin/nix-channel
|
ln -s $out/bin/nix $out/bin/nix-channel
|
||||||
ln -s $out/bin/nix $out/bin/nix-collect-garbage
|
ln -s $out/bin/nix $out/bin/nix-collect-garbage
|
||||||
ln -s $out/bin/nix $out/bin/nix-copy-closure
|
ln -s $out/bin/nix $out/bin/nix-copy-closure
|
||||||
ln -s $out/bin/nix $out/bin/nix-daemon
|
|
||||||
ln -s $out/bin/nix $out/bin/nix-env
|
ln -s $out/bin/nix $out/bin/nix-env
|
||||||
ln -s $out/bin/nix $out/bin/nix-hash
|
ln -s $out/bin/nix $out/bin/nix-hash
|
||||||
ln -s $out/bin/nix $out/bin/nix-instantiate
|
ln -s $out/bin/nix $out/bin/nix-instantiate
|
||||||
|
|
3
third_party/nix/src/CMakeLists.txt
vendored
3
third_party/nix/src/CMakeLists.txt
vendored
|
@ -10,6 +10,7 @@ add_subdirectory(libutil)
|
||||||
add_subdirectory(libstore)
|
add_subdirectory(libstore)
|
||||||
add_subdirectory(libmain)
|
add_subdirectory(libmain)
|
||||||
add_subdirectory(libexpr)
|
add_subdirectory(libexpr)
|
||||||
|
add_subdirectory(nix-daemon)
|
||||||
|
|
||||||
if (PACKAGE_TESTS)
|
if (PACKAGE_TESTS)
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
|
@ -61,8 +62,6 @@ target_sources(nix
|
||||||
nix-channel/nix-channel.cc
|
nix-channel/nix-channel.cc
|
||||||
nix-collect-garbage/nix-collect-garbage.cc
|
nix-collect-garbage/nix-collect-garbage.cc
|
||||||
nix-copy-closure/nix-copy-closure.cc
|
nix-copy-closure/nix-copy-closure.cc
|
||||||
nix-daemon/nix-daemon-proto.cc
|
|
||||||
nix-daemon/nix-daemon-main.cc
|
|
||||||
nix-env/nix-env.cc
|
nix-env/nix-env.cc
|
||||||
nix-env/user-env.cc
|
nix-env/user-env.cc
|
||||||
nix-instantiate/nix-instantiate.cc
|
nix-instantiate/nix-instantiate.cc
|
||||||
|
|
26
third_party/nix/src/nix-daemon/CMakeLists.txt
vendored
Normal file
26
third_party/nix/src/nix-daemon/CMakeLists.txt
vendored
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# -*- mode: cmake; -*-
|
||||||
|
|
||||||
|
# The nix-daemon is the binary running the gRPC server component to
|
||||||
|
# which other components of Nix talk to perform store and builder
|
||||||
|
# operations.
|
||||||
|
|
||||||
|
add_executable(nix-daemon)
|
||||||
|
include_directories(${PROJECT_BINARY_DIR}) # for config.h
|
||||||
|
set_property(TARGET nix-daemon PROPERTY CXX_STANDARD 17)
|
||||||
|
|
||||||
|
target_sources(nix-daemon
|
||||||
|
PRIVATE
|
||||||
|
nix-daemon-proto.hh
|
||||||
|
nix-daemon-proto.cc
|
||||||
|
nix-daemon.cc
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(nix-daemon
|
||||||
|
nixutil
|
||||||
|
nixstore
|
||||||
|
nixmain
|
||||||
|
absl::flags
|
||||||
|
absl::flags_parse
|
||||||
|
)
|
||||||
|
|
||||||
|
install(TARGETS nix-daemon DESTINATION bin)
|
|
@ -1,5 +1,8 @@
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
|
||||||
|
#include <absl/flags/flag.h>
|
||||||
|
#include <absl/flags/parse.h>
|
||||||
|
#include <absl/flags/usage_config.h>
|
||||||
#include <absl/strings/str_format.h>
|
#include <absl/strings/str_format.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
@ -9,7 +12,7 @@
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
|
|
||||||
#include "libmain/shared.hh"
|
#include "libmain/shared.hh" // TODO(tazjin): can this be removed?
|
||||||
#include "libstore/globals.hh"
|
#include "libstore/globals.hh"
|
||||||
#include "libstore/store-api.hh"
|
#include "libstore/store-api.hh"
|
||||||
#include "libutil/util.hh"
|
#include "libutil/util.hh"
|
||||||
|
@ -17,6 +20,8 @@
|
||||||
#include "nix-daemon/nix-daemon-proto.hh"
|
#include "nix-daemon/nix-daemon-proto.hh"
|
||||||
#include "nix/legacy.hh"
|
#include "nix/legacy.hh"
|
||||||
|
|
||||||
|
ABSL_FLAG(bool, pipe, false, "Use pipes for daemon communication");
|
||||||
|
|
||||||
namespace nix::daemon {
|
namespace nix::daemon {
|
||||||
|
|
||||||
using grpc::Server;
|
using grpc::Server;
|
||||||
|
@ -105,39 +110,22 @@ int RunServer() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int main_(int argc, char** argv) {
|
} // namespace nix::daemon
|
||||||
auto pipe = false;
|
|
||||||
|
|
||||||
// TODO(grfn): Replace with absl::flags
|
int main(int argc, char** argv) {
|
||||||
parseCmdLine(argc, argv,
|
absl::SetFlagsUsageConfig({.version_string = [] { return nix::nixVersion; }});
|
||||||
[&](Strings::iterator& arg, const Strings::iterator& end) {
|
absl::ParseCommandLine(argc, argv);
|
||||||
if (*arg == "--help") {
|
|
||||||
showManPage("nix-daemon");
|
|
||||||
} else if (*arg == "--version") {
|
|
||||||
printVersion("nix-daemon");
|
|
||||||
} else if (*arg == "--pipe") {
|
|
||||||
// Causes the daemon to forward stdin and stdout to and from
|
|
||||||
// the actual daemon socket
|
|
||||||
pipe = true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (pipe) {
|
if (absl::GetFlag(FLAGS_pipe)) {
|
||||||
if (getStoreType() == tDaemon) {
|
if (nix::getStoreType() == nix::tDaemon) {
|
||||||
return ForwardToSocket(settings.nixDaemonSocketFile);
|
return nix::daemon::ForwardToSocket(nix::settings.nixDaemonSocketFile);
|
||||||
} else {
|
} else {
|
||||||
// TODO(grfn): Need to launch a server on stdin here - upstream calls
|
// TODO(grfn): Need to launch a server on stdin here - upstream calls
|
||||||
// processConnection(true, "root", 0);
|
// processConnection(true, "root", 0);
|
||||||
throw "Not implemented";
|
LOG(ERROR) << "not implemented";
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return RunServer();
|
|
||||||
|
return nix::daemon::RunServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(grfn): Replace this with something less magical
|
|
||||||
static RegisterLegacyCommand s1("nix-daemon", main_);
|
|
||||||
|
|
||||||
} // namespace nix::daemon
|
|
Loading…
Reference in a new issue