forked from microsoft/ProcMon-for-Linux
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
136 lines (114 loc) · 4.38 KB
/
CMakeLists.txt
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
cmake_minimum_required (VERSION 3.13)
project (procmon)
# Set the project version number.
set (procmon_VERSION_MAJOR 1)
set (procmon_VERSION_MINOR 0)
set (procmon_VERSION_PATCH 0)
# make ncurses a requirement
find_package(Curses REQUIRED)
# Configure version header file to pass CMake settings to source code.
configure_file (
"${PROJECT_SOURCE_DIR}/src/version.h.in"
"${PROJECT_BINARY_DIR}/src/version.h"
)
include(FetchContent)
# Fetch bcc.
# TODO: Consider maybe making this a CMake script to be called.
FetchContent_Declare(
bcc
GIT_REPOSITORY https://github.com/iovisor/bcc.git
GIT_TAG v0.10.0
)
FetchContent_GetProperties(bcc)
if(NOT bcc_POPULATED)
FetchContent_Populate(bcc)
add_subdirectory(${bcc_SOURCE_DIR} ${bcc_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
# Include Sqlite3 amalgamation.
add_library(sqlite3-static STATIC
"${CMAKE_SOURCE_DIR}/vendor/sqlite3/sqlite3.c"
)
set_target_properties(sqlite3-static
PROPERTIES
INTERFACE_LINK_LIBRARIES "dl;pthread"
)
# Fetch Catch2 testing framework.
FetchContent_Declare(
Catch2
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_TAG v2.7.2
)
FetchContent_MakeAvailable(Catch2)
# Set compiler flags.
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fno-omit-frame-pointer -DELPP_THREAD_SAFE -D ELPP_DEFAULT_LOG_FILE='\"/var/log/procmon.log\"'")
set (CMAKE_CXX_STANDARD 17)
# Include required versioning, bcc, logging and sqlite3 header files.
include_directories(
"${PROJECT_BINARY_DIR}/src/"
"/usr/include/bcc/compat"
"${bcc_SOURCE_DIR}/src/cc/api"
"${bcc_SOURCE_DIR}/src/cc"
"${CMAKE_SOURCE_DIR}/vendor/sqlite3"
${CURSES_INCLUDE_DIR}
)
enable_testing()
# Create a static library target for each subdirectory.
add_subdirectory(src/common)
add_subdirectory(src/configuration)
add_subdirectory(src/storage)
add_subdirectory(src/tracer)
add_subdirectory(src/display)
add_subdirectory(src/logging)
# Add exectable and link all static libraries.
#add_executable(procmon src/procmon.cpp)
add_executable(
procmon
src/procmon.cpp
)
# Why does the order which these static libraries are listed matter here??
target_link_libraries(
procmon
configuration-static
tracer-static
storage-static
common-static
bcc-static
display-static
${CURSES_LIBRARIES}
-lpanel
logging-static
stdc++fs
)
# setup general packing Variables
set(CPACK_STRIP_FILES ON)
set(CPACK_PACKAGE_NAME ${PROJECT_NAME} )
set(CPACK_PACKAGE_VENDOR "Microsoft")
set(CPACK_PACKAGE_CONTACT "OSS Tooling Dev Team OSSToolingDevTeam@service.microsoft.com")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Procmon for Linux")
set(CPACK_PACKAGE_DESCRIPTION "Procmon is a Linux reimagining of the classic Procmon tool from the Sysinternals suite of tools for Windows. Procmon provides a convenient and efficient way for Linux developers to trace the syscall activity on the system.")
set(CPACK_PACKAGE_VERSION_MAJOR "${procmon_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${procmon_VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${procmon_VERSION_PATCH}")
set(AZDO_BUILD_ID "999999")
# setup license and readme for package
SET(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
SET(CPACK_RESOURCE_FILE_README ${PROJECT_SOURCE_DIR}/README.md)
# setup CPACK RPM Variables
set(CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION})
set(CPACK_RPM_PACKAGE_LICENSE "MIT")
set(CPACK_RPM_PACKAGE_URL "https://github.com/Microsoft/Procmon-for-Linux")
set(CPACK_RPM_PACKAGE_GROUP "Development/Tools")
# setup CPACK DEB Variables
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION})
set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/Microsoft/Procmon-for-Linux")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "OSS Tooling Dev Team OSSToolingDevTeam@service.microsoft.com")
# setup install
INSTALL(TARGETS procmon DESTINATION /usr/bin)
INSTALL(FILES procmon.1 DESTINATION /usr/share/man/man1/)
# build debian package
set(CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.26.1), libstdc++6 (>= 3.4.22), libncurses5 (>= 5.0)")
execute_process(COMMAND dpkg --print-architecture OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-${AZDO_BUILD_ID}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE})
include(CPack)