зеркало из https://github.com/Azure/c-logging.git
171 строка
7.3 KiB
CMake
171 строка
7.3 KiB
CMake
#Copyright (c) Microsoft. All rights reserved.
|
|
#Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
|
|
if(NOT DEFINED CMAKE_MINIMUM_REQUIRED_VERSION)
|
|
cmake_minimum_required(VERSION 3.18)
|
|
endif()
|
|
|
|
# canon way of using c-logging from another repo is below. It assumes the using repo has placed c-logging in "deps"
|
|
|
|
#if ((NOT TARGET c_logging) AND (EXISTS ${CMAKE_CURRENT_LIST_DIR}/deps/c-logging/CMakeLists.txt))
|
|
# add_subdirectory(deps/c-logging)
|
|
#endif()
|
|
|
|
if (TARGET c_logging)
|
|
RETURN()
|
|
endif()
|
|
|
|
project(c_logging)
|
|
|
|
#the following variables are project-wide and can be used with cmake-gui
|
|
option(run_unittests "set run_unittests to ON to run unittests (default is OFF)" OFF)
|
|
option(run_int_tests "set run_int_tests to ON to run integration tests (default is OFF)." OFF)
|
|
option(run_e2e_tests "set run_e2e_tests to ON to run e2e tests (default is OFF)." OFF)
|
|
option(use_cppunittest "set use_cppunittest to ON to build CppUnitTest tests on Windows (default is ON)" ON)
|
|
option(run_traceability "run traceability tool (default is ON)" ON)
|
|
option(run_reals_check "run reals check tool (default is OFF)" OFF)
|
|
|
|
if(WIN32)
|
|
option(logerror_captures_stack_traces "LogError will make a reasonable attempt to capture the stack trace at the time of calling LogError. Only available on Windows" OFF)
|
|
set(use_etw OFF CACHE STRING "set use_etw to OFF = No ETW logging, TRACELOGGING = Use ETW from tracelogging.h, TRACELOGGING_WITH_CONSOLE = Use ETW from tracelogging.h and call console logger. Default is OFF")
|
|
set_property(CACHE use_etw PROPERTY STRINGS TRACELOGGING_WITH_CONSOLE TRACELOGGING OFF)
|
|
endif()
|
|
|
|
option(no_logging "disable logging (default is OFF)" OFF)
|
|
|
|
#bring in dependencies
|
|
#do not add or build any tests of the dependencies
|
|
set(original_run_e2e_tests ${run_e2e_tests})
|
|
set(original_run_int_tests ${run_int_tests})
|
|
set(original_run_perf_tests ${run_perf_tests})
|
|
set(original_run_unittests ${run_unittests})
|
|
set(original_run_traceability ${run_traceability})
|
|
set(original_run_reals_check ${run_reals_check})
|
|
|
|
set(run_e2e_tests OFF)
|
|
set(run_int_tests OFF)
|
|
set(run_perf_tests OFF)
|
|
set(run_unittests OFF)
|
|
set(run_traceability OFF)
|
|
set(run_reals_check OFF)
|
|
|
|
if ((NOT TARGET c_build_tools) AND (EXISTS ${CMAKE_CURRENT_LIST_DIR}/deps/c-build-tools/CMakeLists.txt))
|
|
add_subdirectory(deps/c-build-tools)
|
|
set_default_build_options()
|
|
endif()
|
|
|
|
if ((NOT TARGET macro_utils_c) AND (EXISTS ${CMAKE_CURRENT_LIST_DIR}/deps/macro-utils-c/CMakeLists.txt))
|
|
add_subdirectory(deps/macro-utils-c)
|
|
endif()
|
|
|
|
set(run_e2e_tests ${original_run_e2e_tests})
|
|
set(run_int_tests ${original_run_int_tests})
|
|
set(run_perf_tests ${original_run_perf_tests})
|
|
set(run_unittests ${original_run_unittests})
|
|
set(run_traceability ${original_run_traceability})
|
|
set(run_reals_check ${original_run_reals_check})
|
|
|
|
include_directories(${CMAKE_CURRENT_LIST_DIR}/inc)
|
|
|
|
include(CTest)
|
|
enable_testing()
|
|
|
|
if(WIN32)
|
|
|
|
if(${use_etw} STREQUAL "TRACELOGGING_WITH_CONSOLE")
|
|
add_definitions(-DUSE_TRACELOGGING)
|
|
add_definitions(-DCALL_CONSOLE_LOGGER)
|
|
endif() #(${use_etw} STREQUAL "TRACELOGGING_WITH_CONSOLE")
|
|
|
|
if(${use_etw} STREQUAL "TRACELOGGING")
|
|
add_definitions(-DUSE_TRACELOGGING)
|
|
endif() #(${use_etw} STREQUAL "TRACELOGGING")
|
|
|
|
set(LOGGING_STACKTRACE_C_FILE ./src/logging_stacktrace.c)
|
|
set(LOGGING_STACKTRACE_H_FILE ./inc/c_logging/logging_stacktrace.h)
|
|
|
|
else()
|
|
set(LOGGING_STACKTRACE_C_FILE ./src/logging_stacktrace_dummy.c)
|
|
set(LOGGING_STACKTRACE_H_FILE ./inc/c_logging/logging_stacktrace.h)
|
|
endif()#win32
|
|
|
|
if(${logerror_captures_stack_traces})
|
|
#set a preprocessor option (LOGERROR_CAPTURES_STACK_TRACES) and add the files that provide the functionality
|
|
add_definitions(-DLOGERROR_CAPTURES_STACK_TRACES)
|
|
endif()
|
|
|
|
if(${no_logging})
|
|
add_definitions(-DNO_LOGGING)
|
|
set(XLOGGING_C_FILE "" CACHE INTERNAL "this is the xlogging C file(s)" FORCE)
|
|
set(LOGGING_C_FILE "" CACHE INTERNAL "this is the logging C file(s)" FORCE)
|
|
set(LOGGING_H_FILE "" CACHE INTERNAL "this is the logging H file(s)" FORCE)
|
|
else()
|
|
if(WIN32)
|
|
if(${use_etw} STREQUAL "OFF")
|
|
set(XLOGGING_C_FILE ${CMAKE_CURRENT_LIST_DIR}/src/xlogging.c CACHE INTERNAL "this is the xlogging C file(s)" FORCE)
|
|
set(LOGGING_C_FILE ${CMAKE_CURRENT_LIST_DIR}/src/consolelogger.c CACHE INTERNAL "this is the logging C file(s)" FORCE)
|
|
set(LOGGING_H_FILE ${CMAKE_CURRENT_LIST_DIR}/inc/c_logging/consolelogger.h CACHE INTERNAL "this is the logging H file(s)" FORCE)
|
|
elseif(${use_etw} STREQUAL "TRACELOGGING")
|
|
set(XLOGGING_C_FILE ${CMAKE_CURRENT_LIST_DIR}/src/etwxlogging.c CACHE INTERNAL "this is the xlogging C file(s)" FORCE)
|
|
set(LOGGING_C_FILE ${CMAKE_CURRENT_LIST_DIR}/src/etwlogger_driver.c CACHE INTERNAL "this is the logging C file(s)" FORCE)
|
|
set(LOGGING_H_FILE ${CMAKE_CURRENT_LIST_DIR}/inc/c_logging/etwlogger_driver.h CACHE INTERNAL "this is the logging H file(s)" FORCE)
|
|
elseif(${use_etw} STREQUAL "TRACELOGGING_WITH_CONSOLE")
|
|
set(XLOGGING_C_FILE ${CMAKE_CURRENT_LIST_DIR}/src/etwxlogging.c CACHE INTERNAL "this is the xlogging C file(s)" FORCE)
|
|
set(LOGGING_C_FILE ${CMAKE_CURRENT_LIST_DIR}/src/etwlogger_driver.c ${CMAKE_CURRENT_LIST_DIR}/src/consolelogger.c CACHE INTERNAL "this is the logging C file(s)" FORCE)
|
|
set(LOGGING_H_FILE ${CMAKE_CURRENT_LIST_DIR}/inc/c_logging/etwlogger_driver.h ${CMAKE_CURRENT_LIST_DIR}/inc/c_logging/consolelogger.h CACHE INTERNAL "this is the logging H file(s)" FORCE)
|
|
endif()
|
|
else()
|
|
set(XLOGGING_C_FILE ${CMAKE_CURRENT_LIST_DIR}/src/xlogging.c CACHE INTERNAL "this is the xlogging C file(s)" FORCE)
|
|
set(LOGGING_C_FILE ${CMAKE_CURRENT_LIST_DIR}/src/consolelogger.c CACHE INTERNAL "this is the logging C file(s)" FORCE)
|
|
set(LOGGING_H_FILE ${CMAKE_CURRENT_LIST_DIR}/inc/c_logging/consolelogger.h CACHE INTERNAL "this is the logging H file(s)" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
set(c_logging_c_files
|
|
${LOGGING_C_FILE}
|
|
${XLOGGING_C_FILE}
|
|
${LOGGING_STACKTRACE_C_FILE}
|
|
)
|
|
|
|
set(c_logging_h_files
|
|
${LOGGING_H_FILE}
|
|
${LOGGING_STACKTRACE_H_FILE}
|
|
./inc/c_logging/xlogging.h
|
|
)
|
|
|
|
FILE(GLOB c_logging_md_files "devdoc/*.md")
|
|
SOURCE_GROUP(devdoc FILES ${c_logging_md_files})
|
|
|
|
#this is the product (a logging library)
|
|
add_library(c_logging ${c_logging_c_files} ${c_logging_h_files} ${c_logging_md_files})
|
|
target_include_directories(c_logging PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/inc>)
|
|
target_link_libraries(c_logging macro_utils_c)
|
|
|
|
set(c_logging_target_libs)
|
|
|
|
if(${logerror_captures_stack_traces})
|
|
set(c_logging_target_libs ${c_logging_target_libs} dbghelp)
|
|
endif()
|
|
|
|
target_link_libraries(c_logging ${c_logging_target_libs})
|
|
|
|
if((CMAKE_GENERATOR MATCHES "Visual Studio") AND (${run_traceability}))
|
|
#add traceability custom target
|
|
add_custom_target(c_logging_traceability ALL
|
|
COMMAND traceabilitytool -buildcheck -e ${CMAKE_CURRENT_LIST_DIR}/deps -i ${CMAKE_CURRENT_LIST_DIR})
|
|
add_dependencies(c_logging_traceability traceabilitytool)
|
|
endif()
|
|
|
|
# make an install target so we can produce a Linux native client package.
|
|
install_library_with_prefix(c_logging c_logging ${c_logging_h_files})
|
|
|
|
add_subdirectory(tests)
|
|
|
|
if(${run_reals_check})
|
|
add_reals_check_target()
|
|
endif()
|
|
|
|
add_subdirectory(v2)
|
|
|
|
#Insert vld in all executables if so required
|
|
add_vld_if_defined(${CMAKE_CURRENT_SOURCE_DIR}) |