aboutsummaryrefslogtreecommitdiff
path: root/gn/packages/tensorflow.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gn/packages/tensorflow.scm')
-rw-r--r--gn/packages/tensorflow.scm302
1 files changed, 302 insertions, 0 deletions
diff --git a/gn/packages/tensorflow.scm b/gn/packages/tensorflow.scm
new file mode 100644
index 0000000..b20ad4f
--- /dev/null
+++ b/gn/packages/tensorflow.scm
@@ -0,0 +1,302 @@
+(define-module (gn packages tensorflow)
+ #: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 gnu)
+ #:use-module (gn packages bazel)
+ #:use-module (gnu packages assembly)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages commencement)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages curl)
+ #:use-module (gnu packages databases)
+ #:use-module (gnu packages gcc)
+ #:use-module (gnu packages icu4c)
+ #:use-module (gnu packages image)
+ #:use-module (gnu packages maths)
+ #:use-module (gnu packages mpi)
+ #:use-module (gnu packages pcre)
+ #:use-module (gnu packages protobuf)
+ #:use-module (gnu packages python)
+ #:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages rpc)
+ #:use-module (gnu packages regex)
+ #:use-module (gnu packages serialization)
+ #:use-module (gnu packages sqlite)
+ #:use-module (gnu packages version-control))
+
+(define-public tensorflow
+ (package
+ (name "tensorflow")
+ (version "2.4.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/tensorflow/tensorflow")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0yl06aypfxrcs35828xf04mkidz1x0j89v0q5h4d2xps1cb5rv3f"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(
+ #:tests? #f ; Worry about this later.
+ #: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))
+ (bazelrc (string-append HOME "/bazelrc"))
+ (srcdeps (string-append HOME "/srcdeps"))
+ )
+ (setenv "HOME" HOME)
+ (with-output-to-file bazelrc
+ (lambda _
+ (format #t
+ "startup --server_javabase=~a~@
+ startup --batch~@
+ build --define=-copt=\"-Wl,-rpath -Wl,~a/lib\"~@
+ 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 (assoc-ref inputs "gcc:lib") (getenv "PATH") (getenv "PYTHONPATH") out)))
+ (newline)
+ (invoke "cat" bazelrc)
+ (newline)
+
+ (substitute* ".bazelrc"
+ (("PREFIX=/usr") (string-append "PREFIX=" out)))
+
+ ;; Use the pre-downloaded files
+ (substitute* "WORKSPACE"
+ (("\\\".*github.com/bazelbuild/rules_closure/.*.tar.gz")
+ (string-append "\"file://" (assoc-ref inputs "io_bazel_rules_closure")))
+ )
+ (substitute* "third_party/toolchains/preconfig/generate/archives.bzl"
+ (("\\\".*github.com/bazelbuild/bazel-toolchains/.*.tar.gz")
+ (string-append "\"file://" (assoc-ref inputs "bazel_toolchains")))
+ )
+ (substitute* "tensorflow/workspace.bzl"
+ (("\\\".*github.com/bazelbuild/rules_swift/.*.tar.gz")
+ (string-append "\"file://" (assoc-ref inputs "build_bazel_rules_swift")))
+ (("\\\".*github.com/googleapis/googleapis/.*.zip")
+ (string-append "\"file://" (assoc-ref inputs "com_google_googleapis")))
+ (("\\\".*github.com/bazelbuild/bazel-skylib/.*.tar.gz")
+ (string-append "\"file://" (assoc-ref inputs "bazel_skylib")))
+ (("\\\".*github.com/bazelbuild/rules_cc/.*.zip")
+ (string-append "\"file://" (assoc-ref inputs "rules_cc")))
+ (("\\\".*github.com/bazelbuild/rules_android/.*.zip")
+ (string-append "\"file://" (assoc-ref inputs "build_bazel_rules_android")))
+ )
+
+ (substitute* "configure.py"
+ (("/usr/bin/ldd") (which "ldd")))
+
+ ;; Lets fix some hardcoded /usr/bins
+ ;(substitute* "third_party/toolchains/preconfig/generate/generate.bzl"
+ ; (("/usr/bin/python")
+ ; (string-append (dirname (or (which "python")
+ ; (which "python3")))
+ ; "/python"))
+ ; )
+
+ ;; cpu detection fails, hardcode Linux as OS.
+ ;(substitute* "third_party/gpus/cuda_configure.bzl"
+ ; ((".*Linux.*") " if True:\n"))
+ ;(substitute* "third_party/remote_config/common.bzl"
+ ; (("uname") (which "uname")))
+
+ ;(substitute* "third_party/remote_config/common.bzl"
+ ; ;(("\\\"which\\\"") (string-append "\"" (which "which") "\""))
+ ; (("python_bin_path =.*") (string-append "python_bin_path = \"" (which "python") "\"\n"))
+ ; )
+
+ ;; Copy sources to one directory
+ ;(mkdir-p srcdeps)
+ ;(for-each
+ ; (lambda (file)
+ ; (copy-recursively file (string-append srcdeps "/" (strip-store-file-name file))))
+ ; (list (assoc-ref inputs "io_bazel_rules_closure")))
+ #t)))
+ (replace 'build
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((jdk (assoc-ref inputs "jdk"))
+ (HOME (string-append (getcwd) "/" ,name))
+ (bazelrc (string-append HOME "/bazelrc"))
+ (srcdeps (string-append HOME "/srcdeps"))
+ )
+ (setenv "TF_SYSTEM_LIBS" (string-append "absl_py,"
+ "astor_archive,"
+ "astunparse_archive,"
+ ;"boringssl,"
+ ;"com_github_googleapis_googleapis,"
+ ;"com_github_googlecloudplatform_google_cloud_cpp,"
+ "com_github_grpc_grpc,"
+ "com_google_protobuf,"
+ "com_googlesource_code_re2,"
+ "curl,"
+ "cython,"
+ "dill_archive,"
+ "double_conversion,"
+ ;"enum34_archive," ; python2 only?
+ "flatbuffers,"
+ ;"functools32_archive," ; python2 only?
+ "gast_archive,"
+ "gif,"
+ "hwloc,"
+ "icu,"
+ "jsoncpp_git,"
+ "libjpeg_turbo,"
+ "lmdb,"
+ "nasm,"
+ ;"nsync,"
+ ;"opt_einsum_archive,"
+ "org_sqlite,"
+ ;"pasta,"
+ "pcre,"
+ "png,"
+ "pybind11,"
+ "six_archive,"
+ "snappy,"
+ "tblib_archive,"
+ "termcolor_archive,"
+ "typing_extensions_archive,"
+ "wrapt,"
+ "zlib"))
+ (setenv "PYTHON_BIN_PATH" (which "python"))
+ (setenv "GCC_HOST_COMPILER_PATH" (string-append (assoc-ref inputs "gcc-toolchain") "/bin/gcc"))
+ (setenv "GCC_HOST_COMPILER_PREFIX" (string-append (assoc-ref inputs "gcc-toolchain") "/bin"))
+ ;(setenv "LD_LIBRARY_PATH" (string-append (assoc-ref inputs "gcc:lib") "/lib"))
+ (setenv "LD_LIBRARY_PATH" (string-append (assoc-ref inputs "gcc:lib")))
+ ;(invoke "python3" "configure.py")
+ (invoke "./configure")
+ ;(substitute* ".tf_configure.bazelrc"
+ ; (("PYTHON_LIB_PATH.*") (string-append "PYTHON_LIB_PATH=\"" (getenv "PYTHONPATH") "\"\n")))
+ (invoke "bazel"
+ (string-append "--bazelrc=" bazelrc)
+ "build"
+ ;"--config=opt"
+ "--config=avx_linux"
+ ;"//tensorflow:libtensorflow_cc.so"
+ "//tensorflow/tools/pip_package:build_pip_package"
+ ;"//tensorflow/tools/lib_package:libtensorflow"
+ )
+ )
+ ))
+ )
+ ))
+ (native-inputs
+ `(
+ ("bazel" ,bazel-bootstrap)
+ ("gcc:lib" ,gcc "lib")
+ ("gcc-toolchain" ,gcc-toolchain)
+ ("git" ,git)
+ ("python" ,python)
+ ("which" ,which)
+
+ ;; https://github.com/tensorflow/tensorflow/blob/master/third_party/systemlibs/syslibs_configure.bzl
+ ("absl_py" ,python-absl-py)
+ ("astor_archive" ,python-astor)
+ ("astunparse_archive" ,python-astunparse)
+ ("com_googlesource_code_re2" ,re2)
+ ("com_google_protobuf" ,protobuf)
+ ("com_github_grpc_grpc" ,grpc)
+ ("curl" ,curl)
+ ("cython" ,python-cython)
+ ("dill_archive" ,python-dill)
+ ("double-conversion" ,double-conversion)
+ ("flatbuffers" ,flatbuffers)
+ ("gast_archive" ,python-gast)
+ ("gif" ,giflib)
+ ("hwloc" ,hwloc)
+ ("icu" ,icu4c)
+ ("jsoncpp_git" ,jsoncpp)
+ ("libjpeg_turbo" ,libjpeg-turbo)
+ ("lmdb" ,lmdb)
+ ("nasm" ,nasm)
+ ("org_sqlite" ,sqlite)
+ ("pcre" ,pcre2)
+ ("png" ,libpng)
+ ("pybind11" ,pybind11)
+ ("six_archive" ,python-six)
+ ("snappy" ,snappy)
+ ("tblib_archive" ,python-tblib)
+ ("termcolor_archive" ,python-termcolor)
+ ("typing_extensions_archive" ,python-typing-extensions)
+ ("wrapt" ,python-wrapt)
+ ("zlib" ,zlib)
+
+ ("io_bazel_rules_closure"
+ ,(origin
+ (method url-fetch)
+ (uri "https://github.com/bazelbuild/rules_closure/archive/308b05b2419edb5c8ee0471b67a40403df940149.tar.gz")
+ (file-name "io_bazel_rules_closure.tar.gz")
+ (sha256
+ (base32
+ "1abbgk05f9flpv35zzw9fjjdvd3g1d8b0vbk0f2z4wfx10ykh02v"))))
+ ("bazel_toolchains"
+ ,(origin
+ (method url-fetch)
+ (uri "https://github.com/bazelbuild/bazel-toolchains/archive/92dd8a7a518a2fb7ba992d47c8b38299fe0be825.tar.gz")
+ (file-name "bazel_toolchains.tar.gz")
+ (sha256
+ (base32
+ "1xgyalc8pvy76rghkby28vz5y9ng1qhrqhn817vfwa1ny3wiis48"))))
+ ("build_bazel_rules_swift"
+ ,(origin
+ (method url-fetch)
+ (uri "https://github.com/bazelbuild/rules_swift/archive/3eeeb53cebda55b349d64c9fc144e18c5f7c0eb8.tar.gz")
+ (file-name "build_bazel_rules_swift.tar.gz")
+ (sha256
+ (base32
+ "11n8fmb5mf2zwgn202p8nmh82c8i1hm90pvajdks65yqvb33p0yh"))))
+ ("com_google_googleapis"
+ ,(origin
+ (method url-fetch)
+ (uri "https://github.com/googleapis/googleapis/archive/541b1ded4abadcc38e8178680b0677f65594ea6f.zip")
+ (file-name "com_google_googleapis.zip")
+ (sha256
+ (base32
+ "0059835rzfr9mb9x5m6ij7pi1y372qzdqls4a6vg8mf50qdv1fky"))))
+ ("bazel_skylib"
+ ,(origin
+ (method url-fetch)
+ (uri "https://github.com/bazelbuild/bazel-skylib/releases/download/0.9.0/bazel_skylib-0.9.0.tar.gz")
+ (file-name "bazel_skylib-0.9.0.tar.gz")
+ (sha256
+ (base32
+ "183w7h2cyzlq7q5q86yivzdwafyxvxc5dqii0yvksnhjj5a3dphx"))))
+ ("rules_cc"
+ ,(origin
+ (method url-fetch)
+ (uri "https://github.com/bazelbuild/rules_cc/archive/01d4a48911d5e7591ecb1c06d3b8af47fe872371.zip")
+ (file-name "rules_cc.zip")
+ (sha256
+ (base32
+ "1ybcjfwjykk7qii17dr640jivxssy1hb3x0hbd65bh461jlpcfyg"))))
+ ("build_bazel_rules_android"
+ ,(origin
+ (method url-fetch)
+ (uri "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip")
+ (file-name "build_bazel_rules_android.zip")
+ (sha256
+ (base32
+ "01kqga5xrkchw4kmr60r4m5xmy90zhxh1yb59mp94ndvv1fx21nd"))))
+ ))
+ (home-page "https://www.tensorflow.org/")
+ (synopsis "Machine learning framework")
+ (description "TensorFlow is a flexible platform for building and training
+machine learning models. It provides a library for high performance numerical
+computation and includes high level Python APIs, including both a sequential API
+for beginners that allows users to build models quickly by plugging together
+building blocks and a subclassing API with an imperative style for advanced
+research.")
+ (license license:asl2.0)))