| load("@rules_cc//cc:defs.bzl", "cc_library") | 
 | load("@//third_party:substitution.bzl", "header_template_rule") | 
 |  | 
 | LIBUV_COMMON_SRCS = [ | 
 |     "third_party/libuv/src/fs-poll.c", | 
 |     "third_party/libuv/src/idna.c", | 
 |     "third_party/libuv/src/inet.c", | 
 |     "third_party/libuv/src/random.c", | 
 |     "third_party/libuv/src/strscpy.c", | 
 |     "third_party/libuv/src/threadpool.c", | 
 |     "third_party/libuv/src/timer.c", | 
 |     "third_party/libuv/src/uv-common.c", | 
 |     "third_party/libuv/src/uv-data-getter-setters.c", | 
 |     "third_party/libuv/src/version.c", | 
 | ] | 
 |  | 
 | LIBUV_POSIX_SRCS = [ | 
 |     "third_party/libuv/src/unix/async.c", | 
 |     "third_party/libuv/src/unix/core.c", | 
 |     "third_party/libuv/src/unix/dl.c", | 
 |     "third_party/libuv/src/unix/fs.c", | 
 |     "third_party/libuv/src/unix/getaddrinfo.c", | 
 |     "third_party/libuv/src/unix/getnameinfo.c", | 
 |     "third_party/libuv/src/unix/loop.c", | 
 |     "third_party/libuv/src/unix/loop-watcher.c", | 
 |     "third_party/libuv/src/unix/pipe.c", | 
 |     "third_party/libuv/src/unix/poll.c", | 
 |     "third_party/libuv/src/unix/process.c", | 
 |     "third_party/libuv/src/unix/random-devurandom.c", | 
 |     "third_party/libuv/src/unix/signal.c", | 
 |     "third_party/libuv/src/unix/stream.c", | 
 |     "third_party/libuv/src/unix/tcp.c", | 
 |     "third_party/libuv/src/unix/thread.c", | 
 |     "third_party/libuv/src/unix/tty.c", | 
 |     "third_party/libuv/src/unix/udp.c", | 
 | ] | 
 |  | 
 | LIBUV_LINUX_SRCS = LIBUV_POSIX_SRCS + [ | 
 |     "third_party/libuv/src/unix/proctitle.c", | 
 |     "third_party/libuv/src/unix/linux-core.c", | 
 |     "third_party/libuv/src/unix/linux-inotify.c", | 
 |     "third_party/libuv/src/unix/linux-syscalls.c", | 
 |     "third_party/libuv/src/unix/procfs-exepath.c", | 
 |     "third_party/libuv/src/unix/random-getrandom.c", | 
 |     "third_party/libuv/src/unix/random-sysctl-linux.c", | 
 | ] | 
 |  | 
 | cc_library( | 
 |     name = "libuv", | 
 |     srcs = LIBUV_COMMON_SRCS + LIBUV_LINUX_SRCS, | 
 |     includes = [ | 
 |         "third_party/libuv/include", | 
 |         "third_party/libuv/src", | 
 |     ], | 
 |     hdrs = glob( | 
 |         [ | 
 |             "third_party/libuv/include/*.h", | 
 |             "third_party/libuv/include/uv/*.h", | 
 |             "third_party/libuv/src/*.h", | 
 |             "third_party/libuv/src/unix/*.h", | 
 |         ], | 
 |     ), | 
 |     visibility = ["//visibility:public"], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "libnop", | 
 |     srcs = [], | 
 |     includes = ["third_party/libnop/include"], | 
 |     hdrs = glob(["third_party/libnop/include/**/*.h"]), | 
 | ) | 
 |  | 
 | header_template_rule( | 
 |     name = "tensorpipe_cpu_config_header", | 
 |     src = "tensorpipe/config.h.in", | 
 |     out = "tensorpipe/config.h", | 
 |     substitutions = { | 
 |         "#cmakedefine01 TENSORPIPE_HAS_SHM_TRANSPORT": "#define TENSORPIPE_HAS_SHM_TRANSPORT 1", | 
 |         "#cmakedefine01 TENSORPIPE_HAS_IBV_TRANSPORT": "#define TENSORPIPE_HAS_IBV_TRANSPORT 1", | 
 |         "#cmakedefine01 TENSORPIPE_HAS_CMA_CHANNEL": "#define TENSORPIPE_HAS_CMA_CHANNEL 1", | 
 |     }, | 
 | ) | 
 |  | 
 | header_template_rule( | 
 |     name = "tensorpipe_cuda_config_header", | 
 |     src = "tensorpipe/config_cuda.h.in", | 
 |     out = "tensorpipe/config_cuda.h", | 
 |     substitutions = { | 
 |         "#cmakedefine01 TENSORPIPE_HAS_CUDA_IPC_CHANNEL": "#define TENSORPIPE_HAS_CUDA_IPC_CHANNEL 1", | 
 |         "#cmakedefine01 TENSORPIPE_HAS_CUDA_GDR_CHANNEL": "#define TENSORPIPE_HAS_CUDA_GDR_CHANNEL 1", | 
 |     }, | 
 | ) | 
 |  | 
 | # We explicitly list the CUDA headers & sources, and we consider everything else | 
 | # as CPU (using a catch-all glob). This is both because there's fewer CUDA files | 
 | # (thus making it easier to list them exhaustively) and because it will make it | 
 | # more likely to catch a misclassified file: if we forget to mark a file as CUDA | 
 | # we'll try to build it on CPU and that's likely to fail. | 
 |  | 
 | TENSORPIPE_CUDA_HEADERS = [ | 
 |     "tensorpipe/tensorpipe_cuda.h", | 
 |     "tensorpipe/channel/cuda_basic/*.h", | 
 |     "tensorpipe/channel/cuda_gdr/*.h", | 
 |     "tensorpipe/channel/cuda_ipc/*.h", | 
 |     "tensorpipe/channel/cuda_xth/*.h", | 
 |     "tensorpipe/common/cuda.h", | 
 |     "tensorpipe/common/cuda_buffer.h", | 
 |     "tensorpipe/common/cuda_lib.h", | 
 |     "tensorpipe/common/cuda_loop.h", | 
 |     "tensorpipe/common/nvml_lib.h", | 
 | ] | 
 |  | 
 | TENSORPIPE_CUDA_SOURCES = [ | 
 |     "tensorpipe/channel/cuda_basic/*.cc", | 
 |     "tensorpipe/channel/cuda_gdr/*.cc", | 
 |     "tensorpipe/channel/cuda_ipc/*.cc", | 
 |     "tensorpipe/channel/cuda_xth/*.cc", | 
 |     "tensorpipe/common/cuda_buffer.cc", | 
 |     "tensorpipe/common/cuda_loop.cc", | 
 | ] | 
 |  | 
 | TENSORPIPE_CPU_HEADERS = glob( | 
 |     [ | 
 |         "tensorpipe/*.h", | 
 |         "tensorpipe/channel/*.h", | 
 |         "tensorpipe/channel/*/*.h", | 
 |         "tensorpipe/common/*.h", | 
 |         "tensorpipe/core/*.h", | 
 |         "tensorpipe/transport/*.h", | 
 |         "tensorpipe/transport/*/*.h", | 
 |     ], | 
 |     exclude=TENSORPIPE_CUDA_HEADERS) | 
 |  | 
 | TENSORPIPE_CPU_SOURCES = glob( | 
 |     [ | 
 |         "tensorpipe/*.cc", | 
 |         "tensorpipe/channel/*.cc", | 
 |         "tensorpipe/channel/*/*.cc", | 
 |         "tensorpipe/common/*.cc", | 
 |         "tensorpipe/core/*.cc", | 
 |         "tensorpipe/transport/*.cc", | 
 |         "tensorpipe/transport/*/*.cc", | 
 |     ], | 
 |     exclude=TENSORPIPE_CUDA_SOURCES) | 
 |  | 
 | cc_library( | 
 |     name = "tensorpipe_cpu", | 
 |     srcs = TENSORPIPE_CPU_SOURCES, | 
 |     hdrs = TENSORPIPE_CPU_HEADERS + [":tensorpipe_cpu_config_header"], | 
 |     includes = [ | 
 |         ".", | 
 |     ], | 
 |     copts = [ | 
 |         "-std=c++14", | 
 |     ], | 
 |     visibility = ["//visibility:public"], | 
 |     deps = [ | 
 |         ":libnop", | 
 |         ":libuv", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "tensorpipe_cuda", | 
 |     srcs = glob(TENSORPIPE_CUDA_SOURCES), | 
 |     hdrs = glob(TENSORPIPE_CUDA_HEADERS) + [":tensorpipe_cuda_config_header"], | 
 |     includes = [ | 
 |         ".", | 
 |     ], | 
 |     copts = [ | 
 |         "-std=c++14", | 
 |     ], | 
 |     visibility = ["//visibility:public"], | 
 |     deps = [ | 
 |         ":tensorpipe_cpu", | 
 |         "@cuda", | 
 |     ], | 
 | ) |