Fixed build on windows, passing git repos for openssl & curl, building only curl on apple

This commit is contained in:
Vladyslav Baranovskyi
2024-06-21 14:52:07 +03:00
parent 3020b1a191
commit 179dbca8b4
2 changed files with 79 additions and 44 deletions

View File

@@ -2,10 +2,10 @@ include(../../cmake/Utils.cmake)
set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl) set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl)
find_package(CURL QUIET) find_package(CURL QUIET)
if (NOT DEFINED CURL_FOUND) if (NOT ${CURL_FOUND})
file(MAKE_DIRECTORY ${CURL_DEPS_INSTALL}) file(MAKE_DIRECTORY ${CURL_DEPS_INSTALL})
execute_process( execute_process(
COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} -DTOOLCHAIN_FILE=${TOOLCHAIN_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/ext COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} -DTOOLCHAIN_FILE=${TOOLCHAIN_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/ext -DCURL_REPO=${CURL_REPO} -DOPENSSL_REPO=${OPENSSL_REPO}
WORKING_DIRECTORY ${CURL_DEPS_INSTALL} WORKING_DIRECTORY ${CURL_DEPS_INSTALL}
) )
execute_process( execute_process(
@@ -24,12 +24,14 @@ endif ()
function(LinkCurl TARGET BINARY_DIR) function(LinkCurl TARGET BINARY_DIR)
find_package(CURL QUIET) find_package(CURL QUIET)
if (NOT DEFINED CURL_FOUND) if (NOT ${CURL_FOUND})
set(CURL_DEPS_INSTALL ${BINARY_DIR}/deps_curl) set(CURL_DEPS_INSTALL ${BINARY_DIR}/deps_curl)
target_include_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/include) target_include_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/include)
target_link_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/lib) target_link_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/lib)
if (MSVC) if (MSVC)
target_link_libraries(${TARGET} PRIVATE libcrypto.lib libssl.lib libcurl_imp.lib) target_link_libraries(${TARGET} PRIVATE libcrypto.lib libssl.lib libcurl_imp.lib)
elseif (APPLE)
target_link_libraries(${TARGET} PRIVATE curl)
else () else ()
target_link_libraries(${TARGET} PRIVATE crypto ssl curl) target_link_libraries(${TARGET} PRIVATE crypto ssl curl)
endif () endif ()

View File

@@ -3,6 +3,13 @@ project(build_curl)
include(ExternalProject) include(ExternalProject)
include(FetchContent) 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_SOURCE_DIR ${CMAKE_BINARY_DIR}/deps_curl/openssl-src)
set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/INSTALL) set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/INSTALL)
set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include) set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include)
@@ -21,46 +28,72 @@ else ()
set(OPENSSL_MAKE_COMMAND make) set(OPENSSL_MAKE_COMMAND make)
endif () endif ()
ExternalProject_Add( set(CURL_GIT_TAG curl-8_8_0)
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) if (APPLE)
set(OPENSSL_ROOT_DIR ${INSTALL_DIR}) 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=ON
-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
)
else ()
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}
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_Add( ExternalProject_Get_Property(OpenSSL INSTALL_DIR)
curl set(OPENSSL_ROOT_DIR ${INSTALL_DIR})
DEPENDS OpenSSL
GIT_REPOSITORY https://github.com/curl/curl.git ExternalProject_Add(
GIT_TAG curl-8_8_0 curl
GIT_SHALLOW TRUE DEPENDS OpenSSL
SOURCE_DIR ${CMAKE_BINARY_DIR}/curl GIT_REPOSITORY ${CURL_REPO}
BINARY_DIR ${CMAKE_BINARY_DIR}/curl-build GIT_TAG ${CURL_GIT_TAG}
CMAKE_GENERATOR ${CMAKE_GENERATOR} GIT_SHALLOW TRUE
CMAKE_ARGS SOURCE_DIR ${CMAKE_BINARY_DIR}/curl
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${TOOLCHAIN_FILE} BINARY_DIR ${CMAKE_BINARY_DIR}/curl-build
-DCMAKE_BUILD_TYPE:STRING=Release CMAKE_GENERATOR ${CMAKE_GENERATOR}
-DCURL_USE_OPENSSL:BOOL=ON CMAKE_ARGS
-DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR} -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${TOOLCHAIN_FILE}
-DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR} -DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/INSTALL -DCURL_USE_OPENSSL:BOOL=ON
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/INSTALL -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
BUILD_COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/curl-build --config Release -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}
INSTALL_COMMAND ${CMAKE_COMMAND} --install ${CMAKE_BINARY_DIR}/curl-build --config Release -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/INSTALL
USES_TERMINAL_DOWNLOAD TRUE -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/INSTALL
USES_TERMINAL_CONFIGURE TRUE BUILD_COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/curl-build --config Release
USES_TERMINAL_BUILD TRUE INSTALL_COMMAND ${CMAKE_COMMAND} --install ${CMAKE_BINARY_DIR}/curl-build --config Release
USES_TERMINAL_INSTALL TRUE USES_TERMINAL_DOWNLOAD TRUE
) USES_TERMINAL_CONFIGURE TRUE
USES_TERMINAL_BUILD TRUE
USES_TERMINAL_INSTALL TRUE
)
endif ()