Skip to content

wiiu-env/WiiUModuleSystem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

9a03443 · Feb 19, 2025

History

60 Commits
Apr 24, 2024
Jan 6, 2023
Feb 19, 2025
Apr 24, 2024
Jan 6, 2023
Feb 4, 2022
Sep 23, 2021
Jun 22, 2023
Jun 22, 2023
Jun 22, 2023
Sep 4, 2022
Apr 24, 2024
Apr 1, 2023

Repository files navigation

Publish Docker Image

Wii U Module System

This lib is designed to build modules to be loaded with the Wii U Module System Loader.

Usage

A module needs to implements at least the following macros.

#include <wums.h>

WUMS_MODULE_EXPORT_NAME("homebrew_modulename");

WUMS_INITIALIZE() {
    /** THIS CODE WILL BE RUN ONCE **/ 
}

The WUMS_MODULE_EXPORT_NAME needs to be a globally unique name across all loaded modules. WUMS_INITIALIZE defines the code that will be run after the module was loaded. The module will have full permission to the sd card via fs:/vol/external01.

Optional macros/hooks

Other optional macros/hooks are support, here some examples:

WUMS_APPLICATION_STARTS() {
    /** Is called when a new application was started. **/
}

WUMS_APPLICATION_REQUESTS_EXIT() {
    /** Is called when a new application is going to be closed. **/
}

This list is incomplete, see hooks.h for all hooks and meta.h for all macros.

Export functions

Modules can be used to export functions for other modules or "normal" applications.

#include <wums.h>

void MyCustomFunction() {
    /** Some special code that should be useable for everyone */
}

WUMS_EXPORT_FUNCTION(MyCustomFunction);

This function can then be used like they would be inside a .rpl, where the name of the "rpl" is the one defined in WUMS_MODULE_EXPORT_NAME.

Example using the Cafe OS OSDynLoad API:

if (OSDynLoad_Acquire("homebrew_modulename", &sModuleHandle) != OS_DYNLOAD_OK) {
    OSFatal("OSDynLoad_Acquire failed.");
}

void (*sMyCustomFunction)() = NULL;

if (OSDynLoad_FindExport(sModuleHandle, FALSE, "MyCustomFunction", (void**) &sMyCustomFunction) != OS_DYNLOAD_OK) {
    OSFatal("OSDynLoad_FindExport failed.");
}

Use this lib in Dockerfiles.

A prebuilt version of this lib can found on dockerhub. To use it for your projects, add this to your Dockerfile.

[...]
COPY --from=ghcr.io/wiiu-env/wiiumodulesystem:[tag] /artifacts $DEVKITPRO
[...]

Replace [tag] with a tag you want to use, a list of tags can be found here. It's highly recommended to pin the version to the latest date instead of using latest.

Format the code via docker

docker run --rm -v ${PWD}:/src ghcr.io/wiiu-env/clang-format:13.0.0-2 -r ./include ./libraries ./example/example_module/source -i

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published