about summary refs log tree commit diff
path: root/gn/packages/bazel.scm
diff options
context:
space:
mode:
authorEfraim Flashner2021-08-29 16:17:02 +0300
committerEfraim Flashner2021-08-29 16:17:02 +0300
commite438bb8ffa9f1bf03d57c1ec723506a95cba8ab4 (patch)
treef52db52c2b87df239b62cd8f57e14df4e9d90b77 /gn/packages/bazel.scm
parent01cbe5a2e9b682cac8862888d86b44078b7eac92 (diff)
downloadguix-bioinformatics-e438bb8ffa9f1bf03d57c1ec723506a95cba8ab4.tar.gz
work on packaging bazel
Diffstat (limited to 'gn/packages/bazel.scm')
-rw-r--r--gn/packages/bazel.scm785
1 files changed, 785 insertions, 0 deletions
diff --git a/gn/packages/bazel.scm b/gn/packages/bazel.scm
new file mode 100644
index 0000000..07d1dbd
--- /dev/null
+++ b/gn/packages/bazel.scm
@@ -0,0 +1,785 @@
+(define-module (gn packages bazel)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix utils)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system ant)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages backup)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bootstrap)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages elf)
+  #:use-module (gnu packages gcc)
+  #:use-module (gnu packages java)
+  #:use-module (gnu packages java-compression)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages protobuf)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages rpc)
+  #:use-module (gnu packages web)
+  #:use-module (gn packages java)
+  )
+
+(define-public bazel
+  (package
+    (name "bazel")
+    (version "3.7.2")
+    (source (origin
+              (method url-fetch/zipbomb)
+              (uri (string-append "https://github.com/bazelbuild/bazel/"
+                                  "releases/download/" version "/bazel-"
+                                  version "-dist.zip"))
+              (sha256
+               (base32
+                "1cfrbs23lg0jnl22ddylx3clcjw7bdpbix7r5lqibab346s5n9fy"))
+              (patches (search-patches
+                         "bazel-workspace.patch"
+                         ))
+              ))
+    (build-system gnu-build-system)
+    (arguments
+     `(
+       #:tests? #f
+       #:make-flags '("EXTRA_BAZEL_ARGS=\"--host_javabase=@local_jdk//:jdk\"")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-before 'build 'pre-build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (jdk  (assoc-ref inputs "jdk"))
+                    ;(HOME (string-append (getcwd) "/" ,name))
+                    (HOME (getcwd))
+                    (bazelrc (string-append HOME "/user.bazelrc"))
+                    (srcdeps (string-append HOME "/srcdeps"))
+                   )
+               (setenv "HOME" HOME)
+               (setenv "PROTOC" (string-append (assoc-ref inputs "protobuf")
+                                               "/bin/protoc"))
+               (with-output-to-file bazelrc
+                 (lambda _
+                   (format #t
+                           "~@
+                           --noremote_accept_cached~@
+                           --verbose_failures~@
+                           --subcommands~@
+                           --compilation_mode dbg~@
+                           --action_env=CCACHE_DISABLE~@
+                           --action_env=CCACHE_TEMPDIR~@
+                           --sandbox_debug~@
+                           --sandbox_writable_path=${CCACHE_TEMPDIR}~@
+                           --override_repository=com_google_protobuf=${CURDIR}/tools/distributions/debian/protobuf~@
+                            --override_repository=remote_java_tools_linux=${CURDIR}/mock_repos/remote_java_tools_linux~@
+                            --override_repository=bazel_skylib=${CURDIR}/mock_repos/bazel_skylib~@
+                            --override_repository=io_bazel_skydoc=${CURDIR}/mock_repos/bazel_skydoc~@
+                            --override_repository=rules_pkg=${CURDIR}/mock_repos/rules_pkg~@
+                            --override_repository=rules_cc=${CURDIR}/mock_repos/rules_cc~@
+                            --override_repository=rules_java=${CURDIR}/mock_repos/rules_java~@
+                            --override_repository=rules_proto=${CURDIR}/mock_repos/rules_proto~@
+                            --override_repository=platforms=${CURDIR}/mock_repos/platforms~@
+                           --distinct_host_configuration=false~@
+                           ~@
+                           startup --server_javabase=~a~@
+                           startup --batch~@
+                           #build --distdir=distdir~@
+                           #fetch --distdir=distdir~@
+                           #query --distdir=distdir~@
+                           #build --verbose_failure~@
+                           build --color=yes~@
+                           build --action_env=PATH=~a~@
+                           build --action_env=PYTHON_LIB_PATH=~a~@
+                           build --define=PREFIX=~a~@
+                           build --host_javabase='@local_jdk//:jdk'~%"
+                           jdk
+                           (getenv "PATH") (getenv "PYTHONPATH") out)))
+               (newline)
+               (invoke "cat" bazelrc)
+               (newline)
+
+               (substitute* ".bazelrc"
+                 (("PREFIX=/usr") (string-append "PREFIX=" out)))
+
+               ;; Use the local javac.
+               (substitute* '(
+                              "src/java_tools/buildjar/BUILD"
+                              "src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD"
+                              "src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/BUILD"
+                              "src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/statistics/BUILD"
+                              "src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/BUILD"
+                              )
+                 ((".*//third_party/java/jdk/langtools:javac.*") ""))
+
+               #t)))
+           ;(add-after 'unpack 'plop-vendored-tarballs
+           ;  (lambda* (#:key inputs #:allow-other-keys)
+           ;    (mkdir "distdir")
+           ;    (copy-file (assoc-ref inputs "bazel_toolchains")
+           ;               "distdir/bazel-toolchains-3.1.0.tar.gz")
+           ;    #t))
+         (add-after 'patch-source-shebangs 'patch-more-shebangs
+           (lambda _
+             (substitute* '(
+                            "tools/build_rules/test_rules.bzl"
+                            "tools/cpp/cc_toolchain_config.bzl"
+                            )
+               (("/bin/bash") (which "bash")))
+             (substitute* "tools/cpp/cc_toolchain_config.bzl"
+               (("/usr/bin/ar") (which "ar"))
+               (("/usr/bin/ld") (which "ld"))
+               (("/usr/bin/cpp") (which "cpp"))
+               ;(("/usr/bin/dwp") (which "dwp"))
+               (("/usr/bin/gcc") (which "gcc"))
+               (("/usr/bin/gcov") (which "gcov"))
+               (("/usr/bin/nm") (which "nm"))
+               (("/usr/bin/objcopy") (which "objcopy"))
+               (("/usr/bin/objdump") (which "objdump"))
+               (("/usr/bin/strip") (which "strip"))
+               )
+             (substitute* "src/main/tools/BUILD"
+               (("-lm") "-lm '-lgcc"))
+             #t))
+         (replace 'build
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "BAZEL_SH" (which "bash"))
+             (setenv "CC" ,(cc-for-target))
+
+             (setenv "BAZEL_JAVAC_OPTS" "-J-Xmx4096m")
+             ;(setenv "BAZEL_JAVAC_OPTS" "-J-Xmx2g -J-Xms200m")
+
+             (setenv "EXTRA_BAZEL_ARGS" "--host_javabase=@local_jdk//:jdk")
+             (setenv "VERBOSE" "1")
+             (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
+             ;(invoke "bazel" "build" "//src:bazel")
+             (invoke "./compile.sh")
+             ))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+               (mkdir-p bin)
+               (install-file "output/bazel" bin)
+               #t)))
+         )
+       ))
+    (native-inputs
+     `(
+       ("bazel" ,bazel-bootstrap)
+       ("jdk" ,openjdk11 "jdk")
+       ("protobuf" ,protobuf)
+       ("python" ,python-wrapper)
+       ("unzip" ,unzip)
+       ("which" ,which)
+
+       ("java-commons-collections" ,java-commons-collections)
+       ("java-commons-compress" ,java-commons-compress)
+       ("java-commons-lang" ,java-commons-lang3)
+       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
+       ("java-commons-pool" ,java-commons-pool)
+       ("java-dd-plist" ,java-dd-plist)
+       ("java-diff-utils" ,java-diff-utils)
+       ;("java-error-prone" ,java-error-prone)
+       ("java-escapevelocity" ,java-escapevelocity)
+       ;; libgeronimo-annotation-1.3-spec-java
+       ;; libgoogle-api-client-java
+       ;; libgoogle-auth-java
+       ;; libgoogle-auto-common-java
+       ;; libgoogle-auto-service-java
+       ;; libgoogle-auto-value-java
+       ;; libgoogle-flogger-java
+       ;; libgoogle-gson-java
+       ;; libgoogle-http-client-java
+       ;; ("grpc-java" ,grpc-java)
+       ("java-guava" ,java-guava-25)
+       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core) ; fasterxml?
+       ;; libjacoco-java
+       ("java-jarjar" ,java-jarjar)
+       ;; libjava-allocation-instrumenter-java
+       ("java-javapoet" ,java-javapoet)
+       ("java-jaxb-api" ,java-javax-xml-bind)
+       ("java-jcip-annotations" ,java-jcip-annotations)
+       ("java-jcommander" ,java-jcommander)
+       ("java-jformatstring" ,java-jformatstring)
+       ("java-jsr305" ,java-jsr305)
+       ;; libnetty-tcnative-java
+       ;; libopencensus-java
+       ;; libproguard-java
+       ("java-protobuf" ,java-protobuf)
+       ("java-tomcat" ,java-tomcat)
+       ("java-truth" ,java-truth)
+       ("java-xz" ,java-xz)
+
+       ;; protobuf-compiler-grpc
+       ;; protobuf-compiler-grpc-java-plugin
+
+
+       ;("bazel_toolchains"
+       ; ,(origin
+       ;    (method url-fetch)
+       ;    (uri "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz")
+       ;    (file-name "bazel-toolchains-3.1.0.tar.gz")
+       ;    (sha256
+       ;     (base32
+       ;      "1wha3nmnszkk1wgaa4p9rfgmx5aa7c9ffs3d79m8d8y7w4im8svj"))))
+       ))
+    (home-page "https://bazel.build/")
+    (synopsis "")
+    (description "")
+    (license license:asl2.0)))
+
+(define-public bazel-bootstrap
+  (package
+    (name "bazel-bootstrap")
+    (version "3.7.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/bazelbuild/bazel/"
+                                  "releases/download/" version
+                                  "/bazel-" version "-linux-x86_64"))
+              (sha256
+               (base32
+                "03gwwka4m1cn95nzc0bmjwqshdlh9m32v8r554rksk4a37p0pp3h"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f
+       #:strip-binaries? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'unpack)
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((binary  (assoc-ref inputs "source"))
+                    (out     (assoc-ref outputs "out"))
+                    (libc    (assoc-ref inputs "libc"))
+                    (ld-so   (string-append libc ,(glibc-dynamic-linker)))
+                    (rpath   (string-append (assoc-ref inputs "gcc:lib") "/lib")))
+               (copy-file binary "bazel")
+               (system "chmod 755 bazel")
+               (invoke "patchelf" "--set-rpath" rpath "bazel")
+               (invoke "patchelf" "--set-interpreter" ld-so "bazel"))
+             #t))
+         ;; THIS NEEDS NETWORK ACCESS
+         ;(replace 'install-license-files
+         ;  (lambda* (#:key outputs #:allow-other-keys)
+         ;    (let* ((out (assoc-ref outputs "out"))
+         ;           (bazel (string-append out "/bin/bazel"))
+         ;           (license (string-append out "/share/doc/"
+         ;                                   ,name "-" ,version "/LICENSE")))
+         ;      (setenv "HOME" (getcwd))
+         ;      (mkdir-p (dirname license))
+         ;      (call-with-output-file license
+         ;        (lambda _
+         ;          (invoke bazel "license")))
+         ;      #t)))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (install-file "bazel" bin)
+               #t))))))
+    (native-inputs
+     `(("patchelf" ,patchelf)))
+    (inputs
+     `(("gcc:lib" ,(canonical-package gcc) "lib")))
+    (propagated-inputs
+     `(("jdk" ,openjdk11 "jdk")))
+    (home-page "https://bazel.build/")
+    (synopsis "Build and test software of any size, quickly and reliably")
+    (description "Bazel is a build tool that builds code quickly and reliably.
+It is used to build the majority of Google's software, and thus it has been
+designed to handle build problems present in Google's development environment.")
+    (supported-systems '("x86_64-linux"))
+    (license license:asl2.0)))
+
+(define-public bazel-bootstrap-3.1
+  (package
+    (inherit bazel-bootstrap)
+    (name "bazel-bootstrap")
+    (version "3.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/bazelbuild/bazel/"
+                                  "releases/download/" version
+                                  "/bazel-" version "-linux-x86_64"))
+              (sha256
+               (base32
+                "1jpdah6qr7n1mpld6yilv5yic7jy8bfiy7g2bk7nc0kkzbs38d3m"))))))
+
+(define-public bazel-0.29
+  (package
+    (name "bazel")
+    (version "0.29.1")
+    (source (origin
+              (method url-fetch/zipbomb)
+              (uri (string-append "https://github.com/bazelbuild/bazel/"
+                                  "releases/download/" version
+                                  "/bazel-" version "-dist.zip"))
+              (sha256
+               (base32
+                "1rcd6xy61n07n7m6dgcw23275r8z3gkwmqdkd48nwrq8yb7m4al7"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'plop-vendored-tarballs
+            (lambda* (#:key inputs #:allow-other-keys)
+              (mkdir "distdir")
+              (copy-file (assoc-ref inputs "remotejdk11_linux")
+                         "distdir/zulu11.2.3-jdk11.0.1-linux_x64.tar.gz")
+              #t))
+         (delete 'configure)
+         (add-before 'build 'pre-build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (jdk  (assoc-ref inputs "jdk"))
+                    ;(HOME (string-append (getcwd) "/" ,name))
+                    (HOME (getcwd))
+                    (bazelrc (string-append HOME "/bazel-rc"))
+                    (srcdeps (string-append HOME "/srcdeps"))
+                   )
+               (setenv "HOME" HOME)
+               (with-output-to-file bazelrc
+                 (lambda _
+                   (format #t
+                           "startup --server_javabase=~a~@
+                           startup --batch~@
+                           build --distdir=distdir~@
+                           fetch --distdir=distdir~@
+                           query --distdir=distdir~@
+                           build --verbose_failure~@
+                           build --color=yes~@
+                           build --action_env=PATH=~a~@
+                           build --action_env=PYTHON_LIB_PATH=~a~@
+                           build --define=PREFIX=~a~@
+                           build --host_javabase='@local_jdk//:jdk'~%"
+                           jdk
+                           (getenv "PATH") (getenv "PYTHONPATH") out)))
+
+               (define (append-to-bazelrc body)
+                 (let ((file (open-file ".bazelrc" "a")))
+                   (display body file)
+                   (close-port file)))
+               (make-file-writable ".bazelrc")
+               (append-to-bazelrc "\n\n\n")
+               ;(append-to-bazelrc "startup --batch\n")
+               (append-to-bazelrc (string-append "startup --server_javabase=" (assoc-ref inputs "jdk") "\n"))
+               (append-to-bazelrc "build --distdir=distdir\n")
+               (append-to-bazelrc "fetch --distdir=distdir\n")
+               (append-to-bazelrc "query --distdir=distdir\n")
+               (append-to-bazelrc (string-append "build --override_repository=remotejdk11_linux=" (assoc-ref inputs "jdk11") "\n"))
+               (append-to-bazelrc "build --host_javabase='@local_jdk//:jdk\n")
+
+               (newline)
+               (invoke "tail" ".bazelrc")
+               (newline)
+               (newline)
+               (newline)
+               (invoke "cat" bazelrc)
+               (newline)
+
+               (substitute* ".bazelrc"
+                 (("PREFIX=/usr") (string-append "PREFIX=" out)))
+
+               #t)))
+         (replace 'build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (setenv "PROTOC" (string-append (assoc-ref inputs "protobuf")
+                                             "/bin/protoc"))
+             (invoke "sh" "compile.sh" "bootstrap")
+             #t))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (install-file "output/bazel" bin)
+               #t)))
+         )))
+    (native-inputs
+     `(
+       ("jdk" ,icedtea-8 "jdk")
+       ("jdk11" ,openjdk11 "jdk")
+       ("protobuf" ,protobuf)
+       ("unzip" ,unzip)
+       ("python" ,python-2)
+       ("which" ,which)
+
+       ("remotejdk11_linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://mirror.bazel.build/openjdk/azul-zulu11.2.3-jdk11.0.1/zulu11.2.3-jdk11.0.1-linux_x64.tar.gz")
+           (sha256
+            (base32 "0x9anw7bbwp9yai4r1biwcrwcymycg1kqz1bb296xlph24siqar3"))))
+       ))
+    (home-page "https://bazel.build/")
+    (synopsis "Build and test software of any size, quickly and reliably")
+    (description "Bazel is a build tool that builds code quickly and reliably.
+It is used to build the majority of Google's software, and thus it has been
+designed to handle build problems present in Google's development environment.")
+    (license license:asl2.0)))
+
+(define-public bazel-0.4
+  (package
+    (name "bazel")
+    (version "0.4.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/bazelbuild/bazel")
+                     (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "182r6ybajhkmkbcx2dq6p8cn2mym2lzd61h99vpx6whldrs1sqfs"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-before 'build 'pre-build
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "third_party/grpc"
+               ;(invoke "ls" "-la")
+               ;(substitute* "compiler/src/java_plugin/cpp/java_generator.h"
+               ;  (("iostream") "iostream.h"))
+               ;(apply invoke "gcc"
+               ;       (list
+               ;         "-o" "cpp_plugin"
+               ;         ;"-Iinclude"
+               ;         "-I."
+               ;         "-Iinclude/grpc/include"
+               ;         "-Iinclude/grpc"
+               ;         (string-append "-I" (assoc-ref inputs "protobuf") "/include") "-pthread"
+               ;         (string-append "-L" (assoc-ref inputs "protobuf") "/lib") "-lprotobuf-lite"
+               ;         "src/compiler/config.h"
+               ;         "src/compiler/cpp_generator.cc"
+               ;         "src/compiler/cpp_generator.h"
+               ;         "src/compiler/cpp_generator_helpers.h"
+               ;         "src/compiler/cpp_plugin.cc"
+               ;         "src/compiler/generator_helpers.h"
+               ;         )
+               ;       )
+
+               (apply invoke "gcc"
+                      (cons*
+                        "-w"
+                        "-o" "grpc-java-plugin"
+                        ;"-Iinclude"
+                        ;(string-append "-I" (assoc-ref inputs "pybind11") "/include/pybind11")
+                        ;(string-append "-I" (assoc-ref inputs "python") "/include/python2.7")
+                        (string-append "-I" (assoc-ref inputs "protobuf") "/include") "-pthread"
+                        (string-append "-L" (assoc-ref inputs "protobuf") "/lib") "-lprotobuf-lite"
+                        (find-files "compiler/src/java_plugin/cpp")
+                        ;(find-files "src/compiler")
+                        )
+                      )
+               )
+             #t))
+         (replace 'build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (setenv "PROTOC" (string-append (assoc-ref inputs "protobuf")
+                                             "/bin/protoc"))
+             (setenv "GRPC_JAVA_PLUGIN" "third_party/grpc/grpc-java-plugin")
+             (invoke "ls" "-la" "third_party/grpc/")
+             (invoke "sh" "compile.sh" "bootstrap")
+             #t))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (install-file "bazel" bin)
+               #t)))
+         )))
+    (native-inputs
+     `(
+       ;("boost" ,(@ (gnu packages boost) boost))
+       ("jdk" ,icedtea-8 "jdk")
+       ("protobuf" ,protobuf)
+       ("python" ,python-2)
+       ;("pybind11" ,(@ (gnu packages python-xyz) pybind11))
+       ("which" ,which)
+       ))
+    (home-page "https://bazel.build/")
+    (synopsis "Build and test software of any size, quickly and reliably")
+    (description "Bazel is a build tool that builds code quickly and reliably.
+It is used to build the majority of Google's software, and thus it has been
+designed to handle build problems present in Google's development environment.")
+    (license license:asl2.0)))
+
+(define-public bazel-0.3
+  (package
+    (name "bazel")
+    (version "0.3.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/bazelbuild/bazel")
+                     (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "085cjz0qhm4a12jmhkjd9w3ic4a67035j01q111h387iklvgn6xg"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(
+       #:tests? #f
+       #:parallel-build? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (setenv "PROTOC" (string-append (assoc-ref inputs "protobuf")
+                                             "/bin/protoc"))
+             (invoke "ls" "-la" "third_party/grpc/")
+             (setenv "GRPC_JAVA_PLUGIN" "third_party/grpc/protoc-gen-grpc-java-0.15.0-linux-x86_64.exe")
+             (invoke "sh" "compile.sh" "bootstrap")
+             #t))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (install-file "bazel" bin)
+               #t)))
+         )))
+    (native-inputs
+     `(
+       ;("grpc-java" ,grpc-java)
+       ("jdk" ,icedtea-8 "jdk")
+       ("protobuf" ,protobuf)
+       ("python" ,python-2)
+       ("which" ,which)
+       ))
+    (home-page "https://bazel.build/")
+    (synopsis "Build and test software of any size, quickly and reliably")
+    (description "Bazel is a build tool that builds code quickly and reliably.
+It is used to build the majority of Google's software, and thus it has been
+designed to handle build problems present in Google's development environment.")
+    (license license:asl2.0)))
+
+(define-public bazel-0.2
+  (package
+    (name "bazel")
+    (version "0.2.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/bazelbuild/bazel")
+                     (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "13mikylcnfpm79zxpc5g776vj83z441plm8sw8zr8cjgx3m1rkmf"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (setenv "PROTOC" (string-append (assoc-ref inputs "protobuf")
+                                             "/bin/protoc"))
+             (invoke "sh" "compile.sh" "bootstrap")
+             #t))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (install-file "bazel" bin)
+               #t)))
+         )))
+    (native-inputs
+     `(
+       ("jdk" ,icedtea-8 "jdk")
+       ("protobuf" ,protobuf)
+       ("python" ,python-2)
+       ("which" ,which)
+       ))
+    (home-page "https://bazel.build/")
+    (synopsis "Build and test software of any size, quickly and reliably")
+    (description "Bazel is a build tool that builds code quickly and reliably.
+It is used to build the majority of Google's software, and thus it has been
+designed to handle build problems present in Google's development environment.")
+    (license license:asl2.0)))
+
+(define-public bazel-0.1
+  (package
+    (name "bazel")
+    (version "0.1.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/bazelbuild/bazel")
+                     (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1xxin296x34phpdflnhsd1ckag2vl04srhywml4b4a4il496x9wl"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (setenv "PROTOC" (string-append (assoc-ref inputs "protobuf")
+                                             "/bin/protoc"))
+             (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
+             (invoke "sh" "compile.sh" "bootstrap")
+             #t))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (install-file "bazel" bin)
+               #t)))
+         )))
+    (native-inputs
+     `(
+       ("jdk" ,icedtea-8 "jdk")
+       ("protobuf" ,protobuf)
+       ("python" ,python-2)
+       ("unzip" ,unzip)
+       ("which" ,which)
+       ))
+    (home-page "https://bazel.build/")
+    (synopsis "Build and test software of any size, quickly and reliably")
+    (description "Bazel is a build tool that builds code quickly and reliably.
+It is used to build the majority of Google's software, and thus it has been
+designed to handle build problems present in Google's development environment.")
+    (license license:asl2.0)))
+
+(define-public bazel-0.0
+  (let ((commit "d08b27fa9701fecfdb69e1b0d1ac2459efc2129b"))
+    (package
+      (name "bazel")
+      (version (git-version "0.0.0" "0" commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/bazelbuild/bazel")
+                       (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0qj7iyb9ybcgfyn9m1kqm4q7r82ai8jsdgmdblwdhk4mdbxsyl2r"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(
+         #:tests? #f
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (replace 'build
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (setenv "PROTOC" (string-append (assoc-ref inputs "protobuf")
+                                               "/bin/protoc"))
+               (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
+               (setenv "JNILIB" (string-append (assoc-ref inputs "libunix.so") "/lib/libunix.so"))
+               (invoke "sh" "compile.sh")
+               #t))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append out "/bin")))
+                 (install-file "bazel" bin)
+                 #t)))
+           )))
+      (native-inputs
+       `(
+         ("jdk" ,icedtea-8 "jdk")
+         ;("linux-libre-headers" ,(@ (gnu packages linux) linux-libre-headers))
+         ("libarchive" ,libarchive)
+         ("libunix.so" ,java-cisd-base-with-libs)
+         ("pkg-config" ,pkg-config)
+         ("protobuf" ,protobuf-2)
+         ;("python" ,python)
+         ("which" ,which)
+         ))
+      (home-page "https://bazel.build/")
+      (synopsis "Build and test software of any size, quickly and reliably")
+      (description "Bazel is a build tool that builds code quickly and reliably.
+It is used to build the majority of Google's software, and thus it has been
+designed to handle build problems present in Google's development environment.")
+      (license license:asl2.0))))
+
+(define java-cisd-base-with-libs
+  (package
+    (inherit java-cisd-base)
+    (arguments
+     (substitute-keyword-arguments (package-arguments java-cisd-base)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'install 'install-shared-libs
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
+                 (install-file "source/c/libunix.so" lib)
+                 (install-file "source/c/libnativedata.so" lib)
+                 #t)))))))))
+
+;(define grpc-java
+;  (package
+;    (inherit grpc)
+;    (native-inputs
+;     `(("jdk" ,icedtea-8 "jdk")
+;       ,@(package-native-inputs grpc)))))
+
+(define-public grpc-java
+  (package
+    (name "grpc-java")
+    (version "1.26.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/grpc/grpc-java")
+                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1m0wxd46ha4501078xp54dbshri4vmysv07qzaz85c63izw7yjva"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f
+       #:jar-name "grpc.jar"
+       #:jdk ,openjdk9
+       #:source-dir "core/src/main"
+       ))
+    (native-inputs
+     `(
+       ("java-animal-sniffer" ,java-animal-sniffer)
+       ;("java-error-prone" ,java-error-prone)
+       ;; libgeronimo-annotation-1.3-spec-java
+       ;; libgoogle-auth-java
+       ;; libgoogle-common-protos-java
+       ;; libgoogle-gson-java
+       ;; libgoogle-perftools-dev
+       ;; libgradle-plugins-java
+       ("java-guava" ,java-guava-25)
+       ;; libjacoco-java
+       ("java-jsr305" ,java-jsr305)
+       ;; libopencensus-java
+       ;; libperfmark-java
+       ;; libprotobuf-java
+       ;; protobuf-compiler-grpc
+
+       ("java-protobuf" ,java-protobuf)
+       ("protobuf" ,protobuf)
+       ))
+    (home-page "https://github.com/grpc/grpc-java")
+    (synopsis "Java gRPC implementation")
+    (description "gRPC is a modern high performance @acronym{Remote Procedure
+Call, RPC} framework that can run in any environment.  It can efficiently
+connect services in and across data centers with pluggable support for load
+balancing, tracing, health checking and authentication.  It is also applicable
+in last mile of distributed computing to connect devices, mobile applications
+and browsers to backend services.")
+    (license license:asl2.0)))