aboutsummaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
blob: c36d75782e63cd3cea776b791129f147623a4fa0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# 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("")