# Copyright 2021 gRPC authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. load("@bazel_skylib//lib:selects.bzl", "selects") config_setting( name = "darwin", values = {"cpu": "darwin"}, ) config_setting( name = "darwin_x86_64", values = {"cpu": "darwin_x86_64"}, ) config_setting( name = "darwin_arm64", values = {"cpu": "darwin_arm64"}, ) config_setting( name = "darwin_arm64e", values = {"cpu": "darwin_arm64e"}, ) config_setting( name = "windows", values = {"cpu": "x64_windows"}, ) config_setting( name = "freebsd", constraint_values = ["@platforms//os:freebsd"], ) # Android is not officially supported through C++. # This just helps with the build for now. config_setting( name = "android", values = { "crosstool_top": "//external:android/crosstool", }, ) # iOS is not officially supported through C++. # This just helps with the build for now. config_setting( name = "ios_x86_64", values = {"cpu": "ios_x86_64"}, ) config_setting( name = "ios_armv7", values = {"cpu": "ios_armv7"}, ) config_setting( name = "ios_armv7s", values = {"cpu": "ios_armv7s"}, ) config_setting( name = "ios_arm64", values = {"cpu": "ios_arm64"}, ) # The following architectures are found in # https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java config_setting( name = "tvos_x86_64", values = {"cpu": "tvos_x86_64"}, ) config_setting( name = "tvos_arm64", values = {"cpu": "tvos_arm64"}, ) config_setting( name = "watchos_i386", values = {"cpu": "watchos_i386"}, ) config_setting( name = "watchos_x86_64", values = {"cpu": "watchos_x86_64"}, ) config_setting( name = "watchos_armv7k", values = {"cpu": "watchos_armv7k"}, ) config_setting( name = "watchos_arm64_32", values = {"cpu": "watchos_arm64_32"}, ) selects.config_setting_group( name = "apple", match_any = [ ":darwin", ":darwin_x86_64", ":darwin_arm64", ":darwin_arm64e", "ios_x86_64", "ios_armv7", "ios_armv7s", "ios_arm64", "tvos_x86_64", "tvos_arm64", "watchos_i386", "watchos_x86_64", "watchos_armv7k", "watchos_arm64_32", ], ) COMMON_LIBUV_HEADERS = [ "include/uv.h", "include/uv/errno.h", "include/uv/threadpool.h", "include/uv/version.h", "include/uv/tree.h", ] UNIX_LIBUV_HEADERS = [ "include/uv/unix.h", "src/unix/atomic-ops.h", "src/unix/internal.h", "src/unix/spinlock.h", ] LINUX_LIBUV_HEADERS = [ "include/uv/linux.h", "src/unix/linux-syscalls.h", ] ANDROID_LIBUV_HEADERS = [ "include/uv/android-ifaddrs.h", ] DARWIN_LIBUV_HEADERS = [ "include/uv/darwin.h", ] WINDOWS_LIBUV_HEADERS = [ "include/uv/win.h", "src/win/atomicops-inl.h", "src/win/handle-inl.h", "src/win/internal.h", "src/win/req-inl.h", "src/win/stream-inl.h", "src/win/winapi.h", "src/win/winsock.h", ] COMMON_LIBUV_SOURCES = [ "src/fs-poll.c", "src/heap-inl.h", "src/idna.c", "src/idna.h", "src/inet.c", "src/queue.h", "src/strscpy.c", "src/strscpy.h", "src/threadpool.c", "src/timer.c", "src/uv-data-getter-setters.c", "src/uv-common.c", "src/uv-common.h", "src/version.c", ] UNIX_LIBUV_SOURCES = [ "src/unix/async.c", "src/unix/atomic-ops.h", "src/unix/core.c", "src/unix/dl.c", "src/unix/fs.c", "src/unix/getaddrinfo.c", "src/unix/getnameinfo.c", "src/unix/internal.h", "src/unix/loop.c", "src/unix/loop-watcher.c", "src/unix/pipe.c", "src/unix/poll.c", "src/unix/process.c", "src/unix/signal.c", "src/unix/spinlock.h", "src/unix/stream.c", "src/unix/tcp.c", "src/unix/thread.c", "src/unix/tty.c", "src/unix/udp.c", ] LINUX_LIBUV_SOURCES = [ "src/unix/linux-core.c", "src/unix/linux-inotify.c", "src/unix/linux-syscalls.c", "src/unix/linux-syscalls.h", "src/unix/procfs-exepath.c", "src/unix/proctitle.c", "src/unix/sysinfo-loadavg.c", "src/unix/sysinfo-memory.c", ] ANDROID_LIBUV_SOURCES = [ "src/unix/android-ifaddrs.c", "src/unix/pthread-fixes.c", ] DARWIN_LIBUV_SOURCES = [ "src/unix/bsd-ifaddrs.c", "src/unix/darwin.c", "src/unix/fsevents.c", "src/unix/kqueue.c", "src/unix/darwin-proctitle.c", "src/unix/proctitle.c", ] WINDOWS_LIBUV_SOURCES = [ "src/win/async.c", "src/win/atomicops-inl.h", "src/win/core.c", "src/win/detect-wakeup.c", "src/win/dl.c", "src/win/error.c", "src/win/fs-event.c", "src/win/fs.c", "src/win/getaddrinfo.c", "src/win/getnameinfo.c", "src/win/handle.c", "src/win/handle-inl.h", "src/win/internal.h", "src/win/loop-watcher.c", "src/win/pipe.c", "src/win/poll.c", "src/win/process-stdio.c", "src/win/process.c", "src/win/req-inl.h", "src/win/signal.c", "src/win/stream.c", "src/win/stream-inl.h", "src/win/tcp.c", "src/win/thread.c", "src/win/tty.c", "src/win/udp.c", "src/win/util.c", "src/win/winapi.c", "src/win/winapi.h", "src/win/winsock.c", "src/win/winsock.h", ] cc_library( name = "libuv", srcs = select({ ":android": COMMON_LIBUV_SOURCES + UNIX_LIBUV_SOURCES + LINUX_LIBUV_SOURCES + ANDROID_LIBUV_SOURCES, ":apple": COMMON_LIBUV_SOURCES + UNIX_LIBUV_SOURCES + DARWIN_LIBUV_SOURCES, ":windows": COMMON_LIBUV_SOURCES + WINDOWS_LIBUV_SOURCES, "//conditions:default": COMMON_LIBUV_SOURCES + UNIX_LIBUV_SOURCES + LINUX_LIBUV_SOURCES, }), hdrs = select({ ":android": COMMON_LIBUV_HEADERS + UNIX_LIBUV_HEADERS + LINUX_LIBUV_HEADERS + ANDROID_LIBUV_HEADERS, ":apple": COMMON_LIBUV_HEADERS + UNIX_LIBUV_HEADERS + DARWIN_LIBUV_HEADERS, ":windows": COMMON_LIBUV_HEADERS + WINDOWS_LIBUV_HEADERS, "//conditions:default": COMMON_LIBUV_HEADERS + UNIX_LIBUV_HEADERS + LINUX_LIBUV_HEADERS, }), copts = [ "-D_LARGEFILE_SOURCE", "-D_FILE_OFFSET_BITS=64", "-D_GNU_SOURCE", "-pthread", "--std=gnu89", "-pedantic", "-Wno-error", "-Wno-strict-aliasing", "-Wstrict-aliasing", "-O2", "-Wno-implicit-function-declaration", "-Wno-unused-function", "-Wno-unused-variable", ] + select({ ":apple": [], ":windows": [ "-DWIN32_LEAN_AND_MEAN", "-D_WIN32_WINNT=0x0600", ], "//conditions:default": [ "-Wno-tree-vrp", "-Wno-omit-frame-pointer", "-D_DARWIN_USE_64_BIT_INODE=1", "-D_DARWIN_UNLIMITED_SELECT=1", ], }), includes = [ "include", "src", ], linkopts = select({ ":windows": [ "-Xcrosstool-compilation-mode=$(COMPILATION_MODE)", "-Wl,Iphlpapi.lib", "-Wl,Psapi.lib", "-Wl,User32.lib", "-Wl,Userenv.lib", ], "//conditions:default": [], }), visibility = [ "//visibility:public", ], )