forked from LLNL/mitos
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
105 lines (85 loc) · 3.2 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
cmake_minimum_required(VERSION 3.15)
project(Mitos C CXX)
set (CMAKE_CXX_STANDARD 17)
set (CXX_STANDARD_REQUIRED ON)
# Version info
set(MITOS_MAJOR_VERSION 0)
set(MITOS_MINOR_VERSION 8)
set(MITOS_PATCH_VERSION 1)
set(MITOS_VERSION ${MITOS_MAJOR_VERSION}.${MITOS_MINOR_VERSION}.${MITOS_PATCH_VERSION})
option(MITOSHOOKS_OPEN_MP "Enable Mitoshooks OpenMP-Routing" OFF)
# IBS (AMD) and PEBS (Intel) related options
set(IBS_TYPE "OFF" "IBS_FETCH" "IBS_OP" CACHE STRING "Enabling Instruction-Based Sampling")
set_property(CACHE IBS_TYPE PROPERTY STRINGS
"OFF" "IBS_FETCH" "IBS_OP")
set(IBS_SAMPLING_MODE "ALL_ON" "THREAD_MIGRATION" CACHE STRING "ALL_ON: Run sampling on all cores; THREAD_MIGRATION: Run single sampler that migrates core after detecting a core migration")
set_property(CACHE IBS_SAMPLING_MODE PROPERTY STRINGS
"ALL_ON" "THREAD_MIGRATION")
if ((IBS_TYPE STREQUAL "IBS_FETCH") OR (IBS_TYPE STREQUAL "IBS_OP"))
# define sampling mode for IBS
if (IBS_SAMPLING_MODE STREQUAL "ALL_ON")
message(STATUS "IBS (AMD) Sampling Mode ALL_ON Selected: Monitor all cores")
add_definitions(-DUSE_IBS_ALL_ON)
elseif (IBS_SAMPLING_MODE STREQUAL "THREAD_MIGRATION")
message(STATUS "IBS (AMD) Sampling Mode THREAD_MIGRATION Selected: Monitor one thread; Migrate sampler at runtime from one core to another")
add_definitions(-DUSE_IBS_THREAD_MIGRATION)
# if no IBS options are selected, use PEBS
else()
message(STATUS "Using PEBS (Intel)")
endif ()
endif ()
if (IBS_TYPE STREQUAL "IBS_FETCH")
message(STATUS "Switch IBS_FETCH ON")
add_definitions(-DUSE_IBS_FETCH)
elseif (IBS_TYPE STREQUAL "IBS_OP")
message(STATUS "Switch IBS_OP On")
add_definitions(-DUSE_IBS_OP)
# If no IBS sampling mode is set, use PEBS
else()
message(STATUS "Using PEBS (Intel)")
endif ()
#set_property(CACHE IBS_MODE PROPERTY STRINGS
# "OFF" "IBS_FETCH" "IBS_OP")
# Included cmake files
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
# Packages required
find_package(Threads REQUIRED)
find_package(PerfEvents REQUIRED)
# Non-essential packages
find_package(OpenMP)
find_package(MPI)
find_package(Dyninst QUIET COMPONENTS SymtabAPI InstructionAPI ParseAPI)
if(Dyninst_FOUND)
message(STATUS "Found Dyninst: ${DYNINST_INCLUDE_DIR}")
else()
message(STATUS "Could NOT find Dyninst")
endif()
# C-Defines for non-essential packages
if(MPI_FOUND)
add_definitions(-DUSE_MPI)
message(STATUS "Mitoshooks MPI Enabled")
endif()
if(OPENMP_FOUND)
message(STATUS "Found OpenMP")
if (MITOSHOOKS_OPEN_MP)
message(STATUS "Mitoshooks OpenMP Enabled")
add_definitions(-DUSE_OPEN_MP)
else()
message(STATUS "Mitoshooks OpenMP Disabled")
endif ()
else()
message(STATUS "OpenMP not Found")
endif ()
if(Dyninst_FOUND)
add_definitions(-DUSE_DYNINST)
endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
# Subdirectories
add_subdirectory(src)
add_subdirectory(examples)
# Export the package
export(PACKAGE Mitos)
# Install cmake export
install(EXPORT mitos-targets DESTINATION lib/Mitos)
install(FILES mitos-config.cmake DESTINATION lib/Mitos)