• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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