[Tarantool-patches] [PATCH] build: link bundled libcurl with c-ares
Serge Petrenko
sergepetrenko at tarantool.org
Tue Jan 21 15:17:49 MSK 2020
> 18 дек. 2019 г., в 5:33, Alexander Turenko <alexander.turenko at tarantool.org> написал(а):
>
> I brief: I would compare build times of c-ares with `./configure && make
> -j` against `cmake . && make -j` and let's start with using ./configure
> if the difference is not significant, but otherwise use CMake from
> beginning.
>
> See other thoughts below.
>
> WBR, Alexander Turenko.
>
> ——
Hi! Thank you for review!
I sent v2 and fixed what you’ve pointed out.
>
> I guess that src/CMakeLists.txt will give a warning on static build: see
> around `${libstatic} STREQUAL bundled-libcurl` line.
Fixed.
>
> I also guess that using CMake for luajit, curl and c-ares may solve
> several problems: build time, passing toolchain and Mac OS specific
> flags, handling -DCMAKE_BUILD_TYPE in subprojects, clean out-of-source
> build. Let's verify at least build time: if ./configure adds much time,
> then we'll make other developers angry. Maybe it worth to use CMake for
> c-ares from begnning.
I’ve done that, and you’re right.
Here are `time (cmake . && make -j)` outputs
when using configure for c-ares
real 3m16.989s
user 4m45.145s
sys 1m45.434s
and cmake, respectively
real 2m2.913s
user 3m55.688s
sys 1m17.485s
>
> Don't sure whether it worth to copy CMakeLists.txt from c-ares to our
> cmake/ directory. Let's start w/o copy and consider to do it if we'll
> need to change something.
>
> I don't sure which pros and cons have using of ExternalProject(), it
> seems we should look a bit into this.
>
You see, we need c-ares installed, since curl depends on an existing c-ares
installation. So, curl requires that c-ares is installed on build step already.
We cannot use add_subdirectory. It will make cmake run build steps for all the
subdirs first, and only then install them.
ExternalProject_Add does exactly what we need. It runs both build and install
steps of the external project on parent’s build step.
> I also don't sure whether tarantool-specific flags will be passed for
> c-ares when we'll use CMake (with / without ExternalProject()). Some of
> them we should pass (such as -UNDEBUG that is set by
> -DCMAKE_BUILD_TYPE=Debug), some maybe not (need to verify
> add_compile_flags() macro calls at least).
All the cmake options need to be passed to external project explicitly.
>
> Sergey V. will work on
> https://github.com/tarantool/tarantool/issues/4444 , maybe it worth to
> cooperate. (CCed him.)
>
> Is c-ares depends on some libraries?
CMakeLists.txt extract:
# Tell C-Ares about libraries to depend on
IF (HAVE_LIBRESOLV)
LIST (APPEND CARES_DEPENDENT_LIBS resolv)
ENDIF ()
IF (HAVE_LIBNSL)
LIST (APPEND CARES_DEPENDENT_LIBS nsl)
ENDIF ()
IF (HAVE_LIBSOCKET)
LIST (APPEND CARES_DEPENDENT_LIBS socket)
ENDIF ()
IF (HAVE_LIBRT)
LIST (APPEND CARES_DEPENDENT_LIBS rt)
ENDIF ()
>
> WBR, Alexander Turenko.
>
> On Mon, Nov 25, 2019 at 04:53:47PM +0300, Serge Petrenko wrote:
>> libcurl has a built-in threaded resolver used for asynchronous DNS
>> requests, however, when DNS server is slow to respond, the request still
>> hangs tarantool until it is finished. The reason is that curl calls
>> thread_join on the resolving thread internally upon timeout, making the
>> calling thread hang until resolution has ended.
>> Use c-ares as an asynchronous resolver instead to eliminate the problem.
>>
>> Closes #4591
>> ---
>> https://github.com/tarantool/tarantool/issues/4591
>> https://github.com/tarantool/tarantool/tree/sp/gh-4591-link-curl-with-c-ares-full-ci
--
Serge Petrenko
sergepetrenko at tarantool.org
More information about the Tarantool-patches
mailing list