g3log/g2log/CMakeLists.txt

317 lines
14 KiB
CMake
Raw Normal View History

# CMakeLists.txt cmake configuration for g2log test
# g2log is a KjellKod Logger
# 2011 @author Kjell Hedström, hedstrom@kjellkod.cc
# ==================================================================
# 2010 by KjellKod.cc. This is PUBLIC DOMAIN to use at your own
# risk and comes with no warranties.
#
# This code is yours to share, use and modify with no strings attached
# and no restrictions or obligations.
# ===================================================================
# Below are details for compiling on Windows and Linux
# by default only an example g2log binary is created
# the performance and unit tests creation can be enabled by switching their
# OPTIONs from OFF to ON --- See below at around line 110
# === WINDOWS ===
# Example for: Visual Studio 2013 (earlier should work too)
# 1. please use the "Visual Studio Command Prompt 12 (2013)"
# 2. from the g2log folder
# mkdir build
# cd build;
2014-01-14 07:18:38 +01:00
# 3. cmake -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 12" ..
# 4. msbuild g2log_by_kjellkod.sln /p:Configuration=Release
#
# Try to run an example, such as:
# 5. Release\g2log-FATAL-contract.exe
#
#
# === LINUX: === To try this out from folder g2log:
# mkdir build
# cd build
2013-07-13 18:21:00 +02:00
# >> create makefiles in g2log/build directory
# cmake -DCMAKE_BUILD_TYPE=Release ..
# make -jN (where N stands for number of cores you want to utilize)
#
#
#
# === Clang on Linux ===
# From g2log/g2log
# mkdir build && cd build
# cmake -DCMAKE_CXX_COMPILER=clang++ ..
# if you want to double-check settings: "VERBOSE=1 make"
# otherwise just run: "make -j"
#
# ============================================================================
cmake_minimum_required (VERSION 2.8)
ENABLE_LANGUAGE(CXX)
set(CMAKE_BUILD_TYPE Release)
project (g2log_by_kjellkod)
set(LOG_SRC ${g2log_by_kjellkod_SOURCE_DIR}/src)
set(DIR_UNIT_TEST ${g2log_by_kjellkod_SOURCE_DIR}/test_unit)
set(DIR_EXAMPLE ${g2log_by_kjellkod_SOURCE_DIR}/test_example)
set(DIR_PERFORMANCE ${g2log_by_kjellkod_SOURCE_DIR}/test_performance)
MESSAGE(" LOG_SRC = : ${LOG_SRC}")
include_directories(${LOG_SRC})
SET(ACTIVE_CPP0xx_DIR "Release")
# Detect 64 or 32 bit
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
# 64-bit project
SET(64_BIT_OS TRUE)
MESSAGE("A 64-bit OS detected")
else()
SET(64_BIT_OS FALSE)
MESSAGE("A 32-bit OS detected")
endif()
#cmake -DCMAKE_CXX_COMPILER=clang++ ..
# WARNING: If Clang for Linux does not work with full C++11 support it might be your
# installation that is faulty. When I tested Clang on Ubuntu I followed the following
# description
# 1) http://kjellkod.wordpress.com/2013/09/23/experimental-g2log-with-clang/
# 2) https://github.com/maidsafe/MaidSafe/wiki/Hacking-with-Clang-llvm-abi-and-llvm-libc
IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES ".*Clang")
MESSAGE("")
MESSAGE("cmake for Clang ")
if (APPLE)
set(PLATFORM_LINK_LIBRIES c++abi)
else()
set(PLATFORM_LINK_LIBRIES rt c++abi)
endif()
set(CMAKE_CXX_FLAGS "-Wall -std=c++11 -pthread -stdlib=libc++ -Wunused -D_GLIBCXX_USE_NANOSLEEP")
ELSEIF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
2013-12-13 20:39:50 +01:00
MESSAGE("")
MESSAGE("cmake for GCC ")
2013-12-13 20:39:50 +01:00
MESSAGE("if cmake finishes OK, do make")
MESSAGE("then run './g2log-FATAL-example' or whatever performance test you feel like trying")
MESSAGE("")
if (APPLE)
set(CMAKE_CXX_FLAGS "-Wall -Wunused -std=c++11 -pthread -D_GLIBCXX_USE_NANOSLEEP")
else()
set(PLATFORM_LINK_LIBRIES rt)
set(CMAKE_CXX_FLAGS "-Wall -rdynamic -Wunused -std=c++11 -pthread -D_GLIBCXX_USE_NANOSLEEP")
endif()
ELSEIF(MSVC)
# VC11 bug: http://code.google.com/p/googletest/issues/detail?id=408
# add_definition(-D_VARIADIC_MAX=10)
# https://github.com/anhstudios/swganh/pull/186/files
ADD_DEFINITIONS (/D_VARIADIC_MAX=10)
MESSAGE(STATUS "- MSVC: Set variadic max to 10 for MSVC compatibility")
# Remember to set set target properties if using GTEST similar to done below on target "unit_test"
# "set_target_properties(unit_test PROPERTIES COMPILE_DEFINITIONS "GTEST_USE_OWN_TR1_TUPLE=0")
MESSAGE("")
MESSAGE("Windows: Please run the command [cmake -DCMAKE_BUILD_TYPE=Release -G \"Visual Studio 11\" ..]")
MESSAGE("if cmake finishes OK, do 'msbuild g2log_by_kjellkod.sln /p:Configuration=Release'")
MESSAGE("then run 'Release\\g2log-FATAL-example.exe' or whatever performance test you feel like trying")
MESSAGE("")
ENDIF()
# GENERIC STEPS
file(GLOB SRC_FILES ${LOG_SRC}/*.h ${LOG_SRC}/*.hpp ${LOG_SRC}/*.cpp ${LOG_SRC}/*.ipp)
2013-12-13 20:39:50 +01:00
if(MSVC OR MINGW)
list(REMOVE_ITEM SRC_FILES ${LOG_SRC}/crashhandler_unix.cpp)
else()
list(REMOVE_ITEM SRC_FILES ${LOG_SRC}/crashhandler_win.cpp)
2013-12-13 20:39:50 +01:00
endif(MSVC OR MINGW)
set(SRC_FILES ${SRC_FILES} ${SRC_PLATFORM_SPECIFIC})
# Create the g2log library
include_directories(${LOG_SRC})
MESSAGE(" g3logger files: [${SRC_FILES}]")
add_library(g3logger ${SRC_FILES})
set_target_properties(g3logger PROPERTIES LINKER_LANGUAGE CXX)
add_library(g3logger_shared SHARED ${SRC_FILES})
set_target_properties(g3logger_shared PROPERTIES LINKER_LANGUAGE CXX)
# ============================================================================
# G2LOG OPTIONS: Turn OFF the ones that is of no interest to you
# ============================================================================
option (USE_DYNAMIC_LOGGING_LEVELS
"Turn ON/OFF log levels. An disabled level will not push logs of that level to the sink. By default dynamic logging is disabled" OFF)
# Do 'cmake -DUSE_DYNAMIC_LOGGING_LEVELS=ON -DCMAKE_BUILD_TYPE=Release .. ' to enable this
# (or change the default option above)
if(USE_DYNAMIC_LOGGING_LEVELS)
add_definitions(-DG2_DYNAMIC_LOGGING)
2013-12-13 20:39:03 +01:00
MESSAGE ("\nUSE_DYNAMIC_LOGGING_LEVELS is turned on\n\tUse g2::setLogLevel(LEVEL boolean) to enable/disable logging on specified levels.\n\tAll levels are by default turn ON\n\n")
endif(USE_DYNAMIC_LOGGING_LEVELS)
# ============================================================================
# TEST OPTIONS: Turn OFF the ones that is of no interest to you
# ---- by default all is OFF: except 'g2log-FATAL-example -----
# ---- the reason for this is that
# ----- 1) the performance tests were only thoroughly tested on Ubuntu, not windows-
# (g2log windows/linux, but Google's glog only on linux)
#
# 2) The unit test were tested windows/linux,. but must be unzipped
# before it can be "cmake'd" and compiled --- leaving it as OFF for now
# ============================================================================
# 1. a simple test example 'g2log-FATAL-*'
# Do 'cmake -DUSE_SIMPLE_EXAMPLE=ON' to enable this
option (USE_SIMPLE_EXAMPLE "Simple (fatal-crash/contract) examples " ON)
# 2. performance test (average + worst case) for KjellKod's g2log
# Do 'cmake -DUSE_G2LOG_PERFORMANCE=ON' to enable this
option (USE_G2LOG_PERFORMANCE "g2log performance test" OFF)
# 3. performance test for Google's glog
# remember to install glog, snapshot available at g2log/3rdParty/glog
# option (USE_GOOGLE_GLOG_PERFORMANCE "Google's glog performance test" OFF)
# 4. unit test for g2log (cmake -DUSE_G2LOG_UNIT_TEST=ON ..)
# remember to unzip gtest at g2log/3rdParty/gtest
option (USE_G2LOG_UNIT_TEST "g2log unit tests" OFF)
# ===============================================================================================
#
# BELOW : Creating executables depending on OPTIONS above
#
# ==============================================================================================
# 1. create the the example EXECUTABLE - hook in the test_example's CMakeLists.txt file
2013-07-13 18:21:00 +02:00
# =========================
if (USE_SIMPLE_EXAMPLE)
MESSAGE(" g2log-FATAL-* examples option ON")
include_directories (${DIR_EXAMPLE})
add_executable(g2log-FATAL-contract ${DIR_EXAMPLE}/main_contract.cpp)
add_executable(g2log-FATAL-sigsegv ${DIR_EXAMPLE}/main_sigsegv.cpp)
target_link_libraries(g2log-FATAL-contract g3logger ${PLATFORM_LINK_LIBRIES})
target_link_libraries(g2log-FATAL-sigsegv g3logger ${PLATFORM_LINK_LIBRIES})
endif (USE_SIMPLE_EXAMPLE)
2013-07-13 18:21:00 +02:00
# 2. create the g2log's performance tests
2013-07-13 18:21:00 +02:00
# =========================
if (USE_G2LOG_PERFORMANCE)
MESSAGE(" g2log performance tests option ON")
include_directories (${DIR_PERFORMANCE})
# MEAN PERFORMANCE TEST
add_executable(g2log-performance-threaded_mean
${DIR_PERFORMANCE}/main_threaded_mean.cpp ${DIR_PERFORMANCE}/performance.h)
# Turn on G2LOG performance flag
set_target_properties(g2log-performance-threaded_mean PROPERTIES COMPILE_DEFINITIONS "G2LOG_PERFORMANCE=1")
target_link_libraries(g2log-performance-threaded_mean g3logger ${PLATFORM_LINK_LIBRIES})
# WORST CASE PERFORMANCE TEST
2013-07-13 18:21:00 +02:00
add_executable(g2log-performance-threaded_worst ${DIR_PERFORMANCE}/main_threaded_worst.cpp ${DIR_PERFORMANCE}/performance.h)
# Turn on G2LOG performance flag
set_target_properties(g2log-performance-threaded_worst PROPERTIES COMPILE_DEFINITIONS "G2LOG_PERFORMANCE=1")
target_link_libraries(g2log-performance-threaded_worst g3logger ${PLATFORM_LINK_LIBRIES})
endif (USE_G2LOG_PERFORMANCE)
# 3. create the Google glog's performance test
#
# REMOVED,. but kept commented away for now.
# You can always enabled this again and get this version of glog (for testing from)
# https://bitbucket.org/KjellKod/g2log/src/6109722f9ffbe2a59b9dd82d8ceca4b173c1fd06/3rdParty/?at=default
#
## =========================
#if (USE_GOOGLE_GLOG_PERFORMANCE)
# MESSAGE(" Google's glog performance tests option ON")
# include_directories (${DIR_PERFORMANCE})
# #Linux is easy!
# if(UNIX)
# set(GLOG_LIB glog)
# # create the the GOOGLE MEAN_PERFORMANCE executable
# add_executable(google_glog-performance-threaded_mean ${DIR_PERFORMANCE}/main_threaded_mean.cpp ${DIR_PERFORMANCE}/performance.h)
# set_target_properties(google_glog-performance-threaded_mean PROPERTIES COMPILE_DEFINITIONS "GOOGLE_GLOG_PERFORMANCE=1")
# target_link_libraries(google_glog-performance-threaded_mean ${GLOG_LIB} ${PLATFORM_LINK_LIBRIES})
#
# # create the the GOOGLE MEAN_PERFORMANCE executable
# add_executable(google_glog-performance-threaded_worst ${DIR_PERFORMANCE}/main_threaded_worst.cpp ${DIR_PERFORMANCE}/performance.h)
# set_target_properties(google_glog-performance-threaded_worst PROPERTIES COMPILE_DEFINITIONS "GOOGLE_GLOG_PERFORMANCE=1")
# target_link_libraries(google_glog-performance-threaded_worst ${GLOG_LIB} ${PLATFORM_LINK_LIBRIES})
# endif(UNIX)
#
# # GLOG on Linux is easy - but for Windows trickier,. and it doesn't work (as of yet)
# if(WIN32)
# MESSAGE("******************************************************")
# MESSAGE("*** SORRY- Google glog on windows is not preconfigured")
# MESSAGE("*** You have to do this yourself: ref CMakeLists.txt")
# MESSAGE("******************************************************")
# MESSAGE("")
# endif(WIN32)
#endif (USE_GOOGLE_GLOG_PERFORMANCE)
# 4. create the unit tests for g2log --- ONLY TESTED THE UNIT TEST ON LINUX
2013-07-13 18:21:00 +02:00
# =========================
if (USE_G2LOG_UNIT_TEST)
MESSAGE(" g2log unit testing option ON")
set(GTEST_DIR ../3rdParty/gtest/gtest-1.7.0)
set(GTEST_INCLUDE_DIRECTORIES ${GTEST_DIR}/include ${GTEST_DIR} ${GTEST_DIR}/src)
include_directories(${GTEST_INCLUDE_DIRECTORIES})
add_library(gtest_170_lib ${GTEST_DIR}/src/gtest-all.cc)
set_target_properties(gtest_170_lib PROPERTIES COMPILE_DEFINITIONS "GTEST_HAS_RTTI=0")
enable_testing(true)
# obs see this: http://stackoverflow.com/questions/9589192/how-do-i-change-the-number-of-template-arguments-supported-by-msvcs-stdtupl
2013-07-13 18:21:00 +02:00
# and this: http://stackoverflow.com/questions/2257464/google-test-and-visual-studio-2010-rc
SET(tests_to_run test_filechange test_io test_configuration test_concept_sink test_sink)
SET(helper ${DIR_UNIT_TEST}/testing_helpers.h ${DIR_UNIT_TEST}/testing_helpers.cpp)
include_directories(${DIR_UNIT_TEST})
2013-07-13 18:21:00 +02:00
FOREACH(test ${tests_to_run} )
SET(all_tests ${all_tests} ${DIR_UNIT_TEST}/${test}.cpp )
IF(${test} STREQUAL "test_filechange")
add_executable(${test} ${DIR_UNIT_TEST}/${test}.cpp ${helper})
2013-07-13 18:21:00 +02:00
ELSE()
add_executable(${test} ../test_main/test_main.cpp ${DIR_UNIT_TEST}/${test}.cpp ${helper})
2013-07-13 18:21:00 +02:00
ENDIF(${test} STREQUAL "test_filechange")
set_target_properties(${test} PROPERTIES COMPILE_DEFINITIONS "GTEST_HAS_TR1_TUPLE=0")
set_target_properties(${test} PROPERTIES COMPILE_DEFINITIONS "GTEST_HAS_RTTI=0")
2014-02-26 07:00:08 +01:00
IF( NOT(MSVC))
set_target_properties(${test} PROPERTIES COMPILE_FLAGS "-isystem -pthread ")
ENDIF( NOT(MSVC))
target_link_libraries(${test} g3logger gtest_170_lib ${PLATFORM_LINK_LIBRIES})
2013-07-13 18:21:00 +02:00
ENDFOREACH(test)
#
# Test for Linux, runtime loading of dynamic libraries
#
if(NOT WIN32 AND NOT ("${CMAKE_CXX_COMPILER_ID}" MATCHES ".*Clang"))
add_library(tester_sharedlib SHARED ${DIR_UNIT_TEST}/tester_sharedlib.h ${DIR_UNIT_TEST}/tester_sharedlib.cpp)
target_link_libraries(tester_sharedlib g3logger_shared)
add_executable(test_dynamic_loaded_shared_lib ../test_main/test_main.cpp ${DIR_UNIT_TEST}/test_linux_dynamic_loaded_sharedlib.cpp)
set_target_properties(test_dynamic_loaded_shared_lib PROPERTIES COMPILE_DEFINITIONS "GTEST_HAS_TR1_TUPLE=0")
set_target_properties(test_dynamic_loaded_shared_lib PROPERTIES COMPILE_DEFINITIONS "GTEST_HAS_RTTI=0")
2014-03-09 08:47:09 +01:00
target_link_libraries(test_dynamic_loaded_shared_lib g3logger_shared -ldl gtest_170_lib )
endif()
2013-07-13 18:21:00 +02:00
endif (USE_G2LOG_UNIT_TEST)