Files
RetroArch/Makefile.wii
T
LibretroAdmin bc8ff41a38 Wii: app_booter moves to os/gekko/rvl
The loader stub the libogc builds embed to hand the console to the next
program lives under os/gekko/rvl with the rest of the Wii's own code;
its binary object's symbols are named after the new path.
2026-10-29 18:33:29 +01:00

354 lines
8.8 KiB
Makefile

ROOT_DIR := .
DEPS_DIR := $(ROOT_DIR)/deps
DEBUG ?= 0
LOAD_WITHOUT_CORE_INFO ?= 0
HAVE_LOGGER = 0
HAVE_FILE_LOGGER = 0
HAVE_CC_RESAMPLER = 1
WHOLE_ARCHIVE_LINK = 0
BIG_STACK = 1
HAVE_NETWORKING = 1
HAVE_IFINFO = 1
PC_DEVELOPMENT_IP_ADDRESS = 255.255.255.255
PC_DEVELOPMENT_UDP_PORT = 3490
RARCH_CONSOLE = 0
USBGECKO = 0
HAVE_STATIC_DUMMY ?= 0
SPACE :=
SPACE := $(SPACE) $(SPACE)
BACKSLASH :=
BACKSLASH := \$(BACKSLASH)
filter_out1 = $(filter-out $(firstword $1),$1)
filter_out2 = $(call filter_out1,$(call filter_out1,$1))
# system platform
system_platform = unix
ifeq ($(shell uname -s),)
EXE_EXT = .exe
system_platform = win
else ifneq ($(findstring Darwin,$(shell uname -s)),)
system_platform = osx
else ifneq ($(findstring MINGW,$(shell uname -s)),)
system_platform = win
endif
TARGET_NAME := retroarch
INCLUDE :=
LDFLAGS :=
LIBDIRS :=
ifeq ($(LIBRETRO), nxengine)
WHOLE_ARCHIVE_LINK = 1
endif
ifeq ($(WHOLE_ARCHIVE_LINK), 1)
WHOLE_START := -Wl,--whole-archive
WHOLE_END := -Wl,--no-whole-archive
endif
LIB_CORE :=
ifeq ($(HAVE_STATIC_DUMMY),1)
DEFINES += -DHAVE_STATIC_DUMMY
else
LIB_CORE += -lretro_wii
endif
LIBS := $(WHOLE_START) $(LIB_CORE) $(WHOLE_END)
# RetroArch's own system layer, os/gekko; HAVE_LIBOGC=1 builds on
# devkitPro's libogc instead. EXTERNAL_LIBOGC=1, which the core CI
# templates pass when they relink the precompiled HAVE_LIBOGC=1 tree,
# names devkitPro's libogc too and selects the same build.
ifeq ($(EXTERNAL_LIBOGC), 1)
HAVE_LIBOGC ?= 1
endif
HAVE_LIBOGC ?= 0
ifeq ($(HAVE_LIBOGC), 1)
libogc_platform := 1
endif
HAVE_OGG_OGC ?= 0
CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT)
LD = $(DEVKITPPC)/bin/powerpc-eabi-ld$(EXE_EXT)
ELF2DOL = $(DEVKITPPC)/bin/elf2dol$(EXE_EXT)
EXT_TARGET := $(TARGET_NAME)_wii.dol
EXT_INTER_TARGET := $(TARGET_NAME)_wii.elf
# Check whether ELF2DOL executable exists
# (path has changed in more recent toolchains)
ifeq ("$(wildcard $(ELF2DOL))","")
ELF2DOL = $(DEVKITPRO)/tools/bin/elf2dol$(EXE_EXT)
endif
INCLUDE += -I.
ifeq ($(HAVE_LIBOGC), 0)
CFLAGS += -DGEKKO_NATIVE
CXXFLAGS += -DGEKKO_NATIVE
INCLUDE += -Ios/gekko/include
else
CFLAGS += -DHAVE_LIBOGC
CXXFLAGS += -DHAVE_LIBOGC
LIBDIRS += -L$(DEVKITPRO)/libogc/lib/wii
INCLUDE += -I$(DEVKITPRO)/libogc/include
endif
MACHDEP := -DHW_RVL -mrvl
LIBDIRS += -L.
MACHDEP += -DGEKKO -mcpu=750 -meabi -mhard-float
# libogc 3 links with devkitPPC's own scripts and sizes the main stack
# in C (platform_gx_libogc.c); older libogc takes the bootstrap/gx ones.
LIBOGC_MAJOR := $(shell sed -n 's/^.define[[:space:]]*_V_MAJOR_[[:space:]]*\([0-9]*\).*/\1/p' $(DEVKITPRO)/libogc/include/ogc/libversion.h 2>/dev/null)
ifneq ($(filter-out 0 1 2,$(LIBOGC_MAJOR)),)
LIBOGC_OWN_LD := 1
endif
ifeq ($(HAVE_LIBOGC), 1)
LDFLAGS += $(MACHDEP) -Wl,-Map,$(notdir $(EXT_INTER_TARGET)).map,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,strdup,-wrap,strndup,-wrap,malloc_usable_size
ifeq ($(BIG_STACK)$(LIBOGC_OWN_LD), 1)
LDFLAGS += -T bootstrap/gx/rvl.ld
endif
else
# os/gekko's heap runs from MEM1 into MEM2 by itself.
LDFLAGS += $(MACHDEP) -Wl,-Map,$(notdir $(EXT_INTER_TARGET)).map \
-T os/gekko/boot/rvl.ld -Los/gekko/boot
endif
ifeq ($(HAVE_OGG_OGC), 1)
LIBS += -L$(DEVKITPRO)/portlibs/ppc/lib -lvorbisfile -lvorbis -logg
endif
ifeq ($(HAVE_LIBOGC), 1)
LIBS += -lfat -lwiiuse -lbte
ifeq ($(USBGECKO), 1)
LIBS += -ldb
endif
LIBS += -logc
endif
CFLAGS += -DGEKKO -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int
HAVE_RUNAHEAD := 1
HAVE_DSP_FILTER := 1
HAVE_VIDEO_FILTER := 1
HAVE_FILTERS_BUILTIN := 1
HAVE_THREADS := 1
HAVE_RPNG := 1
HAVE_RWEBP := 1
HAVE_RDDS := 1
HAVE_RJPEG := 1
HAVE_RBMP := 1
HAVE_RTGA := 1
HAVE_RMODTRACKER := 1
HAVE_OVERLAY := 1
HAVE_7ZIP := 1
HAVE_RZSTD := 1
HAVE_CONFIGFILE := 1
HAVE_PATCH := 1
HAVE_XDELTA := 0 # disabled because <lzma.h> isn't available (or we haven't figured out how to install it)
HAVE_CHEATS := 1
HAVE_SCREENSHOTS := 1
HAVE_REWIND := 1
HAVE_AUDIOMIXER := 1
HAVE_RWAV := 1
RARCH_CONSOLE = 1
HAVE_CHEATS := 1
HAVE_CORE_INFO_CACHE := 1
HAVE_MENU_COMMON := 1
HAVE_MENU := 1
HAVE_STATIC_AUDIO_FILTERS := 1
HAVE_STATIC_VIDEO_FILTERS := 1
#HAVE_LANGEXTRA := 1
HAVE_RSOUND := 0
HAVE_XMB := 0
HAVE_OZONE := 0
HAVE_RGUI := 1
HAVE_MATERIALUI := 0
ifeq ($(HAVE_LIBOGC), 1)
HAVE_WIIUSB_HID := 1
HAVE_HID := 1
HAVE_RARCH_EXEC := 1
HAVE_CHEEVOS := 1
CFLAGS += -DHAVE_SOCKET_LEGACY -DHAVE_CHEEVOS
APP_BOOTER_DIR = os/gekko/rvl/app_booter
PLATOBJS := $(APP_BOOTER_DIR)/app_booter.binobj
else
HAVE_WIIUSB_HID := 0
HAVE_HID := 1
HAVE_RARCH_EXEC := 0
HAVE_CHEEVOS := 1
CFLAGS += -DHAVE_SOCKET_LEGACY -DHAVE_CHEEVOS
PLATOBJS :=
endif
ifeq ($(USBGECKO), 1)
CFLAGS += -DUSBGECKO
endif
INCLUDE += -I./libretro-common/include \
-Ideps \
-Ideps/rcheevos/include
CFLAGS += -Wall -std=gnu99 $(MACHDEP) $(PLATCFLAGS) $(INCLUDE)
ifeq ($(HAVE_LIBOGC), 1)
OBJ = $(PLATOBJS) audio/drivers/gx_audio_libogc.o gfx/drivers/gx_gfx_libogc.o gfx/display_servers/dispserv_gx_libogc.o gfx/display_servers/dispserv_gx_modes.o input/drivers/gx_input.o frontend/drivers/platform_gx_libogc.o input/drivers_joypad/gx_joypad_libogc.o libretro-common/memory/mem2_manager_libogc.o gfx/drivers/gx_gfx_vi_encoder_libogc.o frontend/drivers/platform_wii_libogc.o input/drivers_hid/wiiusb_hid_libogc.o
else
GEKKO_DIR := os/gekko
GEKKO_PLATFORM := rvl
include os/gekko/gekko.mk
OBJ = audio/drivers/gekko_audio.o gfx/drivers/gekko_gfx.o gfx/display_servers/dispserv_gekko.o gfx/display_servers/dispserv_gx_modes.o input/drivers/gx_input.o frontend/drivers/platform_gekko.o input/drivers_joypad/gekko_joypad.o $(addsuffix .o,$(basename $(GEKKO_SOURCES)))
ifeq ($(HAVE_HID), 1)
OBJ += input/drivers_hid/gekko_hid.o
CFLAGS += -DHAVE_GEKKO_HID
endif
endif
# Logs as UDP datagrams to PC_DEVELOPMENT_IP_ADDRESS:PC_DEVELOPMENT_UDP_PORT.
ifeq ($(HAVE_LOGGER), 1)
HAVE_NETLOGGER = 1
endif
include Makefile.common
CFLAGS += $(DEFINES) -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" \
-DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT) \
ifeq ($(HAVE_KERNEL_PRX), 1)
CFLAGS += -DHAVE_KERNEL_PRX
endif
ifeq ($(HAVE_WIIUSB_HID), 1)
CFLAGS += -DHAVE_WIIUSB_HID
endif
ifeq ($(BIG_STACK),1)
CFLAGS += -DBIG_STACK
endif
ifeq ($(HAVE_FILE_LOGGER), 1)
CFLAGS += -DHAVE_FILE_LOGGER
endif
ifeq ($(HAVE_RARCH_EXEC), 1)
CFLAGS += -DHAVE_RARCH_EXEC
endif
ifeq ($(RARCH_CONSOLE), 1)
CFLAGS += -DRARCH_CONSOLE
endif
ifeq ($(RARCH_MOBILE), 1)
CFLAGS += -DRARCH_MOBILE
endif
CFLAGS += -std=gnu99 -DHAVE_RGUI -DHAVE_MENU -DHAVE_GRIFFIN=1 -Wno-char-subscripts -DRARCH_INTERNAL
ifeq ($(HAVE_FILTERS_BUILTIN), 1)
CFLAGS += -DHAVE_FILTERS_BUILTIN
endif
ifeq ($(HAVE_RSOUND), 1)
CFLAGS += -DHAVE_RSOUND
endif
ifeq ($(HAVE_GETOPT_LONG), 1)
CFLAGS += -DHAVE_GETOPT_LONG=1
endif
ifeq ($(HAVE_NETWORK_CMD), 1)
CFLAGS += -DHAVE_NETWORK_CMD
endif
ifeq ($(HAVE_THREADS), 1)
CFLAGS += -DHAVE_THREADS
endif
ifeq ($(HAVE_DYNAMIC), 1)
CFLAGS += -DHAVE_DYNAMIC
endif
ifeq ($(DEBUG), 1)
CFLAGS += -O0 -g -DDEBUG
else
CFLAGS += -O3
endif
ifeq ($(LOAD_WITHOUT_CORE_INFO),1)
CFLAGS += -DLOAD_WITHOUT_CORE_INFO
endif
ifneq ($(V),1)
Q := @
endif
OBJOUT = -o
LINKOUT = -o
LINK = $(CXX)
all: $(EXT_TARGET)
define INFO
CC: $(CC)
CFLAGS: $(CFLAGS)
OBJOUT: $(OBJOUT)
endef
export INFO
info:
ifneq ($(V),1)
@echo "$$INFO"
endif
%.dol: %.elf
$(ELF2DOL) $< $@
$(EXT_INTER_TARGET): $(OBJ)
$(LINK) $(LINKOUT)$@ $(LDFLAGS) $(LIBDIRS) $(OBJ) $(PLATEXTRA) $(LIBS)
%.o: %.c
@$(if $(Q), $(shell echo echo CC $<),)
$(Q)$(CC) $(CFLAGS) -c $(OBJOUT)$@ $<
%.o: %.cpp
$(CXX) $(CFLAGS) -c $(OBJOUT)$@ $<
%.o: %.S
@$(if $(Q), $(shell echo echo CC $<),)
$(Q)$(CC) $(CFLAGS) -c $(OBJOUT)$@ $<
%.binobj: %.bin
$(LD) -r -b binary $(OBJOUT)$@ $<
$(APP_BOOTER_DIR)/app_booter.bin:
$(MAKE) -C $(APP_BOOTER_DIR)
clean:
@$(if $(Q), echo $@,)
$(Q)rm -f $(EXT_TARGET)
$(Q)rm -f $(EXT_INTER_TARGET)
$(Q)rm -f $(OBJ)
ifeq ($(HAVE_LIBOGC), 1)
$(Q)$(MAKE) -C $(APP_BOOTER_DIR) clean
endif
.PHONY: clean
print-%:
@echo '$*=$($*)'