0
0
mirror of https://github.com/wolfpld/tracy.git synced 2026-01-18 17:11:26 +01:00

Refactor python build system

This commit is contained in:
Moritz Heinemann
2025-08-12 18:03:28 +02:00
parent 0721561c54
commit 0b57a37ebb
5 changed files with 39 additions and 121 deletions

9
python/.gitignore vendored
View File

@@ -1,8 +1 @@
*.dylib
*.so.*
build
dist
tracy_client.egg-info
client
common
tracy
*.whl

View File

@@ -7,7 +7,7 @@ if(EXTERNAL_PYBIND11)
include(FetchContent)
FetchContent_Declare(pybind11 GIT_REPOSITORY "https://github.com/pybind/pybind11.git" GIT_TAG "v2.11.1" GIT_SHALLOW ON TEST_BEFORE_INSTALL ON)
FetchContent_Declare(pybind11 GIT_REPOSITORY "https://github.com/pybind/pybind11.git" GIT_TAG "v2.13.6" GIT_SHALLOW ON)
FetchContent_MakeAvailable(pybind11)
endif()
@@ -20,44 +20,13 @@ target_link_libraries(TracyClientBindings PUBLIC ${Python_LIBRARIES})
target_compile_definitions(TracyClientBindings PUBLIC BUFFER_SIZE=${BUFFER_SIZE})
target_compile_definitions(TracyClientBindings PUBLIC NAME_LENGTH=${NAME_LENGTH})
set(TRACY_PYTHON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tracy_client)
set(TRACY_LIB_SYMLINK $<TARGET_FILE_PREFIX:TracyClient>$<TARGET_FILE_BASE_NAME:TracyClient>$<TARGET_FILE_SUFFIX:TracyClient>)
if (UNIX)
set_target_properties(TracyClientBindings PROPERTIES
BUILD_RPATH_USE_ORIGIN TRUE
INSTALL_RPATH "\$ORIGIN/lib")
endif ()
list(TRANSFORM client_includes REPLACE "^${TRACY_PUBLIC_DIR}" "${TRACY_PYTHON_DIR}" OUTPUT_VARIABLE python_client_includes)
list(TRANSFORM common_includes REPLACE "^${TRACY_PUBLIC_DIR}" "${TRACY_PYTHON_DIR}" OUTPUT_VARIABLE python_common_includes)
list(TRANSFORM tracy_includes REPLACE "^${TRACY_PUBLIC_DIR}" "${TRACY_PYTHON_DIR}" OUTPUT_VARIABLE python_tracy_includes)
add_custom_command(TARGET TracyClient TracyClientBindings POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${TRACY_PYTHON_DIR}/client
COMMAND ${CMAKE_COMMAND} -E copy ${client_includes} ${TRACY_PYTHON_DIR}/client
COMMAND ${CMAKE_COMMAND} -DFOLDER=${TRACY_PYTHON_DIR}/client -P ${CMAKE_CURRENT_SOURCE_DIR}/HeaderFixer.txt
COMMAND ${CMAKE_COMMAND} -E make_directory ${TRACY_PYTHON_DIR}/common
COMMAND ${CMAKE_COMMAND} -E copy ${common_includes} ${TRACY_PYTHON_DIR}/common
COMMAND ${CMAKE_COMMAND} -DFOLDER=${TRACY_PYTHON_DIR}/common -P ${CMAKE_CURRENT_SOURCE_DIR}/HeaderFixer.txt
COMMAND ${CMAKE_COMMAND} -E make_directory ${TRACY_PYTHON_DIR}/tracy
COMMAND ${CMAKE_COMMAND} -E copy ${tracy_includes} ${TRACY_PYTHON_DIR}/tracy
COMMAND ${CMAKE_COMMAND} -DFOLDER=${TRACY_PYTHON_DIR}/tracy -P ${CMAKE_CURRENT_SOURCE_DIR}/HeaderFixer.txt
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:TracyClientBindings> ${TRACY_PYTHON_DIR}/
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:TracyClient> ${TRACY_PYTHON_DIR}/
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/../${TRACY_LIB_SYMLINK} ${TRACY_PYTHON_DIR}/
BYPRODUCTS ${python_client_includes} ${python_common_includes} ${python_tracy_includes} ${TRACY_PYTHON_DIR}/client ${TRACY_PYTHON_DIR}/common ${TRACY_PYTHON_DIR}/tracy
install(TARGETS TracyClientBindings
RUNTIME DESTINATION .
LIBRARY DESTINATION .
)
set(TRACY_CLIENT_PYTHON_TARGET "" CACHE STRING "Optional directory to copy python files to")
if(NOT TRACY_CLIENT_PYTHON_TARGET STREQUAL "")
file(GLOB_RECURSE TRACY_CLIENT_PYTHON_FILES ${TRACY_PYTHON_DIR}/*.py*)
list(TRANSFORM TRACY_CLIENT_PYTHON_FILES REPLACE "^${TRACY_PYTHON_DIR}" "${TRACY_CLIENT_PYTHON_TARGET}" OUTPUT_VARIABLE TRACY_CLIENT_TARGET_PYTHON_FILES)
add_custom_command(TARGET TracyClientBindings POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${TRACY_CLIENT_PYTHON_TARGET}
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:TracyClientBindings> ${TRACY_CLIENT_PYTHON_TARGET}/
COMMAND ${CMAKE_COMMAND} -E copy ${TRACY_CLIENT_PYTHON_FILES} ${TRACY_CLIENT_PYTHON_TARGET}/
BYPRODUCTS ${TRACY_CLIENT_TARGET_PYTHON_FILES}
)
endif()

View File

@@ -1,16 +0,0 @@
function(fix_header FILE)
file(READ ${FILE} FILE_CONTENT)
string(REPLACE "../client" "client" FILE_CONTENT "${FILE_CONTENT}")
string(REPLACE "../common" "common" FILE_CONTENT "${FILE_CONTENT}")
string(REPLACE "../tracy" "tracy" FILE_CONTENT "${FILE_CONTENT}")
file(WRITE ${FILE} "${FILE_CONTENT}")
endfunction()
function(fix_headers FOLDER)
file(GLOB FILES "${FOLDER}/*.h*")
foreach(FILE ${FILES})
fix_header(${FILE})
endforeach()
endfunction()
fix_headers(${FOLDER})

29
python/pyproject.toml Normal file
View File

@@ -0,0 +1,29 @@
[build-system]
requires = ["scikit-build-core>=0.11"]
build-backend = "scikit_build_core.build"
[project]
name = "tracy_client"
version = "0.12.2"
description = "A real time, nanosecond resolution, remote telemetry, hybrid frame and sampling profiler for games and other applications."
authors = [
{ name = "Bartosz Taudul", email = "wolf@nereid.pl" },
]
requires-python = ">=3.10"
[project.urls]
homepage = "https://github.com/wolfpld/tracy"
source = "https://github.com/wolfpld/tracy"
[tool.scikit-build]
cmake.version = ">=3.15.0"
ninja.version = ">=1.11"
cmake.source-dir = ".."
cmake.build-type = "Release"
wheel.install-dir = "tracy_client"
wheel.packages = ["tracy_client"]
[tool.scikit-build.cmake.define]
TRACY_CLIENT_PYTHON = "ON"
TRACY_STATIC = "OFF"
CMAKE_INSTALL_BINDIR = ""

View File

@@ -1,57 +0,0 @@
# -*- coding: utf-8 -*-
import glob
import os
import shutil
from typing import List
from setuptools import setup, find_namespace_packages, Extension
from setuptools.command.build_ext import build_ext
MODULE_NAME = "tracy_client"
def find_files(pattern: str) -> List[str]:
return glob.glob(os.path.join(MODULE_NAME, pattern), recursive=True)
class ManualExtension(Extension):
def __init__(self) -> None:
super().__init__(name=MODULE_NAME, sources=[])
class DummyBuild(build_ext):
def build_extension(self, ext) -> None:
extdir = os.path.abspath(os.path.dirname(self.get_ext_fullpath(ext.name)))
extdir = os.path.join(extdir, MODULE_NAME)
for entry in find_files("*cpython*"):
shutil.copy(
os.path.abspath(entry),
os.path.join(extdir, os.path.basename(entry)),
)
setup(
name=MODULE_NAME,
version="0.10.0",
author="Bartosz Taudul",
author_email="wolf@nereid.pl",
description="A real time, nanosecond resolution, remote telemetry, hybrid frame and sampling profiler for games and other applications.",
long_description="This package contains the client code only. See the documentation for further details.",
url="https://github.com/wolfpld/tracy",
ext_modules=[ManualExtension()],
cmdclass={"build_ext": DummyBuild},
package_dir={"": "."},
packages=find_namespace_packages(where="."),
package_data={"": ["py.typed"]},
data_files=[
("lib", find_files("lib*")),
("include/client", find_files("client/*.h*")),
("include/common", find_files("common/*.h*")),
("include/tracy", find_files("tracy/*.h*")),
],
include_package_data=True,
zip_safe=False,
)