Skip to content

Commit dc6952b

Browse files
committed
Use scikit-build-core
Signed-off-by: Pablo Galindo <[email protected]>
1 parent 8ab133b commit dc6952b

File tree

4 files changed

+256
-108
lines changed

4 files changed

+256
-108
lines changed

CMakeLists.txt

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
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)

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ build: build-js build-ext ## (default) Build package extensions and assets in-p
2525

2626
.PHONY: build-ext
2727
build-ext: ## Build package extensions in-place
28-
$(PYTHON) setup.py build_ext --inplace
28+
$(PYTHON) -m pip install --no-build-isolation --config-settings=editable.rebuild=true -Cbuild-dir=build -ve.
2929

3030
$(reporters_path)/templates/assets/%.js: $(reporters_path)/assets/%.js
3131
$(NPM) install

0 commit comments

Comments
 (0)