Change-Id: I3e4c43690fcaf50965152bf40e1ca2b027010fcf Reviewed-on: https://cl.tvl.fyi/c/depot/+/9997 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
		
			
				
	
	
		
			203 lines
		
	
	
	
		
			5.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
	
		
			5.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { 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;
 | |
|   };
 | |
| }
 |