type per command, binding generation macros, nix package #4
					 2 changed files with 52 additions and 36 deletions
				
			
		| 
						 | 
					@ -3,22 +3,24 @@
 | 
				
			||||||
set -e
 | 
					set -e
 | 
				
			||||||
set -x
 | 
					set -x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD="nix build"
 | 
					BUILD="nix build -L"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$BUILD .#servicepoint-binding-c
 | 
					$BUILD .#servicepoint-binding-c -o result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$BUILD .#servicepoint-binding-c-stable-release
 | 
					$BUILD .#servicepoint-binding-c-stable-release -o result-stable-release
 | 
				
			||||||
$BUILD .#servicepoint-binding-c-stable-size
 | 
					$BUILD .#servicepoint-binding-c-stable-size -o result-stable-size
 | 
				
			||||||
$BUILD .#servicepoint-binding-c-nightly-release
 | 
					$BUILD .#servicepoint-binding-c-nightly-release -o result-nightly-release
 | 
				
			||||||
$BUILD .#servicepoint-binding-c-nightly-size
 | 
					$BUILD .#servicepoint-binding-c-nightly-size -o result-nightly-size
 | 
				
			||||||
 | 
					$BUILD .#servicepoint-binding-c-musl-stable-release -o result-musl-release
 | 
				
			||||||
 | 
					$BUILD .#servicepoint-binding-c-musl-stable-size -o result-musl-size
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$BUILD .#servicepoint-binding-c-musl-stable-release
 | 
					# do not work yet:
 | 
				
			||||||
$BUILD .#servicepoint-binding-c-musl-stable-size
 | 
					 | 
				
			||||||
# $BUILD .#servicepoint-binding-c-musl-nightly-release
 | 
					# $BUILD .#servicepoint-binding-c-musl-nightly-release
 | 
				
			||||||
# $BUILD .#servicepoint-binding-c-musl-nightly-size
 | 
					# $BUILD .#servicepoint-binding-c-musl-nightly-size
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$BUILD .#all-examples
 | 
					$BUILD .#all-examples -o result-examples
 | 
				
			||||||
$BUILD .#all-examples-size
 | 
					$BUILD .#all-examples-size -o result-examples-size
 | 
				
			||||||
$BUILD .#all-examples-musl
 | 
					$BUILD .#all-examples-nightly-size -o result-nightly-size
 | 
				
			||||||
$BUILD .#all-examples-musl-static
 | 
					$BUILD .#all-examples-musl -o result-examples-musl
 | 
				
			||||||
$BUILD .#all-examples-musl-static-size
 | 
					$BUILD .#all-examples-musl-static -o result-examples-musl-static
 | 
				
			||||||
 | 
					$BUILD .#all-examples-musl-static-size -o result-examples-musl-static-size
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										60
									
								
								packages.nix
									
										
									
									
									
								
							
							
						
						
									
										60
									
								
								packages.nix
									
										
									
									
									
								
							| 
						 | 
					@ -14,6 +14,7 @@ let
 | 
				
			||||||
      buildType ? "release",
 | 
					      buildType ? "release",
 | 
				
			||||||
      buildNoDefaultFeatures ? false,
 | 
					      buildNoDefaultFeatures ? false,
 | 
				
			||||||
      cargoBuildFlags ? [ ],
 | 
					      cargoBuildFlags ? [ ],
 | 
				
			||||||
 | 
					      nativeBuildInputs ? []
 | 
				
			||||||
    }:
 | 
					    }:
 | 
				
			||||||
    rustPlatform.buildRustPackage (finalAttrs: {
 | 
					    rustPlatform.buildRustPackage (finalAttrs: {
 | 
				
			||||||
      inherit version buildType cargoBuildFlags;
 | 
					      inherit version buildType cargoBuildFlags;
 | 
				
			||||||
| 
						 | 
					@ -38,7 +39,7 @@ let
 | 
				
			||||||
        license = lib.licenses.gpl3Plus;
 | 
					        license = lib.licenses.gpl3Plus;
 | 
				
			||||||
        pkgConfigModules = [ "servicepoint" ];
 | 
					        pkgConfigModules = [ "servicepoint" ];
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      nativeBuildInputs = [ pkgs.pkg-config ];
 | 
					      nativeBuildInputs = [ pkgs.pkg-config ] ++ nativeBuildInputs;
 | 
				
			||||||
      buildInputs = [ pkgs.xz ];
 | 
					      buildInputs = [ pkgs.xz ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      preBuild = ''
 | 
					      preBuild = ''
 | 
				
			||||||
| 
						 | 
					@ -119,24 +120,10 @@ let
 | 
				
			||||||
    "-Wl,--gc-sections"
 | 
					    "-Wl,--gc-sections"
 | 
				
			||||||
    "-Wl,--exclude-libs,ALL"
 | 
					    "-Wl,--exclude-libs,ALL"
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
  stable-size-args = {
 | 
					 | 
				
			||||||
    buildType = "size_optimized";
 | 
					 | 
				
			||||||
    buildNoDefaultFeatures = true;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  unstable-size-args = {
 | 
					 | 
				
			||||||
    cargoBuildFlags = ''-Zbuild-std="core,std,alloc,proc_macro,panic_abort" -Zbuild-std-features="panic_immediate_abort"'';
 | 
					 | 
				
			||||||
    # TODO: those override the nix flags
 | 
					 | 
				
			||||||
    # NIX_CFLAGS_COMPILE = builtins.toString ["-Oz" "-fwrapv" "-fomit-frame-pointer" "-fno-stack-protector" "-fno-unroll-loops" "-fno-unwind-tables" "-fno-asynchronous-unwind-tables" "-fmerge-all-constants" "-fvisibility=hidden" "-Bsymbolic" "-fno-ident" "-fno-exceptions" "-ffunction-sections" "-fdata-sections"];
 | 
					 | 
				
			||||||
    # NIX_CFLAGS_LINK = builtins.toString ["Wl,-z,norelro" "-Wl,--hash-style=gnu" "-Wl,--gc-sections" "-Wl,--exclude-libs,ALL"];
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  rustPlatform-stable = pkgs.rustPlatform;
 | 
					  rustPlatform-stable = pkgs.rustPlatform;
 | 
				
			||||||
  rustPlatform-nightly = pkgs.makeRustPlatform {
 | 
					  rustPlatform-nightly = pkgs.makeRustPlatform fenix.complete;
 | 
				
			||||||
    inherit (fenix.minimal) cargo rustc;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  rustPlatform-musl-stable = pkgs.pkgsMusl.rustPlatform;
 | 
					  rustPlatform-musl-stable = pkgs.pkgsMusl.rustPlatform;
 | 
				
			||||||
  rustPlatform-musl-nightly = pkgs.pkgsMusl.makeRustPlatform {
 | 
					  rustPlatform-musl-nightly = pkgs.pkgsMusl.makeRustPlatform fenix.complete;
 | 
				
			||||||
    inherit (fenix.minimal) cargo rustc;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  stable-release-args = {
 | 
					  stable-release-args = {
 | 
				
			||||||
    inherit pkgs;
 | 
					    inherit pkgs;
 | 
				
			||||||
    rustPlatform = rustPlatform-stable;
 | 
					    rustPlatform = rustPlatform-stable;
 | 
				
			||||||
| 
						 | 
					@ -153,6 +140,21 @@ let
 | 
				
			||||||
    pkgs = pkgs.pkgsMusl;
 | 
					    pkgs = pkgs.pkgsMusl;
 | 
				
			||||||
    rustPlatform = rustPlatform-musl-nightly;
 | 
					    rustPlatform = rustPlatform-musl-nightly;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					  stable-size-args = {
 | 
				
			||||||
 | 
					    buildType = "size_optimized";
 | 
				
			||||||
 | 
					    buildNoDefaultFeatures = true;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  nightly-size-args = {
 | 
				
			||||||
 | 
					    cargoBuildFlags = [
 | 
				
			||||||
 | 
					      "-Zbuild-std=core,std,alloc,proc_macro,panic_abort"
 | 
				
			||||||
 | 
					      "-Zbuild-std-features=panic_immediate_abort"
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					    # TODO: remove hard-coded target
 | 
				
			||||||
 | 
					    nativeBuildInputs = [fenix.targets."x86_64-unknown-linux-gnu".latest.rust-std];
 | 
				
			||||||
 | 
					    # TODO: those override the nix flags
 | 
				
			||||||
 | 
					    # NIX_CFLAGS_COMPILE = builtins.toString ["-Oz" "-fwrapv" "-fomit-frame-pointer" "-fno-stack-protector" "-fno-unroll-loops" "-fno-unwind-tables" "-fno-asynchronous-unwind-tables" "-fmerge-all-constants" "-fvisibility=hidden" "-Bsymbolic" "-fno-ident" "-fno-exceptions" "-ffunction-sections" "-fdata-sections"];
 | 
				
			||||||
 | 
					    # NIX_CFLAGS_LINK = builtins.toString ["Wl,-z,norelro" "-Wl,--hash-style=gnu" "-Wl,--gc-sections" "-Wl,--exclude-libs,ALL"];
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
in
 | 
					in
 | 
				
			||||||
rec {
 | 
					rec {
 | 
				
			||||||
  servicepoint-binding-c-stable-release = mkServicepoint stable-release-args;
 | 
					  servicepoint-binding-c-stable-release = mkServicepoint stable-release-args;
 | 
				
			||||||
| 
						 | 
					@ -162,13 +164,13 @@ rec {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  servicepoint-binding-c-stable-size = mkServicepoint (stable-release-args // stable-size-args);
 | 
					  servicepoint-binding-c-stable-size = mkServicepoint (stable-release-args // stable-size-args);
 | 
				
			||||||
  servicepoint-binding-c-nightly-size = mkServicepoint (
 | 
					  servicepoint-binding-c-nightly-size = mkServicepoint (
 | 
				
			||||||
    nightly-release-args // stable-size-args // unstable-size-args
 | 
					    nightly-release-args // stable-size-args // nightly-size-args
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
  servicepoint-binding-c-musl-stable-size = mkServicepoint (
 | 
					  servicepoint-binding-c-musl-stable-size = mkServicepoint (
 | 
				
			||||||
    musl-stable-release-args // stable-size-args
 | 
					    musl-stable-release-args // stable-size-args
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
  servicepoint-binding-c-musl-nightly-size = mkServicepoint (
 | 
					  servicepoint-binding-c-musl-nightly-size = mkServicepoint (
 | 
				
			||||||
    musl-nightly-release-args // stable-size-args // unstable-size-args
 | 
					    musl-nightly-release-args // stable-size-args // nightly-size-args
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # default variants
 | 
					  # default variants
 | 
				
			||||||
| 
						 | 
					@ -177,6 +179,7 @@ rec {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  all-examples = mkAllExamples "";
 | 
					  all-examples = mkAllExamples "";
 | 
				
			||||||
  all-examples-size = mkAllExamples "-size";
 | 
					  all-examples-size = mkAllExamples "-size";
 | 
				
			||||||
 | 
					  all-examples-nightly-size = mkAllExamples "-nightly-size";
 | 
				
			||||||
  # TODO: musl targets do not work on darwin
 | 
					  # TODO: musl targets do not work on darwin
 | 
				
			||||||
  all-examples-musl = mkAllExamples "-musl";
 | 
					  all-examples-musl = mkAllExamples "-musl";
 | 
				
			||||||
  all-examples-musl-static = mkAllExamples "-musl-static";
 | 
					  all-examples-musl-static = mkAllExamples "-musl-static";
 | 
				
			||||||
| 
						 | 
					@ -190,8 +193,19 @@ rec {
 | 
				
			||||||
    servicepointBinding = selfPkgs.servicepoint-binding-c;
 | 
					    servicepointBinding = selfPkgs.servicepoint-binding-c;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
))
 | 
					))
 | 
				
			||||||
# construct another pakage per example, but optimized for size with unstable rust
 | 
					# construct another pakage per example, but optimized for size with stable rust
 | 
				
			||||||
// (lib.mapAttrs' (name: value: lib.nameValuePair ("${name}-size") value) (
 | 
					// (lib.mapAttrs' (name: value: lib.nameValuePair ("${name}-size") value) (
 | 
				
			||||||
 | 
					  lib.genAttrs examples (
 | 
				
			||||||
 | 
					    name:
 | 
				
			||||||
 | 
					    mkExample {
 | 
				
			||||||
 | 
					      inherit name pkgs;
 | 
				
			||||||
 | 
					      servicepointBinding = selfPkgs.servicepoint-binding-c-stable-size;
 | 
				
			||||||
 | 
					      EXTRA_CFLAGS = builtins.toString size-cflags;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					# construct another pakage per example, but optimized for size with unstable rust
 | 
				
			||||||
 | 
					// (lib.mapAttrs' (name: value: lib.nameValuePair ("${name}-unstable-size") value) (
 | 
				
			||||||
  lib.genAttrs examples (
 | 
					  lib.genAttrs examples (
 | 
				
			||||||
    name:
 | 
					    name:
 | 
				
			||||||
    mkExample {
 | 
					    mkExample {
 | 
				
			||||||
| 
						 | 
					@ -208,7 +222,7 @@ rec {
 | 
				
			||||||
    mkExample {
 | 
					    mkExample {
 | 
				
			||||||
      inherit name;
 | 
					      inherit name;
 | 
				
			||||||
      pkgs = pkgs.pkgsMusl;
 | 
					      pkgs = pkgs.pkgsMusl;
 | 
				
			||||||
      servicepointBinding = selfPkgs.servicepoint-binding-c-musl;
 | 
					      servicepointBinding = selfPkgs.servicepoint-binding-c-musl-stable-release;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
))
 | 
					))
 | 
				
			||||||
| 
						 | 
					@ -219,7 +233,7 @@ rec {
 | 
				
			||||||
    mkExample {
 | 
					    mkExample {
 | 
				
			||||||
      inherit name;
 | 
					      inherit name;
 | 
				
			||||||
      pkgs = pkgs.pkgsMusl;
 | 
					      pkgs = pkgs.pkgsMusl;
 | 
				
			||||||
      servicepointBinding = selfPkgs.servicepoint-binding-c-musl;
 | 
					      servicepointBinding = selfPkgs.servicepoint-binding-c-musl-stable-release;
 | 
				
			||||||
      static = true;
 | 
					      static = true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
| 
						 | 
					@ -231,7 +245,7 @@ rec {
 | 
				
			||||||
    mkExample {
 | 
					    mkExample {
 | 
				
			||||||
      inherit name;
 | 
					      inherit name;
 | 
				
			||||||
      pkgs = pkgs.pkgsMusl;
 | 
					      pkgs = pkgs.pkgsMusl;
 | 
				
			||||||
      servicepointBinding = selfPkgs.servicepoint-binding-c-musl;
 | 
					      servicepointBinding = selfPkgs.servicepoint-binding-c-musl-stable-size;
 | 
				
			||||||
      static = true;
 | 
					      static = true;
 | 
				
			||||||
      EXTRA_CFLAGS = builtins.toString size-cflags;
 | 
					      EXTRA_CFLAGS = builtins.toString size-cflags;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue