using curl's ext_windows subdirectory to build curl with libressl on windows
This commit is contained in:
7
3rdParty/curl/CMakeLists.txt
vendored
7
3rdParty/curl/CMakeLists.txt
vendored
@@ -5,8 +5,13 @@ set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl)
|
|||||||
set(CURL_FOUND 0)
|
set(CURL_FOUND 0)
|
||||||
if (NOT ${CURL_FOUND})
|
if (NOT ${CURL_FOUND})
|
||||||
file(MAKE_DIRECTORY ${CURL_DEPS_INSTALL})
|
file(MAKE_DIRECTORY ${CURL_DEPS_INSTALL})
|
||||||
|
if (WIN32)
|
||||||
|
set(EXT_DIR ext_windows)
|
||||||
|
else ()
|
||||||
|
set(EXT_DIR ext)
|
||||||
|
endif ()
|
||||||
execute_process(
|
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}
|
WORKING_DIRECTORY ${CURL_DEPS_INSTALL}
|
||||||
)
|
)
|
||||||
execute_process(
|
execute_process(
|
||||||
|
|||||||
152
3rdParty/curl/ext/CMakeLists.txt
vendored
152
3rdParty/curl/ext/CMakeLists.txt
vendored
@@ -1,41 +1,133 @@
|
|||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(build_curl)
|
project(build_curl)
|
||||||
|
include(ExternalProject)
|
||||||
include(FetchContent)
|
include(FetchContent)
|
||||||
|
|
||||||
if (NOT DEFINED CURL_MIRROR_LINK)
|
if (NOT DEFINED CURL_REPO OR CURL_REPO STREQUAL "")
|
||||||
set(CURL_MIRROR_LINK https://curl.se/download/curl-8.8.0.tar.gz)
|
set(CURL_REPO https://github.com/curl/curl.git)
|
||||||
endif ()
|
endif ()
|
||||||
if (NOT DEFINED LIBRESSL_MIRROR_LINK)
|
if (NOT DEFINED OPENSSL_REPO OR OPENSSL_REPO STREQUAL "")
|
||||||
set(LIBRESSL_MIRROR_LINK https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.9.2.tar.gz)
|
set(OPENSSL_REPO https://github.com/openssl/openssl.git)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set(LIBRESSL_TESTS OFF CACHE BOOL "" FORCE)
|
set(OPENSSL_SOURCE_DIR ${CMAKE_BINARY_DIR}/deps_curl/openssl-src)
|
||||||
FetchContent_Declare(
|
set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/INSTALL)
|
||||||
libressl
|
set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include)
|
||||||
URL ${LIBRESSL_MIRROR_LINK}
|
set(OPENSSL_TAG OpenSSL_1_1_1n)
|
||||||
)
|
set(OPENSSL_USE_STATIC_LIBS TRUE)
|
||||||
FetchContent_MakeAvailable(libressl)
|
|
||||||
|
|
||||||
# add_library(OpenSSL::SSL STATIC IMPORTED)
|
find_program(PERL_EXECUTABLE perl)
|
||||||
# set_target_properties(OpenSSL::SSL PROPERTIES
|
if (NOT PERL_EXECUTABLE)
|
||||||
# IMPORTED_LOCATION "${libressl_BINARY_DIR}/crypto/libcrypto.a"
|
message(FATAL_ERROR "Perl not found. Please install Perl to configure OpenSSL.")
|
||||||
# INTERFACE_INCLUDE_DIRECTORIES "${libressl_SOURCE_DIR}/include"
|
endif()
|
||||||
# )
|
|
||||||
|
|
||||||
# add_library(OpenSSL::Crypto STATIC IMPORTED)
|
if (MSVC)
|
||||||
# set_target_properties(OpenSSL::Crypto PROPERTIES
|
set(OPENSSL_PERL_CONFIGURE_COMMAND ${OPENSSL_SOURCE_DIR}/src/openssl/Configure VC-WIN64A)
|
||||||
# IMPORTED_LOCATION "${libressl_BINARY_DIR}/ssl/libssl.a"
|
set(OPENSSL_MAKE_COMMAND nmake)
|
||||||
# INTERFACE_INCLUDE_DIRECTORIES "${libressl_SOURCE_DIR}/include"
|
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(CURL_GIT_TAG curl-8_8_0)
|
||||||
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(
|
function(InstallOpenSSL)
|
||||||
curl
|
ExternalProject_Add(
|
||||||
URL ${CURL_MIRROR_LINK}
|
OpenSSL
|
||||||
)
|
PREFIX ${OPENSSL_SOURCE_DIR}
|
||||||
FetchContent_MakeAvailable(curl)
|
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 ()
|
||||||
|
|||||||
29
3rdParty/curl/ext_windows/CMakeLists.txt
vendored
Normal file
29
3rdParty/curl/ext_windows/CMakeLists.txt
vendored
Normal file
@@ -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)
|
||||||
Reference in New Issue
Block a user