diff options
Diffstat (limited to 'gn/packages/tensorflow.scm')
-rw-r--r-- | gn/packages/tensorflow.scm | 302 |
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))) |