1
+ cmake_minimum_required (VERSION 3.7)
2
+ project (memray)
3
+
4
+ set (CMAKE_CXX_STANDARD 17)
5
+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
6
+
7
+ # Find Python
8
+ find_package (Python COMPONENTS Interpreter Development.Module Development.SABIModule REQUIRED)
9
+
10
+ # Find Cython
11
+ find_program (CYTHON_EXECUTABLE cython)
12
+ if (NOT CYTHON_EXECUTABLE)
13
+ message (FATAL_ERROR "Cython not found. Please install Cython." )
14
+ endif ()
15
+
16
+ # Find required packages
17
+ find_package (PkgConfig REQUIRED)
18
+ pkg_check_modules(LZ4 REQUIRED liblz4)
19
+ if (NOT LZ4_FOUND)
20
+ message (FATAL_ERROR "LZ4 library not found. Please install liblz4-dev or equivalent." )
21
+ endif ()
22
+
23
+ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
24
+ pkg_check_modules(LIBUNWIND REQUIRED libunwind)
25
+ endif ()
26
+
27
+ # Set compiler flags
28
+ set (COMPILER_FLAGS "-Wall" )
29
+ if (NOT DEFINED ENV{NO_MEMRAY_FAST_TLS})
30
+ add_definitions (-DUSE_MEMRAY_TLS_MODEL=1)
31
+ endif ()
32
+
33
+ if (DEFINED ENV{MEMRAY_MINIMIZE_INLINING})
34
+ set (COMPILER_FLAGS ${COMPILER_FLAGS} -Og)
35
+ else ()
36
+ set (COMPILER_FLAGS ${COMPILER_FLAGS} -flto)
37
+ set (LINKER_FLAGS ${LINKER_FLAGS} -flto)
38
+ endif ()
39
+
40
+ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
41
+ set (BINARY_FORMAT "elf" )
42
+ elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" )
43
+ set (BINARY_FORMAT "macho" )
44
+ else ()
45
+ message (FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME} " )
46
+ endif ()
47
+
48
+ # Set up libbacktrace
49
+ set (LIBBACKTRACE_DIR ${CMAKE_SOURCE_DIR} /src/vendor/libbacktrace)
50
+ set (LIBBACKTRACE_INSTALL_DIR ${LIBBACKTRACE_DIR} /install )
51
+ set (LIBBACKTRACE_INCLUDE_DIR ${LIBBACKTRACE_DIR} /install /include )
52
+ set (LIBBACKTRACE_LIB_DIR ${LIBBACKTRACE_DIR} /install /lib)
53
+
54
+ # Add custom command to build libbacktrace
55
+ add_custom_command (
56
+ OUTPUT ${LIBBACKTRACE_LIB_DIR} /libbacktrace.a
57
+ COMMAND mkdir -p ${LIBBACKTRACE_INSTALL_DIR}
58
+ COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR} /libbacktrace_build
59
+ COMMAND cd ${CMAKE_CURRENT_BINARY_DIR} /libbacktrace_build &&
60
+ ${LIBBACKTRACE_DIR} /configure
61
+ --with-pic
62
+ --prefix =${LIBBACKTRACE_INSTALL_DIR}
63
+ --includedir=${LIBBACKTRACE_INSTALL_DIR} /include /libbacktrace
64
+ COMMAND cd ${CMAKE_CURRENT_BINARY_DIR} /libbacktrace_build && make -j
65
+ COMMAND cd ${CMAKE_CURRENT_BINARY_DIR} /libbacktrace_build && make install
66
+ DEPENDS ${LIBBACKTRACE_DIR} /configure
67
+ )
68
+ add_custom_target (libbacktrace DEPENDS ${LIBBACKTRACE_LIB_DIR} /libbacktrace.a)
69
+
70
+ # _memray extension
71
+
72
+ add_custom_command (
73
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /_memray.cpp
74
+ COMMAND Python::Interpreter -m cython
75
+ --cplus
76
+ -3
77
+ -I ${CMAKE_SOURCE_DIR} /src/memray/
78
+ ${CMAKE_SOURCE_DIR} /src/memray/_memray.pyx
79
+ -o ${CMAKE_CURRENT_BINARY_DIR} /_memray.cpp
80
+ DEPENDS ${CMAKE_SOURCE_DIR} /src/memray/_memray.pyx
81
+ VERBATIM
82
+ )
83
+ set (MEMRAY_SOURCES
84
+ src/memray/_memray/compat.cpp
85
+ src/memray/_memray/hooks.cpp
86
+ src/memray/_memray/tracking_api.cpp
87
+ src/memray/_memray/${BINARY_FORMAT} _shenanigans.cpp
88
+ src/memray/_memray/logging.cpp
89
+ src/memray/_memray/python_helpers.cpp
90
+ src/memray/_memray/source .cpp
91
+ src/memray/_memray/sink.cpp
92
+ src/memray/_memray/records.cpp
93
+ src/memray/_memray/record_reader.cpp
94
+ src/memray/_memray/record_writer.cpp
95
+ src/memray/_memray/snapshot.cpp
96
+ src/memray/_memray/socket_reader_thread.cpp
97
+ src/memray/_memray/native_resolver.cpp
98
+ )
99
+ python_add_library(_memray MODULE WITH_SOABI ${MEMRAY_SOURCES} ${CMAKE_CURRENT_BINARY_DIR} /_memray.cpp)
100
+ target_include_directories (_memray PRIVATE
101
+ ${CMAKE_SOURCE_DIR} /src/memray/_memray
102
+ ${LIBBACKTRACE_INCLUDE_DIR}
103
+ ${LZ4_INCLUDE_DIRS}
104
+ )
105
+ target_link_libraries (_memray PRIVATE ${LZ4_LIBRARIES} dl ${LIBUNWIND_LIBRARIES} ${LIBBACKTRACE_LIB_DIR} /libbacktrace.a)
106
+ target_link_options (_memray PRIVATE ${LZ4_LDFLAGS} )
107
+ target_compile_options (_memray PRIVATE ${COMPILER_FLAGS} )
108
+ target_link_options (_memray PRIVATE ${LINKER_FLAGS} )
109
+ add_dependencies (_memray libbacktrace)
110
+
111
+ # _test_utils extension
112
+
113
+ add_custom_command (
114
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /_memray_test_utils.cpp
115
+ COMMAND Python::Interpreter -m cython
116
+ --cplus
117
+ -3
118
+ -I ${CMAKE_SOURCE_DIR} /src/memray/
119
+ ${CMAKE_SOURCE_DIR} /src/memray/_memray_test_utils.pyx
120
+ -o ${CMAKE_CURRENT_BINARY_DIR} /_memray_test_utils.cpp
121
+ --module-name memray._test_utils
122
+ DEPENDS ${CMAKE_SOURCE_DIR} /src/memray/_memray_test_utils.pyx
123
+ VERBATIM
124
+ )
125
+ python_add_library(_test_utils MODULE WITH_SOABI ${CMAKE_CURRENT_BINARY_DIR} /_memray_test_utils.cpp)
126
+ target_include_directories (_test_utils PRIVATE
127
+ ${CMAKE_SOURCE_DIR} /src/memray/_memray
128
+ )
129
+
130
+ # _inject extension
131
+
132
+ set (INJECT_SOURCES
133
+ src/memray/_memray/inject.cpp
134
+ )
135
+ python_add_library(_inject MODULE WITH_SOABI USE_SABI 3.7 ${INJECT_SOURCES} )
136
+ target_include_directories (_inject PRIVATE
137
+ ${CMAKE_SOURCE_DIR} /src/memray
138
+ )
139
+ target_compile_options (_test_utils PRIVATE ${COMPILER_FLAGS} )
140
+ target_link_options (_test_utils PRIVATE ${LINKER_FLAGS} )
141
+ target_compile_options (_inject PRIVATE ${COMPILER_FLAGS} )
142
+ target_link_options (_inject PRIVATE ${LINKER_FLAGS} )
143
+
144
+
145
+ # Install targets
146
+ install (TARGETS _memray _test_utils _inject LIBRARY DESTINATION memray)
0 commit comments