1
- cmake_minimum_required (VERSION 3.7 )
1
+ cmake_minimum_required (VERSION 3.24...3.26 )
2
2
project (memray)
3
3
4
4
set (CMAKE_CXX_STANDARD 17)
@@ -21,21 +21,22 @@ if(NOT LZ4_FOUND)
21
21
endif ()
22
22
23
23
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
24
- pkg_check_modules(LIBUNWIND REQUIRED libunwind)
24
+ pkg_check_modules(UNWIND REQUIRED libunwind)
25
+ pkg_check_modules(DEBUGINFOD libdebuginfod)
26
+ if (NOT DEBUGINFOD_LIBRARIES)
27
+ set (DEBUGINFOD_LIBRARIES "debuginfod" )
28
+ endif ()
25
29
endif ()
26
30
27
31
# Set compiler flags
28
- set (COMPILER_FLAGS " -Wall" )
32
+ add_compile_options ( -Wall)
29
33
if (NOT DEFINED ENV{NO_MEMRAY_FAST_TLS})
30
- add_definitions (-DUSE_MEMRAY_TLS_MODEL=1)
34
+ add_compile_definitions (-DUSE_MEMRAY_TLS_MODEL=1)
31
35
endif ()
32
36
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 ()
37
+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto" )
38
+ set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -flto" )
39
+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og" )
39
40
40
41
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
41
42
set (BINARY_FORMAT "elf" )
@@ -48,21 +49,23 @@ endif()
48
49
# Set up libbacktrace
49
50
set (LIBBACKTRACE_DIR ${CMAKE_SOURCE_DIR} /src/vendor/libbacktrace)
50
51
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)
52
+ set (LIBBACKTRACE_INCLUDE_DIR ${LIBBACKTRACE_INSTALL_DIR} /include )
53
+ set (LIBBACKTRACE_LIB_DIR ${LIBBACKTRACE_INSTALL_DIR} /lib)
53
54
54
55
# Add custom command to build libbacktrace
55
56
add_custom_command (
56
57
OUTPUT ${LIBBACKTRACE_LIB_DIR} /libbacktrace.a
58
+ OUTPUT ${LIBBACKTRACE_INCLUDE_DIR} /libbacktrace/backtrace.h
59
+ OUTPUT ${LIBBACKTRACE_INCLUDE_DIR} /libbacktrace/internal .h
57
60
COMMAND mkdir -p ${LIBBACKTRACE_INSTALL_DIR}
58
61
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR} /libbacktrace_build
59
62
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
63
+ ${LIBBACKTRACE_DIR} /configure
64
+ --with-pic
65
+ --prefix =${LIBBACKTRACE_INSTALL_DIR}
66
+ --includedir=${LIBBACKTRACE_INCLUDE_DIR} /libbacktrace
67
+ COMMAND make -C ${CMAKE_CURRENT_BINARY_DIR} /libbacktrace_build -j
68
+ COMMAND make -C ${CMAKE_CURRENT_BINARY_DIR} /libbacktrace_build install
66
69
DEPENDS ${LIBBACKTRACE_DIR} /configure
67
70
)
68
71
add_custom_target (libbacktrace DEPENDS ${LIBBACKTRACE_LIB_DIR} /libbacktrace.a)
@@ -72,15 +75,22 @@ add_custom_target(libbacktrace DEPENDS ${LIBBACKTRACE_LIB_DIR}/libbacktrace.a)
72
75
add_custom_command (
73
76
OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /_memray.cpp
74
77
COMMAND Python::Interpreter -m cython
75
- --cplus
76
- -3
78
+ --cplus
79
+ -3
80
+ -X embedsignature=True
81
+ -X boundscheck=False
82
+ -X wraparound=False
83
+ -X cdivision=True
84
+ -X c_string_type=unicode
85
+ -X c_string_encoding=utf8
77
86
-I ${CMAKE_SOURCE_DIR} /src/memray/
78
- ${CMAKE_SOURCE_DIR} /src/memray/_memray.pyx
87
+ ${CMAKE_SOURCE_DIR} /src/memray/_memray.pyx
79
88
-o ${CMAKE_CURRENT_BINARY_DIR} /_memray.cpp
89
+ --module-name memray._memray
80
90
DEPENDS ${CMAKE_SOURCE_DIR} /src/memray/_memray.pyx
81
91
VERBATIM
82
92
)
83
- set (MEMRAY_SOURCES
93
+ python_add_library(_memray MODULE WITH_SOABI
84
94
src/memray/_memray/compat.cpp
85
95
src/memray/_memray/hooks.cpp
86
96
src/memray/_memray/tracking_api.cpp
@@ -95,45 +105,63 @@ set(MEMRAY_SOURCES
95
105
src/memray/_memray/snapshot.cpp
96
106
src/memray/_memray/socket_reader_thread.cpp
97
107
src/memray/_memray/native_resolver.cpp
108
+ ${CMAKE_CURRENT_BINARY_DIR} /_memray.cpp
98
109
)
99
- python_add_library(_memray MODULE WITH_SOABI ${MEMRAY_SOURCES} ${CMAKE_CURRENT_BINARY_DIR} /_memray.cpp)
100
- target_include_directories (_memray PRIVATE
110
+
111
+ target_include_directories (_memray PRIVATE
101
112
${CMAKE_SOURCE_DIR} /src/memray/_memray
102
- ${LIBBACKTRACE_INCLUDE_DIR}
113
+ ${LIBBACKTRACE_INCLUDE_DIR}
103
114
${LZ4_INCLUDE_DIRS}
115
+ ${UNWIND_INCLUDE_DIRS}
116
+ ${DEBUGINFOD_INCLUDE_DIRS}
104
117
)
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} )
118
+ target_link_libraries (_memray PRIVATE
119
+ ${LIBBACKTRACE_LIB_DIR} /libbacktrace.a
120
+ ${LZ4_LIBRARIES}
121
+ ${UNWIND_LIBRARIES}
122
+ ${DEBUGINFOD_LIBRARIES}
123
+ dl
124
+ )
125
+ set_target_properties (_memray PROPERTIES INSTALL_RPATH "${DEBUGINFOD_LIBRARY_DIRS} " )
126
+
127
+ set (CMAKE_BUILD_RPATH "${LZ4_LIBRARY_DIRS} :" )
128
+ target_link_options (_memray PRIVATE ${LZ4_LDFLAGS} ${UNWIND_LDFLAGS} ${DEBUGINFOD_LDFLAGS} )
129
+ target_compile_options (_memray PRIVATE ${LZ4_CFLAGS} ${UNWIND_CFLAGS} ${DEBUGINFOD_CFLAGS} )
109
130
add_dependencies (_memray libbacktrace)
110
131
111
132
# _test_utils extension
112
133
113
134
add_custom_command (
114
135
OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /_memray_test_utils.cpp
115
136
COMMAND Python::Interpreter -m cython
116
- --cplus
137
+ --cplus
117
138
-3
139
+ -X embedsignature=True
140
+ -X boundscheck=False
141
+ -X wraparound=False
142
+ -X cdivision=True
143
+ -X c_string_type=unicode
144
+ -X c_string_encoding=utf8
118
145
-I ${CMAKE_SOURCE_DIR} /src/memray/
119
- ${CMAKE_SOURCE_DIR} /src/memray/_memray_test_utils.pyx
146
+ ${CMAKE_SOURCE_DIR} /src/memray/_memray_test_utils.pyx
120
147
-o ${CMAKE_CURRENT_BINARY_DIR} /_memray_test_utils.cpp
121
148
--module-name memray._test_utils
122
149
DEPENDS ${CMAKE_SOURCE_DIR} /src/memray/_memray_test_utils.pyx
123
150
VERBATIM
124
151
)
125
- python_add_library(_test_utils MODULE WITH_SOABI ${CMAKE_CURRENT_BINARY_DIR} /_memray_test_utils.cpp)
126
- target_include_directories (_test_utils PRIVATE
152
+ python_add_library(_test_utils MODULE WITH_SOABI
153
+ ${CMAKE_CURRENT_BINARY_DIR} /_memray_test_utils.cpp
154
+ )
155
+ target_include_directories (_test_utils PRIVATE
127
156
${CMAKE_SOURCE_DIR} /src/memray/_memray
128
157
)
129
158
130
159
# _inject extension
131
160
132
- set (INJECT_SOURCES
161
+ python_add_library(_inject MODULE WITH_SOABI USE_SABI 3.7
133
162
src/memray/_memray/inject.cpp
134
163
)
135
- python_add_library(_inject MODULE WITH_SOABI USE_SABI 3.7 ${INJECT_SOURCES} )
136
- target_include_directories (_inject PRIVATE
164
+ target_include_directories (_inject PRIVATE
137
165
${CMAKE_SOURCE_DIR} /src/memray
138
166
)
139
167
target_compile_options (_test_utils PRIVATE ${COMPILER_FLAGS} )
@@ -143,4 +171,4 @@ target_link_options(_inject PRIVATE ${LINKER_FLAGS})
143
171
144
172
145
173
# Install targets
146
- install (TARGETS _memray _test_utils _inject LIBRARY DESTINATION memray)
174
+ install (TARGETS _memray _test_utils _inject LIBRARY DESTINATION memray)
0 commit comments