Homebrew development guide

From WiiUBrew
Jump to navigation Jump to search

This article will go over the primary ways of developing various types of homebrew on the Wii U.

Configuring environment

Your first step is to install devkitPro pacman, downloading the Linux, OSX or Windows versions as appropriate for your setup. If you use the Windows installer, you don't need to tick any of the "<console> development" options. On Linux and OSX, pacman will be installed into your native terminal, while Windows users will find a new terminal named "msys2" that they will need to use. Once you're up and running, you can use one of dkp-pacman -S <package> or pacman -S <package> to install packages! Start off by installing devkitPPC, followed by devkit-env on Linux.

Making Native Apps (wut)

The best solution for making Wii U homebrew at this time is wut; an actively-developed toolchain that can build native RPX apps. RPX apps have a high filesize limit, can be launched through HBL or installed to the System Menu as a channel, and can take advantage of many Nintendo features previously unavailable to homebrew. It's recommended to use wut for all new projects.

You should be able to install the wut package.

There's plenty of examples of using wut, such as its own examples; along with real-world apps. See #Guides for more info on getting started with wut.

SDL

There's also a port of SDL2 built on top of wut available to developers; with features like hardware acceleration and sound support. It's designed to be as close to the Switch port of SDL2 as possible, so often Switch and PC SDL2 apps can be used without any changes. It can be installed with wiiu-sdl2 - real-world examples of use include hb-appstore, Fireplace-WiiU, WiiU-Shell, and many others!

Legacy methods

The methods below are useful to know about in case you need to work with or learn from older code, though are generally unsupported and unmaintained.

Making HBL ELF apps

The Homebrew Launcher is an easy platform to target for development. The two below methods are useful for making console and GUI apps respectively. In particular, lib_easy is a good place to start. Apps compiled with this method are in the ELF format.

Using lib_easy

lib_easy by rw-r-r_0644 was designed to be a quick way to get familiar with programming on the Wii U. That link contains an example hello world project. After setting up your environment, you can compile the hello world project by cd-ing into the folder and running "make".

An example of a homebrew app that was made using lib_easy is UClick. lib_easy is now deprecated in favor of wut.

Using Dimok's libraries

Dimok's libraries provide assistance with interacting with various parts of the Wii U. For some projects that use OSScreen to interact with the see Pong, C@ve, Snake, or Space Game. (Specifically, you will want to look at this HBL pong port).

Dimok's libs also provide many GX2 wrappers that provide a template for creating Homebrew Launcher-style GUIs. Examples of projects that utilize this include Homebrew Launcher, CHIP-8_Emulator, and Homebrew App Store.

Making Userland Apps

The userland environment does not require a kernel exploit to execute programs, but as a result is heavily limited. These apps hijack the browser, but don't go any further. libwiiu is a good build system to use to produce .bin files which can be converted into mp4 payloads. It has detailed compilation instructions and many examples in the readme and repository.

A lot of the earlier homebrew was initially made for this userland environment, although most of it has since been ported to HBL. Pong, C@ve, and Space Game are among those early apps.

It isn't really recommended to use userland while a kernel exploit environment is available. It is heavily restricted to ~20KB payload files, no access to global variables, and no access to GX2 (OSScreen only).

Guides

QuarkTheAwesome is working on a more in-depth guide to Wii U development using wut, which is available here.

Support

If you need help developing, here are a few channels that may be able to provide direct assistance.

Don't be afraid to ask! :)