From 20374b2a3d09c4caa621bfb2e50ca9e1d2022916 Mon Sep 17 00:00:00 2001 From: Daniel Lyubomirov <dennislt@gmail.com> Date: Fri, 12 Jun 2020 21:39:39 +0300 Subject: [PATCH] Fix windows build --- cpp/CMakeLists.txt | 29 +++++++++++++++-------- cpp/src/CMakeLists.txt | 25 +++++++++++++++---- cpp/src/csandbox.cc | 2 -- cpp/src/vereign/restapi/post_result.hh | 6 +++++ cpp/tests/integration/integration_test.cc | 2 +- cpp/vendor/CMakeLists.txt | 21 +++++++++------- cpp/vendor/boost.cmake | 2 +- cpp/vendor/grpc.cmake | 7 ++++++ 8 files changed, 67 insertions(+), 27 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 81ddf56..b347034 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -29,18 +29,25 @@ else() endif() if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - add_definitions(-D_WIN32_WINNT=0x0601) - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Release>:Release>") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") + # add_definitions(-D_WIN32_WINNT=0x0601) + add_definitions(-D_WIN32_WINNT=0x0A00) + + # set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL$<$<CONFIG:Release>:Release>") + # set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL$<$<CONFIG:Debug>:Debug>") + + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL") + endif() set(CMAKE_C_FLAGS "/DNDEBUG /DWIN32 /D_WINDOWS /W3") set(CMAKE_CXX_FLAGS "/DNDEBUG /DWIN32 /D_WINDOWS /W3 /GR /EHsc") - set(CMAKE_C_FLAGS_DEBUG "/MTd /Zi /Ob0 /Od /RTC1") - set(CMAKE_CXX_FLAGS_DEBUG "/MTd /Zi /Ob0 /Od /RTC1") + set(CMAKE_C_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1") + set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1") - set(CMAKE_CXX_FLAGS_RELEASE "/Gd /MT /O2 /Oi /Ot /Gy /Zi /GL") - set(CMAKE_C_FLAGS_RELEASE "/Gd /MT /O2 /Oi /Ot /Gy /Zi /GL") + set(CMAKE_CXX_FLAGS_RELEASE "/Gd /MD /O2 /Oi /Ot /Gy /Zi /GL") + set(CMAKE_C_FLAGS_RELEASE "/Gd /MD /O2 /Oi /Ot /Gy /Zi /GL") if (CMAKE_BUILD_TYPE STREQUAL "Release") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG /OPT:REF /OPT:ICF /LTCG") @@ -64,7 +71,7 @@ endif() set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_EXTENSIONS OFF) message("Generator: " "${CMAKE_GENERATOR}") @@ -81,7 +88,8 @@ message("CXX dll linker flags: " "${CMAKE_SHARED_LINKER_FLAGS}") message("CXX static linker flags: " "${CMAKE_STATIC_LINKER_FLAGS}") string(TOLOWER "${CMAKE_BUILD_TYPE}" _build_type) -set(VENDOR_INSTALL_DIR ${CMAKE_SOURCE_DIR}/cmake-install-vendor-${_build_type} CACHE STRING "vendor directory") +set(VENDOR_INSTALL_DIR ${CMAKE_SOURCE_DIR}/cmake-install-vendor-debug CACHE STRING "vendor directory") +# set(VENDOR_INSTALL_DIR ${CMAKE_SOURCE_DIR}/cmake-install-vendor-${_build_type} CACHE STRING "vendor directory") message(STATUS "Using vendor install dir: ${VENDOR_INSTALL_DIR}") #set(VENDOR_INSTALL_DIR /home/daniel/workspace/local) set(_cmake_prefix_paths @@ -109,7 +117,7 @@ find_package( 1.72.0 EXACT REQUIRED - COMPONENTS regex thread system + COMPONENTS regex thread system date_time ) find_package(Protobuf CONFIG REQUIRED) @@ -161,6 +169,7 @@ message(STATUS "summary of build options: EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS_${_build_type}} ${CMAKE_EXE_LINKER_FLAGS} WARNCFLAGS: ${WARNCFLAGS} CXX1XCXXFLAGS: ${CXX1XCXXFLAGS} + CMAKE_MSVC_RUNTIME_LIBRARY: ${CMAKE_MSVC_RUNTIME_LIBRARY} Libs: fmt: ${fmt_FOUND} [${fmt_VERSION}] (DIR='${fmt_DIR}') OpenSSL: ${OpenSSL_FOUND} [${OPENSSL_VERSION}] (LIBS='${OPENSSL_LIBRARIES}') diff --git a/cpp/src/CMakeLists.txt b/cpp/src/CMakeLists.txt index 20c17f3..ed74694 100644 --- a/cpp/src/CMakeLists.txt +++ b/cpp/src/CMakeLists.txt @@ -2,11 +2,15 @@ if (fmt_FOUND) get_target_property(FMT_INCLUDE_DIR fmt::fmt INTERFACE_INCLUDE_DIRECTORIES) endif() +if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + add_definitions(-DNOGDI) +endif() + include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src ${VENDOR_INSTALL_DIR}/include - ${VENDOR_INSTALL_DIR}/boost/include + ${Boost_INCLUDE_DIRS} ${FMT_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/proto/cpp ) @@ -55,7 +59,10 @@ list(APPEND VEREIGNLIB_SRC ${GENERATED_SERVICES_SRC}) add_library(vereignlib STATIC ${VEREIGNLIB_SRC}) set_property(TARGET vereignlib PROPERTY POSITION_INDEPENDENT_CODE ON) -target_link_libraries(vereignlib PRIVATE nlohmann_json::nlohmann_json) +target_link_libraries(vereignlib PRIVATE + nlohmann_json::nlohmann_json + fmt::fmt +) target_link_libraries(vereignlib PUBLIC vereignproto gRPC::grpc++_reflection @@ -68,7 +75,14 @@ add_library(vereign SHARED target_include_directories(vereign PRIVATE ${CMAKE_SOURCE_DIR}/include ) -target_link_libraries(vereign PRIVATE vereignlib) +target_link_libraries(vereign PRIVATE + vereignlib + $<$<CXX_COMPILER_ID:MSVC>:Boost::date_time> +) +if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + # Set the DLLEXPORT variable to export symbols + target_compile_definitions(vereign PRIVATE WIN_EXPORT) +endif() set(csandbox_sources csandbox.cc @@ -80,7 +94,10 @@ set(csandbox_sources add_executable(csandbox ${csandbox_sources}) target_link_libraries(csandbox - vereign + PRIVATE vereignlib + $<$<CXX_COMPILER_ID:MSVC>:Boost::date_time> + # Boost::thread + # vereign # fmt::fmt # Boost::regex # Threads::Threads diff --git a/cpp/src/csandbox.cc b/cpp/src/csandbox.cc index 7a1eb95..561cf21 100644 --- a/cpp/src/csandbox.cc +++ b/cpp/src/csandbox.cc @@ -1,6 +1,4 @@ -#include <iostream> auto main(int argc, char* argv[]) -> int { - std::cout << "hello" << std::endl; return 0; } diff --git a/cpp/src/vereign/restapi/post_result.hh b/cpp/src/vereign/restapi/post_result.hh index 6d31f5b..a975f0e 100644 --- a/cpp/src/vereign/restapi/post_result.hh +++ b/cpp/src/vereign/restapi/post_result.hh @@ -12,12 +12,18 @@ struct PostResult { RequestPtr Request; ResponsePtr Response; + PostResult() + : Request{nullptr}, + Response{nullptr} + {} + PostResult(RequestPtr req, ResponsePtr resp) : Request{std::move(req)}, Response{std::move(resp)} {} PostResult(PostResult&& other) = default; + PostResult& operator=(PostResult&& other) = default; PostResult(const PostResult&) = delete; PostResult& operator=(const PostResult&) = delete; diff --git a/cpp/tests/integration/integration_test.cc b/cpp/tests/integration/integration_test.cc index d89c6d2..dddb58f 100644 --- a/cpp/tests/integration/integration_test.cc +++ b/cpp/tests/integration/integration_test.cc @@ -107,7 +107,7 @@ TEST_CASE("vereign_service_start") { SECTION("invalid listen address") { vereign_error* err = nullptr; auto service = vereign_service_start( - "invalid", + "##$$", "", "", "", diff --git a/cpp/vendor/CMakeLists.txt b/cpp/vendor/CMakeLists.txt index 79268ff..3f64020 100644 --- a/cpp/vendor/CMakeLists.txt +++ b/cpp/vendor/CMakeLists.txt @@ -1,26 +1,29 @@ cmake_minimum_required (VERSION 3.16.5) -if(WIN32) +if (WIN32) set(CMAKE_IGNORE_PATH "C:/Strawberry/c/bin") endif() project (vereign-vendor) -if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") +if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") add_definitions(-D_WIN32_WINNT=0x0601) set(CMAKE_C_FLAGS "/DNDEBUG /DWIN32 /D_WINDOWS /W3") set(CMAKE_CXX_FLAGS "/DNDEBUG /DWIN32 /D_WINDOWS /W3 /GR /EHsc") - set(CMAKE_C_FLAGS_DEBUG "/MTd /Zi /Ob0 /Od /RTC1") - set(CMAKE_CXX_FLAGS_DEBUG "/MTd /Zi /Ob0 /Od /RTC1") + set(CMAKE_C_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1") + set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1") - set(CMAKE_CXX_FLAGS_RELEASE "/Gd /MT /O2 /Oi /Ot /Gy /Zi /GL") - set(CMAKE_C_FLAGS_RELEASE "/Gd /MT /O2 /Oi /Ot /Gy /Zi /GL") + set(CMAKE_CXX_FLAGS_RELEASE "/Gd /MD /O2 /Oi /Ot /Gy /Zi /GL") + set(CMAKE_C_FLAGS_RELEASE "/Gd /MD /O2 /Oi /Ot /Gy /Zi /GL") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") - if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebug") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Release>:Release>") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL") + + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL") endif() endif() diff --git a/cpp/vendor/boost.cmake b/cpp/vendor/boost.cmake index e0dfc1c..430902d 100644 --- a/cpp/vendor/boost.cmake +++ b/cpp/vendor/boost.cmake @@ -1,6 +1,6 @@ include(ExternalProject) -set(_boost_libs regex system thread) +set(_boost_libs regex system thread date_time) if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") list(TRANSFORM _boost_libs PREPEND --with-) diff --git a/cpp/vendor/grpc.cmake b/cpp/vendor/grpc.cmake index db85269..a33a809 100644 --- a/cpp/vendor/grpc.cmake +++ b/cpp/vendor/grpc.cmake @@ -18,6 +18,13 @@ ExternalProject_Add(grpclib -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_MSVC_RUNTIME_LIBRARY:STRING=${CMAKE_MSVC_RUNTIME_LIBRARY} + -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS} + -DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} + -DCMAKE_C_FLAGS_DEBUG:STRING=${CMAKE_C_FLAGS_DEBUG} + -DCMAKE_CXX_FLAGS_DEBUG:STRING=${CMAKE_CXX_FLAGS_DEBUG} + -DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE} + -DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE} -DBUILD_SHARED_LIBS:BOOL=OFF -DgRPC_SSL_PROVIDER:STRING=package -DOPENSSL_USE_STATIC_LIBS:BOOL=ON -- GitLab