Skip to content
Snippets Groups Projects
CMakeLists.txt 9.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • Andrea Michelotti's avatar
    Andrea Michelotti committed
    cmake_minimum_required(VERSION 2.8)
    
    MESSAGE("framework CMakeLists")
    IF(WIN32)
    
    add_definitions(-D_WIN32_WINNT=0x601)
    
    #include(config/CMakeChaosWin.txt)
    macro (MESG parm)
      SET(WHERE ${CMAKE_CURRENT_LIST_DIR})
      MESSAGE(STATUS "[${WHERE}] ${parm}")
    endmacro()
    
    include(config/CMakeChaos.txt)
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
    project(chaosframework)
    include(ExternalProject)
    
    #enable_testing()
    
    
    #find git
    find_package(Git REQUIRED)
    
    #clear var
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
    unset(CMAKE_CXX_COMPILER_WORKS CACHE)
    unset(CMAKE_CXX_COMPILER_WORKS)
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
    option(USE_GPT "Uses Google Performance tool to perform analisys" OFF)
    option(CLING_VIRTUAL_MACHINE_ENABLE "Enable cling for scripting" OFF)
    
    option(CHAOS_ONLY_DEPENDECY "Download all the dependency" OFF)
    
    option(CHAOS_ARCHITECTURE_TEST "Architecture tests" OFF)
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
    option(CHAOS_PROMETHEUS "Enable Prometheus metrics support" OFF)
    
    if (WIN32)
    option(CHAOS_MDS "Chaos Data Service" OFF)
    option(CHAOS_AGENT "Chaos Agent Service" OFF)
    option(CHAOS_DATA_EXPORT "Chaos Data Export" OFF)
    option(CHAOS_EXAMPLES "Chaos Examples" OFF)
    
    #warning possibile perdita di dati spento.
    add_definitions(-wd"4267")
    
    Alessandro D'Uffizi's avatar
    Alessandro D'Uffizi committed
    
    
    SET (ALL_WINDOWS_LIBPATH "DbgHelp.lib Netapi32.lib Iphlpapi.lib")
    
    
    
    
    option(CHAOS_AGENT "Chaos Agent Service" ON)
    
    option(CHAOS_DATA_EXPORT "Chaos Data Export" ON)
    option(CHAOS_EXAMPLES "Chaos Examples" ON)
    
    option(CHAOS_CCS "Chaos CCS Compile needs qt5.6-static-x86_64 installed" OFF)
    
    if(NOT QMAKE_PATH)
      set(QMAKE_PATH /usr/local/chaos/qt-56/bin)
    ENDIF()
    
    EXECUTE_PROCESS(
    
    COMMAND sh ./version.sh
    
    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/chaos/common/
    RESULT_VARIABLE err
        OUTPUT_VARIABLE out
    )
    if(err)
    	ERROR("CANNOT generate ${CMAKE_CURRENT_LIST_DIR}/chaos/common/version.h: ${out}")
    	ELSE()
    	MESG("created version.h")
    ENDIF()
    
    
    CheckConfigureBuild(jsoncpp jsoncpp "-DJSONCPP_WITH_TESTS=OFF;-DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF" https://github.com/bisegni )
    
    if(CHAOS_MDS)
      CheckConfigureBuild(mongoclient mongo-cxx-driver:legacy-1.0.0-rc0 "--extralib=boost_system;--disable-warnings-as-errors;install-mongoclient" https://github.com/mongodb)
    ENDIF()
    
    #IF(CHAOS_ARCHITECTURE_TEST)
    #    SET (CMAKE_BUILD_TYPE Debug)
    #    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fprofile-arcs -ftest-coverage")
    #    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fprofile-arcs -ftest-coverage")
    #    set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
    #ENDIF()
    
    IF (CHAOS_ONLY_DEPENDECY OR
        CHAOS_ARCHITECTURE_TEST)
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
      MESG("Add google Test as external project")
    
      ExternalProject_Add(
         googletest
         GIT_REPOSITORY https://github.com/google/googletest.git
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
         GIT_TAG release-1.8.0
    
         PREFIX "${CMAKE_BINARY_DIR}/ext_dep/googletest-prefix"
         SOURCE_DIR "${CMAKE_BINARY_DIR}/ext_dep/googletest-src"
         BINARY_DIR "${CMAKE_BINARY_DIR}/ext_dep/googletest-build"
         CMAKE_ARGS
          -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
         LOG_DOWNLOAD ON
         LOG_CONFIGURE ON
         LOG_BUILD ON)
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
    
    
         # Specify include dir
         ExternalProject_Get_Property(googletest source_dir)
         set(GTEST_INCLUDE_DIR ${source_dir}/include)
    
         # Library
         ExternalProject_Get_Property(googletest binary_dir)
         set(GTEST_LIBRARY_DIR ${binary_dir})
         ExternalProject_Get_Property(googletest binary_dir)
         set(GTEST_LIBRARY_PATH ${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}gtest.a)
    
         MESG("${GTEST_INCLUDE_DIR}")
         MESG("${GTEST_LIBRARY_DIR}")
         MESG("${GTEST_LIBRARY_PATH}")
         MESG("${GTEST_LIBRARY}")
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
    IF (USE_GPT)
        #google performance tools
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
        MESG("Add Google Performance Tools dependency")
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
        ExternalProject_Add(
        google_pt
        GIT_REPOSITORY https://github.com/gperftools/gperftools.git
        GIT_TAG master
        PREFIX "${CMAKE_BINARY_DIR}/ext_dep/gpt-prefix"
        SOURCE_DIR "${CMAKE_BINARY_DIR}/ext_dep/gpt-src"
        BINARY_DIR "${CMAKE_BINARY_DIR}/ext_dep/gpt-src"
    
        CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/ext_dep/gpt-src/./autogen.sh COMMAND ${CMAKE_BINARY_DIR}/ext_dep/gpt-src/./configure --prefix=${CMAKE_INSTALL_PREFIX}
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
        LOG_DOWNLOAD ON
        LOG_CONFIGURE ON
        LOG_BUILD ON)
    
        # Specify include dir
        ExternalProject_Get_Property(google_pt source_dir)
        set(GPT_INCLUDE_DIR ${google_pt_sdir}/include)
    
        # Library
        ExternalProject_Get_Property(google_pt binary_dir)
        set(GPT_LIBRARY_DIR ${google_pt_bdir})
    
        MESG("${GPT_INCLUDE_DIR}")
        MESG("${GPT_LIBRARY_DIR}")
    ENDIF()
    
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
    IF (CHAOS_PROMETHEUS)
      #google performance tools
      MESG("Add Prometheus metrics dependency")
      ExternalProject_Add(
      prometheus
      GIT_REPOSITORY https://github.com/jupp0r/prometheus-cpp.git
      GIT_TAG master
      PREFIX "${CMAKE_BINARY_DIR}/ext_dep/prometheus-prefix"
      SOURCE_DIR "${CMAKE_BINARY_DIR}/ext_dep/prometheus-src"
      BINARY_DIR "${CMAKE_BINARY_DIR}/ext_dep/prometheus-src"
      CMAKE_ARGS  -DBUILD_SHARED_LIBS=ON
                    -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
      LOG_DOWNLOAD ON
      LOG_CONFIGURE ON
      LOG_BUILD ON)
      # add definition for compilation
      add_definitions(-DCHAOS_PROMETHEUS=1)
    ENDIF()
    
    
    SET( ${PROJECT_NAME}_MAJOR_VERSION 0 )
    SET( ${PROJECT_NAME}_MINOR_VERSION 1 )
    
    SET( ${PROJECT_NAME}_PATCH_LEVEL 0 )
    
    # ADD_DEFINITIONS(-Wno-ignored-attributes)
    
    INCLUDE_DIRECTORIES(. ../ ../../ ${CMAKE_INSTALL_PREFIX}/include)
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
    LINK_DIRECTORIES(${CMAKE_INSTALL_PREFIX}/lib)
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
    LINK_DIRECTORIES(${CMAKE_INSTALL_PREFIX}/lib64)
    LINK_DIRECTORIES(${CMAKE_INSTALL_PREFIX}/lib/x86_64-linux-gnu)
    
    SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
    ADD_DEFINITIONS(${GCC_COVERAGE_COMPILE_FLAGS})
    MESSAGE(STATUS "COMMON COMPILE FLAGS:${GCC_COVERAGE_COMPILE_FLAGS}")
    
    
    if(NOT CHAOS_ONLY_DEPENDECY)
      MESG("Configure Common Layer")
      ADD_SUBDIRECTORY(chaos/common)
    
      MESG("Configure CUToolkit Layer")
      ADD_SUBDIRECTORY(chaos/cu_toolkit)
    
      MESG("Configure Chaos Metadata Service Client Library")
      ADD_SUBDIRECTORY(chaos_metadata_service_client)
    
      MESG("Configure Chaos Micro Unit Toolkit")
      ADD_SUBDIRECTORY(chaos_micro_unit_toolkit)
    
    endif()
    
    IF (CHAOS_AGENT AND NOT CHAOS_ONLY_DEPENDECY)
    
      MESG("Configure Chaos Agent Service")
      ADD_SUBDIRECTORY(ChaosAgent)
    
    IF (CHAOS_MDS AND
        NOT CHAOS_ONLY_DEPENDECY)
    
        # IF("${CMAKE_CXX_COMPILE_FEATURES}" MATCHES "cxx_std_11")
        MESG("Configure Chaos Data Service")
        ADD_SUBDIRECTORY(ChaosMetadataService)
        # ELSE()
        # WARN("Chaos Data Service require a c11 compliant compiler")
        # ENDIF()
    
    ENDIF()
    
    IF(NOT CHAOS_ONLY_DEPENDECY)
    
      MESG("Configure Chaos Metadata Service Client Library Test Application")
      ADD_SUBDIRECTORY(ChaosMetadataServiceClientTest)
    
      IF (CHAOS_DATA_EXPORT)
        MESG("Configure Chaos Data Export ")
        ADD_SUBDIRECTORY(ChaosDataExport)
      ENDIF()
    
      IF(CHAOS_EXAMPLES)
        MESG("Configure Chaos ChaosMDSCmd")
        ADD_SUBDIRECTORY(example/ChaosMDSCmd)
      ENDIF()
    
    IF (CHAOS_ARCHITECTURE_TEST)
    
    #scan all subdirectory of test directory
        MESG("Configure infrastructure tests")
    
        set_directory_properties(PROPERTIES GTEST_INCLUDE_DIR ${GTEST_INCLUDE_DIR}
                                            GTEST_LIBRARY_DIR ${GTEST_LIBRARY_DIR}
                                            GTEST_LIBRARY_PATH ${GTEST_LIBRARY_PATH})
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
        ADD_SUBDIRECTORY(TestFramework)
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
    #    SET(CHAOS_TEST_DIRECTORY "CHAOSFrameworkTests")
    #    SUBDIRLIST(TEST_SUBDIRS ${CHAOS_TEST_DIRECTORY})
    #    FOREACH(_TEST_DIRECTORY ${TEST_SUBDIRS})
    #        IF(EXISTS "${_TEST_DIRECTORY}/CMakeLists.txt")
    #            #set the external project variable in subdirectory
    #            get_filename_component(_TEST_DIR_NAME ${_TEST_DIRECTORY} NAME)
    #            MESG("Configure ${_TEST_DIR_NAME} test")
    #            ADD_SUBDIRECTORY(${_TEST_DIRECTORY})
    #        ENDIF()
    #    ENDFOREACH()
    
    MESG("Done")
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
        IF( NOT ${CMAKE_INSTALL_PREFIX} MATCHES ${CMAKE_CURRENT_SOURCE_DIR}/usr/local)
          IF(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/usr/local" )
                FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/usr)
                MESG("linking ${CMAKE_INSTALL_PREFIX} ${CMAKE_CURRENT_SOURCE_DIR}/usr/local")
               execute_process(
                 COMMAND ln -sf ${CMAKE_INSTALL_PREFIX} ${CMAKE_CURRENT_SOURCE_DIR}/usr/local
                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                 RESULT_VARIABLE err
                 OUTPUT_VARIABLE out
                 )
               IF(err)
                 ERROR("cannot create symlink ${CMAKE_INSTALL_PREFIX} ${CMAKE_CURRENT_SOURCE_DIR}/usr/local")
               ELSE()
                MESG("created symlink ${CMAKE_INSTALL_PREFIX}->${CMAKE_CURRENT_SOURCE_DIR}/usr/local")
              ENDIF()
            ENDIF()
        ENDIF()
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
    ENDIF()
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
    IF(CHAOS_CCS)
    
        MESG("CCS compilation ENABLED.")
    
        IF(EXISTS "${QMAKE_PATH}/qmake")
          MESG("Found 'qmake' in ${QMAKE_PATH}")
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
            COMMAND ${QMAKE_PATH}/qmake
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ccs
            RESULT_VARIABLE err
            OUTPUT_VARIABLE out
            )
            if(err)
                ERROR("error generating QT stubs error: ${out}")
            endif()
    
           add_custom_target(ccs
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
            COMMAND make -j ${PROCESSOR_COUNT}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ccs
            DEPENDS chaos_common
            COMMENT "compiling CCS"
            )
    
          ERROR("missing ${QMAKE_PATH}/qmake")
    
    Claudio Bisegni's avatar
    Claudio Bisegni committed
    ENDIF()
    
    bisegni's avatar
    bisegni committed
    
    
      IF (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/ccs/ccs)
        MESG("copying ccs to ${CMAKE_INSTALL_PREFIX}/bin")
        FILE(GLOB exe ${CMAKE_CURRENT_SOURCE_DIR}/ccs/ccs.sh ${CMAKE_CURRENT_SOURCE_DIR}/ccs/ccs)
        FILE(COPY ${exe} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
      ENDIF()
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
    INSTALL(DIRECTORY tools DESTINATION ${CMAKE_INSTALL_PREFIX} PATTERN "*" PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ)