set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
-
option(
HEAPTRACK_BUILD_GUI
"Disable this option to skip building the Qt5 / KF5 based GUI for heaptrack."
)
if(HEAPTRACK_BUILD_GUI)
-find_package(Qt5 5.2.0 NO_MODULE OPTIONAL_COMPONENTS Widgets)
-find_package(ECM 1.0.0 NO_MODULE)
-if(Qt5_FOUND AND ECM_FOUND)
- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
- find_package(KF5 OPTIONAL_COMPONENTS CoreAddons I18n ItemModels ThreadWeaver ConfigWidgets KIO)
- find_package(KChart "2.6.0")
- set_package_properties(KChart PROPERTIES TYPE RECOMMENDED PURPOSE "Required for the heaptrack_gui executable. Get it from the kdiagram module.")
- if (KF5_FOUND)
- add_subdirectory(gui)
- endif()
+ find_package(Qt5 5.2.0 NO_MODULE OPTIONAL_COMPONENTS Widgets)
+ find_package(ECM 1.0.0 NO_MODULE)
+ if(Qt5_FOUND AND ECM_FOUND)
+ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
+ find_package(KF5 OPTIONAL_COMPONENTS CoreAddons I18n ItemModels ThreadWeaver ConfigWidgets KIO)
+ find_package(KChart "2.6.0")
+ set_package_properties(KChart PROPERTIES TYPE RECOMMENDED PURPOSE "Required for the heaptrack_gui executable. Get it from the kdiagram module.")
endif()
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wpedantic")
-add_subdirectory(3rdparty)
-
check_library_exists (${LIBUNWIND_LIBRARY} unw_backtrace "" HAVE_UNW_BACKTRACE)
if (NOT HAVE_UNW_BACKTRACE)
message(FATAL_ERROR "Your libunwind version is apparently too old and does not have the unw_backtrace function.")
message(FATAL_ERROR "You are missing some Linux headers required to compile heaptrack.")
endif()
-add_subdirectory(tests)
-
-include_directories(
- ${CMAKE_CURRENT_BINARY_DIR}
- ${Boost_INCLUDE_DIRS}
- 3rdparty/
- ${LIBUNWIND_INCLUDE_DIR}
- ${ZLIB_INCLUDE_DIRS}
-)
-
-if (CMAKE_BUILD_TYPE STREQUAL "Debug")
- set(HEAPTRACK_DEBUG_BUILD 1)
-else()
- set(HEAPTRACK_DEBUG_BUILD 0)
-endif()
-
-configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
-
-add_library(heaptrack_preload MODULE heaptrack_preload.cpp libheaptrack.cpp)
-target_link_libraries(heaptrack_preload LINK_PRIVATE ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${LIBUNWIND_LIBRARY} rt)
-set_target_properties(heaptrack_preload PROPERTIES VERSION ${HEAPTRACK_LIB_VERSION} SOVERSION ${HEAPTRACK_LIB_SOVERSION})
-add_library(heaptrack_inject MODULE heaptrack_inject.cpp libheaptrack.cpp)
-target_link_libraries(heaptrack_inject LINK_PRIVATE ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${LIBUNWIND_LIBRARY} rt)
-set_target_properties(heaptrack_inject PROPERTIES VERSION ${HEAPTRACK_LIB_VERSION} SOVERSION ${HEAPTRACK_LIB_SOVERSION})
-
-add_executable(heaptrack_interpret heaptrack_interpret.cpp)
-target_link_libraries(heaptrack_interpret backtrace)
-
-add_library(sharedprint STATIC accumulatedtracedata.cpp)
-target_link_libraries(sharedprint LINK_PUBLIC ${Boost_LIBRARIES} ${ZLIB_LIBRARIES})
-add_executable(heaptrack_print heaptrack_print.cpp)
-target_link_libraries(heaptrack_print LINK_PRIVATE sharedprint ${CMAKE_THREAD_LIBS_INIT})
-
set(BIN_INSTALL_DIR "bin")
set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
set(LIB_INSTALL_DIR "lib${LIB_SUFFIX}")
"${CMAKE_INSTALL_PREFIX}/${BIN_INSTALL_DIR}"
"${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/heaptrack")
-configure_file(heaptrack.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/heaptrack @ONLY)
-
-install(TARGETS heaptrack_print RUNTIME DESTINATION ${BIN_INSTALL_DIR})
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/heaptrack DESTINATION ${BIN_INSTALL_DIR})
-install(TARGETS heaptrack_interpret RUNTIME DESTINATION ${LIBEXEC_INSTALL_DIR})
-install(TARGETS heaptrack_inject LIBRARY DESTINATION ${LIB_INSTALL_DIR}/heaptrack/)
-install(TARGETS heaptrack_preload LIBRARY DESTINATION ${LIB_INSTALL_DIR}/heaptrack/)
-install(FILES heaptrack_api.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
+add_subdirectory(3rdparty)
+add_subdirectory(src)
+add_subdirectory(tests)
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
--- /dev/null
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+add_subdirectory(util)
+add_subdirectory(track)
+add_subdirectory(interpret)
+add_subdirectory(analyze)
--- /dev/null
+include_directories(
+ ${Boost_INCLUDE_DIRS}
+ ${ZLIB_INCLUDE_DIRS}
+)
+
+add_library(sharedprint STATIC
+ accumulatedtracedata.cpp
+)
+
+target_link_libraries(sharedprint LINK_PUBLIC
+ ${Boost_LIBRARIES}
+ ${ZLIB_LIBRARIES}
+)
+
+add_subdirectory(print)
+
+if (KF5_FOUND)
+ add_subdirectory(gui)
+endif()
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/algorithm/string/predicate.hpp>
-#include "linereader.h"
-#include "config.h"
-#include "pointermap.h"
+#include "util/linereader.h"
+#include "util/config.h"
+#include "util/pointermap.h"
#ifdef __GNUC__
#define POTENTIALLY_UNUSED __attribute__ ((unused))
#include <map>
#include <boost/functional/hash.hpp>
-#include "indices.h"
+#include "util/indices.h"
#include "allocationdata.h"
struct InstructionPointer
mainwindow.ui
)
+unset(BIN_INSTALL_DIR)
+unset(LIB_INSTALL_DIR)
+unset(LIBEXEC_INSTALL_DIR)
+
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)
#include <QDebug>
-#include "../accumulatedtracedata.h"
+#include "analyze/accumulatedtracedata.h"
#include <vector>
#include <tuple>
--- /dev/null
+add_executable(heaptrack_print
+ heaptrack_print.cpp
+)
+
+target_link_libraries(heaptrack_print LINK_PRIVATE
+ sharedprint
+ ${CMAKE_THREAD_LIBS_INIT}
+)
+
+install(TARGETS heaptrack_print
+ RUNTIME DESTINATION ${BIN_INSTALL_DIR}
+)
#include <boost/program_options.hpp>
-#include "accumulatedtracedata.h"
+#include "analyze/accumulatedtracedata.h"
#include <iostream>
#include <iomanip>
#include <future>
-#include "config.h"
+#include "util/config.h"
using namespace std;
namespace po = boost::program_options;
--- /dev/null
+include_directories(
+ ${Boost_INCLUDE_DIRS}
+ ${PROJECT_SOURCE_DIR}/3rdparty/
+ ${ZLIB_INCLUDE_DIRS}
+)
+
+add_executable(heaptrack_interpret
+ heaptrack_interpret.cpp
+)
+
+target_link_libraries(heaptrack_interpret
+ backtrace
+)
+
+install(TARGETS heaptrack_interpret
+ RUNTIME DESTINATION ${LIBEXEC_INSTALL_DIR}
+)
#include "libbacktrace/backtrace.h"
#include "libbacktrace/internal.h"
-#include "linereader.h"
-#include "pointermap.h"
+#include "util/linereader.h"
+#include "util/pointermap.h"
using namespace std;
--- /dev/null
+include_directories(
+ ${Boost_INCLUDE_DIRS}
+ ${LIBUNWIND_INCLUDE_DIR}
+)
+
+# heaptrack: bash script to inject/preload
+configure_file(heaptrack.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/heaptrack @ONLY)
+
+install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/heaptrack
+ DESTINATION ${BIN_INSTALL_DIR}
+)
+
+# heaptrack_preload: track a newly started process
+add_library(heaptrack_preload MODULE
+ heaptrack_preload.cpp
+ libheaptrack.cpp
+)
+
+target_link_libraries(heaptrack_preload LINK_PRIVATE
+ ${CMAKE_DL_LIBS}
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${LIBUNWIND_LIBRARY}
+ rt
+)
+
+set_target_properties(heaptrack_preload PROPERTIES
+ VERSION ${HEAPTRACK_LIB_VERSION}
+ SOVERSION ${HEAPTRACK_LIB_SOVERSION}
+)
+
+install(TARGETS heaptrack_preload
+ LIBRARY DESTINATION ${LIB_INSTALL_DIR}/heaptrack/
+)
+
+# heaptrack_inject: track an already running process
+add_library(heaptrack_inject MODULE
+ heaptrack_inject.cpp
+ libheaptrack.cpp
+)
+
+target_link_libraries(heaptrack_inject LINK_PRIVATE
+ ${CMAKE_DL_LIBS}
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${LIBUNWIND_LIBRARY}
+ rt
+)
+
+set_target_properties(heaptrack_inject PROPERTIES
+ VERSION ${HEAPTRACK_LIB_VERSION}
+ SOVERSION ${HEAPTRACK_LIB_SOVERSION}
+)
+
+install(TARGETS heaptrack_inject
+ LIBRARY DESTINATION ${LIB_INSTALL_DIR}/heaptrack/
+)
+
+# public API for custom pool allocators or static binaries
+install(FILES heaptrack_api.h
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/include
+)
#include <boost/algorithm/string/replace.hpp>
#include "tracetree.h"
-#include "config.h"
+#include "util/config.h"
/**
* uncomment this to get extended debug code for known pointers
--- /dev/null
+if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(HEAPTRACK_DEBUG_BUILD 1)
+else()
+ set(HEAPTRACK_DEBUG_BUILD 0)
+endif()
+
+configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
include_directories(
${LIBUNWIND_INCLUDE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/../..
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../
)
add_definitions(-DCATCH_CONFIG_MAIN)
add_executable(tst_trace tst_trace.cpp)
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include "trace.h"
+#include "src/track/trace.h"
#include "3rdparty/catch.hpp"
#include <algorithm>
}
}
}
-}
\ No newline at end of file
+}
#include <unordered_map>
#include "bench_pointers.h"
-#include "indices.h"
+#include "src/util/indices.h"
struct PointerHashMap
{
{
benchPointers<PointerHashMap>();
return 0;
-}
\ No newline at end of file
+}
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include "pointermap.h"
+#include "src/util/pointermap.h"
#include "bench_pointers.h"
int main()
{
benchPointers<PointerMap>();
return 0;
-}
\ No newline at end of file
+}
#include <malloc.h>
-#include "indices.h"
+#include "src/util/indices.h"
template<typename Map>
void benchPointers()
#include <sparse_hash_map>
#include "bench_pointers.h"
-#include "indices.h"
+#include "src/util/indices.h"
struct PointerHashMap
{
{
benchPointers<PointerHashMap>();
return 0;
-}
\ No newline at end of file
+}