1# This content is inspired by https://github.com/open-telemetry/opentelemetry-cpp/blob/v1.8.2/bazel/curl.BUILD 2 3load("@rules_cc//cc:defs.bzl", "cc_library") 4 5BASE_CURL_COPTS = [ 6 # Disable everything else except HTTP protocol. 7 "-DHTTP_ONLY=1", 8 "-DENABLE_IPV6=1", 9 "-DGETHOSTNAME_TYPE_ARG2=size_t", 10 "-DGETSERVBYPORT_R_ARGS=6", 11 "-DGETSERVBYPORT_R_BUFSIZE=4096", 12 "-DHAVE_ALARM=1", 13 "-DHAVE_ALLOCA_H=1", 14 "-DHAVE_ARPA_INET_H=1", 15 "-DHAVE_ARPA_TFTP_H=1", 16 "-DHAVE_ASSERT_H=1", 17 "-DHAVE_BASENAME=1", 18 "-DHAVE_BOOL_T=1", 19 "-DHAVE_CLOCK_GETTIME_MONOTONIC=1", 20 "-DHAVE_CONNECT=1", 21 "-DHAVE_DLFCN_H=1", 22 "-DHAVE_ENGINE_LOAD_BUILTIN_ENGINES=1", 23 "-DHAVE_ERRNO_H=1", 24 "-DHAVE_FCNTL=1", 25 "-DHAVE_FCNTL_H=1", 26 "-DHAVE_FCNTL_O_NONBLOCK=1", 27 "-DHAVE_FDOPEN=1", 28 "-DHAVE_FREEADDRINFO=1", 29 "-DHAVE_FREEIFADDRS=1", 30 "-DHAVE_FSETXATTR=1", 31 "-DHAVE_FSETXATTR_5=1", 32 "-DHAVE_FTRUNCATE=1", 33 "-DHAVE_GAI_STRERROR=1", 34 "-DHAVE_GETADDRINFO=1", 35 "-DHAVE_GETADDRINFO_THREADSAFE=1", 36 "-DHAVE_GETEUID=1", 37 "-DHAVE_GETHOSTBYADDR=1", 38 "-DHAVE_GETHOSTBYADDR_R=1", 39 "-DHAVE_GETHOSTBYADDR_R_8=1", 40 "-DHAVE_GETHOSTBYNAME=1", 41 "-DHAVE_GETHOSTBYNAME_R=1", 42 "-DHAVE_GETHOSTBYNAME_R_6=1", 43 "-DHAVE_GETHOSTNAME=1", 44 "-DHAVE_GETIFADDRS=1", 45 "-DHAVE_GETNAMEINFO=1", 46 "-DHAVE_GETPPID=1", 47 "-DHAVE_GETPWUID=1", 48 "-DHAVE_GETPWUID_R=1", 49 "-DHAVE_GETRLIMIT=1", 50 "-DHAVE_GETSERVBYPORT_R=1", 51 "-DHAVE_GETTIMEOFDAY=1", 52 "-DHAVE_GMTIME_R=1", 53 "-DHAVE_IFADDRS_H=1", 54 "-DHAVE_IF_NAMETOINDEX=1", 55 "-DHAVE_INET_NTOP=1", 56 "-DHAVE_INET_PTON=1", 57 "-DHAVE_INTTYPES_H=1", 58 "-DHAVE_IOCTL=1", 59 "-DHAVE_IOCTL_FIONBIO=1", 60 "-DHAVE_IOCTL_SIOCGIFADDR=1", 61 "-DHAVE_LIBGEN_H=1", 62 "-DHAVE_LL=1", 63 "-DHAVE_LOCALE_H=1", 64 "-DHAVE_LOCALTIME_R=1", 65 "-DHAVE_LONGLONG=1", 66 "-DHAVE_MALLOC_H=1", 67 "-DHAVE_MEMORY_H=1", 68 "-DHAVE_NETDB_H=1", 69 "-DHAVE_NETINET_IN_H=1", 70 "-DHAVE_NETINET_TCP_H=1", 71 "-DHAVE_NET_IF_H=1", 72 "-DHAVE_PIPE=1", 73 "-DHAVE_POLL=1", 74 "-DHAVE_POLL_FINE=1", 75 "-DHAVE_POLL_H=1", 76 "-DHAVE_POSIX_STRERROR_R=1", 77 "-DHAVE_PTHREAD_H=1", 78 "-DHAVE_PWD_H=1", 79 "-DHAVE_RECV=1", 80 "-DHAVE_SELECT=1", 81 "-DHAVE_SEND=1", 82 "-DHAVE_SETJMP_H=1", 83 "-DHAVE_SETLOCALE=1", 84 "-DHAVE_SETRLIMIT=1", 85 "-DHAVE_SETSOCKOPT=1", 86 "-DHAVE_SGTTY_H=1", 87 "-DHAVE_SIGACTION=1", 88 "-DHAVE_SIGINTERRUPT=1", 89 "-DHAVE_SIGNAL=1", 90 "-DHAVE_SIGNAL_H=1", 91 "-DHAVE_SIGSETJMP=1", 92 "-DHAVE_SIG_ATOMIC_T=1", 93 "-DHAVE_SOCKADDR_IN6_SIN6_SCOPE_ID=1", 94 "-DHAVE_SOCKET=1", 95 "-DHAVE_SOCKETPAIR=1", 96 "-DHAVE_STDBOOL_H=1", 97 "-DHAVE_STDINT_H=1", 98 "-DHAVE_STDIO_H=1", 99 "-DHAVE_STDLIB_H=1", 100 "-DHAVE_STRCASECMP=1", 101 "-DHAVE_STRDUP=1", 102 "-DHAVE_STRERROR_R=1", 103 "-DHAVE_STRINGS_H=1", 104 "-DHAVE_STRING_H=1", 105 "-DHAVE_STRNCASECMP=1", 106 "-DHAVE_STRSTR=1", 107 "-DHAVE_STRTOK_R=1", 108 "-DHAVE_STRTOLL=1", 109 "-DHAVE_STRUCT_SOCKADDR_STORAGE=1", 110 "-DHAVE_STRUCT_TIMEVAL=1", 111 "-DHAVE_SYS_IOCTL_H=1", 112 "-DHAVE_SYS_PARAM_H=1", 113 "-DHAVE_SYS_POLL_H=1", 114 "-DHAVE_SYS_RESOURCE_H=1", 115 "-DHAVE_SYS_SELECT_H=1", 116 "-DHAVE_SYS_SOCKET_H=1", 117 "-DHAVE_SYS_STAT_H=1", 118 "-DHAVE_SYS_TIME_H=1", 119 "-DHAVE_SYS_TYPES_H=1", 120 "-DHAVE_SYS_UIO_H=1", 121 "-DHAVE_SYS_UN_H=1", 122 "-DHAVE_SYS_WAIT_H=1", 123 "-DHAVE_SYS_XATTR_H=1", 124 "-DHAVE_TERMIOS_H=1", 125 "-DHAVE_TERMIO_H=1", 126 "-DHAVE_TIME_H=1", 127 "-DHAVE_UNISTD_H=1", 128 "-DHAVE_UTIME=1", 129 "-DHAVE_UTIMES=1", 130 "-DHAVE_UTIME_H=1", 131 "-DHAVE_VARIADIC_MACROS_C99=1", 132 "-DHAVE_VARIADIC_MACROS_GCC=1", 133 "-DHAVE_WRITABLE_ARGV=1", 134 "-DHAVE_WRITEV=1", 135 "-DRECV_TYPE_ARG1=int", 136 "-DRECV_TYPE_ARG2=void*", 137 "-DRECV_TYPE_ARG3=size_t", 138 "-DRECV_TYPE_ARG4=int", 139 "-DRECV_TYPE_RETV=ssize_t", 140 "-DRETSIGTYPE=void", 141 "-DSELECT_QUAL_ARG5=", 142 "-DSELECT_TYPE_ARG1=int", 143 "-DSELECT_TYPE_ARG234=fd_set*", 144 "-DSELECT_TYPE_RETV=int", 145 "-DSEND_QUAL_ARG2=const", 146 "-DSEND_TYPE_ARG1=int", 147 "-DSEND_TYPE_ARG2=void*", 148 "-DSEND_TYPE_ARG3=size_t", 149 "-DSEND_TYPE_ARG4=int", 150 "-DSEND_TYPE_RETV=ssize_t", 151 "-DSIZEOF_CURL_OFF_T=8", 152 "-DSIZEOF_INT=4", 153 "-DSIZEOF_LONG=8", 154 "-DSIZEOF_OFF_T=8", 155 "-DSIZEOF_SHORT=2", 156 "-DSIZEOF_SIZE_T=8", 157 "-DSIZEOF_TIME_T=8", 158 "-DSTDC_HEADERS=1", 159 "-DSTRERROR_R_TYPE_ARG3=size_t", 160 "-DTIME_WITH_SYS_TIME=1", 161 "-DUSE_THREADS_POSIX=1", 162 "-DUSE_UNIX_SOCKETS=1", 163 164 # Extra defines needed by curl 165 "-DBUILDING_LIBCURL", 166 "-DCURL_HIDDEN_SYMBOLS", 167] 168 169CURL_COPTS = select({ 170 "@platforms//os:macos": BASE_CURL_COPTS, 171 "@platforms//os:windows": [ 172 # Disable everything else except HTTP protocol. 173 "/DHTTP_ONLY=1", 174 "/DCURL_STATICLIB", 175 "/DWIN32", 176 "/DBUILDING_LIBCURL", 177 "/DUSE_WIN32_IDN", 178 "/DWANT_IDN_PROTOTYPES", 179 "/DUSE_IPV6", 180 "/DUSE_WINDOWS_SSPI", 181 "/DUSE_SCHANNEL", 182 ], 183 "//conditions:default": BASE_CURL_COPTS + [ 184 "-DHAVE_LINUX_TCP_H=1", 185 "-DHAVE_MSG_NOSIGNAL=1", 186 ], 187}) 188 189cc_library( 190 name = "curl", 191 srcs = glob([ 192 "lib/**/*.c", 193 ]), 194 hdrs = glob([ 195 "include/curl/*.h", 196 ]), 197 copts = CURL_COPTS + [ 198 "-DOS=\\\"os\\\"", 199 ], 200 defines = ["CURL_STATICLIB"], 201 includes = [ 202 "include/", 203 "lib/", 204 ], 205 linkopts = select({ 206 "@platforms//os:macos": [ 207 "-framework SystemConfiguration", 208 "-framework CoreFoundation", 209 "-lpthread", 210 ], 211 "@platforms//os:windows": [ 212 "-DEFAULTLIB:ws2_32.lib", 213 "-DEFAULTLIB:advapi32.lib", 214 "-DEFAULTLIB:crypt32.lib", 215 "-DEFAULTLIB:Normaliz.lib", 216 ], 217 "//conditions:default": [ 218 "-lpthread", 219 ], 220 }), 221 textual_hdrs = glob([ 222 "lib/**/*.h", 223 ]), 224 visibility = ["//visibility:public"], 225) 226