no-std playdate-rs

Safe Rust bindings for the Playdate SDK C-CPI

15 releases

0.0.15 Sep 20, 2023
0.0.14 Sep 18, 2023
0.0.10 Aug 29, 2023

#172 in Embedded development

41 downloads per month

MIT/Apache

470KB
13K SLoC

playdate-rs

crates.io docs workflow-status

Note: Prior to reaching v0.1.0, this is a work in progress. The API is incomplete, and breaking changes can occur frequently across versions.

Safe binding for the Playdate SDK C-API that:

  1. Is easy to use and well documented.
  2. Designed with memory safety in mind.

Only works on Linux/macOS with the playdate simulator for now.

Getting Started

  1. Ensure that the environment variable PLAYDATE_SDK_PATH is correctly set.
    • Skip this step on macOS, as the crate will automatically find the SDK by checking the default installation location.
  2. Install the CLI tool: cargo install playdate-cli
  3. Create a new project: cargo playdate new hello-world
  4. Run the project: cd hello-world && cargo playdate run

Please refer to Playdate CLI docs for all the available CLI commands.

Application Bundling

The cargo playdate build command will automatically create a target/<profile>/<package_name>.pdx folder that can run on the simulator. For the device build, it will be located at target/thumbv7em-none-eabihf/<profile>/<package_name>.pdx.

Game assets bundling

Please put all assets files under the assets folder in the project's root directory (the folder containing Cargo.toml). The CLI will automatically copy all contents to the .pdx folder. All supported resources will be transformed by the pdc compiler.

For more details, please refer to the examples/hello-world project.

pdxinfo generation and bundling

The CLI will automatically generate a pdxinfo file under the .pdx folder. There are two ways to set the content of the pdxinfo file:

  1. Create a pdxinfo file in the project's root directory (the folder containing Cargo.toml). The CLI will automatically pick it up.
  2. Create a [package.metadata.pdxinfo] section in Cargo.toml:
[package.metadata.pdxinfo]
name = "Your game name" # Default value: package.name
author = "Your Name" # Default value: package.authors
description = "Your game description" # Default value: package.description
bundle_id = "com.your-game.bundle-id" # Default value: "com.example." + package.name
image_path = "image/path" # Default value: empty string
launch_sound_path = "launch/sound/path" # Default value: empty string
content_warning = "Content warning" # Default value: empty string
content_warning2 = "Content warning 2" # Default value: empty string

Note that all fields in [package.metadata.pdxinfo] are optional. The default value will be derived from other fields in Cargo.toml. Please refer to the # Default value comments above.

Example: examples/hello-world/Cargo.toml.

TODO

  • Linux / macOS simulator build
  • Cortex-M7F build
  • Run on real playdate device
  • Support all public PlaydateSDK C-API

Dependencies

~1.3–4.5MB
~78K SLoC