-
Notifications
You must be signed in to change notification settings - Fork 141
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Upgrade to target-based CMake. Added option for shared libraries. (#46)
- Loading branch information
1 parent
51bf6e8
commit 52b92c9
Showing
23 changed files
with
381 additions
and
182 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,92 +1,74 @@ | ||
cmake_minimum_required(VERSION 2.6) | ||
|
||
PROJECT(RedisClient) | ||
|
||
OPTION(ADDRESS_SANITIZER "Enable address sanitizer" OFF) | ||
OPTION(BENCHMARK "Build benmarks" OFF) | ||
|
||
if(NOT CMAKE_BUILD_TYPE) | ||
message(STATUS "No build type selected, default to Release") | ||
set(CMAKE_BUILD_TYPE "Release") | ||
# CMake script for RedisClient | ||
############################################################ | ||
|
||
cmake_minimum_required(VERSION 3.1) | ||
|
||
# Project and Versioning | ||
project(RedisClient) | ||
set(VERSION_MAJOR 0 CACHE STRING "Project major version number.") | ||
set(VERSION_MINOR 5 CACHE STRING "Project minor version number.") | ||
set(VERSION_PATCH 0 CACHE STRING "Project patch version number.") | ||
set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) | ||
mark_as_advanced(VERSION_MAJOR VERSION_MINOR VERSION_PATCH VERSION) | ||
|
||
# Include utility functions | ||
include(cmake/Utils.cmake) | ||
|
||
# Set the C++11 standard | ||
set(CMAKE_CXX_STANDARD 11) | ||
|
||
# Build options | ||
option(ADDRESS_SANITIZER "Enable address sanitizer" OFF) | ||
option(BENCHMARK "Build benmarks" OFF) | ||
option(BUILD_SHARED_LIBS "Whether to build shared libraries" ON) | ||
option(BUILD_TEST "Whether to build the unit tests" ON) | ||
option(BUILD_EXAMPLES "Whether to build the examples" ON) | ||
option(HEADER_ONLY "Whether to build in header-only mode" OFF) | ||
|
||
# Default to Release mode | ||
if (NOT CMAKE_BUILD_TYPE) | ||
message(STATUS "No build type selected, default to Release") | ||
set(CMAKE_BUILD_TYPE "Release") | ||
endif() | ||
|
||
if(ADDRESS_SANITIZER) | ||
message(STATUS "Build with address-sanitizer") | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") | ||
set(CMAKE_LD_FLAGS "-fsanitize=address") | ||
# Optionally add the address sanitizer | ||
if (ADDRESS_SANITIZER) | ||
message(STATUS "Build with address-sanitizer") | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") | ||
set(CMAKE_LD_FLAGS "-fsanitize=address") | ||
endif() | ||
|
||
if(MSVC) | ||
ADD_DEFINITIONS(-DBOOST_ALL_NO_LIB) | ||
if (MSVC) | ||
add_definitions(-DBOOST_ALL_NO_LIB) | ||
endif() | ||
|
||
if(NOT Boost_USE_STATIC_LIBS) | ||
ADD_DEFINITIONS(-DBOOST_ALL_DYN_LINK) | ||
if (NOT Boost_USE_STATIC_LIBS) | ||
add_definitions(-DBOOST_ALL_DYN_LINK) | ||
endif() | ||
|
||
FIND_PACKAGE(Boost COMPONENTS system program_options unit_test_framework date_time REQUIRED) | ||
|
||
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) | ||
|
||
IF(MSVC) | ||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3") | ||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od -DDEBUG ") | ||
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2 -DNDEBUG") | ||
ELSE() | ||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wall -Wextra -fPIC -pthread -std=c++11") | ||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g3 -DDEBUG ") | ||
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -g3 -DNDEBUG") | ||
ENDIF() | ||
|
||
SET(SOURCES | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/impl/redisvalue.cpp | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/impl/redissyncclient.cpp | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/impl/redisparser.cpp | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/impl/redisclientimpl.cpp | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/impl/redisasyncclient.cpp | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/impl/pipeline.cpp | ||
) | ||
|
||
SET(HEADERS | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/config.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/version.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/redisvalue.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/redissyncclient.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/redisparser.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/redisbuffer.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/redisasyncclient.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/pipeline.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/src/redisclient/impl/redisclientimpl.h | ||
) | ||
|
||
INCLUDE_DIRECTORIES( | ||
${CMAKE_CURRENT_BINARY_DIR} | ||
${CMAKE_CURRENT_SOURCE_DIR}/src | ||
${Boost_INCLUDE_DIRS} | ||
) | ||
|
||
ADD_EXECUTABLE(parsertest tests/parsertest.cpp ${SOURCES} ${HEADERS}) | ||
ADD_EXECUTABLE(redisvaluetest tests/redisvaluetest.cpp ${SOURCES} ${HEADERS}) | ||
ADD_LIBRARY(redisclient STATIC ${HEADERS} ${SOURCES}) | ||
|
||
SET(TESTS | ||
parsertest | ||
redisvaluetest | ||
) | ||
|
||
FOREACH(TEST ${TESTS}) | ||
TARGET_LINK_LIBRARIES(${TEST} ${Boost_SYSTEM_LIBRARY} ${Boost_DATE_TIME_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) | ||
ENDFOREACH() | ||
|
||
|
||
INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/src DESTINATION include) | ||
|
||
ADD_SUBDIRECTORY(examples) | ||
if(ADDRESS_SANITIZER) | ||
ADD_SUBDIRECTORY(benchmarks) | ||
# Find all of our dependencies | ||
include(cmake/Dependencies.cmake) | ||
|
||
if (MSVC) | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3") | ||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od -DDEBUG ") | ||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2 -DNDEBUG") | ||
else() | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wall -Wextra -pthread") | ||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g3 -DDEBUG ") | ||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG") | ||
endif() | ||
|
||
INCLUDE(CTest) | ||
ADD_TEST(ParserTest parsertest) | ||
ADD_TEST(RedisValueTest redisvaluetest) | ||
add_subdirectory(src) | ||
if (BUILD_EXAMPLES) | ||
add_subdirectory(examples) | ||
endif() | ||
if (BUILD_TEST) | ||
enable_testing() | ||
add_subdirectory(tests) | ||
endif() | ||
if (BENCHMARK) | ||
add_subdirectory(benchmarks) | ||
endif() | ||
|
||
include(cmake/Install.cmake) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,47 +1,13 @@ | ||
|
||
SET(REDISCLIENT_SOURCES | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/impl/redisvalue.cpp | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/impl/redissyncclient.cpp | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/impl/redisparser.cpp | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/impl/redisclientimpl.cpp | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/impl/redisasyncclient.cpp | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/config.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/version.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/redisvalue.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/redissyncclient.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/redisparser.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/redisbuffer.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/redisasyncclient.h | ||
${CMAKE_CURRENT_SOURCE_DIR}/../src/redisclient/impl/redisclientimpl.h | ||
) | ||
|
||
INCLUDE_DIRECTORIES( | ||
${Boost_INCLUDE_DIRS} | ||
${CMAKE_SOURCE_DIR}/src/ | ||
) | ||
|
||
SET(BENCHMARKS | ||
set(BENCHMARKS | ||
redis-parser-benchmark.cpp | ||
) | ||
|
||
FOREACH(FILE ${REDISCLIENT_SOURCES}) | ||
SET_SOURCE_FILES_PROPERTIES(${FILE} PROPERTIES HEADER_FILE_ONLY TRUE) | ||
ENDFOREACH() | ||
|
||
FOREACH(BENCHMARK ${BENCHMARKS}) | ||
GET_FILENAME_COMPONENT(EXECUTABLE ${BENCHMARK} NAME_WE) | ||
ADD_EXECUTABLE(${EXECUTABLE} ${BENCHMARK} ${REDISCLIENT_SOURCES}) | ||
TARGET_LINK_LIBRARIES(${EXECUTABLE} | ||
${Boost_SYSTEM_LIBRARY} | ||
# ${Boost_DATE_TIME_LIBRARY} | ||
# ${Boost_TIMER_LIBRARY} | ||
-lbenchmark | ||
-lprofiler | ||
) | ||
ENDFOREACH(BENCHMARK) | ||
|
||
#TARGET_LINK_LIBRARIES(benchmark | ||
# ${Boost_PROGRAM_OPTIONS_LIBRARY} | ||
# ${Boost_DATE_TIME_LIBRARY} | ||
#) | ||
|
||
foreach(BENCHMARK ${BENCHMARKS}) | ||
get_filename_component(EXECUTABLE ${BENCHMARK} NAME_WE) | ||
add_executable(${EXECUTABLE} ${BENCHMARK}) | ||
target_link_libraries(${EXECUTABLE} | ||
RedisClient | ||
-lbenchmark | ||
-lprofiler | ||
) | ||
endforeach() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# CMake script for finding dependencies. This file is included two times, once | ||
# by the main CMake script for the project, for finding dependencies at build | ||
# time, and once by the package's installed config script, for finding public | ||
# dependencies. A variable, called ${CMAKE_PROJECT_NAME}Install is defined by | ||
# the installed config script and can be used by this script to differentiate | ||
# between the two cases | ||
|
||
# Find Boost, users of the library only need system (for error_code), our | ||
# examples use the other components | ||
set(boost_components system) | ||
if (NOT RedisClientInstall) | ||
set(boost_components ${boost_components} | ||
program_options | ||
unit_test_framework | ||
date_time) | ||
endif() | ||
|
||
find_package(Boost | ||
COMPONENTS | ||
${boost_components} | ||
REQUIRED) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include) | ||
set(LIB_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}) | ||
|
||
include(CMakePackageConfigHelpers) | ||
|
||
configure_package_config_file(cmake/config/Config.cmake.in | ||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake | ||
INSTALL_DESTINATION share/${CMAKE_PROJECT_NAME} | ||
PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR) | ||
|
||
write_basic_package_version_file( | ||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake | ||
VERSION ${VERSION} | ||
COMPATIBILITY AnyNewerVersion) | ||
|
||
install(EXPORT ${CMAKE_PROJECT_NAME}-targets | ||
FILE ${CMAKE_PROJECT_NAME}Targets.cmake | ||
NAMESPACE ${CMAKE_PROJECT_NAME}:: | ||
DESTINATION share/${CMAKE_PROJECT_NAME}) | ||
|
||
install(FILES | ||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake | ||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake | ||
DESTINATION share/${CMAKE_PROJECT_NAME}) | ||
|
||
install(FILES ${CMAKE_SOURCE_DIR}/cmake/Dependencies.cmake | ||
RENAME ${CMAKE_PROJECT_NAME}Dependencies.cmake | ||
DESTINATION share/${CMAKE_PROJECT_NAME}) |
Oops, something went wrong.