mirror of
https://github.com/wolfpld/tracy
synced 2026-01-19 04:52:09 +00:00
Refactor python build system
This commit is contained in:
9
python/.gitignore
vendored
9
python/.gitignore
vendored
@@ -1,8 +1 @@
|
|||||||
*.dylib
|
*.whl
|
||||||
*.so.*
|
|
||||||
build
|
|
||||||
dist
|
|
||||||
tracy_client.egg-info
|
|
||||||
client
|
|
||||||
common
|
|
||||||
tracy
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ if(EXTERNAL_PYBIND11)
|
|||||||
|
|
||||||
include(FetchContent)
|
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)
|
FetchContent_MakeAvailable(pybind11)
|
||||||
endif()
|
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 BUFFER_SIZE=${BUFFER_SIZE})
|
||||||
target_compile_definitions(TracyClientBindings PUBLIC NAME_LENGTH=${NAME_LENGTH})
|
target_compile_definitions(TracyClientBindings PUBLIC NAME_LENGTH=${NAME_LENGTH})
|
||||||
|
|
||||||
set(TRACY_PYTHON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tracy_client)
|
if (UNIX)
|
||||||
set(TRACY_LIB_SYMLINK $<TARGET_FILE_PREFIX:TracyClient>$<TARGET_FILE_BASE_NAME:TracyClient>$<TARGET_FILE_SUFFIX:TracyClient>)
|
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)
|
install(TARGETS TracyClientBindings
|
||||||
list(TRANSFORM common_includes REPLACE "^${TRACY_PUBLIC_DIR}" "${TRACY_PYTHON_DIR}" OUTPUT_VARIABLE python_common_includes)
|
RUNTIME DESTINATION .
|
||||||
list(TRANSFORM tracy_includes REPLACE "^${TRACY_PUBLIC_DIR}" "${TRACY_PYTHON_DIR}" OUTPUT_VARIABLE python_tracy_includes)
|
LIBRARY DESTINATION .
|
||||||
|
|
||||||
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
|
|
||||||
)
|
)
|
||||||
|
|
||||||
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()
|
|
||||||
|
|||||||
@@ -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
29
python/pyproject.toml
Normal 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 = ""
|
||||||
@@ -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,
|
|
||||||
)
|
|
||||||
Reference in New Issue
Block a user