From c53767b3375d8684f64a06dfb24a1341bbef8c67 Mon Sep 17 00:00:00 2001 From: Garrett Brown Date: Sun, 8 Mar 2020 15:34:17 -0700 Subject: [PATCH 1/6] CMake: Expose CMake options to includes This change shuffles the order of several CMake steps to expose CMake options to included files. By defining options before inclusion, included files are able to access the input provided by the build system. --- CMakeLists.txt | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d87de2452..03f703c86 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,18 +17,6 @@ include("cmake/Hunter/init.cmake") cmake_policy(SET CMP0048 NEW) project(libp2p VERSION 0.0.1 LANGUAGES C CXX) -include(cmake/print.cmake) -print("C flags: ${CMAKE_C_FLAGS}") -print("CXX flags: ${CMAKE_CXX_FLAGS}") -print("Using CMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}") - -include(CheckCXXCompilerFlag) -include(cmake/install.cmake) -include(cmake/libp2p_add_library.cmake) -include(cmake/dependencies.cmake) -include(cmake/functions.cmake) -include(cmake/san.cmake) - set(CMAKE_EXPORT_COMPILE_COMMANDS ON) option(TESTING "Build tests" ON) @@ -44,6 +32,18 @@ option(TSAN "Enable thread sanitizer" OFF) option(UBSAN "Enable UB sanitizer" OFF) option(EXPOSE_MOCKS "Make mocks header files visible for child projects" OFF) +include(cmake/print.cmake) +print("C flags: ${CMAKE_C_FLAGS}") +print("CXX flags: ${CMAKE_CXX_FLAGS}") +print("Using CMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}") + +include(CheckCXXCompilerFlag) +include(cmake/install.cmake) +include(cmake/libp2p_add_library.cmake) +include(cmake/dependencies.cmake) +include(cmake/functions.cmake) +include(cmake/san.cmake) + ## setup compilation flags if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "^(AppleClang|Clang|GNU)$") From 3489d71d8e68137d3c8f579e698471664fbb93fb Mon Sep 17 00:00:00 2001 From: Garrett Brown Date: Thu, 20 Feb 2020 16:31:12 -0800 Subject: [PATCH 2/6] CMake: Exclude test dependencies when building tests --- cmake/dependencies.cmake | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index e9eb5b62d..7ccec4ec6 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -1,7 +1,14 @@ -# https://docs.hunter.sh/en/latest/packages/pkg/GTest.html -hunter_add_package(GTest) -find_package(GTest CONFIG REQUIRED) -find_package(GMock CONFIG REQUIRED) +# +# Copyright Soramitsu Co., Ltd. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +# + +if (TESTING) + # https://docs.hunter.sh/en/latest/packages/pkg/GTest.html + hunter_add_package(GTest) + find_package(GTest CONFIG REQUIRED) + find_package(GMock CONFIG REQUIRED) +endif() # https://docs.hunter.sh/en/latest/packages/pkg/Boost.html hunter_add_package(Boost COMPONENTS random filesystem program_options) From 0e848d457a9f782d05cdc4e924eadf5db545f1e9 Mon Sep 17 00:00:00 2001 From: Garrett Brown Date: Sun, 16 Feb 2020 15:39:39 -0800 Subject: [PATCH 3/6] CMake: Allow build system to provide protobuf compiler When building without Hunter, it is desirable to pass the path to protoc and the protobuf include directory from the build system. Allow these variables to be overridden. Fixes the error: | CMake Error at cmake/functions.cmake:52 (message): | Protobuf_PROTOC_EXECUTABLE is empty | Call Stack (most recent call first): | cmake/functions.cmake:96 (compile_proto_to_cpp) | src/crypto/protobuf/CMakeLists.txt:6 (add_proto_library) --- cmake/functions.cmake | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/cmake/functions.cmake b/cmake/functions.cmake index 778eb16ff..f0c9a304e 100644 --- a/cmake/functions.cmake +++ b/cmake/functions.cmake @@ -45,8 +45,13 @@ function(add_flag flag) endfunction() function(compile_proto_to_cpp PROTO_LIBRARY_NAME PB_H PB_CC PROTO) - get_target_property(Protobuf_INCLUDE_DIR protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES) - get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc IMPORTED_LOCATION_RELEASE) + if (NOT Protobuf_INCLUDE_DIR) + get_target_property(Protobuf_INCLUDE_DIR protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES) + endif() + if (NOT Protobuf_PROTOC_EXECUTABLE) + get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc IMPORTED_LOCATION_RELEASE) + set(PROTOBUF_DEPENDS protobuf::protoc) + endif() if (NOT Protobuf_PROTOC_EXECUTABLE) message(FATAL_ERROR "Protobuf_PROTOC_EXECUTABLE is empty") @@ -78,7 +83,7 @@ function(compile_proto_to_cpp PROTO_LIBRARY_NAME PB_H PB_CC PROTO) COMMAND ${GEN_COMMAND} ARGS -I${PROJECT_SOURCE_DIR}/src -I${GEN_ARGS} --cpp_out=${SCHEMA_OUT_DIR} ${PROTO_ABS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - DEPENDS protobuf::protoc + DEPENDS ${PROTOBUF_DEPENDS} VERBATIM ) From b54cc8ce5470ba418ada2ea06c4c9d1a209da5d6 Mon Sep 17 00:00:00 2001 From: Garrett Brown Date: Sun, 16 Feb 2020 15:39:43 -0800 Subject: [PATCH 4/6] Fix build error due to missing include Error was: | literals.cpp: In function 'libp2p::common::Hash256 libp2p::common::operator""_hash256(const char*, size_t)': | literals.cpp:17:36: error: no matching function for call to 'min(size_t&, long unsigned int)' | 17 | std::copy_n(c, std::min(s, 32ul), hash.rbegin()); | | ^ --- src/common/literals.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/common/literals.cpp b/src/common/literals.cpp index e1bb4cac6..e7cac2902 100644 --- a/src/common/literals.cpp +++ b/src/common/literals.cpp @@ -11,6 +11,8 @@ #include #include +#include + namespace libp2p::common { libp2p::common::Hash256 operator""_hash256(const char *c, size_t s) { libp2p::common::Hash256 hash{}; From 2149c872a4ed9c255a952d8456d6c2b1ea83d5c4 Mon Sep 17 00:00:00 2001 From: Garrett Brown Date: Sun, 16 Feb 2020 15:39:44 -0800 Subject: [PATCH 5/6] Fix build error due to mismatched types Error was: | literals.cpp: In function 'libp2p::common::Hash256 libp2p::common::operator""_hash256(const char*, size_t)': | literals.cpp:19:36: error: no matching function for call to 'min(size_t&, long unsigned int)' | 19 | std::copy_n(c, std::min(s, 32ul), hash.rbegin()); | | ^ --- src/common/literals.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/literals.cpp b/src/common/literals.cpp index e7cac2902..3ddad5029 100644 --- a/src/common/literals.cpp +++ b/src/common/literals.cpp @@ -16,13 +16,13 @@ namespace libp2p::common { libp2p::common::Hash256 operator""_hash256(const char *c, size_t s) { libp2p::common::Hash256 hash{}; - std::copy_n(c, std::min(s, 32ul), hash.rbegin()); + std::copy_n(c, std::min(s, static_cast(32u)), hash.rbegin()); return hash; } libp2p::common::Hash512 operator""_hash512(const char *c, size_t s) { libp2p::common::Hash512 hash{}; - std::copy_n(c, std::min(s, 64ul), hash.rbegin()); + std::copy_n(c, std::min(s, static_cast(64u)), hash.rbegin()); return hash; } From 0ecc452c27ac0faad53715cbdfdeb297c06bb504 Mon Sep 17 00:00:00 2001 From: Garrett Brown Date: Wed, 18 Mar 2020 01:34:39 -0700 Subject: [PATCH 6/6] Fix compiler warning due to sign comparison When compiling with -Werror, this causes the build to fail. Warning was: | yamux_frame.cpp:103:28: error: comparison of integers of different signs: 'gsl::span::index_type' (aka 'int') and 'const uint32_t' (aka 'const unsigned int') [-Werror,-Wsign-compare] | if (frame_bytes.size() < YamuxFrame::kHeaderLength) { | ~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ --- src/muxer/yamux/yamux_frame.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/muxer/yamux/yamux_frame.cpp b/src/muxer/yamux/yamux_frame.cpp index be7f63066..897d9c012 100644 --- a/src/muxer/yamux/yamux_frame.cpp +++ b/src/muxer/yamux/yamux_frame.cpp @@ -100,7 +100,7 @@ namespace libp2p::connection { } boost::optional parseFrame(gsl::span frame_bytes) { - if (frame_bytes.size() < YamuxFrame::kHeaderLength) { + if (frame_bytes.size() < static_cast(YamuxFrame::kHeaderLength)) { return {}; }