about summary refs log tree commit diff
path: root/overrides/buildGo/default.nix
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2019-12-20T20·18+0000
committerVincent Ambo <tazjin@google.com>2019-12-20T20·18+0000
commit03bfe08e1dd9faf48b06cb146bfa446575cde88a (patch)
tree55317968922a9b2a01516f1b79527874df037517 /overrides/buildGo/default.nix
parente52eed3cd4f73779c2e7c350537fb346835ba9f3 (diff)
chore: Significantly restructure folder layout r/237
This moves the various projects from "type-based" folders (such as
"services" or "tools") into more appropriate semantic folders (such as
"nix", "ops" or "web").

Deprecated projects (nixcon-demo & gotest) which only existed for
testing/demonstration purposes have been removed.

(Note: *all* builds are broken with this commit)
Diffstat (limited to 'overrides/buildGo/default.nix')
-rw-r--r--overrides/buildGo/default.nix128
1 files changed, 0 insertions, 128 deletions
diff --git a/overrides/buildGo/default.nix b/overrides/buildGo/default.nix
deleted file mode 100644
index 140cbf2d9d16..000000000000
--- a/overrides/buildGo/default.nix
+++ /dev/null
@@ -1,128 +0,0 @@
-# Copyright 2019 Google LLC.
-# SPDX-License-Identifier: Apache-2.0
-#
-# buildGo provides Nix functions to build Go packages in the style of Bazel's
-# rules_go.
-
-{ pkgs ? import <nixpkgs> {}
-, ... }:
-
-let
-  inherit (builtins)
-    attrNames
-    baseNameOf
-    dirOf
-    elemAt
-    filter
-    listToAttrs
-    map
-    match
-    readDir
-    replaceStrings
-    toString;
-
-  inherit (pkgs) lib go runCommand fetchFromGitHub protobuf symlinkJoin;
-
-  # Helpers for low-level Go compiler invocations
-  spaceOut = lib.concatStringsSep " ";
-
-  includeDepSrc = dep: "-I ${dep}";
-  includeSources = deps: spaceOut (map includeDepSrc deps);
-
-  includeDepLib = dep: "-L ${dep}";
-  includeLibs = deps: spaceOut (map includeDepLib deps);
-
-  srcBasename = src: elemAt (match "([a-z0-9]{32}\-)?(.*\.go)" (baseNameOf src)) 1;
-  srcCopy = path: src: "cp ${src} $out/${path}/${srcBasename src}";
-  srcList = path: srcs: lib.concatStringsSep "\n" (map (srcCopy path) srcs);
-
-  allDeps = deps: lib.unique (lib.flatten (deps ++ (map (d: d.goDeps) deps)));
-
-  xFlags = x_defs: spaceOut (map (k: "-X ${k}=${x_defs."${k}"}") (attrNames x_defs));
-
-  pathToName = p: replaceStrings ["/"] ["_"] (toString p);
-
-  # Add an `overrideGo` attribute to a function result that works
-  # similar to `overrideAttrs`, but is used specifically for the
-  # arguments passed to Go builders.
-  makeOverridable = f: orig: (f orig) // {
-    overrideGo = new: makeOverridable f (orig // (new orig));
-  };
-
-  # High-level build functions
-
-  # Build a Go program out of the specified files and dependencies.
-  program = { name, srcs, deps ? [], x_defs ? {} }:
-  let uniqueDeps = allDeps deps;
-  in runCommand name {} ''
-    ${go}/bin/go tool compile -o ${name}.a -trimpath=$PWD -trimpath=${go} ${includeSources uniqueDeps} ${spaceOut srcs}
-    mkdir -p $out/bin
-    ${go}/bin/go tool link -o $out/bin/${name} -buildid nix ${xFlags x_defs} ${includeLibs uniqueDeps} ${name}.a
-  '';
-
-  # Build a Go library assembled out of the specified files.
-  #
-  # This outputs both the sources and compiled binary, as both are
-  # needed when downstream packages depend on it.
-  package = { name, srcs, deps ? [], path ? name, sfiles ? [] }:
-  let
-    uniqueDeps = allDeps deps;
-
-    # The build steps below need to be executed conditionally for Go
-    # assembly if the analyser detected any *.s files.
-    #
-    # This is required for several popular packages (e.g. x/sys).
-    ifAsm = do: if sfiles == [] then "" else do;
-    asmBuild = ifAsm ''
-      ${go}/bin/go tool asm -trimpath $PWD -I $PWD -I ${go}/share/go/pkg/include -D GOOS_linux -D GOARCH_amd64 -gensymabis -o ./symabis ${spaceOut sfiles}
-      ${go}/bin/go tool asm -trimpath $PWD -I $PWD -I ${go}/share/go/pkg/include -D GOOS_linux -D GOARCH_amd64 -o ./asm.o ${spaceOut sfiles}
-    '';
-    asmLink = ifAsm "-symabis ./symabis -asmhdr $out/go_asm.h";
-    asmPack = ifAsm ''
-      ${go}/bin/go tool pack r $out/${path}.a ./asm.o
-    '';
-  in (runCommand "golib-${name}" {} ''
-    mkdir -p $out/${path}
-    ${srcList path (map (s: "${s}") srcs)}
-    ${asmBuild}
-    ${go}/bin/go tool compile -pack ${asmLink} -o $out/${path}.a -trimpath=$PWD -trimpath=${go} -p ${path} ${includeSources uniqueDeps} ${spaceOut srcs}
-    ${asmPack}
-  '') // { goDeps = uniqueDeps; goImportPath = path; };
-
-  # Build a tree of Go libraries out of an external Go source
-  # directory that follows the standard Go layout and was not built
-  # with buildGo.nix.
-  #
-  # The derivation for each actual package will reside in an attribute
-  # named "gopkg", and an attribute named "gobin" for binaries.
-  external = import ./external { inherit pkgs program package; };
-
-  # Import support libraries needed for protobuf & gRPC support
-  protoLibs = import ./proto.nix {
-    inherit external;
-  };
-
-  # Build a Go library out of the specified protobuf definition.
-  proto = { name, proto, path ? name, extraDeps ? [] }: (makeOverridable package) {
-    inherit name path;
-    deps = [ protoLibs.goProto.proto.gopkg ] ++ extraDeps;
-    srcs = lib.singleton (runCommand "goproto-${name}.pb.go" {} ''
-      cp ${proto} ${baseNameOf proto}
-      ${protobuf}/bin/protoc --plugin=${protoLibs.goProto.protoc-gen-go.gopkg}/bin/protoc-gen-go \
-        --go_out=plugins=grpc,import_path=${baseNameOf path}:. ${baseNameOf proto}
-      mv *.pb.go $out
-    '');
-  };
-
-  # Build a Go library out of the specified gRPC definition.
-  grpc = args: proto (args // { extraDeps = [ protoLibs.goGrpc.gopkg ]; });
-
-in {
-  # Only the high-level builder functions are exposed, but made
-  # overrideable.
-  program = makeOverridable program;
-  package = makeOverridable package;
-  proto = makeOverridable proto;
-  grpc = makeOverridable grpc;
-  external = makeOverridable external;
-}