Cargo command to work with Nintendo 3DS project binaries.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Andrea Ciliberti 318320200b Add license files 2 years ago
src Documentation improvements and extra test case 2 years ago
.gitignore Initial use of clap 2 years ago
Cargo.toml Fix licensing 2 years ago
LICENSE-APACHE Add license files 2 years ago
LICENSE-MIT Add license files 2 years ago
README.md Fix licensing 2 years ago

README.md

cargo-3ds

Cargo command to work with Nintendo 3DS project binaries. Based on cargo-psp.

Usage

Use the nightly toolchain to build 3DS apps (either by using rustup override nightly for the project directory or by adding +nightly in the cargo invocation).

Commands:
  build
          Builds an executable suitable to run on a 3DS (3dsx)
  run
          Builds an executable and sends it to a device with `3dslink`
  test
          Builds a test executable and sends it to a device with `3dslink`
  help
          Print this message or the help of the given subcommand(s)

Options:
  -h, --help
          Print help information (use `-h` for a summary)

  -V, --version
          Print version information

Additional arguments will be passed through to the given subcommand. See passthrough arguments for more details.

It is also possible to pass any other cargo command (e.g. doc, check), and all its arguments will be passed through directly to cargo unmodified, with the proper RUSTFLAGS and --target set for the 3DS target.

Basic Examples

  • cargo 3ds build
  • cargo 3ds check --verbose
  • cargo 3ds run --release --example foo
  • cargo 3ds test --no-run

Running executables

cargo 3ds test and cargo 3ds run use the 3dslink tool to send built executables to a device, and thus accept specific related arguments that correspond to 3dslink arguments:

-a, --address <ADDRESS>
      Specify the IP address of the device to send the executable to.

      Corresponds to 3dslink's `--address` arg, which defaults to automatically finding the device.

-0, --argv0 <ARGV0>
      Set the 0th argument of the executable when running it. Corresponds to 3dslink's `--argv0` argument

-s, --server
      Start the 3dslink server after sending the executable. Corresponds to 3dslink's `--server` argument

  --retries <RETRIES>
      Set the number of tries when connecting to the device to send the executable. Corresponds to 3dslink's `--retries` argument

Passthrough Arguments

Due to the way cargo-3ds, cargo, and 3dslink parse arguments, there is unfortunately some complexity required when invoking an executable with arguments.

All unrecognized arguments beginning with a dash (e.g. --release, --features, etc.) will be passed through to cargo directly.

NOTE: arguments for running executables must be specified before other unrecognized cargo arguments. Otherwise they will be treated as passthrough arguments which will most likely fail the resulting cargo command.

An optional -- may be used to explicitly pass subsequent args to cargo, including arguments to pass to the executable itself. To separate cargo arguments from executable arguments, another -- can be used. For example:

  • cargo 3ds run -- -- xyz

    Builds an executable and send it to a device to run it with the argument xyz.

  • cargo 3ds test --address 192.168.0.2 -- -- --test-arg 1

    Builds a test executable and attempts to send it to a device with the address 192.168.0.2 and run it using the arguments ["--test-arg", "1"].

  • cargo 3ds test --address 192.168.0.2 --verbose -- --test-arg 1

    Build a test executable with cargo test --verbose, and attempts to send it to a device with the address 192.168.0.2 and run it using the arguments ["--test-arg", "1"].

    This works without two -- instances because --verbose begins the set of cargo arguments and ends the set of 3DS-specific arguments.

LICENSE

This project is distributed under the MIT license or the Apache-2.0 license.