[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