249 lines
9.2 KiB
CMake
249 lines
9.2 KiB
CMake
|
if (NOT QUILL_MASTER_PROJECT)
|
||
|
find_package(Threads REQUIRED)
|
||
|
endif ()
|
||
|
|
||
|
# library name
|
||
|
set(TARGET_NAME quill)
|
||
|
|
||
|
# header files
|
||
|
set(HEADER_FILES
|
||
|
include/quill/backend/BackendManager.h
|
||
|
include/quill/backend/BackendOptions.h
|
||
|
include/quill/backend/BackendWorker.h
|
||
|
include/quill/backend/BacktraceStorage.h
|
||
|
include/quill/backend/PatternFormatter.h
|
||
|
include/quill/backend/RdtscClock.h
|
||
|
include/quill/backend/SignalHandler.h
|
||
|
include/quill/backend/StringFromTime.h
|
||
|
include/quill/backend/TimestampFormatter.h
|
||
|
include/quill/backend/TransitEvent.h
|
||
|
include/quill/backend/TransitEventBuffer.h
|
||
|
include/quill/backend/BackendUtilities.h
|
||
|
|
||
|
include/quill/bundled/fmt/args.h
|
||
|
include/quill/bundled/fmt/chrono.h
|
||
|
include/quill/bundled/fmt/color.h
|
||
|
include/quill/bundled/fmt/compile.h
|
||
|
include/quill/bundled/fmt/core.h
|
||
|
include/quill/bundled/fmt/format.h
|
||
|
include/quill/bundled/fmt/format-inl.h
|
||
|
include/quill/bundled/fmt/os.h
|
||
|
include/quill/bundled/fmt/ostream.h
|
||
|
include/quill/bundled/fmt/printf.h
|
||
|
include/quill/bundled/fmt/ranges.h
|
||
|
include/quill/bundled/fmt/std.h
|
||
|
include/quill/bundled/fmt/xchar.h
|
||
|
|
||
|
include/quill/core/Attributes.h
|
||
|
include/quill/core/BoundedSPSCQueue.h
|
||
|
include/quill/core/Common.h
|
||
|
include/quill/core/DynamicFormatArgStore.h
|
||
|
include/quill/core/Codec.h
|
||
|
include/quill/core/Filesystem.h
|
||
|
include/quill/core/FormatBuffer.h
|
||
|
include/quill/core/FrontendOptions.h
|
||
|
include/quill/core/LoggerBase.h
|
||
|
include/quill/core/LoggerManager.h
|
||
|
include/quill/core/LogLevel.h
|
||
|
include/quill/core/MacroMetadata.h
|
||
|
include/quill/core/MathUtils.h
|
||
|
include/quill/core/QuillError.h
|
||
|
include/quill/core/Rdtsc.h
|
||
|
include/quill/core/SinkManager.h
|
||
|
include/quill/core/ThreadContextManager.h
|
||
|
include/quill/core/ThreadUtilities.h
|
||
|
include/quill/core/TimeUtilities.h
|
||
|
include/quill/core/UnboundedSPSCQueue.h
|
||
|
|
||
|
include/quill/filters/Filter.h
|
||
|
|
||
|
include/quill/sinks/ConsoleSink.h
|
||
|
include/quill/sinks/FileSink.h
|
||
|
include/quill/sinks/JsonConsoleSink.h
|
||
|
include/quill/sinks/JsonFileSink.h
|
||
|
include/quill/sinks/NullSink.h
|
||
|
include/quill/sinks/RotatingFileSink.h
|
||
|
include/quill/sinks/Sink.h
|
||
|
include/quill/sinks/StreamSink.h
|
||
|
|
||
|
include/quill/std/Array.h
|
||
|
include/quill/std/Deque.h
|
||
|
include/quill/std/FilesystemPath.h
|
||
|
include/quill/std/ForwardList.h
|
||
|
include/quill/std/List.h
|
||
|
include/quill/std/Map.h
|
||
|
include/quill/std/Optional.h
|
||
|
include/quill/std/Pair.h
|
||
|
include/quill/std/Set.h
|
||
|
include/quill/std/Tuple.h
|
||
|
include/quill/std/UnorderedMap.h
|
||
|
include/quill/std/UnorderedSet.h
|
||
|
include/quill/std/Vector.h
|
||
|
|
||
|
include/quill/Backend.h
|
||
|
include/quill/BackendTscClock.h
|
||
|
include/quill/Frontend.h
|
||
|
include/quill/Logger.h
|
||
|
include/quill/LogMacros.h
|
||
|
include/quill/UserClockSource.h
|
||
|
include/quill/Utility.h
|
||
|
)
|
||
|
|
||
|
# Add as a library
|
||
|
add_library(${TARGET_NAME} INTERFACE)
|
||
|
add_library(${TARGET_NAME}::${TARGET_NAME} ALIAS ${TARGET_NAME})
|
||
|
|
||
|
if (QUILL_NO_EXCEPTIONS)
|
||
|
target_compile_definitions(${TARGET_NAME} PUBLIC INTERFACE -DQUILL_NO_EXCEPTIONS)
|
||
|
|
||
|
if (NOT MSVC)
|
||
|
target_compile_options(${TARGET_NAME} PUBLIC INTERFACE -fno-exceptions)
|
||
|
endif ()
|
||
|
endif ()
|
||
|
|
||
|
if (QUILL_NO_THREAD_NAME_SUPPORT)
|
||
|
target_compile_definitions(${TARGET_NAME} PUBLIC INTERFACE -DQUILL_NO_THREAD_NAME_SUPPORT)
|
||
|
endif ()
|
||
|
|
||
|
if (QUILL_X86ARCH)
|
||
|
target_compile_definitions(${TARGET_NAME} PUBLIC INTERFACE -DQUILL_X86ARCH)
|
||
|
endif ()
|
||
|
|
||
|
if (QUILL_DISABLE_NON_PREFIXED_MACROS)
|
||
|
target_compile_definitions(${TARGET_NAME} PUBLIC INTERFACE -DQUILL_DISABLE_NON_PREFIXED_MACROS)
|
||
|
endif ()
|
||
|
|
||
|
# Add target sources
|
||
|
target_sources(${TARGET_NAME} PRIVATE ${HEADER_FILES})
|
||
|
|
||
|
# Link dependencies
|
||
|
target_link_libraries(${TARGET_NAME} PUBLIC INTERFACE Threads::Threads)
|
||
|
|
||
|
if (MINGW)
|
||
|
# strftime requires this when using MinGw to correctly format the time ..
|
||
|
target_link_libraries(${TARGET_NAME} PUBLIC INTERFACE ucrtbase)
|
||
|
endif ()
|
||
|
|
||
|
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0)
|
||
|
target_link_libraries(${TARGET_NAME} PUBLIC INTERFACE stdc++fs)
|
||
|
endif ()
|
||
|
|
||
|
# Add include directories for this library
|
||
|
target_include_directories(${TARGET_NAME}
|
||
|
INTERFACE
|
||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||
|
$<INSTALL_INTERFACE:include>)
|
||
|
|
||
|
# Properties
|
||
|
set_target_properties(${TARGET_NAME} PROPERTIES VERSION ${QUILL_VERSION} SOVERSION ${QUILL_VERSION})
|
||
|
|
||
|
# ---- Tests ---- #
|
||
|
if (QUILL_BUILD_TESTS AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test)
|
||
|
add_subdirectory(test)
|
||
|
endif ()
|
||
|
|
||
|
if (QUILL_MASTER_PROJECT OR QUILL_ENABLE_INSTALL)
|
||
|
# ---- Install ---- #
|
||
|
include(GNUInstallDirs)
|
||
|
include(CMakePackageConfigHelpers)
|
||
|
|
||
|
set(version_config ${PROJECT_BINARY_DIR}/quill-config-version.cmake)
|
||
|
set(project_config ${PROJECT_BINARY_DIR}/quill-config.cmake)
|
||
|
set(pkgconfig ${PROJECT_BINARY_DIR}/quill.pc)
|
||
|
set(targets_export_name quill-targets)
|
||
|
|
||
|
set(QUILL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/quill CACHE STRING
|
||
|
"Installation directory for cmake files, relative to ${CMAKE_INSTALL_PREFIX}.")
|
||
|
|
||
|
set(QUILL_LIB_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING
|
||
|
"Installation directory for libraries, relative to ${CMAKE_INSTALL_PREFIX}.")
|
||
|
|
||
|
set(QUILL_INC_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE STRING
|
||
|
"Installation directory for include files, relative to ${CMAKE_INSTALL_PREFIX}.")
|
||
|
|
||
|
set(QUILL_PKGCONFIG_DIR ${CMAKE_INSTALL_PREFIX}/pkgconfig CACHE PATH
|
||
|
"Installation directory for pkgconfig (.pc) files, relative to ${CMAKE_INSTALL_PREFIX}.")
|
||
|
|
||
|
# Generate pkgconfig
|
||
|
configure_file(
|
||
|
"${CMAKE_CURRENT_LIST_DIR}/cmake/quill.pc.in"
|
||
|
"${pkgconfig}"
|
||
|
@ONLY)
|
||
|
|
||
|
# Copy pkgconfig
|
||
|
install(FILES "${pkgconfig}" DESTINATION "${QUILL_PKGCONFIG_DIR}")
|
||
|
|
||
|
# Generate the version, config and target files into the build directory.
|
||
|
write_basic_package_version_file(
|
||
|
${version_config}
|
||
|
VERSION ${QUILL_VERSION}
|
||
|
COMPATIBILITY AnyNewerVersion)
|
||
|
|
||
|
configure_package_config_file(
|
||
|
${CMAKE_CURRENT_LIST_DIR}/cmake/quill-config.cmake.in
|
||
|
${project_config}
|
||
|
INSTALL_DESTINATION ${QUILL_CMAKE_DIR})
|
||
|
|
||
|
# Install version, config files
|
||
|
install(FILES ${project_config} ${version_config}
|
||
|
DESTINATION ${QUILL_CMAKE_DIR})
|
||
|
|
||
|
# Install the headers
|
||
|
install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/include/quill DESTINATION ${QUILL_INC_DIR})
|
||
|
|
||
|
# Install the library
|
||
|
install(TARGETS ${TARGET_NAME} EXPORT ${targets_export_name}
|
||
|
LIBRARY DESTINATION ${QUILL_LIB_DIR}
|
||
|
ARCHIVE DESTINATION ${QUILL_LIB_DIR}
|
||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||
|
|
||
|
# Export the library
|
||
|
install(EXPORT ${targets_export_name} DESTINATION ${QUILL_CMAKE_DIR}
|
||
|
NAMESPACE quill::)
|
||
|
|
||
|
# Install the examples
|
||
|
if (QUILL_BUILD_EXAMPLES)
|
||
|
install(TARGETS
|
||
|
quill_example_use_overwrite_macros
|
||
|
quill_example_recommended_usage
|
||
|
quill_example_backend_thread_notify
|
||
|
quill_example_backtrace_logging
|
||
|
quill_example_bounded_dropping_queue_frontend
|
||
|
quill_example_console_logging
|
||
|
quill_example_custom_console_colours
|
||
|
quill_example_rotating_file_logging
|
||
|
quill_example_signal_handler
|
||
|
quill_example_logger_removal_with_file_event_notifier
|
||
|
quill_example_custom_frontend_options
|
||
|
quill_example_file_logging
|
||
|
quill_example_filter_logging
|
||
|
quill_example_system_clock_logging
|
||
|
quill_example_user_clock_source
|
||
|
quill_example_user_defined_filter
|
||
|
quill_example_user_defined_sink
|
||
|
quill_example_tags_logging
|
||
|
quill_example_json_sink_logging
|
||
|
quill_example_user_defined_types_logging
|
||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||
|
endif ()
|
||
|
|
||
|
# ---- Packaging ---- #
|
||
|
set(CPACK_GENERATOR ZIP)
|
||
|
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0)
|
||
|
set(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_BINARY_DIR}" "${PROJECT_NAME}" ALL .)
|
||
|
set(CPACK_PROJECT_URL "https://github.com/odygrd/quill")
|
||
|
set(CPACK_PACKAGE_VENDOR "Odysseas Georgoudis")
|
||
|
set(CPACK_PACKAGE_CONTACT "Odysseas Odysseas <odygrd@hotmail.com>")
|
||
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Asynchronous Low Latency C++ Logging Library")
|
||
|
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
||
|
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
|
||
|
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
|
||
|
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
|
||
|
set(CPACK_PACKAGE_RELOCATABLE ON)
|
||
|
set(CPACK_RPM_PACKAGE_LICENSE "MIT")
|
||
|
set(CPACK_RPM_PACKAGE_GROUP "System Environment/Libraries")
|
||
|
set(CPACK_RPM_PACKAGE_URL ${CPACK_PROJECT_URL})
|
||
|
set(CPACK_RPM_PACKAGE_DESCRIPTION "Asynchronous Low Latency C++ Logging Library")
|
||
|
include(CPack)
|
||
|
endif ()
|