about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/go/binary.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/go/binary.nix')
-rw-r--r--nixpkgs/pkgs/development/compilers/go/binary.nix41
1 files changed, 41 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/go/binary.nix b/nixpkgs/pkgs/development/compilers/go/binary.nix
new file mode 100644
index 000000000000..7eb8f8f7b984
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/go/binary.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, version, hashes }:
+let
+  toGoKernel = platform:
+    if platform.isDarwin then "darwin"
+    else platform.parsed.kernel.name;
+
+  toGoCPU = platform: {
+    "i686" = "386";
+    "x86_64" = "amd64";
+    "aarch64" = "arm64";
+    "armv6l" = "armv6l";
+    "armv7l" = "armv6l";
+    "powerpc64le" = "ppc64le";
+  }.${platform.parsed.cpu.name} or (throw "Unsupported CPU ${platform.parsed.cpu.name}");
+
+  toGoPlatform = platform: "${toGoKernel platform}-${toGoCPU platform}";
+
+  platform = toGoPlatform stdenv.hostPlatform;
+in
+stdenv.mkDerivation rec {
+  name = "go-${version}-${platform}-bootstrap";
+
+  src = fetchurl {
+    url = "https://golang.org/dl/go${version}.${platform}.tar.gz";
+    sha256 = hashes.${platform} or (throw "Missing Go bootstrap hash for platform ${platform}");
+  };
+
+  # We must preserve the signature on Darwin
+  dontStrip = stdenv.hostPlatform.isDarwin;
+
+  installPhase = ''
+    mkdir -p $out/share/go $out/bin
+    mv bin/* $out/bin
+    cp -r . $out/share/go
+    ${lib.optionalString stdenv.isLinux (''
+    patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      $out/bin/go
+    '')}
+  '' ;
+}