about summary refs log tree commit diff
path: root/third_party/nix/default.nix
blob: 049d48e89affe3e17cdb7e8576418d6f0debbedb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
{ pkgs ? (import <nixpkgs> {}).third_party, ... }:

let
  stdenv = with pkgs; overrideCC clangStdenv clang_10;

  aws-s3-cpp = pkgs.aws-sdk-cpp.override {
    apis = ["s3" "transfer"];
    customMemoryManagement = false;
  };

 # TODO(tazjin): this is copied from the original derivation, but what
 # is it for?
  largeBoehm = pkgs.boehmgc.override {
    enableLargeConfig = true;
  };
in stdenv.mkDerivation {
  pname = "tazjix";
  version = "2.3.4";
  src = ./.;

  # Abseil's sources need to be linked into a subproject.
  postUnpack = ''
    ln -fs ${pkgs.abseil_cpp.src} nix/subprojects/abseil_cpp
  '';

  nativeBuildInputs = with pkgs; [
    bison
    clang-tools
    cmake
    meson
    ninja
    pkgconfig
    libxml2
    libxslt
    (import ./clangd.nix pkgs)
  ];

 # TODO(tazjin): Some of these might only be required for native inputs
  buildInputs = with pkgs; [
    # TODO(tazjin): Figure out why meson can't make the Abseil headers visible
    abseil_cpp
    aws-s3-cpp
    boost
    brotli
    bzip2
    curl
    editline
    flex
    glog
    largeBoehm
    libseccomp
    libsodium
    openssl
    sqlite
    xz
  ];

  mesonBuildType = "release";

  mesonFlags = [
    "-Dsandbox_shell=${pkgs.busybox-sandbox-shell}/bin/busybox"
  ];

  # cmake is only included to build Abseil and its hook should not run
  dontUseCmakeConfigure = true;

  # Install the various symlinks to the Nix binary which users expect
  # to exist.
  postInstall = ''
    ln -s $out/bin/nix $out/bin/nix-build
    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-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-hash
    ln -s $out/bin/nix $out/bin/nix-instantiate
    ln -s $out/bin/nix $out/bin/nix-prefetch-url
    ln -s $out/bin/nix $out/bin/nix-shell
    ln -s $out/bin/nix $out/bin/nix-store

    mkdir -p $out/libexec/nix
    ln -s $out/bin/nix $out/libexec/nix/build-remote
  '';

  # TODO(tazjin): integration test setup?
  # TODO(tazjin): docs generation?
}