cmake_minimum_required(VERSION 3.5) project(stellar) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) include(Version) include(Package) add_definitions(-D_GNU_SOURCE) set(CMAKE_CXX_STANDARD 11) set(CMAKE_C_STANDARD 11) #set warning as error add_compile_options(-Wall -Wextra -Werror) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo) endif() if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set (CMAKE_INSTALL_PREFIX "/opt/tsg/stellar" CACHE PATH "default install path" FORCE) endif() find_program(CMAKE_CXX_CPPCHECK NAMES cppcheck) if (CMAKE_CXX_CPPCHECK) list( APPEND CMAKE_CXX_CPPCHECK "--enable=all" "--std=c++11" "--error-exitcode=1" "--suppress=unusedFunction" "--suppress=missingInclude" "--suppress=uselessAssignmentPtrArg" "--suppress=unmatchedSuppression" "--suppress=variableScope" "--suppress=unreadVariable" "--suppress=cstyleCast" "--suppress=memleakOnRealloc" "--suppress=constParameter" "--suppress=uselessAssignmentArg" "--suppress=uninitvar" "--suppress=unusedStructMember" "--suppress=unreachableCode" "--suppress=internalAstError" "--suppress=nullPointerRedundantCheck" "--suppress=ctunullpointer" "--suppress=redundantAssignment" "--suppress=duplicateValueTernary" "--suppress=funcArgOrderDifferent" "--suppress=*:${PROJECT_SOURCE_DIR}/vendors/*" "--suppress=*:${PROJECT_SOURCE_DIR}/deps/toml/*" "--suppress=*:${PROJECT_SOURCE_DIR}/deps/rbtree/*" ) set(CMAKE_C_CPPCHECK ${CMAKE_CXX_CPPCHECK}) else() message(FATAL_ERROR "Could not find the program cppcheck.") endif() option(ENABLE_PIC "Generate position independent code (necessary for shared libraries)" TRUE) option(ENABLE_WARNING_ALL "Enable all optional warnings which are desirable for normal code" TRUE) if(NOT ASAN_OPTION) option(ENABLE_SANITIZE_ADDRESS "Enable AddressSanitizer" FALSE) else() option(ENABLE_SANITIZE_ADDRESS "Enable AddressSanitizer" TRUE) endif() option(ENABLE_SANITIZE_THREAD "Enable ThreadSanitizer" FALSE) if(ENABLE_PIC) set(CMAKE_POSITION_INDEPENDENT_CODE 1) endif() if(ENABLE_WARNING_ALL) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") endif() if(ENABLE_SANITIZE_ADDRESS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan") elseif(ENABLE_SANITIZE_THREAD) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fno-omit-frame-pointer") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fno-omit-frame-pointer") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan") endif() if(ENABLE_SANITIZE_ADDRESS AND ENABLE_SANITIZE_THREAD) message(WARNING "Both ENABLE_SANITIZE_ADDRESS and ENABLE_SANITIZE_THREAD set, only ENABLE_SANITIZE_ADDRESS effected.") endif() enable_testing() add_subdirectory(conf) add_subdirectory(vendor) add_subdirectory(deps) add_subdirectory(src) add_subdirectory(script) add_subdirectory(include) add_subdirectory(test) install(DIRECTORY DESTINATION log COMPONENT PROGRAM) install(DIRECTORY DESTINATION plugin COMPONENT PROGRAM)