1- cmake_minimum_required (VERSION 3.7 )
1+ cmake_minimum_required (VERSION 3.24...3.26 )
22project (memray)
33
44set (CMAKE_CXX_STANDARD 17)
@@ -21,21 +21,22 @@ if(NOT LZ4_FOUND)
2121endif ()
2222
2323if (${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 ()
2529endif ()
2630
2731# Set compiler flags
28- set (COMPILER_FLAGS " -Wall" )
32+ add_compile_options ( -Wall)
2933if (NOT DEFINED ENV{NO_MEMRAY_FAST_TLS})
30- add_definitions (-DUSE_MEMRAY_TLS_MODEL=1)
34+ add_compile_definitions (-DUSE_MEMRAY_TLS_MODEL=1)
3135endif ()
3236
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" )
3940
4041if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
4142 set (BINARY_FORMAT "elf" )
@@ -48,21 +49,23 @@ endif()
4849# Set up libbacktrace
4950set (LIBBACKTRACE_DIR ${CMAKE_SOURCE_DIR} /src/vendor/libbacktrace)
5051set (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)
5354
5455# Add custom command to build libbacktrace
5556add_custom_command (
5657 OUTPUT ${LIBBACKTRACE_LIB_DIR} /libbacktrace.a
58+ OUTPUT ${LIBBACKTRACE_INCLUDE_DIR} /libbacktrace/backtrace.h
59+ OUTPUT ${LIBBACKTRACE_INCLUDE_DIR} /libbacktrace/internal .h
5760 COMMAND mkdir -p ${LIBBACKTRACE_INSTALL_DIR}
5861 COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR} /libbacktrace_build
5962 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
6669 DEPENDS ${LIBBACKTRACE_DIR} /configure
6770)
6871add_custom_target (libbacktrace DEPENDS ${LIBBACKTRACE_LIB_DIR} /libbacktrace.a)
@@ -72,15 +75,22 @@ add_custom_target(libbacktrace DEPENDS ${LIBBACKTRACE_LIB_DIR}/libbacktrace.a)
7275add_custom_command (
7376 OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /_memray.cpp
7477 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
7786 -I ${CMAKE_SOURCE_DIR} /src/memray/
78- ${CMAKE_SOURCE_DIR} /src/memray/_memray.pyx
87+ ${CMAKE_SOURCE_DIR} /src/memray/_memray.pyx
7988 -o ${CMAKE_CURRENT_BINARY_DIR} /_memray.cpp
89+ --module-name memray._memray
8090 DEPENDS ${CMAKE_SOURCE_DIR} /src/memray/_memray.pyx
8191 VERBATIM
8292)
83- set (MEMRAY_SOURCES
93+ python_add_library(_memray MODULE WITH_SOABI
8494 src/memray/_memray/compat.cpp
8595 src/memray/_memray/hooks.cpp
8696 src/memray/_memray/tracking_api.cpp
@@ -95,45 +105,63 @@ set(MEMRAY_SOURCES
95105 src/memray/_memray/snapshot.cpp
96106 src/memray/_memray/socket_reader_thread.cpp
97107 src/memray/_memray/native_resolver.cpp
108+ ${CMAKE_CURRENT_BINARY_DIR} /_memray.cpp
98109)
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
101112 ${CMAKE_SOURCE_DIR} /src/memray/_memray
102- ${LIBBACKTRACE_INCLUDE_DIR}
113+ ${LIBBACKTRACE_INCLUDE_DIR}
103114 ${LZ4_INCLUDE_DIRS}
115+ ${UNWIND_INCLUDE_DIRS}
116+ ${DEBUGINFOD_INCLUDE_DIRS}
104117)
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} )
109130add_dependencies (_memray libbacktrace)
110131
111132# _test_utils extension
112133
113134add_custom_command (
114135 OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /_memray_test_utils.cpp
115136 COMMAND Python::Interpreter -m cython
116- --cplus
137+ --cplus
117138 -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
118145 -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
120147 -o ${CMAKE_CURRENT_BINARY_DIR} /_memray_test_utils.cpp
121148 --module-name memray._test_utils
122149 DEPENDS ${CMAKE_SOURCE_DIR} /src/memray/_memray_test_utils.pyx
123150 VERBATIM
124151)
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
127156 ${CMAKE_SOURCE_DIR} /src/memray/_memray
128157)
129158
130159# _inject extension
131160
132- set (INJECT_SOURCES
161+ python_add_library(_inject MODULE WITH_SOABI USE_SABI 3.7
133162 src/memray/_memray/inject.cpp
134163)
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
137165 ${CMAKE_SOURCE_DIR} /src/memray
138166)
139167target_compile_options (_test_utils PRIVATE ${COMPILER_FLAGS} )
@@ -143,4 +171,4 @@ target_link_options(_inject PRIVATE ${LINKER_FLAGS})
143171
144172
145173# 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