From 3d81d85dd8aef995e27786341755fbdfea2be380 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Wed, 17 Jul 2024 13:37:44 +0300 Subject: [PATCH 01/10] Using libressl instead of openssl --- 3rdParty/curl/CMakeLists.txt | 34 +++++--- 3rdParty/curl/ext/CMakeLists.txt | 133 +------------------------------ 2 files changed, 26 insertions(+), 141 deletions(-) diff --git a/3rdParty/curl/CMakeLists.txt b/3rdParty/curl/CMakeLists.txt index 5319c22..06296b6 100644 --- a/3rdParty/curl/CMakeLists.txt +++ b/3rdParty/curl/CMakeLists.txt @@ -25,16 +25,32 @@ endif () function(LinkCurl TARGET) find_package(CURL QUIET) if (NOT ${CURL_FOUND}) - set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl) - 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) - elseif (APPLE) - target_link_libraries(${TARGET} PRIVATE curl) - else () - target_link_libraries(${TARGET} PRIVATE crypto ssl curl) + if (NOT DEFINED CURL_MIRROR_LINK) + set(CURL_MIRROR_LINK https://curl.se/download/curl-7.78.0.tar.gz) endif () + if (NOT DEFINED LIBRESSL_MIRROR_LINK) + set(LIBRESSL_MIRROR_LINK https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.4.2.tar.gz) + endif () + + FetchContent_Declare( + libressl + URL ${LIBRESSL_MIRROR_LINK} + ) + FetchContent_MakeAvailable(libressl) + + FetchContent_Declare( + curl + URL ${CURL_MIRROR_LINK} + ) + FetchContent_GetProperties(curl) + if(NOT curl_POPULATED) + set(CURL_USE_LIBRESSL ON CACHE BOOL "Use LibreSSL instead of OpenSSL" FORCE) + FetchContent_Populate(curl) + add_subdirectory(${curl_SOURCE_DIR} ${curl_BINARY_DIR}) + + set(OPENSSL_ROOT_DIR ${libressl_SOURCE_DIR}) + set(OPENSSL_LIBRARIES ${libressl_BINARY_DIR}) + endif() else () target_include_directories(${TARGET} PRIVATE ${CURL_INCLUDE_DIR}) target_link_libraries(${TARGET} PRIVATE CURL::libcurl) diff --git a/3rdParty/curl/ext/CMakeLists.txt b/3rdParty/curl/ext/CMakeLists.txt index e69f1aa..fc470e0 100644 --- a/3rdParty/curl/ext/CMakeLists.txt +++ b/3rdParty/curl/ext/CMakeLists.txt @@ -1,133 +1,2 @@ cmake_minimum_required(VERSION 3.16) -project(build_curl) -include(ExternalProject) -include(FetchContent) - -if (NOT DEFINED CURL_REPO OR CURL_REPO STREQUAL "") - set(CURL_REPO https://github.com/curl/curl.git) -endif () -if (NOT DEFINED OPENSSL_REPO OR OPENSSL_REPO STREQUAL "") - set(OPENSSL_REPO https://github.com/openssl/openssl.git) -endif () - -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) -set(OPENSSL_USE_STATIC_LIBS TRUE) - -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 --static -static -fPIC) - set(OPENSSL_MAKE_COMMAND make) -endif () - -set(CURL_GIT_TAG curl-8_8_0) - -function(InstallOpenSSL) - ExternalProject_Add( - OpenSSL - PREFIX ${OPENSSL_SOURCE_DIR} - GIT_REPOSITORY ${OPENSSL_REPO} - GIT_TAG ${OPENSSL_TAG} - GIT_SHALLOW TRUE - CONFIGURE_COMMAND ${PERL_EXECUTABLE} ${OPENSSL_PERL_CONFIGURE_COMMAND} --prefix=${OPENSSL_INSTALL_DIR} --openssldir=${OPENSSL_INSTALL_DIR} no-shared no-tests - 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 - ) -endfunction() - -function(InstallCurl DEPENDENCY_TARGETS OPENSSL_ROOT_DIR) - ExternalProject_Add( - curl - DEPENDS ${DEPENDENCY_TARGETS} - GIT_REPOSITORY ${CURL_REPO} - GIT_TAG ${CURL_GIT_TAG} - 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 - ) -endfunction() - -if (APPLE) - ExternalProject_Add( - curl - GIT_REPOSITORY ${CURL_REPO} - GIT_TAG ${CURL_GIT_TAG} - 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=OFF - -DBUILD_SHARED_LIBS:BOOL=OFF - -DBUILD_STATIC_LIBS:BOOL=OFF - -DBUILD_CURL_EXE:BOOL=OFF - -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 - ) -elseif (WIN32) - - set(CURL_DEPDENDENCY_TARGETS "") - set(OPENSSL_ROOT_DIR ${OPENSSL_INSTALL_DIR}) - list(APPEND CMAKE_PREFIX_PATH ${OPENSSL_INSTALL_DIR}) - - find_package(OpenSSL QUIET) - if(NOT OpenSSL_FOUND) - message("OpenSSL not found. Building OpenSSL from sources...") - set(CURL_DEPDENDENCY_TARGETS OpenSSL) - InstallOpenSSL() - else () - set(CURL_DEPDENDENCY_TARGETS OpenSSL::SSL OpenSSL::Crypto) - message("OpenSSL is already built. Root directory is ${OPENSSL_ROOT_DIR}, include directory is ${OPENSSL_INCLUDE_DIR}") - endif() - - find_package(CURL QUIET) - if (NOT CURL_FOUND) - message("CURL not found. Building CURL from sources...") - # set(BUILD_SHARED_LIBS OFF) set(BUILD_STATIC_LIBS ON) - InstallCurl(${CURL_DEPDENDENCY_TARGETS} ${OPENSSL_ROOT_DIR}) - else () - message("CURL is already built") - endif () -else () - InstallOpenSSL() - ExternalProject_Get_Property(OpenSSL INSTALL_DIR) - set(OPENSSL_ROOT_DIR ${INSTALL_DIR}) - InstallCurl(OpenSSL ${OPENSSL_ROOT_DIR}) -endif () +project(build_curl) \ No newline at end of file From 11dea7a86ea06c06a51625afb197099909dd8c17 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Wed, 17 Jul 2024 17:43:32 +0300 Subject: [PATCH 02/10] Force building curl & libressl --- 3rdParty/curl/CMakeLists.txt | 33 ++++--------------------- 3rdParty/curl/ext/CMakeLists.txt | 41 +++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 29 deletions(-) diff --git a/3rdParty/curl/CMakeLists.txt b/3rdParty/curl/CMakeLists.txt index 06296b6..efc9e07 100644 --- a/3rdParty/curl/CMakeLists.txt +++ b/3rdParty/curl/CMakeLists.txt @@ -1,7 +1,8 @@ include(../../cmake/Utils.cmake) set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl) -find_package(CURL QUIET) +# find_package(CURL QUIET) +set(CURL_FOUND 0) if (NOT ${CURL_FOUND}) file(MAKE_DIRECTORY ${CURL_DEPS_INSTALL}) execute_process( @@ -23,34 +24,10 @@ else () endif () function(LinkCurl TARGET) - find_package(CURL QUIET) + #find_package(CURL QUIET) + set(CURL_FOUND 0) if (NOT ${CURL_FOUND}) - if (NOT DEFINED CURL_MIRROR_LINK) - set(CURL_MIRROR_LINK https://curl.se/download/curl-7.78.0.tar.gz) - endif () - if (NOT DEFINED LIBRESSL_MIRROR_LINK) - set(LIBRESSL_MIRROR_LINK https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.4.2.tar.gz) - endif () - - FetchContent_Declare( - libressl - URL ${LIBRESSL_MIRROR_LINK} - ) - FetchContent_MakeAvailable(libressl) - - FetchContent_Declare( - curl - URL ${CURL_MIRROR_LINK} - ) - FetchContent_GetProperties(curl) - if(NOT curl_POPULATED) - set(CURL_USE_LIBRESSL ON CACHE BOOL "Use LibreSSL instead of OpenSSL" FORCE) - FetchContent_Populate(curl) - add_subdirectory(${curl_SOURCE_DIR} ${curl_BINARY_DIR}) - - set(OPENSSL_ROOT_DIR ${libressl_SOURCE_DIR}) - set(OPENSSL_LIBRARIES ${libressl_BINARY_DIR}) - endif() + target_link_libraries(${TARGET} PRIVATE curl) else () target_include_directories(${TARGET} PRIVATE ${CURL_INCLUDE_DIR}) target_link_libraries(${TARGET} PRIVATE CURL::libcurl) diff --git a/3rdParty/curl/ext/CMakeLists.txt b/3rdParty/curl/ext/CMakeLists.txt index fc470e0..9895ea2 100644 --- a/3rdParty/curl/ext/CMakeLists.txt +++ b/3rdParty/curl/ext/CMakeLists.txt @@ -1,2 +1,41 @@ cmake_minimum_required(VERSION 3.16) -project(build_curl) \ No newline at end of file +project(build_curl) +include(FetchContent) + +if (NOT DEFINED CURL_MIRROR_LINK) + set(CURL_MIRROR_LINK https://curl.se/download/curl-8.8.0.tar.gz) +endif () +if (NOT DEFINED LIBRESSL_MIRROR_LINK) + set(LIBRESSL_MIRROR_LINK https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.9.2.tar.gz) +endif () + +set(LIBRESSL_TESTS OFF CACHE BOOL "" FORCE) +FetchContent_Declare( + libressl + URL ${LIBRESSL_MIRROR_LINK} +) +FetchContent_MakeAvailable(libressl) + +# add_library(OpenSSL::SSL STATIC IMPORTED) +# set_target_properties(OpenSSL::SSL PROPERTIES + # IMPORTED_LOCATION "${libressl_BINARY_DIR}/crypto/libcrypto.a" + # INTERFACE_INCLUDE_DIRECTORIES "${libressl_SOURCE_DIR}/include" +# ) + +# add_library(OpenSSL::Crypto STATIC IMPORTED) +# set_target_properties(OpenSSL::Crypto PROPERTIES + # IMPORTED_LOCATION "${libressl_BINARY_DIR}/ssl/libssl.a" + # INTERFACE_INCLUDE_DIRECTORIES "${libressl_SOURCE_DIR}/include" +# ) + +set(CURL_USE_LIBRESSL ON CACHE BOOL "Use LibreSSL instead of OpenSSL" FORCE) +set(OPENSSL_ROOT_DIR ${libressl_SOURCE_DIR} CACHE PATH "Path to LibreSSL root directory" FORCE) +set(OPENSSL_CRYPTO_LIBRARY ${libressl_BINARY_DIR}/crypto/libcrypto.a CACHE FILEPATH "Path to LibreSSL crypto library" FORCE) +set(OPENSSL_SSL_LIBRARY ${libressl_BINARY_DIR}/ssl/libssl.a CACHE FILEPATH "Path to LibreSSL SSL library" FORCE) +set(OPENSSL_INCLUDE_DIR ${libressl_SOURCE_DIR}/include CACHE PATH "Path to LibreSSL include directory" FORCE) + +FetchContent_Declare( + curl + URL ${CURL_MIRROR_LINK} +) +FetchContent_MakeAvailable(curl) \ No newline at end of file From 2ddb7a167cf08b170ca645bc8e01acc6fe25581e Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Wed, 17 Jul 2024 18:13:02 +0300 Subject: [PATCH 03/10] Linking with curl on non-windows os --- 3rdParty/curl/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/3rdParty/curl/CMakeLists.txt b/3rdParty/curl/CMakeLists.txt index efc9e07..0eef61f 100644 --- a/3rdParty/curl/CMakeLists.txt +++ b/3rdParty/curl/CMakeLists.txt @@ -27,7 +27,9 @@ function(LinkCurl TARGET) #find_package(CURL QUIET) set(CURL_FOUND 0) if (NOT ${CURL_FOUND}) - target_link_libraries(${TARGET} PRIVATE curl) + if (NOT WIN32) + target_link_libraries(${TARGET} PRIVATE curl) + endif () else () target_include_directories(${TARGET} PRIVATE ${CURL_INCLUDE_DIR}) target_link_libraries(${TARGET} PRIVATE CURL::libcurl) From 0a7530f78dec59ccb154a383eee2a29db1bd503b Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Fri, 19 Jul 2024 17:43:45 +0300 Subject: [PATCH 04/10] using curl's ext_windows subdirectory to build curl with libressl on windows --- 3rdParty/curl/CMakeLists.txt | 7 +- 3rdParty/curl/ext/CMakeLists.txt | 152 ++++++++++++++++++----- 3rdParty/curl/ext_windows/CMakeLists.txt | 29 +++++ 3 files changed, 157 insertions(+), 31 deletions(-) create mode 100644 3rdParty/curl/ext_windows/CMakeLists.txt diff --git a/3rdParty/curl/CMakeLists.txt b/3rdParty/curl/CMakeLists.txt index 0eef61f..0c9367d 100644 --- a/3rdParty/curl/CMakeLists.txt +++ b/3rdParty/curl/CMakeLists.txt @@ -5,8 +5,13 @@ set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl) set(CURL_FOUND 0) if (NOT ${CURL_FOUND}) file(MAKE_DIRECTORY ${CURL_DEPS_INSTALL}) + if (WIN32) + set(EXT_DIR ext_windows) + else () + set(EXT_DIR ext) + endif () execute_process( - COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} -DTOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/ext -DCURL_REPO=${CURL_REPO} -DOPENSSL_REPO=${OPENSSL_REPO} -DPLATFORM=${PLATFORM} + COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} -DTOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/${EXT_DIR} -DCURL_REPO=${CURL_REPO} -DOPENSSL_REPO=${OPENSSL_REPO} -DPLATFORM=${PLATFORM} WORKING_DIRECTORY ${CURL_DEPS_INSTALL} ) execute_process( diff --git a/3rdParty/curl/ext/CMakeLists.txt b/3rdParty/curl/ext/CMakeLists.txt index 9895ea2..e69f1aa 100644 --- a/3rdParty/curl/ext/CMakeLists.txt +++ b/3rdParty/curl/ext/CMakeLists.txt @@ -1,41 +1,133 @@ cmake_minimum_required(VERSION 3.16) project(build_curl) +include(ExternalProject) include(FetchContent) -if (NOT DEFINED CURL_MIRROR_LINK) - set(CURL_MIRROR_LINK https://curl.se/download/curl-8.8.0.tar.gz) +if (NOT DEFINED CURL_REPO OR CURL_REPO STREQUAL "") + set(CURL_REPO https://github.com/curl/curl.git) endif () -if (NOT DEFINED LIBRESSL_MIRROR_LINK) - set(LIBRESSL_MIRROR_LINK https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.9.2.tar.gz) +if (NOT DEFINED OPENSSL_REPO OR OPENSSL_REPO STREQUAL "") + set(OPENSSL_REPO https://github.com/openssl/openssl.git) endif () -set(LIBRESSL_TESTS OFF CACHE BOOL "" FORCE) -FetchContent_Declare( - libressl - URL ${LIBRESSL_MIRROR_LINK} -) -FetchContent_MakeAvailable(libressl) +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) +set(OPENSSL_USE_STATIC_LIBS TRUE) -# add_library(OpenSSL::SSL STATIC IMPORTED) -# set_target_properties(OpenSSL::SSL PROPERTIES - # IMPORTED_LOCATION "${libressl_BINARY_DIR}/crypto/libcrypto.a" - # INTERFACE_INCLUDE_DIRECTORIES "${libressl_SOURCE_DIR}/include" -# ) +find_program(PERL_EXECUTABLE perl) +if (NOT PERL_EXECUTABLE) + message(FATAL_ERROR "Perl not found. Please install Perl to configure OpenSSL.") +endif() -# add_library(OpenSSL::Crypto STATIC IMPORTED) -# set_target_properties(OpenSSL::Crypto PROPERTIES - # IMPORTED_LOCATION "${libressl_BINARY_DIR}/ssl/libssl.a" - # INTERFACE_INCLUDE_DIRECTORIES "${libressl_SOURCE_DIR}/include" -# ) +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 --static -static -fPIC) + set(OPENSSL_MAKE_COMMAND make) +endif () -set(CURL_USE_LIBRESSL ON CACHE BOOL "Use LibreSSL instead of OpenSSL" FORCE) -set(OPENSSL_ROOT_DIR ${libressl_SOURCE_DIR} CACHE PATH "Path to LibreSSL root directory" FORCE) -set(OPENSSL_CRYPTO_LIBRARY ${libressl_BINARY_DIR}/crypto/libcrypto.a CACHE FILEPATH "Path to LibreSSL crypto library" FORCE) -set(OPENSSL_SSL_LIBRARY ${libressl_BINARY_DIR}/ssl/libssl.a CACHE FILEPATH "Path to LibreSSL SSL library" FORCE) -set(OPENSSL_INCLUDE_DIR ${libressl_SOURCE_DIR}/include CACHE PATH "Path to LibreSSL include directory" FORCE) +set(CURL_GIT_TAG curl-8_8_0) -FetchContent_Declare( - curl - URL ${CURL_MIRROR_LINK} -) -FetchContent_MakeAvailable(curl) \ No newline at end of file +function(InstallOpenSSL) + ExternalProject_Add( + OpenSSL + PREFIX ${OPENSSL_SOURCE_DIR} + GIT_REPOSITORY ${OPENSSL_REPO} + GIT_TAG ${OPENSSL_TAG} + GIT_SHALLOW TRUE + CONFIGURE_COMMAND ${PERL_EXECUTABLE} ${OPENSSL_PERL_CONFIGURE_COMMAND} --prefix=${OPENSSL_INSTALL_DIR} --openssldir=${OPENSSL_INSTALL_DIR} no-shared no-tests + 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 + ) +endfunction() + +function(InstallCurl DEPENDENCY_TARGETS OPENSSL_ROOT_DIR) + ExternalProject_Add( + curl + DEPENDS ${DEPENDENCY_TARGETS} + GIT_REPOSITORY ${CURL_REPO} + GIT_TAG ${CURL_GIT_TAG} + 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 + ) +endfunction() + +if (APPLE) + ExternalProject_Add( + curl + GIT_REPOSITORY ${CURL_REPO} + GIT_TAG ${CURL_GIT_TAG} + 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=OFF + -DBUILD_SHARED_LIBS:BOOL=OFF + -DBUILD_STATIC_LIBS:BOOL=OFF + -DBUILD_CURL_EXE:BOOL=OFF + -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 + ) +elseif (WIN32) + + set(CURL_DEPDENDENCY_TARGETS "") + set(OPENSSL_ROOT_DIR ${OPENSSL_INSTALL_DIR}) + list(APPEND CMAKE_PREFIX_PATH ${OPENSSL_INSTALL_DIR}) + + find_package(OpenSSL QUIET) + if(NOT OpenSSL_FOUND) + message("OpenSSL not found. Building OpenSSL from sources...") + set(CURL_DEPDENDENCY_TARGETS OpenSSL) + InstallOpenSSL() + else () + set(CURL_DEPDENDENCY_TARGETS OpenSSL::SSL OpenSSL::Crypto) + message("OpenSSL is already built. Root directory is ${OPENSSL_ROOT_DIR}, include directory is ${OPENSSL_INCLUDE_DIR}") + endif() + + find_package(CURL QUIET) + if (NOT CURL_FOUND) + message("CURL not found. Building CURL from sources...") + # set(BUILD_SHARED_LIBS OFF) set(BUILD_STATIC_LIBS ON) + InstallCurl(${CURL_DEPDENDENCY_TARGETS} ${OPENSSL_ROOT_DIR}) + else () + message("CURL is already built") + endif () +else () + InstallOpenSSL() + ExternalProject_Get_Property(OpenSSL INSTALL_DIR) + set(OPENSSL_ROOT_DIR ${INSTALL_DIR}) + InstallCurl(OpenSSL ${OPENSSL_ROOT_DIR}) +endif () diff --git a/3rdParty/curl/ext_windows/CMakeLists.txt b/3rdParty/curl/ext_windows/CMakeLists.txt new file mode 100644 index 0000000..3d3efde --- /dev/null +++ b/3rdParty/curl/ext_windows/CMakeLists.txt @@ -0,0 +1,29 @@ +cmake_minimum_required(VERSION 3.16) +project(build_curl) +include(FetchContent) + +if (NOT DEFINED CURL_MIRROR_LINK) + set(CURL_MIRROR_LINK https://curl.se/download/curl-8.8.0.tar.gz) +endif () +if (NOT DEFINED LIBRESSL_MIRROR_LINK) + set(LIBRESSL_MIRROR_LINK https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.9.2.tar.gz) +endif () + +set(LIBRESSL_TESTS OFF CACHE BOOL "" FORCE) +FetchContent_Declare( + libressl + URL ${LIBRESSL_MIRROR_LINK} +) +FetchContent_MakeAvailable(libressl) + +set(CURL_USE_LIBRESSL ON CACHE BOOL "Use LibreSSL instead of OpenSSL" FORCE) +set(OPENSSL_ROOT_DIR ${libressl_SOURCE_DIR} CACHE PATH "Path to LibreSSL root directory" FORCE) +set(OPENSSL_CRYPTO_LIBRARY ${libressl_BINARY_DIR}/crypto/libcrypto.a CACHE FILEPATH "Path to LibreSSL crypto library" FORCE) +set(OPENSSL_SSL_LIBRARY ${libressl_BINARY_DIR}/ssl/libssl.a CACHE FILEPATH "Path to LibreSSL SSL library" FORCE) +set(OPENSSL_INCLUDE_DIR ${libressl_SOURCE_DIR}/include CACHE PATH "Path to LibreSSL include directory" FORCE) + +FetchContent_Declare( + curl + URL ${CURL_MIRROR_LINK} +) +FetchContent_MakeAvailable(curl) \ No newline at end of file From 7772b09ad28c167dd23ea1b0dd1a47cf8d508732 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Mon, 22 Jul 2024 14:45:09 +0300 Subject: [PATCH 05/10] Detecting curl properly, disabled curl tests, building curl statically --- 3rdParty/curl/CMakeLists.txt | 6 ++---- 3rdParty/curl/ext_windows/CMakeLists.txt | 5 +++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/3rdParty/curl/CMakeLists.txt b/3rdParty/curl/CMakeLists.txt index 0c9367d..e2ce302 100644 --- a/3rdParty/curl/CMakeLists.txt +++ b/3rdParty/curl/CMakeLists.txt @@ -1,8 +1,7 @@ include(../../cmake/Utils.cmake) set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl) -# find_package(CURL QUIET) -set(CURL_FOUND 0) +find_package(CURL QUIET) if (NOT ${CURL_FOUND}) file(MAKE_DIRECTORY ${CURL_DEPS_INSTALL}) if (WIN32) @@ -29,8 +28,7 @@ else () endif () function(LinkCurl TARGET) - #find_package(CURL QUIET) - set(CURL_FOUND 0) + find_package(CURL QUIET) if (NOT ${CURL_FOUND}) if (NOT WIN32) target_link_libraries(${TARGET} PRIVATE curl) diff --git a/3rdParty/curl/ext_windows/CMakeLists.txt b/3rdParty/curl/ext_windows/CMakeLists.txt index 3d3efde..09a7e0b 100644 --- a/3rdParty/curl/ext_windows/CMakeLists.txt +++ b/3rdParty/curl/ext_windows/CMakeLists.txt @@ -16,6 +16,11 @@ FetchContent_Declare( ) FetchContent_MakeAvailable(libressl) +set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libraries" FORCE) +set(BUILD_STATIC_LIBS ON CACHE BOOL "Build static libraries" FORCE) +set(BUILD_STATIC_CURL ON CACHE BOOL "Build curl executable with static libcurl" FORCE) +set(CURL_DISABLE_TESTS ON CACHE BOOL "Do no build tests" FORCE) + set(CURL_USE_LIBRESSL ON CACHE BOOL "Use LibreSSL instead of OpenSSL" FORCE) set(OPENSSL_ROOT_DIR ${libressl_SOURCE_DIR} CACHE PATH "Path to LibreSSL root directory" FORCE) set(OPENSSL_CRYPTO_LIBRARY ${libressl_BINARY_DIR}/crypto/libcrypto.a CACHE FILEPATH "Path to LibreSSL crypto library" FORCE) From 021d99439a18b0727c85feb5e63451384dd59518 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Mon, 22 Jul 2024 15:31:52 +0300 Subject: [PATCH 06/10] Linking with ssl and crypto libraries --- 3rdParty/curl/CMakeLists.txt | 2 ++ 3rdParty/curl/ext_windows/CMakeLists.txt | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/3rdParty/curl/CMakeLists.txt b/3rdParty/curl/CMakeLists.txt index e2ce302..731f145 100644 --- a/3rdParty/curl/CMakeLists.txt +++ b/3rdParty/curl/CMakeLists.txt @@ -32,6 +32,8 @@ function(LinkCurl TARGET) if (NOT ${CURL_FOUND}) if (NOT WIN32) target_link_libraries(${TARGET} PRIVATE curl) + else () + target_link_libraries(${TARGET} PRIVATE ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}) endif () else () target_include_directories(${TARGET} PRIVATE ${CURL_INCLUDE_DIR}) diff --git a/3rdParty/curl/ext_windows/CMakeLists.txt b/3rdParty/curl/ext_windows/CMakeLists.txt index 09a7e0b..87af26a 100644 --- a/3rdParty/curl/ext_windows/CMakeLists.txt +++ b/3rdParty/curl/ext_windows/CMakeLists.txt @@ -23,8 +23,13 @@ set(CURL_DISABLE_TESTS ON CACHE BOOL "Do no build tests" FORCE) set(CURL_USE_LIBRESSL ON CACHE BOOL "Use LibreSSL instead of OpenSSL" FORCE) set(OPENSSL_ROOT_DIR ${libressl_SOURCE_DIR} CACHE PATH "Path to LibreSSL root directory" FORCE) -set(OPENSSL_CRYPTO_LIBRARY ${libressl_BINARY_DIR}/crypto/libcrypto.a CACHE FILEPATH "Path to LibreSSL crypto library" FORCE) -set(OPENSSL_SSL_LIBRARY ${libressl_BINARY_DIR}/ssl/libssl.a CACHE FILEPATH "Path to LibreSSL SSL library" FORCE) +if (WIN32) + set(OPENSSL_CRYPTO_LIBRARY ${libressl_BINARY_DIR}/crypto/debug/crypto.lib CACHE FILEPATH "Path to LibreSSL crypto library" FORCE) + set(OPENSSL_SSL_LIBRARY ${libressl_BINARY_DIR}/ssl/debug/ssl.lib CACHE FILEPATH "Path to LibreSSL SSL library" FORCE) +else () + set(OPENSSL_CRYPTO_LIBRARY ${libressl_BINARY_DIR}/crypto/libcrypto.a CACHE FILEPATH "Path to LibreSSL crypto library" FORCE) + set(OPENSSL_SSL_LIBRARY ${libressl_BINARY_DIR}/ssl/libssl.a CACHE FILEPATH "Path to LibreSSL SSL library" FORCE) +endif () set(OPENSSL_INCLUDE_DIR ${libressl_SOURCE_DIR}/include CACHE PATH "Path to LibreSSL include directory" FORCE) FetchContent_Declare( From beabad164ae4802122d15d7a20f3cac0463506f2 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Tue, 23 Jul 2024 13:36:55 +0300 Subject: [PATCH 07/10] Added missing directories --- 3rdParty/curl/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/3rdParty/curl/CMakeLists.txt b/3rdParty/curl/CMakeLists.txt index 731f145..873bbe0 100644 --- a/3rdParty/curl/CMakeLists.txt +++ b/3rdParty/curl/CMakeLists.txt @@ -30,6 +30,10 @@ endif () function(LinkCurl TARGET) find_package(CURL QUIET) if (NOT ${CURL_FOUND}) + set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl) + target_include_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/include) + target_link_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/lib) + if (NOT WIN32) target_link_libraries(${TARGET} PRIVATE curl) else () From b7eb577a35d13c8e845ced5f08586adfd5a9e377 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Tue, 23 Jul 2024 13:37:22 +0300 Subject: [PATCH 08/10] Linking properly on linux --- 3rdParty/curl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdParty/curl/CMakeLists.txt b/3rdParty/curl/CMakeLists.txt index 873bbe0..ea3526c 100644 --- a/3rdParty/curl/CMakeLists.txt +++ b/3rdParty/curl/CMakeLists.txt @@ -35,7 +35,7 @@ function(LinkCurl TARGET) target_link_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/lib) if (NOT WIN32) - target_link_libraries(${TARGET} PRIVATE curl) + target_link_libraries(${TARGET} PRIVATE crypto ssl curl) else () target_link_libraries(${TARGET} PRIVATE ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}) endif () From 29518b74dbfd39b9cbf8f07fdbcfdf15d9c6e943 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Tue, 23 Jul 2024 15:46:29 +0300 Subject: [PATCH 09/10] building libressl in release mode --- 3rdParty/curl/ext_windows/CMakeLists.txt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/3rdParty/curl/ext_windows/CMakeLists.txt b/3rdParty/curl/ext_windows/CMakeLists.txt index 87af26a..1247e9a 100644 --- a/3rdParty/curl/ext_windows/CMakeLists.txt +++ b/3rdParty/curl/ext_windows/CMakeLists.txt @@ -13,6 +13,9 @@ set(LIBRESSL_TESTS OFF CACHE BOOL "" FORCE) FetchContent_Declare( libressl URL ${LIBRESSL_MIRROR_LINK} + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/INSTALL ) FetchContent_MakeAvailable(libressl) @@ -24,8 +27,8 @@ set(CURL_DISABLE_TESTS ON CACHE BOOL "Do no build tests" FORCE) set(CURL_USE_LIBRESSL ON CACHE BOOL "Use LibreSSL instead of OpenSSL" FORCE) set(OPENSSL_ROOT_DIR ${libressl_SOURCE_DIR} CACHE PATH "Path to LibreSSL root directory" FORCE) if (WIN32) - set(OPENSSL_CRYPTO_LIBRARY ${libressl_BINARY_DIR}/crypto/debug/crypto.lib CACHE FILEPATH "Path to LibreSSL crypto library" FORCE) - set(OPENSSL_SSL_LIBRARY ${libressl_BINARY_DIR}/ssl/debug/ssl.lib CACHE FILEPATH "Path to LibreSSL SSL library" FORCE) + set(OPENSSL_CRYPTO_LIBRARY ${libressl_BINARY_DIR}/crypto/release/crypto.lib CACHE FILEPATH "Path to LibreSSL crypto library" FORCE) + set(OPENSSL_SSL_LIBRARY ${libressl_BINARY_DIR}/ssl/release/ssl.lib CACHE FILEPATH "Path to LibreSSL SSL library" FORCE) else () set(OPENSSL_CRYPTO_LIBRARY ${libressl_BINARY_DIR}/crypto/libcrypto.a CACHE FILEPATH "Path to LibreSSL crypto library" FORCE) set(OPENSSL_SSL_LIBRARY ${libressl_BINARY_DIR}/ssl/libssl.a CACHE FILEPATH "Path to LibreSSL SSL library" FORCE) @@ -35,5 +38,8 @@ set(OPENSSL_INCLUDE_DIR ${libressl_SOURCE_DIR}/include CACHE PATH "Path to Libre FetchContent_Declare( curl URL ${CURL_MIRROR_LINK} + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/INSTALL ) FetchContent_MakeAvailable(curl) \ No newline at end of file From 8592ba40818c05dd5c26824c71db06f55a865f23 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Wed, 24 Jul 2024 12:14:50 +0300 Subject: [PATCH 10/10] Properly linking with curl on apple --- 3rdParty/curl/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/3rdParty/curl/CMakeLists.txt b/3rdParty/curl/CMakeLists.txt index ea3526c..c3985a1 100644 --- a/3rdParty/curl/CMakeLists.txt +++ b/3rdParty/curl/CMakeLists.txt @@ -34,10 +34,12 @@ function(LinkCurl TARGET) target_include_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/include) target_link_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/lib) - if (NOT WIN32) - target_link_libraries(${TARGET} PRIVATE crypto ssl curl) - else () + if (APPLE) + target_link_libraries(${TARGET} PRIVATE curl) + elseif (WIN32) target_link_libraries(${TARGET} PRIVATE ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}) + else () + target_link_libraries(${TARGET} PRIVATE crypto ssl curl) endif () else () target_include_directories(${TARGET} PRIVATE ${CURL_INCLUDE_DIR})