180 lines
5.3 KiB
CMake
180 lines
5.3 KiB
CMake
cmake_minimum_required(VERSION 2.8)
|
|
|
|
SET (CONSENSUS_SRC_FILES
|
|
algorithm/configuration.cc
|
|
algorithm/paxos.cc
|
|
algorithm/witness.cc
|
|
# algorithm/paxos_log.cc
|
|
algorithm/rd_paxos_log.cc
|
|
algorithm/file_paxos_log.cc
|
|
algorithm/mem_paxos_log.cc
|
|
algorithm/paxos_server.cc
|
|
algorithm/paxos_log_cache.cc
|
|
algorithm/paxos_error.cc
|
|
algorithm/msg_compress.cc
|
|
algorithm/crc.cc
|
|
algorithm/log_meta_cache.cc
|
|
client/learner_client.cc
|
|
client/learner_server.cc
|
|
client/single_leader.cc
|
|
protocol/paxos.pb.cc
|
|
net/easyNet.cc
|
|
service/service.cc
|
|
service/thread_timer.cc
|
|
service/client_service.cc
|
|
)
|
|
|
|
SET (CONSENSUS_HEADER_FILES
|
|
include/net.h
|
|
include/paxos_server.h
|
|
include/client_service.h
|
|
include/paxos_configuration.h
|
|
include/paxos.h
|
|
include/witness.h
|
|
include/files.h
|
|
include/paxos_log.h
|
|
include/rd_paxos_log.h
|
|
include/file_paxos_log.h
|
|
include/mem_paxos_log.h
|
|
include/consensus.h
|
|
include/easyNet.h
|
|
include/service.h
|
|
include/thread_timer.h
|
|
include/learner_client.h
|
|
include/learner_server.h
|
|
include/single_leader.h
|
|
include/single_process_queue.h
|
|
include/paxos_log_cache.h
|
|
include/paxos_error.h
|
|
include/msg_compress.h
|
|
include/crc.h
|
|
include/log_meta_cache.h
|
|
include/paxos_option.h
|
|
protocol/paxos.pb.h
|
|
)
|
|
|
|
OPTION(WITH_DEBUG "Debug Mode" ON)
|
|
OPTION(WITH_DEBUG_LOG_CACHE "Debug Mode For Log Cache" OFF)
|
|
OPTION(WITH_TSAN "ThreadSanitizer Mode" OFF)
|
|
OPTION(WITH_ASAN "AddressSanitizer Mode" OFF)
|
|
OPTION(WITH_GPT "GooglePerfTools Enable" OFF)
|
|
OPTION(WITH_PROTOBUF3 "Build with protobuf3" OFF)
|
|
OPTION(MINIMAL_MAKE "Only make libaliconsensus.a" OFF)
|
|
|
|
IF(WITH_TSAN)
|
|
MESSAGE(STATUS "Build with ThreadSanitizer Enable!")
|
|
SET (EXTRA_SAN_FLAG -fsanitize=thread)
|
|
ENDIF()
|
|
|
|
IF(WITH_ASAN)
|
|
MESSAGE(STATUS "Build with AddressSanitizer Enable!")
|
|
SET (EXTRA_SAN_FLAG "-fsanitize=address")
|
|
ENDIF()
|
|
|
|
IF(WITH_GPT)
|
|
MESSAGE(STATUS "Build with GooglePerfTools Enable!")
|
|
SET (EXTRA_LINK tcmalloc_and_profiler)
|
|
ENDIF()
|
|
|
|
IF(WITH_DEBUG)
|
|
MESSAGE(STATUS "Build with debug mode!")
|
|
SET(CMAKE_BUILD_TYPE "Debug")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g -Wall -O0 -fno-omit-frame-pointer ${EXTRA_SAN_FLAG}")
|
|
ELSE()
|
|
MESSAGE(STATUS "Build with release mode!")
|
|
SET(CMAKE_BUILD_TYPE "RelWithDebInfo")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g -Wall -O3 -fPIC")
|
|
ENDIF()
|
|
|
|
IF(NOT MINIMAL_MAKE)
|
|
MESSAGE(STATUS "Build with full mode!")
|
|
ELSE()
|
|
MESSAGE(STATUS "Build with minimal mode!")
|
|
ENDIF()
|
|
|
|
INCLUDE_DIRECTORIES (include ${CMAKE_INSTALL_PREFIX}/include/easy
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../dependency/rocksdb/include/
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../dependency/mysql/include/
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../dependency/easy/src/io/
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../dependency/easy/src/include/
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../dependency/easy/src/util/
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../dependency/easy/src/thread/
|
|
)
|
|
|
|
SET (LIBEASY_OUTPUT
|
|
${CMAKE_INSTALL_PREFIX}/lib/libmyeasy.a
|
|
)
|
|
IF (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
|
|
add_custom_command (
|
|
OUTPUT ${LIBEASY_OUTPUT}
|
|
COMMAND [ -d output ] && mkdir output || echo "create output"
|
|
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR}/../dependency/easy/src &&
|
|
(rm -fr bu && mkdir bu && cd bu && cmake -D
|
|
CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} .. && cd ..) && cd
|
|
bu && make -j && make install
|
|
COMMENT "building libmyeasy"
|
|
)
|
|
ELSE()
|
|
add_custom_command (
|
|
OUTPUT ${LIBEASY_OUTPUT}
|
|
COMMAND [ -d output ] && mkdir output || echo "create output"
|
|
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR}/../dependency/easy/src &&
|
|
(rm -fr bu && mkdir bu && cd bu && cmake -D
|
|
CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DEASY_SPIN_USE_SYS=1 .. && cd ..) && cd
|
|
bu && make -j && make install
|
|
COMMENT "building libmyeasy"
|
|
)
|
|
ENDIF()
|
|
add_custom_target (libmyeasy
|
|
ALL DEPENDS ${LIBEASY_OUTPUT}
|
|
)
|
|
|
|
#IF(NOT MINIMAL_MAKE)
|
|
# SET (ROCKSDB_OUTPUT
|
|
# ${CMAKE_CURRENT_SOURCE_DIR}/../dependency/rocksdb/librocksdb.a
|
|
# )
|
|
# add_custom_command (
|
|
# OUTPUT ${ROCKSDB_OUTPUT}
|
|
# COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR}/../dependency/rocksdb/ &&
|
|
# (make clean) &&
|
|
# (make static_lib -j)
|
|
# COMMENT "building rocksdb"
|
|
# )
|
|
# add_custom_target (librocksdb
|
|
# ALL DEPENDS ${ROCKSDB_OUTPUT}
|
|
# )
|
|
#ENDIF()
|
|
|
|
link_directories(
|
|
${CMAKE_INSTALL_PREFIX}/lib
|
|
# ${CMAKE_CURRENT_SOURCE_DIR}/../dependency/rocksdb/
|
|
/usr/lib64/mysql/
|
|
/usr/lib/mysql/
|
|
)
|
|
|
|
IF(WITH_PROTOBUF3)
|
|
SET (PROTOBUF_OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/../dependency/protobuf-3.6.1/bu/lib64/libprotobuf.a)
|
|
add_custom_command (
|
|
OUTPUT ${PROTOBUF_OUTPUT}
|
|
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR}/../dependency/protobuf-3.6.1/cmake &&
|
|
(cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../bu) &&
|
|
(make install -j) && ([ -d ../bu/lib64 ] || mv ../bu/lib ../bu/lib64)
|
|
COMMENT "building protobuf3"
|
|
)
|
|
add_custom_target (libprotobuf
|
|
ALL DEPENDS ${PROTOBUF_OUTPUT}
|
|
)
|
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../dependency/protobuf-3.6.1/bu/include/)
|
|
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../dependency/protobuf-3.6.1/bu/lib64/)
|
|
ENDIF()
|
|
|
|
ADD_LIBRARY (aliconsensus STATIC ${CONSENSUS_SRC_FILES})
|
|
TARGET_LINK_LIBRARIES (aliconsensus protobuf pthread snappy z
|
|
bz2 lz4 rt ssl crypto myeasy ${EXTRA_LINK})
|
|
|
|
install(TARGETS aliconsensus DESTINATION lib)
|
|
install(FILES ${CONSENSUS_HEADER_FILES} DESTINATION include/aliconsensus)
|
|
|
|
set( CMAKE_EXPORT_COMPILE_COMMANDS 1 )
|