Building curl and openssl

This commit is contained in:
Vladyslav Baranovskyi
2024-06-20 15:07:09 +03:00
parent a75df8960a
commit 406efa57e7
3 changed files with 105 additions and 16 deletions

View File

@@ -1,18 +1,40 @@
include(FetchContent)
include(../../cmake/Utils.cmake)
if(NOT DEFINED CURL_REPO)
set(CURL_REPO https://github.com/curl/curl)
endif()
set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl)
find_package(curl QUIET)
if (NOT DEFINED curl_FOUND)
file(MAKE_DIRECTORY ${CURL_DEPS_INSTALL})
execute_process(
COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} -DTOOLCHAIN_FILE=${TOOLCHAIN_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/ext
WORKING_DIRECTORY ${CURL_DEPS_INSTALL}
)
execute_process(
COMMAND ${CMAKE_COMMAND} --build ${CURL_DEPS_INSTALL}
RESULT_VARIABLE build_result
)
if (NOT ${build_result} EQUAL "0")
message(FATAL_ERROR "Failed to build curl!")
endif()
FetchContent_Declare(
curl
GIT_REPOSITORY ${CURL_REPO}
GIT_TAG curl-7_79_1
GIT_SHALLOW TRUE
)
list(APPEND CMAKE_PREFIX_PATH ${CURL_DEPS_INSTALL}/INSTALL)
else ()
message("Using system curl")
set(USING_SYSTEM_CURL ON PARENT_SCOPE)
endif ()
set(BUILD_CURL_EXE OFF)
set(CURL_USE_OPENSSL OFF)
set(CURL_USE_ZLIB OFF)
FetchContent_MakeAvailable(curl)
function(LinkCurl TARGET BINARY_DIR)
find_package(curl QUIET)
set(CURL_DEPS_INSTALL ${BINARY_DIR}/deps_curl)
if (NOT DEFINED curl_FOUND)
target_include_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/include)
target_link_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/lib)
if (MSVC)
target_link_libraries(${TARGET} PRIVATE libcrypto.lib libssl.lib libcurl_imp.lib)
else ()
target_link_libraries(${TARGET} PRIVATE crypto ssl curl)
endif ()
else ()
target_include_directories(${TARGET} PRIVATE ${curl_INCLUDE_DIR})
target_link_libraries(${TARGET} PRIVATE ${curl_LIBRARIES})
endif ()
endfunction()

66
3rdParty/curl/ext/CMakeLists.txt vendored Normal file
View File

@@ -0,0 +1,66 @@
cmake_minimum_required(VERSION 3.16)
project(build_curl)
include(ExternalProject)
include(FetchContent)
set(OPENSSL_SOURCE_DIR ${CMAKE_BINARY_DIR}/deps_curl/openssl-src)
set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/INSTALL)
set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include)
set(OPENSSL_TAG OpenSSL_1_1_1n)
find_program(PERL_EXECUTABLE perl)
if (NOT PERL_EXECUTABLE)
message(FATAL_ERROR "Perl not found. Please install Perl to configure OpenSSL.")
endif()
if (MSVC)
set(OPENSSL_PERL_CONFIGURE_COMMAND ${OPENSSL_SOURCE_DIR}/src/openssl/Configure VC-WIN64A)
set(OPENSSL_MAKE_COMMAND nmake)
else ()
set(OPENSSL_PERL_CONFIGURE_COMMAND ${OPENSSL_SOURCE_DIR}/src/openssl/config)
set(OPENSSL_MAKE_COMMAND make)
endif ()
ExternalProject_Add(
OpenSSL
PREFIX ${OPENSSL_SOURCE_DIR}
GIT_REPOSITORY https://github.com/openssl/openssl.git
GIT_TAG ${OPENSSL_TAG}
GIT_SHALLOW TRUE
CONFIGURE_COMMAND ${PERL_EXECUTABLE} ${OPENSSL_PERL_CONFIGURE_COMMAND} --prefix=${OPENSSL_INSTALL_DIR} --openssldir=${OPENSSL_INSTALL_DIR}
BUILD_COMMAND ${OPENSSL_MAKE_COMMAND}
INSTALL_COMMAND ${OPENSSL_MAKE_COMMAND} install
INSTALL_DIR ${OPENSSL_INSTALL_DIR}
USES_TERMINAL_DOWNLOAD TRUE
USES_TERMINAL_CONFIGURE TRUE
USES_TERMINAL_BUILD TRUE
USES_TERMINAL_INSTALL TRUE
)
ExternalProject_Get_Property(OpenSSL INSTALL_DIR)
set(OPENSSL_ROOT_DIR ${INSTALL_DIR})
ExternalProject_Add(
curl
DEPENDS OpenSSL
GIT_REPOSITORY https://github.com/curl/curl.git
GIT_TAG curl-8_8_0
GIT_SHALLOW TRUE
SOURCE_DIR ${CMAKE_BINARY_DIR}/curl
BINARY_DIR ${CMAKE_BINARY_DIR}/curl-build
CMAKE_GENERATOR ${CMAKE_GENERATOR}
CMAKE_ARGS
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${TOOLCHAIN_FILE}
-DCMAKE_BUILD_TYPE:STRING=Release
-DCURL_USE_OPENSSL:BOOL=ON
-DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
-DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}
-DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/INSTALL
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/INSTALL
BUILD_COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/curl-build --config Release
INSTALL_COMMAND ${CMAKE_COMMAND} --install ${CMAKE_BINARY_DIR}/curl-build --config Release
USES_TERMINAL_DOWNLOAD TRUE
USES_TERMINAL_CONFIGURE TRUE
USES_TERMINAL_BUILD TRUE
USES_TERMINAL_INSTALL TRUE
)