[![Build Status](https://travis-ci.org/decaf-emu/wut.svg?branch=rewrite)](https://travis-ci.org/decaf-emu/wut) # wut Let's try make a Wii U Toolchain / SDK for creating rpx/rpl. Licensed under the terms of the GNU General Public License, version 2 or later (GPLv2+). ## Usage See [samples](samples) for examples of how to use wut. The [share/wut.cmake](share/wut.cmake) file provides several helpers for your build: - `wut_create_rpx(target.rpx executable)` - Will create an .rpx file from your CMake target generated by `add_executable` - `wut_enable_newlib(target)` - Links against the wut implementation of newlib, this is useful for using any function from the C standard library - `wut_enable_stdcpp(target)` - Links against the wut implementation of stdcpp, this is useful for using any function from the C++ standard library. This will call wut_enable_newlib if you have not already done so. - `wut_default_malloc(target)` - By default newlib will allocate 90% of the default heap for use with sbrk & malloc, if this is unacceptable to you then you should use this as it replaces the newlib malloc functions which ones which redirect to the CafeOS default heap functions such as MEMAllocFromDefaultHeap. - `wut_enable_devoptab_sd(target)` - This links in wutdevoptab_sd which is useful for using the libc file functions with paths such as `fopen("sd:/file.txt", "r")` to read files from the sd card A minimal CMakeLists.txt file for a C++ project might look like: ``` cmake_minimum_required(VERSION 3.2) project(helloworld_cpp CXX) include("${WUT_ROOT}/share/wut.cmake" REQUIRED) add_executable(helloworld_cpp main.cpp) wut_enable_stdcpp(helloworld_cpp) wut_create_rpx(helloworld_cpp.rpx helloworld_cpp) ``` Which you would compile with ``` export DEVKITPPC=/opt/devkitpro/devkitPPC export WUT_ROOT= mkdir build && cd build cmake -DCMAKE_TOOLCHAIN_FILE=$WUT_ROOT/share/wut.toolchain.cmake ../ make ``` ## Building Requires: - A modern compiler with C++14/17 support - CMake - zlib - [devkitPPC r31+](https://devkitpro.org/wiki/Getting_Started) ### Building on Windows Use [WSL](https://docs.microsoft.com/en-us/windows/wsl/install-win10) and then follow the Linux instructions. For example, if you installed Ubuntu 18.04 then you might setup your environment like: ``` sudo apt install cmake zlib1g-dev gcc-7 g++-7 build-essentials sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 5 wget https://github.com/devkitPro/pacman/releases/download/devkitpro-pacman-1.0.1/devkitpro-pacman.deb sudo dpkg -i devkitpro-pacman.deb sudo dkp-pacman -S devkitPPC wiiload ``` ### Building on Linux / MacOS ``` export DEVKITPPC=/opt/devkitpro/devkitPPC git clone --recursive https://github.com/decaf-emu/wut.git cd wut mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX= ../ make install export WUT_ROOT= ``` Then for any wut project you want to build you must use the wut.toolchain.cmake script: ``` cd ../samples/helloworld mkdir build && cd build cmake -DCMAKE_TOOLCHAIN_FILE=$WUT_ROOT/share/wut.toolchain.cmake ../ make ```