# Check if cmake has the required version cmake_minimum_required(VERSION 3.1.2 FATAL_ERROR) # Set the name and version of the project project(kernel-shark) set(KS_APP_NAME "kernelshark") set(KS_VERSION_MAJOR 2) set(KS_VERSION_MINOR 3) set(KS_VERSION_PATCH 1) set(KS_VERSION_STRING ${KS_VERSION_MAJOR}.${KS_VERSION_MINOR}.${KS_VERSION_PATCH}) message("\n project: Kernel Shark: (version: ${KS_VERSION_STRING})\n") set(KS_DIR ${CMAKE_SOURCE_DIR}) execute_process(COMMAND bash "-c" "echo __LP64__ | ${CMAKE_C_COMPILER} -E -x c - | tail -n 1" OUTPUT_VARIABLE __LP64__) if (NOT _INSTALL_PREFIX AND NOT _LIBDIR) set(_INSTALL_PREFIX "/usr/local") if (__LP64__ MATCHES 1) set(_LIBDIR "/usr/local/lib64") else (__LP64__ MATCHES 1) set(_LIBDIR "/usr/local/lib") endif (__LP64__ MATCHES 1) elseif (NOT _INSTALL_PREFIX) set(_INSTALL_PREFIX "/usr/local") elseif (NOT _LIBDIR) set(_LIBDIR "${_INSTALL_PREFIX}/lib") endif () if (NOT _POLKIT_INSTALL_PREFIX) set(_POLKIT_INSTALL_PREFIX "/usr") endif () set(LIBTRACECMD_MIN_VERSION 1.0) set(CMAKE_MODULE_PATH "${KS_DIR}/build") find_package(TraceEvent REQUIRED) find_package(TraceFS REQUIRED) find_package(TraceCmd REQUIRED) find_package(JSONC REQUIRED) find_package(Doxygen) set(OpenGL_GL_PREFERENCE LEGACY) find_package(OpenGL) find_package(GLUT) set(KS_FONT FreeSans) if (NOT TT_FONT_FILE) execute_process(COMMAND bash "-c" "fc-list '${KS_FONT}' |grep -E ${KS_FONT}'(\.otf|\.ttf)' | cut -d':' -f 1 -z" OUTPUT_VARIABLE TT_FONT_FILE) endif (NOT TT_FONT_FILE) if (TT_FONT_FILE) message(STATUS "Found font: ${TT_FONT_FILE}") else (TT_FONT_FILE) message(WARNING "\nCould not find font ${KS_FONT}! Kernelshark GUI requires font ${KS_FONT}!\n") endif (TT_FONT_FILE) find_package(Qt6Widgets 6.3.0) find_package(Qt6 COMPONENTS Network OpenGLWidgets StateMachine REQUIRED) find_package (Boost COMPONENTS unit_test_framework) set(LIBRARY_OUTPUT_PATH "${KS_DIR}/lib") set(EXECUTABLE_OUTPUT_PATH "${KS_DIR}/bin") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pthread -fPIC -fno-common") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread -fPIC -fno-common") set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo) endif (NOT CMAKE_BUILD_TYPE) message("\n Build type: ${CMAKE_BUILD_TYPE}") if (NOT CMAKE_C_FLAGS_PACKAGE) set(CMAKE_C_FLAGS_PACKAGE "-O3") endif (NOT CMAKE_C_FLAGS_PACKAGE) if (NOT CMAKE_CXX_FLAGS_PACKAGE) set(CMAKE_CXX_FLAGS_PACKAGE "-O3") endif (NOT CMAKE_CXX_FLAGS_PACKAGE) set(KS_PLUGIN_INSTALL_PREFIX ${_LIBDIR}/${KS_APP_NAME}/plugins) set(KS_ICON KS_icon_shark.svg) set(KS_ICON_FIN KS_icon_fin.svg) set(KS_LOGO KS_logo_symbol.svg) set(KS_LOGO_LABEL KS_logo_horizontal.svg) set(CMAKE_INSTALL_RPATH "${_LIBDIR}" "$ORIGIN") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) if (CMAKE_BUILD_TYPE MATCHES Package) set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) else (CMAKE_BUILD_TYPE MATCHES Package) set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) endif (CMAKE_BUILD_TYPE MATCHES Package) include_directories(${KS_DIR}/src/ ${KS_DIR}/build/src/) message("") message(STATUS "C flags : " ${CMAKE_C_FLAGS}) message(STATUS "CXX flags : " ${CMAKE_CXX_FLAGS}) message(STATUS "Linker flags : " ${CMAKE_EXE_LINKER_FLAGS}) add_subdirectory(${KS_DIR}/src) add_subdirectory(${KS_DIR}/examples) if (Boost_FOUND) set(KS_TEST_DIR "${KS_DIR}/tests") enable_testing() add_subdirectory(${KS_TEST_DIR}) endif() if (_DOXYGEN_DOC AND DOXYGEN_FOUND) message("\n doxygen documentation ...") add_custom_target(doc ALL) add_custom_command(TARGET doc COMMAND doxygen dox_config > dox_build.log WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/Documentation/doxygen) set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${KS_DIR}/Documentation/doxygen/dox_build.log" "${KS_DIR}/Documentation/doxygen/html" "${KS_DIR}/Documentation/doxygen/latex") endif () configure_file(${KS_DIR}/build/deff.h.cmake ${KS_DIR}/src/KsCmakeDef.hpp) configure_file(${KS_DIR}/build/ks.desktop.cmake ${KS_DIR}/${KS_APP_NAME}.desktop) configure_file(${KS_DIR}/build/org.freedesktop.kshark-record.policy.cmake ${KS_DIR}/org.freedesktop.kshark-record.policy) configure_file(${KS_DIR}/build/libkshark.pc.cmake ${KS_DIR}/libkshark.pc @ONLY) message("")