diff options
Diffstat (limited to 'fluent-bit/lib/cfl/CMakeLists.txt')
-rw-r--r-- | fluent-bit/lib/cfl/CMakeLists.txt | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/fluent-bit/lib/cfl/CMakeLists.txt b/fluent-bit/lib/cfl/CMakeLists.txt new file mode 100644 index 00000000..98ee88f7 --- /dev/null +++ b/fluent-bit/lib/cfl/CMakeLists.txt @@ -0,0 +1,270 @@ +cmake_minimum_required(VERSION 3.12) +project(cfl C) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +# C Floppy Version +set(CFL_VERSION_MAJOR 0) +set(CFL_VERSION_MINOR 2) +set(CFL_VERSION_PATCH 2) +set(CFL_VERSION_STR "${CFL_VERSION_MAJOR}.${CFL_VERSION_MINOR}.${CFL_VERSION_PATCH}") + +# Configuration options +option(CFL_DEV "Enable development mode" No) +option(CFL_TESTS "Enable unit testing" No) +option(CFL_INSTALL_BUNDLED_XXHASH_HEADERS "Enable bundled xxHash headers installation" Yes) + +if(CFL_DEV) + set(CMAKE_BUILD_TYPE Debug) + set(CFL_TESTS On) +endif() + +# Include helpers +include(cmake/macros.cmake) +include(CheckCSourceCompiles) +include(GNUInstallDirs) + +# Define macro to identify Windows system (without Cygwin) +if(CMAKE_SYSTEM_NAME MATCHES "Windows") + set(CFL_SYSTEM_WINDOWS On) + add_definitions(-DCFL_SYSTEM_WINDOWS) +endif() + +# Define macro to identify macOS system +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + set(CFL_SYSTEM_MACOS On) + add_definitions(-DCFL_SYSTEM_MACOS) +endif() + +if(NOT MSVC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") +endif() + +# Define __FILENAME__ consistently across Operating Systems +if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__FILENAME__='\"$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<))\"'") +else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__FILENAME__=__FILE__") +endif() + + + +# timespec_get() support +check_c_source_compiles(" + #include <time.h> + int main() { + struct tm tm; + return timespec_get(&tm, TIME_UTC); + }" CFL_HAVE_TIMESPEC_GET) +if(CFL_HAVE_TIMESPEC_GET) + CFL_DEFINITION(CFL_HAVE_TIMESPEC_GET) +endif() + +# gmtime_r() support +check_c_source_compiles(" + #include <time.h> + int main() { + struct tm tm; + struct timespec tms; + return gmtime_r(&tms.tv_sec, &tm); + }" CFL_HAVE_GMTIME_R) +if(CFL_HAVE_GMTIME_R) + CFL_DEFINITION(CFL_HAVE_GMTIME_R) +endif() + +# gmtime_s() support +check_c_source_compiles(" + #include <time.h> + int main() { + struct tm tm; + struct timespec tms; + return gmtime_s(&tm, &tms.tv_sec); + }" CFL_HAVE_GMTIME_S) +if(CFL_HAVE_GMTIME_S) + CFL_DEFINITION(CFL_HAVE_GMTIME_S) +endif() + +# clock_get_time() support for macOS. +check_c_source_compiles(" + #include <mach/clock.h> + #include <mach/mach.h> + int main() { + clock_serv_t cclock; + mach_timespec_t mts; + host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); + clock_get_time(cclock, &mts); + return mach_port_deallocate(mach_task_self(), cclock); + }" CFL_HAVE_CLOCK_GET_TIME) +if(CFL_HAVE_CLOCK_GET_TIME) + CFL_DEFINITION(CFL_HAVE_CLOCK_GET_TIME) +endif() + +configure_file( + "${PROJECT_SOURCE_DIR}/include/cfl/cfl_info.h.in" + "${PROJECT_SOURCE_DIR}/include/cfl/cfl_info.h" + ) + +configure_file( + "${PROJECT_SOURCE_DIR}/include/cfl/cfl_version.h.in" + "${PROJECT_SOURCE_DIR}/include/cfl/cfl_version.h" + ) + +# Include headers and dependency headers +include_directories( + lib/xxhash/ + include + ) + +# xxHash +if(NOT TARGET xxhash) + # Do something when target found + set(XXHASH_BUILD_ENABLE_INLINE_API OFF) + set(XXHASH_BUILD_XXHSUM OFF) + set(BUILD_SHARED_LIBS OFF) + add_subdirectory(lib/xxhash/cmake_unofficial EXCLUDE_FROM_ALL) +endif() + +# Installation Directories +# ======================== +if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + set(CFL_INSTALL_BINDIR "bin") + set(CFL_INSTALL_LIBDIR "lib") + set(CFL_INSTALL_INCLUDEDIR "include") +else() + set(CFL_INSTALL_BINDIR ${CMAKE_INSTALL_FULL_BINDIR}) + set(CFL_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}") + set(CFL_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_PREFIX}/include") +endif() + +# Output paths +set(CFL_ROOT "${CMAKE_CURRENT_SOURCE_DIR}") +set(CFL_BUILD_DIR "${CFL_ROOT}/build") + +# CFL sources +add_subdirectory(include) +add_subdirectory(src) + +# Tests +if(CFL_TESTS) + enable_testing() + add_subdirectory(tests) +endif() + +# Installer Generation (Cpack) +# ============================ + +set(CPACK_PACKAGE_VERSION ${CFL_VERSION_STR}) +set(CPACK_PACKAGE_NAME "cfl") +set(CPACK_PACKAGE_RELEASE 1) +set(CPACK_PACKAGE_CONTACT "Eduardo Silva <eduardo@calyptia.com>") +set(CPACK_PACKAGE_VENDOR "Calyptia") +set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") +set(CPACK_PACKAGING_INSTALL_PREFIX "/") + +set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${CMAKE_SYSTEM_PROCESSOR}") + +if(CFL_SYSTEM_WINDOWS) + set(CPACK_GENERATOR "ZIP") + + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-win64") + else() + set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-win32") + endif() +endif() + + +# Enable components +set(CPACK_DEB_COMPONENT_INSTALL ON) +set(CPACK_RPM_COMPONENT_INSTALL ON) +set(CPACK_productbuild_COMPONENT_INSTALL ON) +set(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} binary library headers) +set(CPACK_COMPONENTS_GROUPING "ONE_PER_GROUP") + +set(CPACK_COMPONENT_BINARY_GROUP "RUNTIME") +set(CPACK_COMPONENT_LIBRARY_GROUP "RUNTIME") + +# Debian package setup and name sanitizer +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) + +find_program(DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems") +if(DPKG_PROGRAM) + execute_process( + COMMAND ${DPKG_PROGRAM} --print-architecture + OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + set(CPACK_DEBIAN_HEADERS_FILE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}-headers.deb") + set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME "${CPACK_PACKAGE_NAME}") + set(CPACK_DEBIAN_RUNTIME_FILE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") + set(CPACK_DEBIAN_RUNTIME_PACKAGE_CONTROL_EXTRA + ${CMAKE_CURRENT_SOURCE_DIR}/debian/conffiles + ) +endif() + +# RPM Generation information +set(CPACK_RPM_PACKAGE_GROUP "System Environment/Daemons") +set(CPACK_RPM_PACKAGE_LICENSE "Apache v2.0") +set(CPACK_RPM_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE}) +set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/cpack/description") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "C Traces Library") +set(CPACK_RPM_SPEC_MORE_DEFINE "%define ignore \#") +set(CPACK_RPM_USER_FILELIST + "%ignore /lib" + "%ignore /lib64" + "%ignore /lib64/pkgconfig" + "%ignore /usr/local" + "%ignore /usr/local/bin") + +set(CPACK_RPM_PACKAGE_AUTOREQ ON) +set(CPACK_RPM_RUNTIME_PACKAGE_NAME "${CPACK_PACKAGE_NAME}") +set(CPACK_RPM_HEADERS_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${CMAKE_SYSTEM_PROCESSOR}-headers.rpm") +set(CPACK_RPM_RUNTIME_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${CMAKE_SYSTEM_PROCESSOR}.rpm") + +# CPack: DEB +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) + +# CPack: Windows System +if(CPACK_GENERATOR MATCHES "ZIP") + set(CPACK_MONOLITHIC_INSTALL 1) + set(CPACK_PACKAGE_INSTALL_DIRECTORY "cfl") +endif() + +# CPack: macOS w/ productbuild +if(CFL_SYSTEM_MACOS) + # Determine the platform suffix + execute_process( + COMMAND uname -m + RESULT_VARIABLE UNAME_M_RESULT + OUTPUT_VARIABLE UNAME_ARCH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if (UNAME_M_RESULT EQUAL 0 AND UNAME_ARCH STREQUAL "arm64") + set(CFL_PKG ${CFL_BUILD_DIR}/${CPACK_PACKAGE_NAME}-${CFL_VERSION_STR}-apple) + elseif(UNAME_M_RESULT EQUAL 0 AND UNAME_ARCH STREQUAL "x86_64") + set(CFL_PKG ${CFL_BUILD_DIR}/${CPACK_PACKAGE_NAME}-${CFL_VERSION_STR}-intel) + else() + set(CFL_PKG ${CFL_BUILD_DIR}/${CPACK_PACKAGE_NAME}-${CFL_VERSION_STR}-${UNAME_ARCH}) + endif() + + if (CPACK_GENERATOR MATCHES "productbuild") + set(CPACK_SET_DESTDIR "ON") + configure_file(cpack/macos/welcome.txt.cmakein ${CFL_BUILD_DIR}/welcome.txt) + configure_file(LICENSE ${CFL_BUILD_DIR}/LICENSE.txt) + find_program(CONVERTER textutil) + if (NOT CONVERTER) + message(FATAL_ERROR "textutil not found.") + endif() + if (CONVERTER) + execute_process(COMMAND ${CONVERTER} -convert html "${CMAKE_SOURCE_DIR}/README.md" -output "${CFL_BUILD_DIR}/README.html") + endif() + set(CPACK_PACKAGE_FILE_NAME "${CFL_PKG}") + set(CPACK_RESOURCE_FILE_WELCOME ${CFL_BUILD_DIR}/welcome.txt) + set(CPACK_RESOURCE_FILE_LICENSE ${CFL_BUILD_DIR}/LICENSE.txt) + set(CPACK_RESOURCE_FILE_README ${CFL_BUILD_DIR}/README.html) + set(CPACK_PRODUCTBUILD_IDENTIFIER "com.calyptia.${CPACK_PACKAGE_NAME}") + endif() +endif() + +include(CPack) |