1# Copyright 2021 gRPC authors. 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15load("@bazel_skylib//lib:selects.bzl", "selects") 16 17config_setting( 18 name = "darwin", 19 values = {"cpu": "darwin"}, 20) 21 22config_setting( 23 name = "darwin_x86_64", 24 values = {"cpu": "darwin_x86_64"}, 25) 26 27config_setting( 28 name = "darwin_arm64", 29 values = {"cpu": "darwin_arm64"}, 30) 31 32config_setting( 33 name = "darwin_arm64e", 34 values = {"cpu": "darwin_arm64e"}, 35) 36 37config_setting( 38 name = "windows", 39 values = {"cpu": "x64_windows"}, 40) 41 42config_setting( 43 name = "freebsd", 44 constraint_values = ["@platforms//os:freebsd"], 45) 46 47# Android is not officially supported through C++. 48# This just helps with the build for now. 49config_setting( 50 name = "android", 51 values = { 52 "crosstool_top": "//external:android/crosstool", 53 }, 54) 55 56# iOS is not officially supported through C++. 57# This just helps with the build for now. 58config_setting( 59 name = "ios_x86_64", 60 values = {"cpu": "ios_x86_64"}, 61) 62 63config_setting( 64 name = "ios_armv7", 65 values = {"cpu": "ios_armv7"}, 66) 67 68config_setting( 69 name = "ios_armv7s", 70 values = {"cpu": "ios_armv7s"}, 71) 72 73config_setting( 74 name = "ios_arm64", 75 values = {"cpu": "ios_arm64"}, 76) 77 78# The following architectures are found in 79# https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java 80config_setting( 81 name = "tvos_x86_64", 82 values = {"cpu": "tvos_x86_64"}, 83) 84 85config_setting( 86 name = "tvos_arm64", 87 values = {"cpu": "tvos_arm64"}, 88) 89 90config_setting( 91 name = "watchos_i386", 92 values = {"cpu": "watchos_i386"}, 93) 94 95config_setting( 96 name = "watchos_x86_64", 97 values = {"cpu": "watchos_x86_64"}, 98) 99 100config_setting( 101 name = "watchos_armv7k", 102 values = {"cpu": "watchos_armv7k"}, 103) 104 105config_setting( 106 name = "watchos_arm64_32", 107 values = {"cpu": "watchos_arm64_32"}, 108) 109 110selects.config_setting_group( 111 name = "apple", 112 match_any = [ 113 ":darwin", 114 ":darwin_x86_64", 115 ":darwin_arm64", 116 ":darwin_arm64e", 117 "ios_x86_64", 118 "ios_armv7", 119 "ios_armv7s", 120 "ios_arm64", 121 "tvos_x86_64", 122 "tvos_arm64", 123 "watchos_i386", 124 "watchos_x86_64", 125 "watchos_armv7k", 126 "watchos_arm64_32", 127 ], 128) 129 130COMMON_LIBUV_HEADERS = [ 131 "include/uv.h", 132 "include/uv/errno.h", 133 "include/uv/threadpool.h", 134 "include/uv/version.h", 135 "include/uv/tree.h", 136] 137 138UNIX_LIBUV_HEADERS = [ 139 "include/uv/unix.h", 140 "src/unix/atomic-ops.h", 141 "src/unix/internal.h", 142 "src/unix/spinlock.h", 143] 144 145LINUX_LIBUV_HEADERS = [ 146 "include/uv/linux.h", 147 "src/unix/linux-syscalls.h", 148] 149 150ANDROID_LIBUV_HEADERS = [ 151 "include/uv/android-ifaddrs.h", 152] 153 154DARWIN_LIBUV_HEADERS = [ 155 "include/uv/darwin.h", 156] 157 158WINDOWS_LIBUV_HEADERS = [ 159 "include/uv/win.h", 160 "src/win/atomicops-inl.h", 161 "src/win/handle-inl.h", 162 "src/win/internal.h", 163 "src/win/req-inl.h", 164 "src/win/stream-inl.h", 165 "src/win/winapi.h", 166 "src/win/winsock.h", 167] 168 169COMMON_LIBUV_SOURCES = [ 170 "src/fs-poll.c", 171 "src/heap-inl.h", 172 "src/idna.c", 173 "src/idna.h", 174 "src/inet.c", 175 "src/queue.h", 176 "src/strscpy.c", 177 "src/strscpy.h", 178 "src/threadpool.c", 179 "src/timer.c", 180 "src/uv-data-getter-setters.c", 181 "src/uv-common.c", 182 "src/uv-common.h", 183 "src/version.c", 184] 185 186UNIX_LIBUV_SOURCES = [ 187 "src/unix/async.c", 188 "src/unix/atomic-ops.h", 189 "src/unix/core.c", 190 "src/unix/dl.c", 191 "src/unix/fs.c", 192 "src/unix/getaddrinfo.c", 193 "src/unix/getnameinfo.c", 194 "src/unix/internal.h", 195 "src/unix/loop.c", 196 "src/unix/loop-watcher.c", 197 "src/unix/pipe.c", 198 "src/unix/poll.c", 199 "src/unix/process.c", 200 "src/unix/signal.c", 201 "src/unix/spinlock.h", 202 "src/unix/stream.c", 203 "src/unix/tcp.c", 204 "src/unix/thread.c", 205 "src/unix/tty.c", 206 "src/unix/udp.c", 207] 208 209LINUX_LIBUV_SOURCES = [ 210 "src/unix/linux-core.c", 211 "src/unix/linux-inotify.c", 212 "src/unix/linux-syscalls.c", 213 "src/unix/linux-syscalls.h", 214 "src/unix/procfs-exepath.c", 215 "src/unix/proctitle.c", 216 "src/unix/sysinfo-loadavg.c", 217 "src/unix/sysinfo-memory.c", 218] 219 220ANDROID_LIBUV_SOURCES = [ 221 "src/unix/android-ifaddrs.c", 222 "src/unix/pthread-fixes.c", 223] 224 225DARWIN_LIBUV_SOURCES = [ 226 "src/unix/bsd-ifaddrs.c", 227 "src/unix/darwin.c", 228 "src/unix/fsevents.c", 229 "src/unix/kqueue.c", 230 "src/unix/darwin-proctitle.c", 231 "src/unix/proctitle.c", 232] 233 234WINDOWS_LIBUV_SOURCES = [ 235 "src/win/async.c", 236 "src/win/atomicops-inl.h", 237 "src/win/core.c", 238 "src/win/detect-wakeup.c", 239 "src/win/dl.c", 240 "src/win/error.c", 241 "src/win/fs-event.c", 242 "src/win/fs.c", 243 "src/win/getaddrinfo.c", 244 "src/win/getnameinfo.c", 245 "src/win/handle.c", 246 "src/win/handle-inl.h", 247 "src/win/internal.h", 248 "src/win/loop-watcher.c", 249 "src/win/pipe.c", 250 "src/win/poll.c", 251 "src/win/process-stdio.c", 252 "src/win/process.c", 253 "src/win/req-inl.h", 254 "src/win/signal.c", 255 "src/win/stream.c", 256 "src/win/stream-inl.h", 257 "src/win/tcp.c", 258 "src/win/thread.c", 259 "src/win/tty.c", 260 "src/win/udp.c", 261 "src/win/util.c", 262 "src/win/winapi.c", 263 "src/win/winapi.h", 264 "src/win/winsock.c", 265 "src/win/winsock.h", 266] 267 268cc_library( 269 name = "libuv", 270 srcs = select({ 271 ":android": COMMON_LIBUV_SOURCES + UNIX_LIBUV_SOURCES + LINUX_LIBUV_SOURCES + ANDROID_LIBUV_SOURCES, 272 ":apple": COMMON_LIBUV_SOURCES + UNIX_LIBUV_SOURCES + DARWIN_LIBUV_SOURCES, 273 ":windows": COMMON_LIBUV_SOURCES + WINDOWS_LIBUV_SOURCES, 274 "//conditions:default": COMMON_LIBUV_SOURCES + UNIX_LIBUV_SOURCES + LINUX_LIBUV_SOURCES, 275 }), 276 hdrs = select({ 277 ":android": COMMON_LIBUV_HEADERS + UNIX_LIBUV_HEADERS + LINUX_LIBUV_HEADERS + ANDROID_LIBUV_HEADERS, 278 ":apple": COMMON_LIBUV_HEADERS + UNIX_LIBUV_HEADERS + DARWIN_LIBUV_HEADERS, 279 ":windows": COMMON_LIBUV_HEADERS + WINDOWS_LIBUV_HEADERS, 280 "//conditions:default": COMMON_LIBUV_HEADERS + UNIX_LIBUV_HEADERS + LINUX_LIBUV_HEADERS, 281 }), 282 copts = [ 283 "-D_LARGEFILE_SOURCE", 284 "-D_FILE_OFFSET_BITS=64", 285 "-D_GNU_SOURCE", 286 "-pthread", 287 "--std=gnu89", 288 "-pedantic", 289 "-Wno-error", 290 "-Wno-strict-aliasing", 291 "-Wstrict-aliasing", 292 "-O2", 293 "-Wno-implicit-function-declaration", 294 "-Wno-unused-function", 295 "-Wno-unused-variable", 296 ] + select({ 297 ":apple": [], 298 ":windows": [ 299 "-DWIN32_LEAN_AND_MEAN", 300 "-D_WIN32_WINNT=0x0600", 301 ], 302 "//conditions:default": [ 303 "-Wno-tree-vrp", 304 "-Wno-omit-frame-pointer", 305 "-D_DARWIN_USE_64_BIT_INODE=1", 306 "-D_DARWIN_UNLIMITED_SELECT=1", 307 ], 308 }), 309 includes = [ 310 "include", 311 "src", 312 ], 313 linkopts = select({ 314 ":windows": [ 315 "-Xcrosstool-compilation-mode=$(COMPILATION_MODE)", 316 "-Wl,Iphlpapi.lib", 317 "-Wl,Psapi.lib", 318 "-Wl,User32.lib", 319 "-Wl,Userenv.lib", 320 ], 321 "//conditions:default": [], 322 }), 323 visibility = [ 324 "//visibility:public", 325 ], 326) 327 328cc_library( 329 name = "libuv_test", 330 srcs = [ 331 "test/test-timer.c", 332 "test/test-timer-again.c", 333 "test/test-timer-from-check.c", 334 "test/test-getaddrinfo.c", 335 "test/test-gethostname.c", 336 "test/test-getnameinfo.c", 337 "test/test-getsockname.c", 338 ], 339 hdrs = [ 340 "test/runner.h", 341 "test/runner-unix.h", 342 "test/task.h", 343 ], 344 includes = [ 345 "include", 346 "src", 347 ], 348 deps = [ 349 ":libuv" 350 ], 351 copts = [ 352 "-D_LARGEFILE_SOURCE", 353 "-D_FILE_OFFSET_BITS=64", 354 "-D_GNU_SOURCE", 355 "-pthread", 356 "--std=gnu89", 357 "-pedantic", 358 "-Wno-error", 359 "-Wno-strict-aliasing", 360 "-Wstrict-aliasing", 361 "-O2", 362 "-Wno-implicit-function-declaration", 363 "-Wno-unused-function", 364 "-Wno-unused-variable", 365 ] + select({ 366 ":apple": [], 367 ":windows": [ 368 "-DWIN32_LEAN_AND_MEAN", 369 "-D_WIN32_WINNT=0x0600", 370 ], 371 "//conditions:default": [ 372 "-Wno-tree-vrp", 373 "-Wno-omit-frame-pointer", 374 "-D_DARWIN_USE_64_BIT_INODE=1", 375 "-D_DARWIN_UNLIMITED_SELECT=1", 376 ], 377 }), 378 linkopts = select({ 379 ":windows": [ 380 "-Xcrosstool-compilation-mode=$(COMPILATION_MODE)", 381 "-Wl,Iphlpapi.lib", 382 "-Wl,Psapi.lib", 383 "-Wl,User32.lib", 384 "-Wl,Userenv.lib", 385 ], 386 "//conditions:default": [], 387 }), 388 visibility = [ 389 "//visibility:public", 390 ], 391) 392