source/bazel/tensorflow.bzl (134 lines of code) (raw):

load("//bazel:version.bzl", "NEUROPOD_VERSION") # https://docs.bazel.build/versions/master/skylark/repository_rules.html def _impl(repository_ctx): # The `or` pattern below handles empty strings and unset env variables # Using a default value only handles unset env variables version = repository_ctx.os.environ.get("NEUROPOD_TENSORFLOW_VERSION") or "1.12.0" IS_MAC = repository_ctx.os.name.startswith("mac") IS_GPU = (repository_ctx.os.environ.get("NEUROPOD_IS_GPU") or None) != None MAPPING = { # Linux CPU "1.12.0-linux-cpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.12.0.tar.gz", "sha256": "fd473e2ef72a446421f627aebe90479b92495965c26843034625677a14d8d64f", }, "1.13.1-linux-cpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.13.1.tar.gz", "sha256": "934c482948b64b31c037162e8485a6703814eee2393a0b9e54341a1d3ebed631", }, "1.14.0-linux-cpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.14.0.tar.gz", "sha256": "d30c15981d47c081ed4c38b5febf95b9260936fdc4a4b90b436b6982651c7111", }, "1.15.0-linux-cpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.15.0.tar.gz", "sha256": "decbfd5a709eced3523f55ccfa239337a87e1ab3e000efda3617db79e1034ded", }, # There isn't an official libtensorflow release for TF 2.x so I had to build this from source # TODO(vip): Update to an official release once there is one "2.2.0-linux-cpu": { "url": "https://github.com/VivekPanyam/tensorflow-prebuilts/releases/download/0.0.1/libtensorflow2.2.0rc3+-cpu-linux-x86_64.tar.gz", "sha256": "ee287e2ccd41e652f51e8c36370c841caf02115bf7b0cb7d4c2119b2c8cbd5fb", }, "2.5.0-linux-cpu": { "url": "https://github.com/VivekPanyam/tensorflow-prebuilts/releases/download/0.0.1/libtensorflow2.5.0rc1-cpu-linux-x86_64.tar.gz", "sha256": "", }, "2.6.2-linux-cpu": { # Note: they didn't release an updated libtensorflow for 2.6.2 (vs 2.6.0) "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-2.6.0.tar.gz", "sha256": "58ff05f77aa1d969f912857e8a4edb17cc5b8220eeff13aaf807dcc10716a45d", }, # Linux GPU "1.12.0-linux-gpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-1.12.0.tar.gz", "sha256": "34e8070b391a2aa4317c786b80467e37b4d82fd8b880746a2775faeb7fd22d72", }, "1.13.1-linux-gpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-1.13.1.tar.gz", "sha256": "b7f1a8cdebaf8ff76cde7768ab350aa546893407336dc852dc425f07c903523c", }, "1.14.0-linux-gpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-1.14.0.tar.gz", "sha256": "a6972020d7cd1dfe53a3b2d4a867e4d6d8511bc15bfae8e4edfc4999a4bfd6b9", }, "1.15.0-linux-gpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-1.15.0.tar.gz", "sha256": "98e20336ff2b9acf2121b5c1ea00c35561ae732303bba8cfec167db3f7aea681", }, # There isn't an official libtensorflow release for TF 2.x so I had to build this from source # TODO(vip): Update to an official release once there is one "2.2.0-linux-gpu": { "url": "https://github.com/VivekPanyam/tensorflow-prebuilts/releases/download/0.0.1/libtensorflow2.2.0rc3+-gpu-linux-x86_64.tar.gz", "sha256": "293f907623d7c9622d0ae9b17a2b5938c633eb8e32e9461346fe6afc36fe2e71", }, "2.5.0-linux-gpu": { "url": "https://github.com/VivekPanyam/tensorflow-prebuilts/releases/download/0.0.1/libtensorflow2.5.0rc1-gpu-linux-x86_64.tar.gz", "sha256": "", }, "2.6.2-linux-gpu": { # Note: they didn't release an updated libtensorflow for 2.6.2 (vs 2.6.0) "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-2.6.0.tar.gz", "sha256": "1a93057baa9f831a00a5935132c8e7438ee4ddfc166779dca51aae8c4a40870b", }, # Mac CPU "1.12.0-mac-cpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-darwin-x86_64-1.12.0.tar.gz", "sha256": "0f77844966cfe8053eaa74f2b6bc5fecfddac070e4be49bd96ad70d5210dd8cc", }, "1.13.1-mac-cpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-darwin-x86_64-1.13.1.tar.gz", "sha256": "b8b67823531b12cdbd0cf4bdaf97d207a5821541b8dd67a4a1e1a0356dee6057", }, "1.14.0-mac-cpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-darwin-x86_64-1.14.0.tar.gz", "sha256": "22c10ca842ef65018fae762dffe733843b537ec08701f8a59127a8a0692c4d7f", }, "1.15.0-mac-cpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-darwin-x86_64-1.15.0.tar.gz", "sha256": "1a9da42e31f613f1582cf996e3ead32528964994eb98b7c355923f2dc39bfce0", }, # There isn't an official libtensorflow release for TF 2.x so I had to build this from source # TODO(vip): Update to an official release once there is one "2.2.0-mac-cpu": { "url": "https://github.com/VivekPanyam/tensorflow-prebuilts/releases/download/0.0.1/libtensorflow2.2.0rc3+-cpu-darwin-x86_64.tar.gz", "sha256": "78e788a9ada69c8b6edd4061b21ee2a87dbcc41e0c55893c5b063140c28f969d", }, "2.5.0-mac-cpu": { "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-darwin-x86_64-2.5.0.tar.gz", "sha256": "", }, "2.6.2-mac-cpu": { # Note: they didn't release an updated libtensorflow for 2.6.2 (vs 2.6.0) "url": "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-darwin-x86_64-2.6.0.tar.gz", "sha256": "61c5478fa9ca813e5f30c536240bdbb77f1e5fd3d4687211baab84ecfe4bb3b9", }, } download_mapping = MAPPING["{}-{}-{}".format( version, "mac" if IS_MAC else "linux", "gpu" if IS_GPU else "cpu", )] download_url = download_mapping["url"] sha256 = download_mapping["sha256"] repository_ctx.download_and_extract(download_url, sha256 = sha256) repository_ctx.symlink(repository_ctx.path(Label(repository_ctx.attr.build_file)), "BUILD.bazel") # Create a file that specifies versioning information repository_ctx.file( "neuropod_backend_path.bzl", content = """ NEUROPOD_BACKEND_PATH = "{}/backends/tensorflow_{}{}/" """.format( NEUROPOD_VERSION, version, "_gpu" if IS_GPU else "", ).strip(), ) tensorflow_repository = repository_rule( implementation = _impl, environ = [ "NEUROPOD_TENSORFLOW_VERSION", "NEUROPOD_IS_GPU", ], attrs = {"build_file": attr.string(mandatory = True)}, )