cmake: try well-known send/recv signature for Apple
The CMake `try_compile` command is especially slow for the Xcode generator. With this patch applied it first tests for the currently used (and Open Group specified) send/recv signature. In case this fails testing falls-back to the permutations. speed-up: ``` time cmake .. -GNinja -DCMAKE_USE_SECTRANSP=ON -DHTTP_ONLY=ON -DCMAKE_USE_LIBSSH2=OFF before: 11.64s user 11.09s system 55% cpu 40.754 total after: 7.84s user 6.57s system 51% cpu 28.074 total ``` ``` time cmake .. -GXcode -DCMAKE_USE_SECTRANSP=ON -DHTTP_ONLY=ON -DCMAKE_USE_LIBSSH2=OFF before: 217.07s user 104.15s system 60% cpu 8:51.79 total after: 108.76s user 51.80s system 58% cpu 4:32.58 total ``` Closes #7158
This commit is contained in:
parent
ef1a917a11
commit
e5dfc88eb8
@ -47,19 +47,7 @@ endif()
|
|||||||
|
|
||||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||||
|
|
||||||
check_c_source_compiles("${_source_epilogue}
|
function(curl_cv_func_recv_run_test recv_retv recv_arg1 recv_arg2 recv_arg3 recv_arg4)
|
||||||
int main(void) {
|
|
||||||
recv(0, 0, 0, 0);
|
|
||||||
return 0;
|
|
||||||
}" curl_cv_recv)
|
|
||||||
if(curl_cv_recv)
|
|
||||||
if(NOT DEFINED curl_cv_func_recv_args OR curl_cv_func_recv_args STREQUAL "unknown")
|
|
||||||
foreach(recv_retv "int" "ssize_t" )
|
|
||||||
foreach(recv_arg1 "SOCKET" "int" )
|
|
||||||
foreach(recv_arg2 "char *" "void *" )
|
|
||||||
foreach(recv_arg3 "int" "size_t" "socklen_t" "unsigned int")
|
|
||||||
foreach(recv_arg4 "int" "unsigned int")
|
|
||||||
if(NOT curl_cv_func_recv_done)
|
|
||||||
unset(curl_cv_func_recv_test CACHE)
|
unset(curl_cv_func_recv_test CACHE)
|
||||||
check_c_source_compiles("
|
check_c_source_compiles("
|
||||||
${_source_epilogue}
|
${_source_epilogue}
|
||||||
@ -82,15 +70,34 @@ if(curl_cv_recv)
|
|||||||
"Tested: ${recv_retv} recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4})")
|
"Tested: ${recv_retv} recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4})")
|
||||||
if(curl_cv_func_recv_test)
|
if(curl_cv_func_recv_test)
|
||||||
set(curl_cv_func_recv_args
|
set(curl_cv_func_recv_args
|
||||||
"${recv_arg1},${recv_arg2},${recv_arg3},${recv_arg4},${recv_retv}")
|
"${recv_arg1},${recv_arg2},${recv_arg3},${recv_arg4},${recv_retv}" PARENT_SCOPE)
|
||||||
set(RECV_TYPE_ARG1 "${recv_arg1}")
|
set(RECV_TYPE_ARG1 "${recv_arg1}" PARENT_SCOPE)
|
||||||
set(RECV_TYPE_ARG2 "${recv_arg2}")
|
set(RECV_TYPE_ARG2 "${recv_arg2}" PARENT_SCOPE)
|
||||||
set(RECV_TYPE_ARG3 "${recv_arg3}")
|
set(RECV_TYPE_ARG3 "${recv_arg3}" PARENT_SCOPE)
|
||||||
set(RECV_TYPE_ARG4 "${recv_arg4}")
|
set(RECV_TYPE_ARG4 "${recv_arg4}" PARENT_SCOPE)
|
||||||
set(RECV_TYPE_RETV "${recv_retv}")
|
set(RECV_TYPE_RETV "${recv_retv}" PARENT_SCOPE)
|
||||||
set(HAVE_RECV 1)
|
set(HAVE_RECV 1 PARENT_SCOPE)
|
||||||
set(curl_cv_func_recv_done 1)
|
set(curl_cv_func_recv_done 1 PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
check_c_source_compiles("${_source_epilogue}
|
||||||
|
int main(void) {
|
||||||
|
recv(0, 0, 0, 0);
|
||||||
|
return 0;
|
||||||
|
}" curl_cv_recv)
|
||||||
|
if(curl_cv_recv)
|
||||||
|
if(NOT DEFINED curl_cv_func_recv_args OR curl_cv_func_recv_args STREQUAL "unknown")
|
||||||
|
if(APPLE)
|
||||||
|
curl_cv_func_recv_run_test("ssize_t" "int" "void *" "size_t" "int")
|
||||||
|
endif()
|
||||||
|
foreach(recv_retv "int" "ssize_t" )
|
||||||
|
foreach(recv_arg1 "SOCKET" "int" )
|
||||||
|
foreach(recv_arg2 "char *" "void *" )
|
||||||
|
foreach(recv_arg3 "int" "size_t" "socklen_t" "unsigned int")
|
||||||
|
foreach(recv_arg4 "int" "unsigned int")
|
||||||
|
if(NOT curl_cv_func_recv_done)
|
||||||
|
curl_cv_func_recv_run_test(${recv_retv} ${recv_arg1} ${recv_arg2} ${recv_arg3} ${recv_arg4})
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
endforeach()
|
endforeach()
|
||||||
@ -114,19 +121,7 @@ endif()
|
|||||||
set(curl_cv_func_recv_args "${curl_cv_func_recv_args}" CACHE INTERNAL "Arguments for recv")
|
set(curl_cv_func_recv_args "${curl_cv_func_recv_args}" CACHE INTERNAL "Arguments for recv")
|
||||||
set(HAVE_RECV 1)
|
set(HAVE_RECV 1)
|
||||||
|
|
||||||
check_c_source_compiles("${_source_epilogue}
|
function(curl_cv_func_send_run_test send_retv send_arg1 send_arg2 send_arg3 send_arg4)
|
||||||
int main(void) {
|
|
||||||
send(0, 0, 0, 0);
|
|
||||||
return 0;
|
|
||||||
}" curl_cv_send)
|
|
||||||
if(curl_cv_send)
|
|
||||||
if(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
|
|
||||||
foreach(send_retv "int" "ssize_t" )
|
|
||||||
foreach(send_arg1 "SOCKET" "int" "ssize_t" )
|
|
||||||
foreach(send_arg2 "const char *" "const void *" "void *" "char *")
|
|
||||||
foreach(send_arg3 "int" "size_t" "socklen_t" "unsigned int")
|
|
||||||
foreach(send_arg4 "int" "unsigned int")
|
|
||||||
if(NOT curl_cv_func_send_done)
|
|
||||||
unset(curl_cv_func_send_test CACHE)
|
unset(curl_cv_func_send_test CACHE)
|
||||||
check_c_source_compiles("
|
check_c_source_compiles("
|
||||||
${_source_epilogue}
|
${_source_epilogue}
|
||||||
@ -151,15 +146,34 @@ if(curl_cv_send)
|
|||||||
string(REGEX REPLACE "(const) .*" "\\1" send_qual_arg2 "${send_arg2}")
|
string(REGEX REPLACE "(const) .*" "\\1" send_qual_arg2 "${send_arg2}")
|
||||||
string(REGEX REPLACE "const (.*)" "\\1" send_arg2 "${send_arg2}")
|
string(REGEX REPLACE "const (.*)" "\\1" send_arg2 "${send_arg2}")
|
||||||
set(curl_cv_func_send_args
|
set(curl_cv_func_send_args
|
||||||
"${send_arg1},${send_arg2},${send_arg3},${send_arg4},${send_retv},${send_qual_arg2}")
|
"${send_arg1},${send_arg2},${send_arg3},${send_arg4},${send_retv},${send_qual_arg2}" PARENT_SCOPE)
|
||||||
set(SEND_TYPE_ARG1 "${send_arg1}")
|
set(SEND_TYPE_ARG1 "${send_arg1}" PARENT_SCOPE)
|
||||||
set(SEND_TYPE_ARG2 "${send_arg2}")
|
set(SEND_TYPE_ARG2 "${send_arg2}" PARENT_SCOPE)
|
||||||
set(SEND_TYPE_ARG3 "${send_arg3}")
|
set(SEND_TYPE_ARG3 "${send_arg3}" PARENT_SCOPE)
|
||||||
set(SEND_TYPE_ARG4 "${send_arg4}")
|
set(SEND_TYPE_ARG4 "${send_arg4}" PARENT_SCOPE)
|
||||||
set(SEND_TYPE_RETV "${send_retv}")
|
set(SEND_TYPE_RETV "${send_retv}" PARENT_SCOPE)
|
||||||
set(HAVE_SEND 1)
|
set(HAVE_SEND 1 PARENT_SCOPE)
|
||||||
set(curl_cv_func_send_done 1)
|
set(curl_cv_func_send_done 1 PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
check_c_source_compiles("${_source_epilogue}
|
||||||
|
int main(void) {
|
||||||
|
send(0, 0, 0, 0);
|
||||||
|
return 0;
|
||||||
|
}" curl_cv_send)
|
||||||
|
if(curl_cv_send)
|
||||||
|
if(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
|
||||||
|
if(APPLE)
|
||||||
|
curl_cv_func_send_run_test("ssize_t" "int" "const void *" "size_t" "int")
|
||||||
|
endif()
|
||||||
|
foreach(send_retv "int" "ssize_t" )
|
||||||
|
foreach(send_arg1 "SOCKET" "int" "ssize_t" )
|
||||||
|
foreach(send_arg2 "const char *" "const void *" "void *" "char *")
|
||||||
|
foreach(send_arg3 "int" "size_t" "socklen_t" "unsigned int")
|
||||||
|
foreach(send_arg4 "int" "unsigned int")
|
||||||
|
if(NOT curl_cv_func_send_done)
|
||||||
|
curl_cv_func_send_run_test("${send_retv}" "${send_arg1}" "${send_arg2}" "${send_arg3}" "${send_arg4}")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user