diff --git a/3rdParty/curl/ext/CMakeLists.txt b/3rdParty/curl/ext/CMakeLists.txt index 31e04e9..e69f1aa 100644 --- a/3rdParty/curl/ext/CMakeLists.txt +++ b/3rdParty/curl/ext/CMakeLists.txt @@ -14,6 +14,7 @@ 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) @@ -30,6 +31,51 @@ 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 @@ -55,48 +101,33 @@ if (APPLE) 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 - ) +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}) - - ExternalProject_Add( - curl - DEPENDS OpenSSL - 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 - ) -endif () \ No newline at end of file + InstallCurl(OpenSSL ${OPENSSL_ROOT_DIR}) +endif () diff --git a/CMakeLists.txt b/CMakeLists.txt index 59616c4..2935299 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,8 +37,8 @@ if(IOS) file(GLOB_RECURSE resources CONFIGURE_DEPENDS "openVulkanoCpp/*.storyboard" "openVulkanoCpp/*.xib") add_executable(openVulkanoCpp examples/main.m ${resources}) else() - file(GLOB_RECURSE sources CONFIGURE_DEPENDS "openVulkanoCpp/*.c" "openVulkanoCpp/*.cpp" "examples/*.cpp") - add_executable(openVulkanoCpp examples/main.cpp ${resources}) + file(GLOB_RECURSE sources CONFIGURE_DEPENDS "openVulkanoCpp/*.h" "openVulkanoCpp/*.c" "openVulkanoCpp/*.hpp" "openVulkanoCpp/*.cpp" "examples/*.hpp" "examples/*.cpp") + add_executable(openVulkanoCpp examples/main.cpp) endif() FilterPlatformPaths(sources) SetWarningSettings(openVulkanoCpp) @@ -62,27 +62,20 @@ endif () if (WIN32) # Ws2 target_link_libraries(openVulkanoCpp PRIVATE Ws2_32) - - file(GLOB_RECURSE DLLS "${CMAKE_BINARY_DIR}/*.dll") - - if (CMAKE_BUILD_TYPE STREQUAL "Release") - set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}" ) - elseif (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") - set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL}" ) - elseif (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") - set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO}" ) - elseif (CMAKE_BUILD_TYPE STREQUAL "Debug") - set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}" ) - else () - set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) - endif() + # grabs libcurl.dll libssl-1_1-x64.dll libcrypto-1_1-x64.dll + # TODO: statically link libcurl and it's dependencies + file(GLOB_RECURSE DLLS "${CMAKE_BINARY_DIR}/deps_curl/INSTALL/bin/*.dll") foreach(DLL ${DLLS}) add_custom_command(TARGET openVulkanoCpp POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${DLL} ${EXE_OUTPUT_DIR} + ${DLL} $ ) endforeach() + + set(CURL_STATIC_LIBS ${CMAKE_BINARY_DIR}/deps_curl/deps_curl) + file(GLOB_RECURSE LIBS "${CURL_STATIC_LIBS}/*.lib") + target_link_libraries(openVulkanoCpp PRIVATE ${LIBS}) endif () SetupVulkan(openVulkanoCpp)