154 lines
4.9 KiB
CMake
154 lines
4.9 KiB
CMake
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
|
|
cmake_minimum_required(VERSION 2.6)
|
|
|
|
# generate CTest input files
|
|
enable_testing()
|
|
|
|
# where to find cmake modules
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake_modules")
|
|
|
|
# if no build build type is specified, default to debug builds
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE Debug)
|
|
endif(NOT CMAKE_BUILD_TYPE)
|
|
|
|
STRING(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)
|
|
|
|
set(CXX_COMMON_FLAGS "-Wall -Wextra -std=c++11")
|
|
set(C_COMMON_FLAGS "-Wall -Wextra -std=c11")
|
|
|
|
set(CXX_FLAGS_DEBUG "-ggdb -g")
|
|
set(C_FLAGS_DEBUG "-ggdb")
|
|
|
|
set(CXX_FLAGS_FASTDEBUG "-ggdb -O1")
|
|
set(C_FLAGS_FASTDEBUG "-ggdb -O1")
|
|
|
|
set(CXX_FLAGS_RELEASE "-O3 -g -DNDEBUG -Wno-strict-aliasing")
|
|
set(C_FLAGS_RELEASE "-O3 -g -DNDEBUG -Wno-strict-aliasing")
|
|
|
|
# if no build build type is specified, default to debug builds
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE Debug)
|
|
endif(NOT CMAKE_BUILD_TYPE)
|
|
|
|
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)
|
|
|
|
# Set compile flags based on the build type.
|
|
message("Configured for ${CMAKE_BUILD_TYPE} build (set with cmake -DCMAKE_BUILD_TYPE={release,debug,...})")
|
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
|
|
set(CMAKE_CXX_FLAGS ${CXX_FLAGS_DEBUG})
|
|
set(CMAKE_C_FLAGS ${C_FLAGS_DEBUG})
|
|
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "FASTDEBUG")
|
|
set(CMAKE_CXX_FLAGS ${CXX_FLAGS_FASTDEBUG})
|
|
set(CMAKE_C_FLAGS ${C_FLAGS_FASTDEBUG})
|
|
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RELEASE")
|
|
set(CMAKE_CXX_FLAGS ${CXX_FLAGS_RELEASE})
|
|
set(CMAKE_C_FLAGS ${C_FLAGS_RELEASE})
|
|
else()
|
|
message(FATAL_ERROR "Unknown build type: ${CMAKE_BUILD_TYPE}")
|
|
endif ()
|
|
|
|
set(CMAKE_CXX_FLAGS "${CXX_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}")
|
|
set(CMAKE_C_FLAGS "${C_COMMON_FLAGS} ${CMAKE_C_FLAGS}")
|
|
|
|
|
|
# set compile output directory
|
|
string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWERCASE)
|
|
set(BUILD_OUTPUT_ROOT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE_LOWERCASE}/")
|
|
|
|
# Link build/latest to the current build directory, to avoid developers
|
|
# accidentally running the latest debug build when in fact they're building
|
|
# release builds.
|
|
file(MAKE_DIRECTORY ${BUILD_OUTPUT_ROOT_DIRECTORY})
|
|
execute_process(COMMAND rm -f ${CMAKE_CURRENT_SOURCE_DIR}/build/latest)
|
|
execute_process(COMMAND ln -sf ${BUILD_OUTPUT_ROOT_DIRECTORY}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/build/latest)
|
|
|
|
# where to put generated libraries
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}")
|
|
set(ARCHIVE_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}")
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}")
|
|
|
|
# where to put generated binaries
|
|
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}")
|
|
|
|
include_directories(src)
|
|
|
|
#####################
|
|
# Third Party
|
|
#####################
|
|
|
|
# find boost headers and libs
|
|
set(Boost_DEBUG TRUE)
|
|
set(Boost_USE_MULTITHREADED ON)
|
|
find_package(Boost REQUIRED COMPONENTS thread system-mt)
|
|
include_directories(${Boost_INCLUDE_DIRS})
|
|
|
|
find_package(Protobuf REQUIRED)
|
|
include_directories(${PROTOBUF_INCLUDE_DIRS})
|
|
add_library(protobuf STATIC IMPORTED)
|
|
set_target_properties(protobuf PROPERTIES IMPORTED_LOCATION "${PROTOBUF_STATIC_LIBRARY}")
|
|
|
|
find_package(LibEv REQUIRED)
|
|
include_directories(${LIBEV_INCLUDE_DIR})
|
|
add_library(libev STATIC IMPORTED)
|
|
|
|
|
|
set(HBASE_LIBS
|
|
${PROTOBUF}
|
|
${LIBEV}
|
|
${Boost_LIBRARIES}
|
|
)
|
|
#########
|
|
# Testing Config
|
|
#########
|
|
|
|
# find GTest headers and libs
|
|
find_package(GTest REQUIRED)
|
|
include_directories(${GTEST_INCLUDE_DIR})
|
|
add_library(gtest STATIC IMPORTED)
|
|
set_target_properties(gtest PROPERTIES IMPORTED_LOCATION "${GTEST_LIBS}")
|
|
|
|
set(HBASE_TEST_LIBS ${HBASE_LIBS} ${GTEST_LIBS})
|
|
set(HBASE_ASYNC_TEST_LIBS ${HBASE_LIBS} ${GTEST_LIBS} hbase-async)
|
|
set(HBASE_SYNC_TEST_LIBS ${HBASE_LIBS} ${GTEST_LIBS} hbase-sync)
|
|
|
|
function(ADD_HBASE_ASYNC_TEST TEST_NAME)
|
|
add_executable(${TEST_NAME} ${TEST_NAME}.cc)
|
|
target_link_libraries(${TEST_NAME} ${HBASE_ASYNC_TEST_LIBS})
|
|
add_test(${TEST_NAME} "${EXECUTABLE_OUTPUT_PATH}/${TEST_NAME}")
|
|
endfunction()
|
|
|
|
|
|
function(ADD_HBASE_SYNC_TEST TEST_NAME)
|
|
add_executable(${TEST_NAME} ${TEST_NAME}.cc)
|
|
target_link_libraries(${TEST_NAME} ${HBASE_ASYNC_TEST_LIBS})
|
|
add_test(${TEST_NAME} "${EXECUTABLE_OUTPUT_PATH}/${TEST_NAME}")
|
|
endfunction()
|
|
|
|
|
|
#####
|
|
# Actual project definition
|
|
#####
|
|
add_subdirectory(src/async)
|
|
add_subdirectory(src/sync)
|
|
|
|
add_subdirectory(src/core)
|
|
add_subdirectory(src/rpc)
|
|
|
|
|
|
add_library(hbase-async SHARED $<TARGET_OBJECTS:hcore> $<TARGET_OBJECTS:hasync>)
|
|
add_library(hbase-sync SHARED $<TARGET_OBJECTS:hcore> $<TARGET_OBJECTS:hsync>)
|