diff options
Diffstat (limited to 'third_party/overlays/clickhouse/default.nix')
-rw-r--r-- | third_party/overlays/clickhouse/default.nix | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/third_party/overlays/clickhouse/default.nix b/third_party/overlays/clickhouse/default.nix new file mode 100644 index 000000000000..978a115f5c3d --- /dev/null +++ b/third_party/overlays/clickhouse/default.nix @@ -0,0 +1,203 @@ +{ lib +, llvmPackages +, fetchFromGitHub +, fetchpatch +, cmake +, ninja +, python3 +, perl +, nasm +, yasm +, nixosTests +, darwin +, findutils + + # currently for BLAKE3 hash function +, rustSupport ? true + +, corrosion +, rustc +, cargo +, rustPlatform +}: + +let + inherit (llvmPackages) stdenv; + mkDerivation = ( + if stdenv.isDarwin + then darwin.apple_sdk_11_0.llvmPackages_16.stdenv + else llvmPackages.stdenv + ).mkDerivation; +in +mkDerivation rec { + pname = "clickhouse"; + version = "23.10.3.5"; + + src = fetchFromGitHub rec { + owner = "ClickHouse"; + repo = "ClickHouse"; + rev = "v${version}-stable"; + fetchSubmodules = true; + name = "clickhouse-${rev}.tar.gz"; + hash = "sha256-H3nIhBydLBxSesGrvqmwHmBoQGCGQlWgVVUudKLLkIY="; + postFetch = '' + # delete files that make the source too big + rm -rf $out/contrib/llvm-project/llvm/test + rm -rf $out/contrib/llvm-project/clang/test + rm -rf $out/contrib/croaring/benchmarks + + # fix case insensitivity on macos https://github.com/NixOS/nixpkgs/issues/39308 + rm -rf $out/contrib/sysroot/linux-* + rm -rf $out/contrib/liburing/man + + # compress to not exceed the 2GB output limit + # try to make a deterministic tarball + tar -I 'gzip -n' \ + --sort=name \ + --mtime=1970-01-01 \ + --owner=0 --group=0 \ + --numeric-owner --mode=go=rX,u+rw,a-s \ + --transform='s@^@source/@S' \ + -cf temp -C "$out" . + rm -r "$out" + mv temp "$out" + ''; + }; + + strictDeps = true; + nativeBuildInputs = [ + cmake + ninja + python3 + perl + llvmPackages.lld + ] ++ lib.optionals stdenv.isx86_64 [ + nasm + yasm + ] ++ lib.optionals stdenv.isDarwin [ + llvmPackages.bintools + findutils + darwin.bootstrap_cmds + ] ++ lib.optionals rustSupport [ + rustc + cargo + rustPlatform.cargoSetupHook + ]; + + # their vendored version is too old and missing this patch: https://github.com/corrosion-rs/corrosion/pull/205 + corrosionSrc = + if rustSupport then + fetchFromGitHub + { + owner = "corrosion-rs"; + repo = "corrosion"; + rev = "v0.3.5"; + hash = "sha256-r/jrck4RiQynH1+Hx4GyIHpw/Kkr8dHe1+vTHg+fdRs="; + } else null; + corrosionDeps = + if rustSupport then + rustPlatform.fetchCargoTarball + { + src = corrosionSrc; + name = "corrosion-deps"; + preBuild = "cd generator"; + hash = "sha256-dhUgpwSjE9NZ2mCkhGiydI51LIOClA5wwk1O3mnnbM8="; + } else null; + rustDeps = + if rustSupport then + rustPlatform.fetchCargoTarball + { + inherit src; + name = "rust-deps"; + preBuild = "cd rust"; + hash = "sha256-fWDAGm19b7uZv8aBdBoieY5c6POd8IxFXbGdtONpZbw="; + } else null; + + dontCargoSetupPostUnpack = true; + postUnpack = lib.optionalString rustSupport '' + pushd source + + rm -rf contrib/corrosion + cp -r --no-preserve=mode $corrosionSrc contrib/corrosion + + pushd contrib/corrosion/generator + cargoDeps="$corrosionDeps" cargoSetupPostUnpackHook + corrosionDepsCopy="$cargoDepsCopy" + popd + + pushd rust + cargoDeps="$rustDeps" cargoSetupPostUnpackHook + rustDepsCopy="$cargoDepsCopy" + cat .cargo/config >> .cargo/config.toml.in + cat .cargo/config >> skim/.cargo/config.toml.in + rm .cargo/config + popd + + popd + ''; + + postPatch = '' + patchShebangs src/ + + substituteInPlace src/Storages/System/StorageSystemLicenses.sh \ + --replace 'git rev-parse --show-toplevel' '$src' + substituteInPlace utils/check-style/check-duplicate-includes.sh \ + --replace 'git rev-parse --show-toplevel' '$src' + substituteInPlace utils/check-style/check-ungrouped-includes.sh \ + --replace 'git rev-parse --show-toplevel' '$src' + substituteInPlace utils/list-licenses/list-licenses.sh \ + --replace 'git rev-parse --show-toplevel' '$src' + substituteInPlace utils/check-style/check-style \ + --replace 'git rev-parse --show-toplevel' '$src' + '' + lib.optionalString stdenv.isDarwin '' + sed -i 's|gfind|find|' cmake/tools.cmake + sed -i 's|ggrep|grep|' cmake/tools.cmake + '' + lib.optionalString rustSupport '' + + pushd contrib/corrosion/generator + cargoDepsCopy="$corrosionDepsCopy" cargoSetupPostPatchHook + popd + + pushd rust + cargoDepsCopy="$rustDepsCopy" cargoSetupPostPatchHook + popd + + cargoSetupPostPatchHook() { true; } + ''; + + cmakeFlags = [ + "-DENABLE_TESTS=OFF" + "-DCOMPILER_CACHE=disabled" + "-DENABLE_EMBEDDED_COMPILER=ON" + ]; + + # https://github.com/ClickHouse/ClickHouse/issues/49988 + hardeningDisable = [ "fortify" ]; + + postInstall = '' + rm -rf $out/share/clickhouse-test + + sed -i -e '\!<log>/var/log/clickhouse-server/clickhouse-server\.log</log>!d' \ + $out/etc/clickhouse-server/config.xml + substituteInPlace $out/etc/clickhouse-server/config.xml \ + --replace "<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>" "<console>1</console>" + substituteInPlace $out/etc/clickhouse-server/config.xml \ + --replace "<level>trace</level>" "<level>warning</level>" + ''; + + # Builds in 7+h with 2 cores, and ~20m with a big-parallel builder. + requiredSystemFeatures = [ "big-parallel" ]; + + passthru.tests.clickhouse = nixosTests.clickhouse; + + meta = with lib; { + homepage = "https://clickhouse.com"; + description = "Column-oriented database management system"; + license = licenses.asl20; + maintainers = with maintainers; [ orivej ]; + + # not supposed to work on 32-bit https://github.com/ClickHouse/ClickHouse/pull/23959#issuecomment-835343685 + platforms = lib.filter (x: (lib.systems.elaborate x).is64bit) (platforms.linux ++ platforms.darwin); + broken = stdenv.buildPlatform != stdenv.hostPlatform; + }; +} |