From 0c10bcc1adf1ee71dd6150d170dee43561f490c2 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Sun, 12 Sep 2021 20:59:09 +1000 Subject: [PATCH] Split WUPS 0.1 and Aroma port out --- .gitignore | 1 + Dockerfile | 10 +- Dockerfile.wups01 | 9 ++ Inkay-pretendo.mod | Bin 174168 -> 175384 bytes Inkay-pretendo.wps | Bin 0 -> 52565 bytes Makefile | 354 ++++++++++++--------------------------------- Makefile.wups01 | 302 ++++++++++++++++++++++++++++++++++++++ src/main.cpp | 112 +++++++++++--- src/utils/logger.h | 37 +++++ 9 files changed, 543 insertions(+), 282 deletions(-) create mode 100644 Dockerfile.wups01 create mode 100644 Inkay-pretendo.wps create mode 100644 Makefile.wups01 create mode 100644 src/utils/logger.h diff --git a/.gitignore b/.gitignore index 796b96d..72edad6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /build +*.elf diff --git a/Dockerfile b/Dockerfile index 1af671a..5178ba8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,7 @@ -# image 2c1762987ca7, wut 7495a99 -FROM wiiuwut/core:latest +FROM wiiuenv/devkitppc:20210414 -# image 2644eca7f89d, Maschell/WiiUPluginSystem e9ea643, last known 0.1 build -COPY --from=wups/core:latest /opt/devkitpro/wups /opt/devkitpro/wups -COPY --from=wiiuwut/libutils:0.1 /artifacts $WUT_ROOT +COPY --from=wiiuenv/libkernel:20210407 /artifacts $DEVKITPRO +COPY --from=wiiuenv/wiiupluginsystem:20210417 /artifacts $DEVKITPRO WORKDIR /app -CMD make -j$(nproc) +CMD make -f Makefile -j$(nproc) diff --git a/Dockerfile.wups01 b/Dockerfile.wups01 new file mode 100644 index 0000000..9b41d18 --- /dev/null +++ b/Dockerfile.wups01 @@ -0,0 +1,9 @@ +# image 2c1762987ca7, wut 7495a99 +FROM wiiuwut/core:latest + +# image 2644eca7f89d, Maschell/WiiUPluginSystem e9ea643, last known 0.1 build +COPY --from=wups/core:latest /opt/devkitpro/wups /opt/devkitpro/wups +COPY --from=wiiuwut/libutils:0.1 /artifacts $WUT_ROOT + +WORKDIR /app +CMD make -f Makefile.wups01 -j$(nproc) diff --git a/Inkay-pretendo.mod b/Inkay-pretendo.mod index 0c1a1f5db558a2a7112beb266011051a9d8fc7b3..4e0698104955bb15d3bb15a3582af16e0d64a869 100755 GIT binary patch delta 34716 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 K?F5RW)c*!J?{{PX diff --git a/Inkay-pretendo.wps b/Inkay-pretendo.wps new file mode 100644 index 0000000000000000000000000000000000000000..7df43dc30301364f4bb3a0ce99ea1bb3efda30ab GIT binary patch literal 52565 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¨^ju#k^p`Q3M=z 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") -endif +#------------------------------------------------------------------------------- + ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=/devkitpro") endif -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) +TOPDIR ?= $(CURDIR) -PREFIX := powerpc-eabi- +include $(DEVKITPRO)/wups/share/wups_rules -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy - -#--------------------------------------------------------------------------------- +WUT_ROOT := $(DEVKITPRO)/wut +WUMS_ROOT := $(DEVKITPRO)/wums +#------------------------------------------------------------------------------- # 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 -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +#------------------------------------------------------------------------------- +TARGET := Inkay-pretendo +BUILD := build +SOURCES := src src/utils +DATA := data +INCLUDES := src -ifeq ($(notdir $(CURDIR)),$(BUILD)) - include ../makefile.mk -else - include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- # options for code generation -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- +CFLAGS := -g -Wall -O2 -ffunction-sections \ + $(MACHDEP) -# -Os: optimise size -# -Wall: generate lots of warnings -# -D__wiiu__: define the symbol __wiiu__ (used in some headers) -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -nostartfiles: Do not use the standard system startup files when linking -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS := -Os -Wall -mcpu=750 -meabi -mhard-float -D__WIIU__ -nostartfiles -ffunction-sections -fdata-sections -Wl,-q $(COMMON_CFLAGS) +CFLAGS += $(INCLUDE) -D__WIIU__ -D__WUT__ -D__WUPS__ -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS := $(COMMON_CFLAGS) -x c -std=gnu11 $(CFLAGS) +CXXFLAGS := $(CFLAGS) -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS := $(COMMON_CFLAGS) -x c++ -std=gnu++11 $(CXXFLAGS) +ASFLAGS := -g $(ARCH) +LDFLAGS = -g $(ARCH) $(RPXSPECS) -Wl,-Map,$(notdir $*.map) -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ -endif +LDFLAGS += -T$(WUMS_ROOT)/share/libkernel.ld $(WUPSSPECS) -#--------------------------------------------------------------------------------- -# any extra ld flags -#-------------------------------------------------------------------------------- -# --gc-sections: remove unneeded symbols -# -Map: generate a map file -LDFLAGS += -Wl,-Map,$(notdir $@).map,--gc-sections +LIBS := -lwups -lkernel -lwut +#------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level +# containing include and lib +#------------------------------------------------------------------------------- +LIBDIRS := $(PORTLIBS) $(WUMS_ROOT) $(WUPS_ROOT) $(WUT_ROOT) -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS += -# -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += - -NEEDS_WUT := 0 - -ifeq ($(WUT_ENABLE_CPP), 1) - WUT_ENABLE_NEWLIB := 1 - - LDFLAGS += -Wl,-whole-archive,-lwutstdc++,-no-whole-archive - NEEDS_WUT := 1 -endif - -ifeq ($(WUT_ENABLE_NEWLIB), 1) - LDFLAGS += -Wl,-whole-archive,-lwutnewlib,-no-whole-archive - NEEDS_WUT := 1 -endif - -ifeq ($(WUT_DEFAULT_MALLOC), 1) - LDFLAGS += -Wl,-whole-archive,-lwutmalloc,-no-whole-archive - NEEDS_WUT := 1 -endif - -ifeq ($(NEEDS_WUT), 1) - ifeq ($(strip $(WUT_ROOT)),) - $(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) - endif - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- # no real need to edit anything past this point unless you need to add additional # rules for different file extensions -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export REAL_LD := $(CC) -else - export REAL_LD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - +#------------------------------------------------------------------------------- export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install +export TOPDIR := $(CURDIR) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#------------------------------------------------------------------------------- + export LD := $(CC) +#------------------------------------------------------------------------------- +else +#------------------------------------------------------------------------------- + export LD := $(CXX) +#------------------------------------------------------------------------------- +endif +#------------------------------------------------------------------------------- + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SRC) +export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +.PHONY: $(BUILD) clean all + +#------------------------------------------------------------------------------- +all: $(BUILD) -#--------------------------------------------------------------------------------- $(BUILD): @[ -d $@ ] || mkdir -p $@ @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- + +#------------------------------------------------------------------------------- clean: @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).mod $(OUTPUT) + @rm -fr $(BUILD) $(TARGET).wps $(TARGET).elf -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- else +.PHONY: all DEPENDS := $(OFILES:.o=.d) -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) +#------------------------------------------------------------------------------- +# main targets +#------------------------------------------------------------------------------- +all : $(OUTPUT).wps -############################################################################### -# Rule to make everything. -PHONY += all +$(OUTPUT).wps : $(OUTPUT).elf +$(OUTPUT).elf : $(OFILES) -all : $(OUTPUT) -############################################################################### -# Special build rules +$(OFILES_SRC) : $(HFILES_BIN) - -# Rule to make the module file. -$(OUTPUT) : $(OFILES) - @echo "linking ... " $@ - @$(REAL_LD) $(OFILES) $(LDFLAGS) $(LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp +#------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#------------------------------------------------------------------------------- +%.bin.o %_bin.h : %.bin +#------------------------------------------------------------------------------- @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) + @$(bin2o) -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - -include $(DEPENDS) -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- endif -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- diff --git a/Makefile.wups01 b/Makefile.wups01 new file mode 100644 index 0000000..ef6d369 --- /dev/null +++ b/Makefile.wups01 @@ -0,0 +1,302 @@ +# You probably never need to adjust this Makefile. +# All changes can be done in the makefile.mk + +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") +endif + +export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) +export PORTLIBS := $(DEVKITPRO)/portlibs/ppc +export WUPSDIR := $(DEVKITPRO)/wups +export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) + +PREFIX := powerpc-eabi- + +export AS := $(PREFIX)as +export CC := $(PREFIX)gcc +export CXX := $(PREFIX)g++ +export LD := $(PREFIX)ld +export AR := $(PREFIX)ar +export OBJCOPY := $(PREFIX)objcopy + +#--------------------------------------------------------------------------------- +# 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 +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build + +ifeq ($(notdir $(CURDIR)),$(BUILD)) + include ../makefile.mk +else + include makefile.mk +endif + +include $(WUPSDIR)/plugin_makefile.mk + + +#MAP ?= $(TARGET:.mod=.map) + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +# -Os: optimise size +# -Wall: generate lots of warnings +# -D__wiiu__: define the symbol __wiiu__ (used in some headers) +# -mcpu=750: enable processor specific compilation +# -meabi: enable eabi specific compilation +# -mhard-float: enable hardware floating point instructions +# -nostartfiles: Do not use the standard system startup files when linking +# -ffunction-sections: split up functions so linker can garbage collect +# -fdata-sections: split up data so linker can garbage collect +COMMON_CFLAGS := -Os -Wall -mcpu=750 -meabi -mhard-float -D__WIIU__ -nostartfiles -ffunction-sections -fdata-sections -Wl,-q $(COMMON_CFLAGS) + +COMMON_CFLAGS += -DOLD_WUPS=1 + +# -x c: compile as c code +# -std=c11: use the c11 standard +CFLAGS := $(COMMON_CFLAGS) -x c -std=gnu11 $(CFLAGS) + +# -x c: compile as c++ code +# -std=gnu++11: use the c++11 standard +CXXFLAGS := $(COMMON_CFLAGS) -x c++ -std=gnu++11 $(CXXFLAGS) + +ifeq ($(DO_LOGGING), 1) + CFLAGS += -D__LOGGING__ + CXXFLAGS += -D__LOGGING__ +endif + +#--------------------------------------------------------------------------------- +# any extra ld flags +#-------------------------------------------------------------------------------- +# --gc-sections: remove unneeded symbols +# -Map: generate a map file +LDFLAGS += -Wl,-Map,$(notdir $@).map,--gc-sections + + +#--------------------------------------------------------------------------------- +Q := @ +MAKEFLAGS += --no-print-directory +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS += +# +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS += + +NEEDS_WUT := 0 + +ifeq ($(WUT_ENABLE_CPP), 1) + WUT_ENABLE_NEWLIB := 1 + + LDFLAGS += -Wl,-whole-archive,-lwutstdc++,-no-whole-archive + NEEDS_WUT := 1 +endif + +ifeq ($(WUT_ENABLE_NEWLIB), 1) + LDFLAGS += -Wl,-whole-archive,-lwutnewlib,-no-whole-archive + NEEDS_WUT := 1 +endif + +ifeq ($(WUT_DEFAULT_MALLOC), 1) + LDFLAGS += -Wl,-whole-archive,-lwutmalloc,-no-whole-archive + NEEDS_WUT := 1 +endif + +ifeq ($(NEEDS_WUT), 1) + ifeq ($(strip $(WUT_ROOT)),) + $(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) + endif + CFLAGS += -D__WUT__ + CXXFLAGS += -D__WUT__ +endif + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- +export PROJECTDIR := $(CURDIR) +export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) +TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) +PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export REAL_LD := $(CC) +else + export REAL_LD := $(CXX) +endif + +export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) \ + $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + $(EXTERNAL_INCLUDE) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + $(EXTERNAL_LIBPATHS) + + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean install + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile.wups01 + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).mod $(OUTPUT) + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) + +############################################################################### +# Rule to make everything. +PHONY += all + +all : $(OUTPUT) +############################################################################### +# Special build rules + + +# Rule to make the module file. +$(OUTPUT) : $(OFILES) + @echo "linking ... " $@ + @$(REAL_LD) $(OFILES) $(LDFLAGS) $(LIBS) $(LIBPATHS_FULL) -o $@ + +############################################################################### +# Standard build rules +#--------------------------------------------------------------------------------- +%.a: +#--------------------------------------------------------------------------------- + @echo $(notdir $@) + @rm -f $@ + @$(AR) -rc $@ $^ + +#--------------------------------------------------------------------------------- +%.o: %.cpp + @echo $(notdir $<) + @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) + +#--------------------------------------------------------------------------------- +%.o: %.c + @echo $(notdir $<) + @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) + +#--------------------------------------------------------------------------------- +%.o: %.S + @echo $(notdir $<) + @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) + +#--------------------------------------------------------------------------------- +%.png.o : %.png + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.ttf.o : %.ttf + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.bin.o : %.bin + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.wav.o : %.wav + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.mp3.o : %.mp3 + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.ogg.o : %.ogg + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +############################################################################### +# Assembly listing rules + +# Rule to make assembly listing. +PHONY += list +list : $(LIST) + +# Rule to make the listing file. +%.list : $(TARGET) + $(LOG) + -$Qmkdir -p $(dir $@) + $Q$(OBJDUMP) -d $< > $@ + +############################################################################### +# Clean rule + +# Rule to clean files. +PHONY += clean +clean : + $Qrm -rf $(wildcard $(BUILD) $(BIN)) + +############################################################################### +# Phony targets + +.PHONY : $(PHONY) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/src/main.cpp b/src/main.cpp index 315eefc..c3abf19 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,10 +9,14 @@ #include #include +#include #include -#include #include +#include #include +#include +#include +#include #include /** @@ -25,17 +29,78 @@ WUPS_PLUGIN_VERSION("v0.1"); WUPS_PLUGIN_AUTHOR("Pretendo contributors"); WUPS_PLUGIN_LICENSE("ISC"); +#ifdef OLD_WUPS WUPS_ALLOW_KERNEL(); +void KernelCopyData(uint32_t addr, uint32_t src, uint32_t len) { + void* bouncebuf = malloc(len); + memcpy(bouncebuf, (void*)src, len); + WUPS_KernelCopyDataFunction(addr, (uint32_t)bouncebuf, len); + DCInvalidateRange((void*)addr, len); //ask me how I know + free(bouncebuf); +} +#warning OLD +#else +#include +#endif -char original_url[] = "discovery.olv.nintendo.net/v1/endpoint"; -char new_url[] = "discovery.olv.pretendo.cc/v1/endpoint"; +//#ifdef OLD_WUPS +extern "C" { +OSDynLoad_Error +OSDynLoad_IsModuleLoaded(char const *name, + OSDynLoad_Module *outModule); +} +//#endif + +const char original_url[] = "discovery.olv.nintendo.net/v1/endpoint"; +const char new_url[] = "discovery.olv.pretendo.cc/v1/endpoint"; _Static_assert(sizeof(original_url) > sizeof(new_url), "new_url too long! Must be less than 38chars."); // We'll keep a handle to nn_olv, just to ensure it doesn't get unloaded static OSDynLoad_Module olv_handle; -ON_APPLICATION_START(args){ +#ifndef OLD_WUPS +INITIALIZE_PLUGIN() { + WHBLogUdpInit(); +} +DEINITIALIZE_PLUGIN() { + WHBLogUdpDeinit(); +} +#endif + +bool checkForOlvLibs() { + OSDynLoad_Module olv_handle = 0; + OSDynLoad_Error dret; + + dret = OSDynLoad_IsModuleLoaded("nn_olv", &olv_handle); + if (dret == OS_DYNLOAD_OK && olv_handle != 0) { + return true; + } + + dret = OSDynLoad_IsModuleLoaded("nn_olv2", &olv_handle); + if (dret == OS_DYNLOAD_OK && olv_handle != 0) { + return true; + } + + return false; +} + +bool replace(uint32_t start, uint32_t size, const char* original_val, size_t original_val_sz, const char* new_val, size_t new_val_sz) { + for (uint32_t addr = start; addr < start + size - original_val_sz; addr++) { + int ret = memcmp(original_val, (void*)addr, original_val_sz); + if (ret == 0) { + DEBUG_FUNCTION_LINE("found str @%08x: %s", addr, (const char*)addr); + KernelCopyData(OSEffectiveToPhysical(addr), OSEffectiveToPhysical((uint32_t)new_val), new_val_sz); + DEBUG_FUNCTION_LINE("new str @%08x: %s", addr, (const char*)addr); + return true; + } + } + + return false; +} + +#ifdef OLD_WUPS +ON_APPLICATION_START(args) { socket_lib_init(); log_init(); @@ -43,27 +108,38 @@ ON_APPLICATION_START(args){ DEBUG_FUNCTION_LINE("Inkay: No kernel access!\n"); return; } +#else +ON_APPLICATION_START() { + WHBLogUdpInit(); +#endif + + DEBUG_FUNCTION_LINE("Inkay: hewwo!\n"); + + auto olvLoaded = checkForOlvLibs(); + + if (!olvLoaded) { + DEBUG_FUNCTION_LINE("Inkay: no olv, quitting for now\n"); + return; + } OSDynLoad_Acquire("nn_olv", &olv_handle); + DEBUG_FUNCTION_LINE("Inkay: olv! %08x\n", olv_handle); //wish there was a better way than "blow through MEM2" - //TODO use OSGetMemBounds or w/e - for (uint32_t addr = 0x10000000; addr < 0x20000000; addr += 4) { - int ret = memcmp(original_url, (void*)addr, sizeof(original_url)); - if (ret == 0) { - DEBUG_FUNCTION_LINE("Found string at %08X\n", addr); - DEBUG_FUNCTION_LINE("string: %s\n", (char*)addr); - for (uint j = 0; j < sizeof(new_url); j += 4) { - uint32_t val = *(uint32_t*)(new_url + j); - WUPS_KernelWrite((void*)(addr + j), val); - } - DEBUG_FUNCTION_LINE("string: %s\n", (char*)addr); - return; - } + uint32_t base_addr, size; + if(OSGetMemBound(OS_MEM2, &base_addr, &size)) { + DEBUG_FUNCTION_LINE("Inkay: OSGetMemBound failed!"); + return; } + + replace(base_addr, size, original_url, sizeof(original_url), new_url, sizeof(new_url)); } -ON_APPLICATION_ENDING(){ +#ifdef OLD_WUPS +ON_APPLICATION_ENDING() { +#else +ON_APPLICATION_ENDS() { +#endif DEBUG_FUNCTION_LINE("Inkay: shutting down...\n"); OSDynLoad_Release(olv_handle); } diff --git a/src/utils/logger.h b/src/utils/logger.h new file mode 100644 index 0000000..47855f8 --- /dev/null +++ b/src/utils/logger.h @@ -0,0 +1,37 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OLD_WUPS + +#include +#include_next + +#else //if !OLD_WUPS + +#include +#include +#include + +#define __FILENAME_X__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) +#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILENAME_X__) + +#define OSFATAL_FUNCTION_LINE(FMT, ARGS...)do { \ + OSFatal_printf("[%s]%s@L%04d: " FMT "",__FILENAME__,__FUNCTION__, __LINE__, ## ARGS); \ + } while (0) + +#define DEBUG_FUNCTION_LINE(FMT, ARGS...)do { \ + WHBLogPrintf("[%23s]%30s@L%04d: " FMT "",__FILENAME__,__FUNCTION__, __LINE__, ## ARGS); \ + } while (0); + +#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...)do { \ + WHBLogWritef("[%23s]%30s@L%04d: " FMT "",__FILENAME__,__FUNCTION__, __LINE__, ## ARGS); \ + } while (0); + +#endif //!OLD_WUPS + +#ifdef __cplusplus +} +#endif