blob: cdf806f0e06776ade98db06d39f3ac5d41c90423 [file] [log] [blame]
# 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 0)
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(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 ${KS_FONT}.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}!\n")
endif (TT_FONT_FILE)
find_package(Qt5Widgets 5.7.1)
find_package(Qt5Network)
if (Qt5Widgets_FOUND)
message(STATUS "Found Qt5Widgets: (version ${Qt5Widgets_VERSION})")
if(Qt5Widgets_VERSION VERSION_LESS "5.11")
set(QT_VERSION_LESS_5_11 TRUE)
endif()
if(Qt5Widgets_VERSION VERSION_LESS "5.15")
set(QT_VERSION_LESS_5_15 TRUE)
endif()
endif (Qt5Widgets_FOUND)
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 -pthread -fPIC -fno-common")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -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("")