mirror of
https://github.com/libretro/RetroArch
synced 2025-02-28 03:39:59 +00:00
(WiiU) rpx update:
- c++ static constructors/destructors fix for rpx builds. - building both rpx and hbl elf formats doesn't require a clean step inbetween anymore, both can be now built in a single make call.
This commit is contained in:
parent
eedbea4527
commit
ea248559e0
@ -1,5 +1,6 @@
|
||||
TARGET := retroarch_wiiu
|
||||
RPX_BUILD = 0
|
||||
BUILD_HBL_ELF = 1
|
||||
BUILD_RPX = 1
|
||||
DEBUG = 0
|
||||
GRIFFIN_BUILD = 0
|
||||
WHOLE_ARCHIVE_LINK = 0
|
||||
@ -14,13 +15,6 @@ OBJ += wiiu/fs/sd_fat_devoptab.o
|
||||
OBJ += wiiu/fs/fs_utils.o
|
||||
OBJ += wiiu/tex_shader.o
|
||||
|
||||
ifeq ($(RPX_BUILD), 1)
|
||||
OBJ += wiiu/system/stubs_rpl.o
|
||||
else
|
||||
OBJ += wiiu/system/dynamic.o
|
||||
OBJ += wiiu/system/stubs_elf.o
|
||||
endif
|
||||
|
||||
DEFINES :=
|
||||
|
||||
ifeq ($(GRIFFIN_BUILD), 1)
|
||||
@ -142,29 +136,33 @@ ifeq ($(WHOLE_ARCHIVE_LINK), 1)
|
||||
endif
|
||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions
|
||||
|
||||
ifeq ($(RPX_BUILD), 1)
|
||||
CFLAGS += -fno-builtin -ffreestanding -DRPX_BUILD
|
||||
LIBDIRS += -L$(WUT_ROOT)/lib -L$(DEVKITPPC)/lib
|
||||
LDFLAGS += -pie -fPIE
|
||||
LDFLAGS += -z common-page-size=64 -z max-page-size=64
|
||||
LDFLAGS += -T $(WUT_ROOT)/rules/rpl.ld
|
||||
# LDFLAGS += -T wiiu/link_rpl.ld
|
||||
LDFLAGS += -nostartfiles
|
||||
|
||||
else
|
||||
LDFLAGS += -T wiiu/link_elf.ld
|
||||
endif
|
||||
|
||||
LDFLAGS += -Wl,--gc-sections
|
||||
|
||||
LIBS := $(WHOLE_START) -lretro_wiiu $(WHOLE_END) -lm
|
||||
|
||||
ifeq ($(RPX_BUILD), 1)
|
||||
all: $(TARGET).elf $(TARGET).rpx
|
||||
else
|
||||
all: $(TARGET).elf
|
||||
|
||||
RPX_OBJ = wiiu/system/stubs_rpl.o
|
||||
HBL_ELF_OBJ = wiiu/system/dynamic.o wiiu/system/stubs_elf.o
|
||||
|
||||
RPX_LDFLAGS := -L$(WUT_ROOT)/lib -L$(DEVKITPPC)/lib
|
||||
RPX_LDFLAGS += -pie -fPIE
|
||||
RPX_LDFLAGS += -z common-page-size=64 -z max-page-size=64
|
||||
RPX_LDFLAGS += -T wiiu/link_rpl.ld
|
||||
RPX_LDFLAGS += -nostartfiles
|
||||
|
||||
HBL_ELF_LDFLAGS := -T wiiu/link_elf.ld
|
||||
|
||||
TARGETS :=
|
||||
ifeq ($(BUILD_RPX), 1)
|
||||
TARGETS += $(TARGET).rpx
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_HBL_ELF), 1)
|
||||
TARGETS += $(TARGET).elf
|
||||
endif
|
||||
|
||||
all: $(TARGETS)
|
||||
|
||||
%.o: %.cpp
|
||||
$(CXX) -c -o $@ $< $(CXXFLAGS) $(INCDIRS)
|
||||
|
||||
@ -180,15 +178,21 @@ endif
|
||||
%.a:
|
||||
$(AR) -rc $@ $^
|
||||
|
||||
$(TARGET).elf: $(OBJ) libretro_wiiu.a wiiu/link_elf.ld wiiu/link_rpl.ld
|
||||
$(LD) $(OBJ) $(LDFLAGS) $(LIBDIRS) $(LIBS) -o $@
|
||||
$(TARGET).elf: $(OBJ) $(HBL_ELF_OBJ) libretro_wiiu.a wiiu/link_elf.ld
|
||||
$(LD) $(OBJ) $(HBL_ELF_OBJ) $(LDFLAGS) $(HBL_ELF_LDFLAGS) $(LIBDIRS) $(LIBS) -o $@
|
||||
|
||||
%.rpx: %.elf
|
||||
$(TARGET).rpx.elf: $(OBJ) $(RPX_OBJ) libretro_wiiu.a wiiu/link_elf.ld
|
||||
$(LD) $(OBJ) $(RPX_OBJ) $(LDFLAGS) $(RPX_LDFLAGS) $(LIBDIRS) $(LIBS) -o $@
|
||||
|
||||
$(TARGET).rpx: $(TARGET).rpx.elf
|
||||
$(ELF2RPL) $(notdir $<) $@
|
||||
|
||||
clean:
|
||||
rm -f $(OBJ)
|
||||
rm -f $(RPX_OBJ)
|
||||
rm -f $(HBL_ELF_OBJ)
|
||||
rm -f $(TARGET).elf
|
||||
rm -f $(TARGET).rpx.elf
|
||||
rm -f $(TARGET).rpx
|
||||
|
||||
.PHONY: clean all
|
||||
|
@ -273,6 +273,8 @@ int main(int argc, char **argv)
|
||||
DEBUG_STR(argv[0]);
|
||||
DEBUG_STR(argv[1]);
|
||||
fflush(stdout);
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
int argc_ = 2;
|
||||
// char* argv_[] = {WIIU_SD_PATH "retroarch/retroarch.elf", WIIU_SD_PATH "rom.nes", NULL};
|
||||
@ -296,6 +298,7 @@ int main(int argc, char **argv)
|
||||
}while(1);
|
||||
|
||||
main_exit(NULL);
|
||||
#endif
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
ProcUIShutdown();
|
||||
@ -316,8 +319,26 @@ void __eabi()
|
||||
|
||||
}
|
||||
|
||||
void __init();
|
||||
void __fini();
|
||||
__attribute__((weak))
|
||||
void __init(void)
|
||||
{
|
||||
extern void(*__CTOR_LIST__[])(void);
|
||||
void(**ctor)(void) = __CTOR_LIST__;
|
||||
while(*ctor)
|
||||
(*ctor++)();
|
||||
}
|
||||
|
||||
|
||||
__attribute__((weak))
|
||||
void __fini(void)
|
||||
{
|
||||
extern void(*__DTOR_LIST__[])(void);
|
||||
void(**ctor)(void) = __DTOR_LIST__;
|
||||
while(*ctor)
|
||||
(*ctor++)();
|
||||
}
|
||||
|
||||
/* HBL elf entry point */
|
||||
int __entry_menu(int argc, char **argv)
|
||||
{
|
||||
InitFunctionPointers();
|
||||
@ -333,15 +354,16 @@ int __entry_menu(int argc, char **argv)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* RPX entry point */
|
||||
__attribute__((noreturn))
|
||||
void _start(int argc, char **argv)
|
||||
{
|
||||
memoryInitialize();
|
||||
mount_sd_fat("sd");
|
||||
|
||||
// __init();
|
||||
__init();
|
||||
int ret = main(argc, argv);
|
||||
// __fini();
|
||||
__fini();
|
||||
|
||||
unmount_sd_fat("sd");
|
||||
memoryRelease();
|
||||
|
@ -112,18 +112,22 @@ SECTIONS {
|
||||
|
||||
.ctors ALIGN(256) :
|
||||
{
|
||||
__CTOR_LIST__ = .;
|
||||
KEEP (*crtbegin.o(.ctors)) /* MUST be first -- GCC requires it */
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
__CTOR_END__ = .;
|
||||
} : hdr_data
|
||||
|
||||
.dtors ALIGN(256) :
|
||||
{
|
||||
__DTOR_LIST__ = .;
|
||||
KEEP (*crtbegin.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
__DTOR_END__ = .;
|
||||
} : hdr_data
|
||||
|
||||
__bss_start__ = .;
|
||||
|
Loading…
x
Reference in New Issue
Block a user