The Makefile for a plugin is splitted into multiple parts.
$(WUPS_DIR)/plugin_makefile.mk
- provides some general linking flags$(PLUGIN_DIR)/Makefile
- A generic Makefile that should fit for all plugin$(PLUGIN_DIR)/makefile.mk
- The part that is plugin specific
The plugin_makefile.mk
will be installed automatically into the WUPS_DIR inside the DEVKITPRO when installing the
WUPS library.
The Makefile
and makefile.mk
can be found inside the example plugin.
When using the Code::Blocks template, these will be provided.
makefile.mk
The makefile.mk
should be self explanatory, but common changes will be explained here.
Defined variables that can be used
Inside the makefile.mk
multiple variables are already set, here is a short overview.
Varibale | Value |
---|---|
$(DEVKITPRO) | Refers to the devkitPro directory |
$(DEVKITPPC) | Refers to the devkitPPC directory |
$(WUPSDIR) | Refers to the directory of the installed WUPS libary |
$(WUT_ROOT) | Refers to the directory of the installed wut |
$(PORTLIBS) | Refers to the directory of the installed portlibs |
$(GCC_VER) | Contains the installed/used GCC version |
Enable logging
# Compiling the projects with libutils logging code?
DO_LOGGING := 1
This is a libutils specific option. When it’s set to 0, no logging related code will be compiled into the binary.
WUT specific options
It’s possible to use some wut speficic options, these require wut to be installed.
# Links against the wut implementation of newlib, this is useful for using any function
# from the C standard library
WUT_ENABLE_NEWLIB := 0
# Links against the wut implementation of stdcpp, this is useful for using any function
# from the C++ standard library. This will enable WUT_ENABLE_NEWLIB if you have not already done so.
WUT_ENABLE_CPP := 0
# 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_DEFAULT_MALLOC := 1
In most cases you want to enable WUT_DEFAULT_MALLOC
to able to use malloc
, free
etc.
Input / Output
# Target filename
TARGET := $(notdir $(CURDIR)).mod
# Source directories
SOURCES := src
# Data directories
DATA :=
# Include directories
INCLUDES := src
TARGET
defines the output filename.$(notdir $(CURDIR)).mod
is the default value which result in DIR_NAME.mod. The file extenstion needs to be.mod
to be recognized by the plugin loader.SOURCES
defines a list of directories that will be scanned for C,C++ and .s files. Multiple folder are seperated by a space.DATA
defines a list of directories that will be scanned for binary files (Like fonts, sounds, images). Multiple folder are seperated by a space.INCLUDES
defines a list of directories that will be scanned for head files (.h and .hpp). Multiple folder are seperated by a space.
Compiler and linking flags
#---------------------------------------------------------------------------------
# options for code generation and linking
#---------------------------------------------------------------------------------
# Extra C AND C++ compiler flags
COMMON_CFLAGS :=
# Extra C compiler flags
CFLAGS :=
# Extra C++ compiler flags
CXXFLAGS :=
# Extra linking flags for all linking steps
LDFLAGS :=
- Set
COMMON_CFLAGS
to specify extra flags for the C and C++ compiler.. - Set
CFLAG
to specify extra onlyC compiler
flags. - Set
CXXFLAG
to specify extra onlyC++ compiler
flags. - Set
LD_FLAGS
to add custom linking flags.
Linking with libraries
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS := $(WUPSDIR) $(WUT_ROOT)
#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project
#---------------------------------------------------------------------------------
LIBS := -lwups -lutilswut -lcoreinit -lnsysnet
#---------------------------------------------------------------------------------
# Will be added to the final lib paths
# example:
# -L$C:/library1/lib
#---------------------------------------------------------------------------------
EXTERNAL_LIBPATHS :=
#---------------------------------------------------------------------------------
# Will be added to the final include paths
# -IC:/library1/include
#---------------------------------------------------------------------------------
EXTERNAL_INCLUDE := -I$(WUT_ROOT)/include/libutilswut
Libraries that will be linked in, need to defined in LIBS
, seperated by a space. libwups
will be needed by all plugin, all other are optional.
Most likely you will link against utility libraries like libutils and wut libraries to
use system functions.
The path which contains the according binaries is defined in EXTERNAL_LIBPATHS
(with -L
as prefix), the path to the header in EXTERNAL_INCLUDE
(with -I
as prefix), seperated by a space. EXTERNAL_INCLUDE
is also used to define other external include files.
LIBDIRS
can be used as a shortcut. It refers to directory containing the binaries of the libary in a subfolder called lib
, and the header in a subfolder called include
.
LIBDIRS := $(WUPSDIR)
is equivalent to
EXTERNAL_LIBPATHS := -L$(WUPSDIR)/lib
EXTERNAL_INCLUDE := -I$(WUPSDIR)/include