From 92d9d113e7fe62a6041689f8420c955234710886 Mon Sep 17 00:00:00 2001 From: user Grupo de Sistemas Distribuidos Date: Fri, 1 Nov 2024 22:16:51 +0000 Subject: [PATCH] Support user specific CMAKE_MODULE_PATH --- CMakeLists.txt | 302 ++++++++++++++++++++++++------------------------- 1 file changed, 150 insertions(+), 152 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 110daa30..9b85a4d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,148 +1,144 @@ cmake_minimum_required(VERSION 2.8.10) project(braft C CXX) -SET(CPACK_GENERATOR "DEB") -SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "braft authors") #required +set(CPACK_GENERATOR "DEB") +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "braft authors") # required -INCLUDE(CPack) +include(CPack) -#option(EXAMPLE_LINK_SO "Whether examples are linked dynamically" OFF) +# option(EXAMPLE_LINK_SO "Whether examples are linked dynamically" OFF) option(BRPC_WITH_GLOG "With glog" OFF) option(WITH_DEBUG_SYMBOLS "With debug symbols" ON) set(WITH_GLOG_VAL "0") if(BRPC_WITH_GLOG) - set(WITH_GLOG_VAL "1") + set(WITH_GLOG_VAL "1") endif() if(WITH_DEBUG_SYMBOLS) - set(DEBUG_SYMBOL "-g") + set(DEBUG_SYMBOL "-g") endif() -set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) +list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") include(FindThreads) include(FindProtobuf) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - # require at least gcc 4.8 - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8) - message(FATAL_ERROR "GCC is too old, please install a newer version supporting C++11") - endif() - if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0)) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-aligned-new") - endif() + # require at least gcc 4.8 + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8) + message( + FATAL_ERROR + "GCC is too old, please install a newer version supporting C++11") + endif() + if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0)) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-aligned-new") + endif() elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - # require at least clang 3.3 - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.3) - message(FATAL_ERROR "Clang is too old, please install a newer version supporting C++11") - endif() + # require at least clang 3.3 + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.3) + message( + FATAL_ERROR + "Clang is too old, please install a newer version supporting C++11") + endif() else() - message(WARNING "You are using an unsupported compiler! Compilation has only been tested with Clang and GCC.") + message( + WARNING + "You are using an unsupported compiler! Compilation has only been tested with Clang and GCC." + ) endif() find_path(LEVELDB_INCLUDE_PATH NAMES leveldb/db.h) find_library(LEVELDB_LIB NAMES leveldb) -if ((NOT LEVELDB_INCLUDE_PATH) OR (NOT LEVELDB_LIB)) - message(FATAL_ERROR "Fail to find leveldb") +if((NOT LEVELDB_INCLUDE_PATH) OR (NOT LEVELDB_LIB)) + message(FATAL_ERROR "Fail to find leveldb") endif() find_path(GFLAGS_INCLUDE_PATH NAMES gflags/gflags.h) find_library(GFLAGS_LIB NAMES gflags) -if ((NOT GFLAGS_INCLUDE_PATH) OR (NOT GFLAGS_LIB)) - message(FATAL_ERROR "Fail to find gflags") +if((NOT GFLAGS_INCLUDE_PATH) OR (NOT GFLAGS_LIB)) + message(FATAL_ERROR "Fail to find gflags") endif() if(BRPC_WITH_GLOG) - find_path(GLOG_INCLUDE_PATH NAMES glog/logging.h) - find_library(GLOG_LIB NAMES glog) - if((NOT GLOG_INCLUDE_PATH) OR (NOT GLOG_LIB)) - message(FATAL_ERROR "Fail to find glog") - endif() - include_directories(${GLOG_INCLUDE_PATH}) + find_path(GLOG_INCLUDE_PATH NAMES glog/logging.h) + find_library(GLOG_LIB NAMES glog) + if((NOT GLOG_INCLUDE_PATH) OR (NOT GLOG_LIB)) + message(FATAL_ERROR "Fail to find glog") + endif() + include_directories(${GLOG_INCLUDE_PATH}) endif() if(LEVELDB_WITH_SNAPPY) - find_library(SNAPPY_LIB NAMES snappy) + find_library(SNAPPY_LIB NAMES snappy) endif() find_path(BRPC_INCLUDE_PATH NAMES brpc/server.h) find_library(BRPC_LIB NAMES libbrpc.a brpc) -if ((NOT BRPC_INCLUDE_PATH) OR (NOT BRPC_LIB)) - message(FATAL_ERROR "Fail to find brpc") +if((NOT BRPC_INCLUDE_PATH) OR (NOT BRPC_LIB)) + message(FATAL_ERROR "Fail to find brpc") endif() -if (NOT PROTOBUF_PROTOC_EXECUTABLE) - get_filename_component(PROTO_LIB_DIR ${PROTOBUF_LIBRARY} DIRECTORY) - set (PROTOBUF_PROTOC_EXECUTABLE "${PROTO_LIB_DIR}/../bin/protoc") +if(NOT PROTOBUF_PROTOC_EXECUTABLE) + get_filename_component(PROTO_LIB_DIR ${PROTOBUF_LIBRARY} DIRECTORY) + set(PROTOBUF_PROTOC_EXECUTABLE "${PROTO_LIB_DIR}/../bin/protoc") endif() if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(OPENSSL_ROOT_DIR - "/usr/local/opt/openssl" # Homebrew installed OpenSSL - ) + set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl" # Homebrew installed OpenSSL + ) endif() include(FindOpenSSL) include_directories( - ${GFLAGS_INCLUDE_PATH} - ${PROTOBUF_INCLUDE_DIRS} - ${LEVELDB_INCLUDE_PATH} - ${BRPC_INCLUDE_PATH} - ${OPENSSL_INCLUDE_DIR} - ) + ${GFLAGS_INCLUDE_PATH} ${PROTOBUF_INCLUDE_DIRS} ${LEVELDB_INCLUDE_PATH} + ${BRPC_INCLUDE_PATH} ${OPENSSL_INCLUDE_DIR}) if(BRPC_WITH_GLOG) - set(DYNAMIC_LIB - ${BRPC_LIB} - ${GFLAGS_LIB} - ${GLOG_LIB} - ${PROTOBUF_LIBRARY} - ${LEVELDB_LIB} - ${CMAKE_THREAD_LIBS_INIT} - ${OPENSSL_LIBRARIES} - ${OPENSSL_CRYPTO_LIBRARY} - dl - z - ) + set(DYNAMIC_LIB + ${BRPC_LIB} + ${GFLAGS_LIB} + ${GLOG_LIB} + ${PROTOBUF_LIBRARY} + ${LEVELDB_LIB} + ${CMAKE_THREAD_LIBS_INIT} + ${OPENSSL_LIBRARIES} + ${OPENSSL_CRYPTO_LIBRARY} + dl + z) else() - set(DYNAMIC_LIB - ${BRPC_LIB} - ${GFLAGS_LIB} - ${PROTOBUF_LIBRARY} - ${LEVELDB_LIB} - ${CMAKE_THREAD_LIBS_INIT} - ${OPENSSL_LIBRARIES} - ${OPENSSL_CRYPTO_LIBRARY} - dl - z - ) + set(DYNAMIC_LIB + ${BRPC_LIB} + ${GFLAGS_LIB} + ${PROTOBUF_LIBRARY} + ${LEVELDB_LIB} + ${CMAKE_THREAD_LIBS_INIT} + ${OPENSSL_LIBRARIES} + ${OPENSSL_CRYPTO_LIBRARY} + dl + z) endif() if(LEVELDB_WITH_SNAPPY) - set(DYNAMIC_LIB ${DYNAMIC_LIB} - ${SNAPPY_LIB} - ) + set(DYNAMIC_LIB ${DYNAMIC_LIB} ${SNAPPY_LIB}) endif() if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(DYNAMIC_LIB ${DYNAMIC_LIB} - pthread - "-framework CoreFoundation" - "-framework CoreGraphics" - "-framework CoreData" - "-framework CoreText" - "-framework Security" - "-framework Foundation" - "-Wl,-U,_MallocExtension_ReleaseFreeMemory" - "-Wl,-U,_ProfilerStart" - "-Wl,-U,_ProfilerStop" - ) + set(DYNAMIC_LIB + ${DYNAMIC_LIB} + pthread + "-framework CoreFoundation" + "-framework CoreGraphics" + "-framework CoreData" + "-framework CoreText" + "-framework Security" + "-framework Foundation" + "-Wl,-U,_MallocExtension_ReleaseFreeMemory" + "-Wl,-U,_ProfilerStart" + "-Wl,-U,_ProfilerStop") else() - set(DYNAMIC_LIB ${DYNAMIC_LIB} - rt - ) + set(DYNAMIC_LIB ${DYNAMIC_LIB} rt) endif() # for *.so @@ -152,100 +148,102 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output/lib) file(GLOB BRAFT_PROTOS "${CMAKE_CURRENT_SOURCE_DIR}/src/braft/*.proto") foreach(PROTO ${BRAFT_PROTOS}) - get_filename_component(PROTO_WE ${PROTO} NAME_WE) - list(APPEND PROTO_SRCS "${CMAKE_CURRENT_BINARY_DIR}/braft/${PROTO_WE}.pb.cc") - execute_process( - COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ${PROTO_FLAGS} - --cpp_out=${CMAKE_CURRENT_BINARY_DIR} - --proto_path=${PROTOBUF_INCLUDE_DIR} - --proto_path=${CMAKE_CURRENT_SOURCE_DIR}/src - --proto_path=${CMAKE_CURRENT_SOURCE_DIR}/src/braft/ ${PROTO} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - ERROR_VARIABLE PROTO_ERROR - RESULT_VARIABLE PROTO_RESULT - ) - if (${PROTO_RESULT} EQUAL 0) - else () - message (FATAL_ERROR "Fail to generate cpp of ${PROTO} : ${PROTO_ERROR}") - endif() + get_filename_component(PROTO_WE ${PROTO} NAME_WE) + list(APPEND PROTO_SRCS "${CMAKE_CURRENT_BINARY_DIR}/braft/${PROTO_WE}.pb.cc") + execute_process( + COMMAND + ${PROTOBUF_PROTOC_EXECUTABLE} ${PROTO_FLAGS} + --cpp_out=${CMAKE_CURRENT_BINARY_DIR} --proto_path=${PROTOBUF_INCLUDE_DIR} + --proto_path=${CMAKE_CURRENT_SOURCE_DIR}/src + --proto_path=${CMAKE_CURRENT_SOURCE_DIR}/src/braft/ ${PROTO} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ERROR_VARIABLE PROTO_ERROR + RESULT_VARIABLE PROTO_RESULT) + if(${PROTO_RESULT} EQUAL 0) + + else() + message(FATAL_ERROR "Fail to generate cpp of ${PROTO} : ${PROTO_ERROR}") + endif() endforeach() file(GLOB_RECURSE BRAFT_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/braft/*.cpp") -set(SOURCES - ${BRAFT_SOURCES} - ${PROTO_SRCS} - ) +set(SOURCES ${BRAFT_SOURCES} ${PROTO_SRCS}) -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_BINARY_DIR} -) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}) execute_process( - COMMAND bash -c "grep \"namespace [_A-Za-z0-9]\\+ {\" ${GFLAGS_INCLUDE_PATH}/gflags/gflags_declare.h | head -1 | awk '{print $2}' | tr -d '\n'" - OUTPUT_VARIABLE GFLAGS_NS -) + COMMAND + bash -c + "grep \"namespace [_A-Za-z0-9]\\+ {\" ${GFLAGS_INCLUDE_PATH}/gflags/gflags_declare.h | head -1 | awk '{print $2}' | tr -d '\n'" + OUTPUT_VARIABLE GFLAGS_NS) if(${GFLAGS_NS} STREQUAL "GFLAGS_NAMESPACE") - execute_process( - COMMAND bash -c "grep \"#define GFLAGS_NAMESPACE [_A-Za-z0-9]\\+\" ${GFLAGS_INCLUDE_PATH}/gflags/gflags_declare.h | head -1 | awk '{print $3}' | tr -d '\n'" - OUTPUT_VARIABLE GFLAGS_NS - ) + execute_process( + COMMAND + bash -c + "grep \"#define GFLAGS_NAMESPACE [_A-Za-z0-9]\\+\" ${GFLAGS_INCLUDE_PATH}/gflags/gflags_declare.h | head -1 | awk '{print $3}' | tr -d '\n'" + OUTPUT_VARIABLE GFLAGS_NS) endif() -execute_process( - COMMAND bash -c "git rev-parse --short HEAD | tr -d '\n'" - OUTPUT_VARIABLE BRAFT_REVISION -) +execute_process(COMMAND bash -c "git rev-parse --short HEAD | tr -d '\n'" + OUTPUT_VARIABLE BRAFT_REVISION) if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - include(CheckFunctionExists) - CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME) - if(NOT HAVE_CLOCK_GETTIME) - set(DEFINE_CLOCK_GETTIME "-DNO_CLOCK_GETTIME_IN_MAC") - endif() + include(CheckFunctionExists) + check_function_exists(clock_gettime HAVE_CLOCK_GETTIME) + if(NOT HAVE_CLOCK_GETTIME) + set(DEFINE_CLOCK_GETTIME "-DNO_CLOCK_GETTIME_IN_MAC") + endif() endif() -set(CMAKE_CPP_FLAGS "${DEFINE_CLOCK_GETTIME} -DBRPC_WITH_GLOG=${WITH_GLOG_VAL} -DGFLAGS_NS=${GFLAGS_NS}") -set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -DBTHREAD_USE_FAST_PTHREAD_MUTEX -D__const__=__unused__ -D_GNU_SOURCE -DUSE_SYMBOLIZE -DNO_TCMALLOC -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DBRAFT_REVISION=\\\"${BRAFT_REVISION}\\\" -D__STRICT_ANSI__") +set(CMAKE_CPP_FLAGS + "${DEFINE_CLOCK_GETTIME} -DBRPC_WITH_GLOG=${WITH_GLOG_VAL} -DGFLAGS_NS=${GFLAGS_NS}" +) +set(CMAKE_CPP_FLAGS + "${CMAKE_CPP_FLAGS} -DBTHREAD_USE_FAST_PTHREAD_MUTEX -D__const__=__unused__ -D_GNU_SOURCE -DUSE_SYMBOLIZE -DNO_TCMALLOC -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DBRAFT_REVISION=\\\"${BRAFT_REVISION}\\\" -D__STRICT_ANSI__" +) set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} ${DEBUG_SYMBOL}") if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)") - set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -msse4 -msse4.2") + set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -msse4 -msse4.2") endif() -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CPP_FLAGS} -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-invalid-offsetof -Wno-unused-parameter -Wno-reserved-user-defined-literal -fno-omit-frame-pointer") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CPP_FLAGS} -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-unused-parameter -fno-omit-frame-pointer") +set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} ${CMAKE_CPP_FLAGS} -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-invalid-offsetof -Wno-unused-parameter -Wno-reserved-user-defined-literal -fno-omit-frame-pointer" +) +set(CMAKE_C_FLAGS + "${CMAKE_C_FLAGS} ${CMAKE_CPP_FLAGS} -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-unused-parameter -fno-omit-frame-pointer" +) macro(use_cxx11) -if(CMAKE_VERSION VERSION_LESS "3.1.3") + if(CMAKE_VERSION VERSION_LESS "3.1.3") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -else() + else() set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) -endif() + endif() endmacro(use_cxx11) use_cxx11() add_subdirectory(src) if(BUILD_UNIT_TESTS) - add_subdirectory(test) + add_subdirectory(test) endif() add_subdirectory(tools) -file(COPY ${CMAKE_CURRENT_BINARY_DIR}/braft/ - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/output/include/braft/ - FILES_MATCHING - PATTERN "*.h" - PATTERN "*.hpp" - ) -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/src/ - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/output/include/ - FILES_MATCHING - PATTERN "*.h" - PATTERN "*.hpp" - ) -install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output/include/ - DESTINATION include - FILES_MATCHING - PATTERN "*.h" - PATTERN "*.hpp" - ) +file( + COPY ${CMAKE_CURRENT_BINARY_DIR}/braft/ + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/output/include/braft/ + FILES_MATCHING + PATTERN "*.h" + PATTERN "*.hpp") +file( + COPY ${CMAKE_CURRENT_SOURCE_DIR}/src/ + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/output/include/ + FILES_MATCHING + PATTERN "*.h" + PATTERN "*.hpp") +install( + DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output/include/ + DESTINATION include + FILES_MATCHING + PATTERN "*.h" + PATTERN "*.hpp")