2019-01-23 19:30:07 +01:00
TOPDIR ?= $( CURDIR)
i n c l u d e $( TOPDIR ) / s h a r e / w u t _ r u l e s
export WUT_MAJOR := 1
export WUT_MINOR := 0
export WUT_PATCH := 0
VERSION := $( WUT_MAJOR) .$( WUT_MINOR) .$( WUT_PATCH)
#---------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# DATA is a list of directories containing data files
# INCLUDES is a list of directories containing header files
#---------------------------------------------------------------------------------
TARGET := wut
#BUILD := build
SOURCES := cafe \
libraries/wutcrt \
libraries/wutnewlib \
libraries/wutstdc++ \
libraries/wutmalloc \
libraries/wutdevoptab \
libraries/libwhb/src \
libraries/libgfd/src \
libraries/nn_swkbd
DATA := data
INCLUDES := include \
libraries/libwhb/include \
libraries/libgfd/include \
#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
CFLAGS := -g -Wall -Werror -save-temps \
-ffunction-sections -fdata-sections \
$( MACHDEP) \
$( BUILD_CFLAGS)
CFLAGS += $( INCLUDE) -D__WIIU__ -D__WUT__
CXXFLAGS := $( CFLAGS) -std= gnu++17
ASFLAGS := -g $( MACHDEP)
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS :=
#---------------------------------------------------------------------------------
# no real need to edit anything past this point unless you need to add additional
# rules for different file extensions
#---------------------------------------------------------------------------------
i f n e q ( $( BUILD ) , $( notdir $ ( CURDIR ) ) )
#---------------------------------------------------------------------------------
export TOPDIR := $( CURDIR)
export VPATH := $( foreach dir,$( SOURCES) ,$( CURDIR) /$( dir) ) \
$( foreach dir,$( DATA) ,$( CURDIR) /$( dir) )
CFILES := $( foreach dir,$( SOURCES) ,$( notdir $( wildcard $( dir) /*.c) ) )
CPPFILES := $( foreach dir,$( SOURCES) ,$( notdir $( wildcard $( dir) /*.cpp) ) )
SFILES := $( foreach dir,$( SOURCES) ,$( notdir $( wildcard $( dir) /*.s) ) )
DEFFILES := $( foreach dir,$( SOURCES) ,$( notdir $( wildcard $( dir) /*.def) ) )
BINFILES := $( foreach dir,$( DATA) ,$( notdir $( wildcard $( dir) /*.*) ) )
#---------------------------------------------------------------------------------
# use CXX for linking C++ projects, CC for standard C
#---------------------------------------------------------------------------------
i f e q ( $( strip $ ( CPPFILES ) ) , )
#---------------------------------------------------------------------------------
export LD := $( CC)
#---------------------------------------------------------------------------------
e l s e
#---------------------------------------------------------------------------------
export LD := $( CXX)
#---------------------------------------------------------------------------------
e n d i f
#---------------------------------------------------------------------------------
export OFILES_BIN := $( addsuffix .o,$( BINFILES) )
export OFILES_SRC := $( DEFFILES:.def= .o) $( SFILES:.s= .o) $( CFILES:.c= .o) $( CPPFILES:.cpp= .o)
export OFILES := $( OFILES_BIN) $( OFILES_SRC)
export HFILES := $( addsuffix .h,$( subst .,_,$( BINFILES) ) )
2019-04-23 20:37:17 +10:00
export STUB_LIBS := $( addprefix lib/stubs/lib,$( DEFFILES:.def= .a) ) lib/stubs/libnn_swkbd.a lib/stubs/libwhb.a lib/stubs/libgfd.a
2019-01-23 19:30:07 +01:00
export INCLUDE := $( foreach dir,$( INCLUDES) ,-I$( CURDIR) /$( dir) ) \
$( foreach dir,$( LIBDIRS) ,-I$( dir) /include) \
-I.
.PHONY : all dist -bin dist -src dist install clean
#---------------------------------------------------------------------------------
2019-04-23 20:37:17 +10:00
all : lib /libwut .a lib /libwutd .a $( STUB_LIBS )
2019-01-23 19:30:07 +01:00
dist-bin : all
@tar --exclude= *~ -cjf wut-$( VERSION) .tar.bz2 include lib share -C libraries/libwhb include -C ../libgfd include
dist-src :
@tar --exclude= *~ -cjf wut-src-$( VERSION) .tar.bz2 cafe include libraries share Makefile
dist : dist -src dist -bin
install : dist -bin
mkdir -p $( DESTDIR) $( DEVKITPRO) /wut
bzip2 -cd wut-$( VERSION) .tar.bz2 | tar -xf - -C $( DESTDIR) $( DEVKITPRO) /wut
lib :
@[ -d $@ ] || mkdir -p $@
2019-04-23 20:37:17 +10:00
lib/stubs :
@[ -d $@ ] || mkdir -p $@
2019-01-23 19:30:07 +01:00
release :
@[ -d $@ ] || mkdir -p $@
debug :
@[ -d $@ ] || mkdir -p $@
2019-04-23 19:50:04 +10:00
lib/libwut.a : $( SOURCES ) $( INCLUDES ) | lib release
2019-01-23 19:30:07 +01:00
@$( MAKE) BUILD = release OUTPUT = $( CURDIR) /$@ \
BUILD_CFLAGS = "-DNDEBUG=1 -O2" \
DEPSDIR = $( CURDIR) /release \
--no-print-directory -C release \
-f $( CURDIR) /Makefile
2019-04-23 19:50:04 +10:00
lib/libwutd.a : $( SOURCES ) $( INCLUDES ) | lib debug
2019-01-23 19:30:07 +01:00
@$( MAKE) BUILD = debug OUTPUT = $( CURDIR) /$@ \
BUILD_CFLAGS = "-DDEBUG=1 -Og" \
DEPSDIR = $( CURDIR) /debug \
--no-print-directory -C debug \
-f $( CURDIR) /Makefile
2019-04-23 20:37:17 +10:00
# temp: Deprecation stub for directly linking cafe libs (all in libwut)
lib/stubs/lib%.a : | lib /stubs release
@echo stub $( notdir $* )
@echo " static const char w[] __attribute__((section(\".gnu.warning\"))) = \"Deprecation: Linking to Cafe libraries (-l $* ) is no longer needed, and will be removed in future. Please update your build.\"; " > release/$* .stub.c
@$( CC) $( MACHDEP) -Wno-unused-variable -c release/$* .stub.c -o release/$* .stub.o $( ERROR_FILTER)
@$( AR) -rc $@ release/$* .stub.o
2019-01-23 19:30:07 +01:00
#---------------------------------------------------------------------------------
clean :
@echo clean ...
@rm -rf release debug lib
#---------------------------------------------------------------------------------
e l s e
DEPENDS := $( OFILES:.o= .d)
#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
$(OUTPUT) : $( OFILES )
$(OFILES_SRC) : $( HFILES )
#---------------------------------------------------------------------------------
%_bin.h %.bin.o : %.bin
#---------------------------------------------------------------------------------
@echo $( notdir $<)
@$( bin2o)
- i n c l u d e $( DEPENDS )
#---------------------------------------------------------------------------------------
e n d i f
#---------------------------------------------------------------------------------------