diff --git a/.gitignore b/.gitignore index 6d863fc..bb1e998 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -*.pyc +*.py[ciod] *.so __pycache__ @@ -7,24 +7,14 @@ __pycache__ .vscode *.egg-info -build -dist +/build +/dist +/lib /playingwithfusion/version.py -/playingwithfusion/_init_playingwithfusion.py -/playingwithfusion/include -/playingwithfusion/lib -/playingwithfusion/rpy-include -/playingwithfusion/pkgcfg.py - -/playingwithfusion/_pwf_driver/_init_playingwithfusion_driver.py -/playingwithfusion/_pwf_driver/include -/playingwithfusion/_pwf_driver/lib -/playingwithfusion/_pwf_driver/rpy-include -/playingwithfusion/_pwf_driver/pkgcfg.py - +/playingwithfusion/_init__playingwithfusion.py +/playingwithfusion/trampolines +/playingwithfusion/playingwithfusion.pc *.dylib *.dll - -rev/rpy-include \ No newline at end of file diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..2417a48 --- /dev/null +++ b/meson.build @@ -0,0 +1,23 @@ +project('robotpy-playingwithfusion', ['cpp'], + default_options: ['warning_level=1', 'cpp_std=c++20', + 'b_colorout=auto', 'optimization=2', 'b_pie=true']) + +subdir('semiwrap') + +playingwithfusion_sources += files( + 'playingwithfusion/pwf.cpp', +) + +# +# Static link +# + +cpp = meson.get_compiler('cpp') +libs_path = meson.current_source_dir() + '/lib/lib' + +playingwithfusion_deps += [ + cpp.find_library('PlayingWithFusionDriver', dirs: libs_path), + cpp.find_library('PlayingWithFusion', dirs: libs_path), +] + +subdir('semiwrap/modules') diff --git a/playingwithfusion/__init__.py b/playingwithfusion/__init__.py index b28cf23..aecb26e 100644 --- a/playingwithfusion/__init__.py +++ b/playingwithfusion/__init__.py @@ -1,9 +1,9 @@ -from . import _init_playingwithfusion +from . import _init__playingwithfusion from .version import version as __version__ -# autogenerated by 'robotpy-build create-imports playingwithfusion playingwithfusion._playingwithfusion' +# autogenerated by 'semiwrap create-imports playingwithfusion playingwithfusion._playingwithfusion' from ._playingwithfusion import CANVenom, TMD37003, TimeOfFlight __all__ = ["CANVenom", "TMD37003", "TimeOfFlight"] -del _init_playingwithfusion +del _init__playingwithfusion diff --git a/playingwithfusion/pwf.cpp b/playingwithfusion/pwf.cpp index c7e6095..b2f83ac 100644 --- a/playingwithfusion/pwf.cpp +++ b/playingwithfusion/pwf.cpp @@ -1,3 +1,3 @@ -#include +#include -RPYBUILD_PYBIND11_MODULE(m) { initWrapper(m); } \ No newline at end of file +SEMIWRAP_PYBIND11_MODULE(m) { initWrapper(m); } \ No newline at end of file diff --git a/playingwithfusion/_pwf_driver/__init__.py b/playingwithfusion/py.typed similarity index 100% rename from playingwithfusion/_pwf_driver/__init__.py rename to playingwithfusion/py.typed diff --git a/pyproject.toml b/pyproject.toml index 55bd520..1c9dbb1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,60 +1,80 @@ -[tool.robotpy-build.metadata] +[build-system] +build-backend = "hatchling.build" +requires = [ + "hatchling", + "hatch-vcs", + "semiwrap~=0.1", + "hatch-meson~=0.1.0b2", + "hatch-robotpy~=0.2.0", + "wpilib~=2025.3.2.2", +] + + +[project] name = "robotpy-playingwithfusion" +dynamic = ["version"] description = "PlayingWithFusion for RobotPy" -author = "RobotPy Development Team" -author_email = "robotpy@googlegroups.com" -url = "https://github.com/robotpy/robotpy-playingwithfusion" license = "BSD-3-Clause" -install_requires = [ +dependencies = [ "robotpy-wpiutil<2026.0.0,>=2025.3.2", "robotpy-wpimath<2026.0.0,>=2025.3.2", "wpilib<2026.0.0,>=2025.3.2", ] -[build-system] -requires = [ - "robotpy-build~=2025.1.0", - "robotpy-wpiutil<2026.0.0,>=2025.3.2", - "robotpy-wpimath<2026.0.0,>=2025.3.2", - "wpilib<2026.0.0,>=2025.3.2", -] +[[project.authors]] +name = "RobotPy Development Team" +email = "robotpy@googlegroups.com" + +[project.urls] +"Source code" = "https://github.com/robotpy/robotpy-playingwithfusion" + -[tool.robotpy-build] -base_package = "playingwithfusion" -[tool.robotpy-build.wrappers."playingwithfusion._pwf_driver".maven_lib_download] +[tool.hatch.version] +source = "vcs" + +[tool.hatch.build.hooks.vcs] +version-file = "playingwithfusion/version.py" + +[tool.hatch.build.targets.wheel] +packages = ["playingwithfusion"] + + +[[tool.hatch.build.hooks.robotpy.maven_lib_download]] artifact_id = "PlayingWithFusion-driver" group_id = "com.playingwithfusion.frc" repo_url = "https://www.playingwithfusion.com/frc/maven" version = "2025.01.23" +staticlibs = ["PlayingWithFusionDriver"] +extract_to = "lib" -libs = ["PlayingWithFusionDriver"] - -[tool.robotpy-build.wrappers."playingwithfusion._pwf_driver"] -name = "playingwithfusion_driver" -depends = ["wpilib_core", "wpiHal", "wpiutil"] - -[tool.robotpy-build.wrappers."playingwithfusion".maven_lib_download] +[[tool.hatch.build.hooks.robotpy.maven_lib_download]] artifact_id = "PlayingWithFusion-cpp" group_id = "com.playingwithfusion.frc" repo_url = "https://www.playingwithfusion.com/frc/maven" version = "2025.01.23" +staticlibs = ["PlayingWithFusion"] +extract_to = "lib" -libs = ["PlayingWithFusion"] -[tool.robotpy-build.wrappers."playingwithfusion"] +[tool.hatch.build.hooks.semiwrap] + +[tool.hatch.build.hooks.meson] + + +[tool.semiwrap] +update_init = ["playingwithfusion"] + +[tool.semiwrap.extension_modules."playingwithfusion._playingwithfusion"] name = "playingwithfusion" -sources = [ - "playingwithfusion/pwf.cpp" -] -depends = ["wpilibc", "wpilib_core", "wpiHal", "wpiutil", "playingwithfusion_driver"] +depends = ["wpilib"] -generate = [ - { CANVenom = "CANVenom.h" }, - { TMD37003 = "TMD37003.h" }, - { TimeOfFlight = "TimeOfFlight.h" }, +includes = [ + "lib/include" ] -generation_data = "gen" - +[tool.semiwrap.extension_modules."playingwithfusion._playingwithfusion".headers] +CANVenom = "CANVenom.h" +TMD37003 = "TMD37003.h" +TimeOfFlight = "TimeOfFlight.h" diff --git a/semiwrap/.gitignore b/semiwrap/.gitignore new file mode 100644 index 0000000..6cdce10 --- /dev/null +++ b/semiwrap/.gitignore @@ -0,0 +1,3 @@ +/meson.build +/modules/meson.build +/trampolines/meson.build diff --git a/gen/CANVenom.yml b/semiwrap/CANVenom.yml similarity index 97% rename from gen/CANVenom.yml rename to semiwrap/CANVenom.yml index c9fbcad..eef7cc6 100644 --- a/gen/CANVenom.yml +++ b/semiwrap/CANVenom.yml @@ -1,8 +1,6 @@ ---- classes: - CANVenom: - shared_ptr: true + pwf::CANVenom: ignored_bases: - wpi::SendableHelper enums: diff --git a/gen/TMD37003.yml b/semiwrap/TMD37003.yml similarity index 87% rename from gen/TMD37003.yml rename to semiwrap/TMD37003.yml index dcbfe2b..6f49ec4 100644 --- a/gen/TMD37003.yml +++ b/semiwrap/TMD37003.yml @@ -1,8 +1,6 @@ ---- classes: - TMD37003: - shared_ptr: true + pwf::TMD37003: methods: TMD37003: ConfigureColorSense: diff --git a/gen/TimeOfFlight.yml b/semiwrap/TimeOfFlight.yml similarity index 91% rename from gen/TimeOfFlight.yml rename to semiwrap/TimeOfFlight.yml index dd64435..d1c2c88 100644 --- a/gen/TimeOfFlight.yml +++ b/semiwrap/TimeOfFlight.yml @@ -1,8 +1,6 @@ ---- classes: - TimeOfFlight: - shared_ptr: true + pwf::TimeOfFlight: ignored_bases: - wpi::SendableHelper enums: diff --git a/setup.py b/setup.py deleted file mode 100644 index 3542d0c..0000000 --- a/setup.py +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env python3 - -from robotpy_build.setup import setup - -setup()