Skip to content
Snippets Groups Projects
CMakeLists.txt 6.02 KiB
Newer Older
  • Learn to ignore specific revisions
  • Andrea Michelotti's avatar
    Andrea Michelotti committed
    cmake_minimum_required(VERSION 2.8)
    
    include(config/CMakeChaos.txt)
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
    project(chaosframework)
    
    include(ExternalProject)
    include(CTest)
    #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)
    
    #specify option
    option(CHAOS_ONLY_DEPENDECY "Download all the dependency" OFF)
    
    option(CHAOS_MEMCACHE_TEST "Memcached test" OFF)
    
    option(CHAOS_ARCHITECTURE_TEST "Architecture tests" OFF)
    
    option(CHAOS_CDS "Chaos Data Service" ON)
    option(CHAOS_MDS "Chaos MetaData Service" ON)
    
    option(CHAOS_WAN "Chaos Wan Service" OFF)
    
    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)
    
    set(QMAKE_PATH /usr/local/chaos/qt-56/bin)
    
    EXECUTE_PROCESS(
    COMMAND ./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()
    
    
    ###### Required Libraries
    CheckConfigureBuild(jsoncpp jsoncpp "-DJSONCPP_WITH_TESTS=OFF;-DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF" https://github.com/bisegni )
    
    CheckConfigureBuild(mongoclient mongo-cxx-driver:legacy-1.0.0-rc0 "--extralib=boost_system;--disable-warnings-as-errors;install-mongoclient" https://github.com/mongodb)
    #########
    
    IF (CHAOS_ONLY_DEPENDECY OR
        CHAOS_ARCHITECTURE_TEST)
    
      #google test
      ExternalProject_Add(
         googletest
         GIT_REPOSITORY https://github.com/google/googletest.git
         GIT_TAG master
         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)
    ENDIF()
    
    
    SET( ${PROJECT_NAME}_MAJOR_VERSION 0 )
    SET( ${PROJECT_NAME}_MINOR_VERSION 1 )
    
    SET( ${PROJECT_NAME}_PATCH_LEVEL 0 )
    
    
    INCLUDE_DIRECTORIES(. ../ ../../ ${CMAKE_INSTALL_PREFIX}/include)
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
    LINK_DIRECTORIES(${CMAKE_INSTALL_PREFIX}/lib)
    
    SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
    
    if(NOT CHAOS_ONLY_DEPENDECY)
      MESG("Configure Common Layer")
      ADD_SUBDIRECTORY(chaos/common)
    
      MESG("Configure CUToolkit Layer")
      ADD_SUBDIRECTORY(chaos/cu_toolkit)
    
      MESG("Configure UIToolkit Layer")
      ADD_SUBDIRECTORY(chaos/ui_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)
    ENDIF()
    
    IF (CHAOS_MDS AND NOT CHAOS_ONLY_DEPENDECY)
      MESG("Configure Chaos Metadata Service")
      ADD_SUBDIRECTORY(ChaosMetadataService)
    ENDIF()
    
    IF(NOT CHAOS_ONLY_DEPENDECY)
      MESG("Configure Chaos Metadata Service Client Library Test Application")
      ADD_SUBDIRECTORY(ChaosMetadataServiceClientTest)
    
      MESG("Configure Chaos Micro Unit Toolkit Test")
      ADD_SUBDIRECTORY(ChaosMicroUnitToolkitTest)
    
      IF (CHAOS_WAN)
        MESG("Configure Chaos WAN Proxy")
        ADD_SUBDIRECTORY(ChaosWANProxy)
      ENDIF()
    
      IF (CHAOS_DATA_EXPORT)
        MESG("Configure Chaos Data Export ")
        ADD_SUBDIRECTORY(ChaosDataExport)
      ENDIF()
    
      IF(CHAOS_EXAMPLES)
        MESG("Configure Chaos CLI")
        ADD_SUBDIRECTORY(example/ChaosCLI)
    
        MESG("Configure Chaos ChaosMDSCmd")
        ADD_SUBDIRECTORY(example/ChaosMDSCmd)
    
        MESG("Configure Chaos Performance Tester")
        ADD_SUBDIRECTORY(example/ChaosPerformanceTester)
      ENDIF()
    
    IF (CHAOS_ARCHITECTURE_TEST)
    
    #scan all subdirectory of test directory
        MESG("Configure infrastructure tests")
        SET(CHAOS_TEST_DIRECTORY "CHAOSFrameworkTests")
    
        SUBDIRLIST(TEST_SUBDIRS ${CHAOS_TEST_DIRECTORY})
        FOREACH(_TEST_DIRECTORY ${TEST_SUBDIRS})
            IF(EXISTS "${_TEST_DIRECTORY}/CMakeLists.txt")
                get_filename_component(_TEST_DIR_NAME ${_TEST_DIRECTORY} NAME)
                MESG("Configure ${_TEST_DIR_NAME} test")
                ADD_SUBDIRECTORY(${_TEST_DIRECTORY})
            ENDIF()
        ENDFOREACH()
    
    MESG("Done")
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
    if( NOT ${CMAKE_INSTALL_PREFIX} MATCHES ${CMAKE_CURRENT_SOURCE_DIR}/usr/local)
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
      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")
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
       execute_process(
    
         COMMAND ln -sf ${CMAKE_INSTALL_PREFIX} ${CMAKE_CURRENT_SOURCE_DIR}/usr/local
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
         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()
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
        MESG("created symlink ${CMAKE_INSTALL_PREFIX}->${CMAKE_CURRENT_SOURCE_DIR}/usr/local")
      ENDIF()
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
    ENDIF()
    
    Andrea Michelotti's avatar
    Andrea Michelotti committed
    ENDIF()
    
        MESG("CCS compilation ENABLED.")
    
        IF(EXISTS "${QMAKE_PATH}/qmake")
          MESG("Found 'qmake' in ${QMAKE_PATH}")
    
    	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
    
           	COMMAND make -j ${PROCESSOR_COUNT}
           	WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ccs
           	DEPENDS chaos_common
           	COMMENT "compiling CCS"
           	)
    
          ERROR("missing ${QMAKE_PATH}/qmake")
    
    bisegni's avatar
    bisegni committed
    
    
    Andrea Michelotti's avatar
    Andrea Michelotti 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)