load("@rules_cc//cc:defs.bzl", "cc_library") load("@pytorch//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", ], )