Homebrew RELEASE Development Thread - RetroArch libnx

  • Thread starter m4xw
  • Start date
  • Views 601,384
  • Replies 4,272
  • Likes 69
Status
Not open for further replies.

m4xw

Ancient Deity
OP
Developer
Joined
May 25, 2018
Messages
2,433
Trophies
1
Age
117
XP
6,792
Country
Germany
DISCORD:
RetroNX: https://discord.gg/erNC4FB
libretro: https://discord.gg/9HdWtZ3

At the time of writing, this project is finished and has been released.

Link to the relevant blog post: https://www.libretro.com/index.php/retroarch-1-7-5-introducing-libnx-switch-version/

Download: http://retroarch.com/?page=platforms

Please refer to this Thread for further Discussions https://gbatemp.net/threads/retroarch-switch.492920/

A shoutout to everyone involved in this Project, especially @natinusala and @lifajucejo for their commitment to this Project.

This has been a wild ride, but all good things come to a end.

I will still continue development with libretro/retroarch and I will stay around for the forseeable future!
 
Last edited by m4xw,

Leonidas87

Well-Known Member
Member
Joined
Jul 15, 2014
Messages
652
Trophies
0
Location
Toronto, Ontario
Website
www.youtube.com
XP
939
Country
Canada

CatmanFan

Anxious and regretful
Member
Joined
Aug 14, 2016
Messages
1,952
Trophies
0
Website
www.youtube.com
XP
1,811
Country
Morocco
For whatever reason here is a (kind of) filler post with the code of the current Makefile files in case, so anyone can probably spot mistakes in here:
Code:
#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------

TARGET := retroarch_switch

DEBUG                  ?= 0
WHOLE_ARCHIVE_LINK      = 0
GRIFFIN_BUILD           = 0

OBJ :=

DEFINES := -DSWITCH=1 -U__linux__ -U__linux -DRARCH_INTERNAL

TOPDIR ?= $(CURDIR)
export TOPDIR    := $(CURDIR)
export DEPSDIR    := $(CURDIR)

HAVE_CC_RESAMPLER = 1
HAVE_MENU_COMMON = 1
HAVE_RTGA = 1
HAVE_RPNG = 1
HAVE_RJPEG = 1
HAVE_RBMP = 1
HAVE_RGUI = 1
HAVE_ZLIB = 1
HAVE_BUILTINZLIB = 1
HAVE_LIBRETRODB = 1
HAVE_ZARCH = 0
HAVE_MATERIALUI = 0 # enable later?
HAVE_XMB = 0
HAVE_STATIC_VIDEO_FILTERS = 1
HAVE_STATIC_AUDIO_FILTERS = 1
HAVE_MENU = 1
HAVE_RUNAHEAD = 1

include Makefile.common
BLACKLIST :=
BLACKLIST += input/input_overlay.o
BLACKLIST += tasks/task_overlay.o
OBJ := $(filter-out $(BLACKLIST),$(OBJ))

INCDIRS := -Ideps -Ideps/libz -Ilibretro-common/include -Ideps/stb -I$(DEVKITPRO)/libnx/include/

include $(DEVKITPRO)/libnx/switch_rules

APP_ICON := icon.jpg
APP_VERSION := RetroArch SNES9x libNX
APP_AUTHOR := Maintainer: M4xw, Credit: Reswitched, libretro

ARCH := -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE
LDFLAGS += -g $(ARCH) -specs=$(DEVKITPRO)/libnx/switch.specs
CFLAGS    +=     $(DEFINES) -g \
                -O2 \
                -fomit-frame-pointer \
                -ffunction-sections \
                -fdata-sections
CFLAGS    +=    $(INCLUDE)  -D__SWITCH__=1
CXXFLAGS    := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11
ASFLAGS    := -g $(ARCH)
ARFLAGS := rcs
LIBDIRS    := $(PORTLIBS) $(LIBNX) -L.

TARGETS := $(TARGET).nro.so

CFLAGS += $(INCDIRS)

BUILD_DIR = $(CURDIR)

ifeq ($(strip $(ICON)),)
    icons := $(wildcard *.jpg)
    ifneq (,$(findstring $(TARGET).jpg,$(icons)))
        export APP_ICON := $(TOPDIR)/$(TARGET).jpg
    else
        ifneq (,$(findstring icon.jpg,$(icons)))
            export APP_ICON := $(TOPDIR)/icon.jpg
        endif
    endif
else
    export APP_ICON := $(TOPDIR)/$(ICON)
endif

ifeq ($(strip $(NO_ICON)),)
    export NROFLAGS += --icon=$(APP_ICON)
endif

ifeq ($(strip $(NO_NACP)),)
    export NROFLAGS += --nacp=$(CURDIR)/$(TARGET).nacp
endif

ifneq ($(APP_TITLEID),)
    export NACPFLAGS += --titleid=$(APP_TITLEID)
endif

ifneq ($(ROMFS),)
    export NROFLAGS += --romfsdir=$(CURDIR)/$(ROMFS)
endif

all: $(TARGETS)

%.nro.so: $(OBJ) libretro_switch.a %.nacp
    @[ -d [email protected] ] || mkdir -p [email protected]
    @$(LD) $(LDFLAGS) -T $(DEVKITPRO)/libnx/switch.ld --allow-multiple-definition -o [email protected] $(OBJ) -l$(DEVKITPRO)/libnx/lib/libnx.a libretro_switch.a -lm

clean:
    rm -f $(OBJ) $(TARGET).nro.so $(TARGET).nro

.PHONY: clean all
Code:
#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------

ifeq ($(strip $(DEVKITPRO)),)
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>/devkitpro")
endif

TOPDIR ?= $(CURDIR)
include $(DEVKITPRO)/libnx/switch_rules

TARGET := retroarch_switch

DEBUG                  ?= 0
WHOLE_ARCHIVE_LINK      = 0
GRIFFIN_BUILD           = 0

OBJ :=

DEFINES := -DSWITCH=1 -U__linux__ -U__linux -DRARCH_INTERNAL

HAVE_CC_RESAMPLER = 1
HAVE_MENU_COMMON = 1
HAVE_RTGA = 1
HAVE_RPNG = 1
HAVE_RJPEG = 1
HAVE_RBMP = 1
HAVE_RGUI = 1
HAVE_ZLIB = 1
HAVE_BUILTINZLIB = 1
HAVE_LIBRETRODB = 1
HAVE_ZARCH = 0
HAVE_MATERIALUI = 0 # enable later?
HAVE_XMB = 0
HAVE_STATIC_VIDEO_FILTERS = 1
HAVE_STATIC_AUDIO_FILTERS = 1
HAVE_MENU = 1
HAVE_RUNAHEAD = 1

include Makefile.common
BLACKLIST :=
BLACKLIST += input/input_overlay.o
BLACKLIST += tasks/task_overlay.o

OBJ := $(filter-out $(BLACKLIST),$(OBJ))

#---------------------------------------------------------------------------------
# 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
# EXEFS_SRC is the optional input directory containing data copied into exefs, if anything this normally should only contain "main.npdm".
# ROMFS is the directory containing data to be added to RomFS, relative to the Makefile (Optional)
#
# NO_ICON: if set to anything, do not use icon.
# NO_NACP: if set to anything, no .nacp file is generated.
# APP_TITLE is the name of the app stored in the .nacp file (Optional)
# APP_AUTHOR is the author of the app stored in the .nacp file (Optional)
# APP_VERSION is the version of the app stored in the .nacp file (Optional)
# APP_TITLEID is the titleID of the app stored in the .nacp file (Optional)
# ICON is the filename of the icon (.jpg), relative to the project folder.
#   If not set, it attempts to use one of the following (in this order):
#     - <Project name>.jpg
#     - icon.jpg
#     - <libnx folder>/default_icon.jpg
#---------------------------------------------------------------------------------
BUILD        :=    build
SOURCES        :=    $(CURDIR)/source
DATA        :=    data
INCLUDES    :=    include
EXEFS_SRC    :=    exefs_src
#ROMFS    :=    romfs

APP_ICON := icon.jpg
APP_TITLE := RetroArch SNES9x libNX
APP_VERSION := 0.1
APP_AUTHOR := M4xw, Credit: Reswitched, libretro

#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
ARCH    :=    -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE

CFLAGS    :=    -g -Wall -O2 -ffunction-sections \
            $(ARCH) $(DEFINES) -Ideps -Ideps/libz -Ilibretro-common/include -Ideps/stb -I$(LIBNX)/include

CFLAGS    +=    $(INCLUDE) -D__SWITCH__

CXXFLAGS    := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11

ASFLAGS    :=    -g $(ARCH)
LDFLAGS    =    -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,--allow-multiple-definition -Wl,-Map,$(notdir $*.map)

LIBS    := -lnx -lc -lm -lstdc++

#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS := $(PORTLIBS) $(LIBNX)

#---------------------------------------------------------------------------------
# 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 OUTPUT    :=    $(TARGET)
export TOPDIR    :=    $(CURDIR)

export VPATH    :=    $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
            $(foreach dir,$(DATA),$(CURDIR)/$(dir))

export DEPSDIR    :=    $(CURDIR)/

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     :=    $(OBJ) libretro_switch.a
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)

export BUILD_EXEFS_SRC := $(TOPDIR)/$(EXEFS_SRC)

ifeq ($(strip $(ICON)),)
    icons := $(wildcard *.jpg)
    ifneq (,$(findstring $(TARGET).jpg,$(icons)))
        export APP_ICON := $(TOPDIR)/$(TARGET).jpg
    else
        ifneq (,$(findstring icon.jpg,$(icons)))
            export APP_ICON := $(TOPDIR)/icon.jpg
        endif
    endif
else
    export APP_ICON := $(TOPDIR)/$(ICON)
endif

ifeq ($(strip $(NO_ICON)),)
    export NROFLAGS += --icon=$(APP_ICON)
endif

ifeq ($(strip $(NO_NACP)),)
    export NROFLAGS += --nacp=$(CURDIR)/$(TARGET).nacp
endif

ifneq ($(APP_TITLEID),)
    export NACPFLAGS += --titleid=$(APP_TITLEID)
endif

ifneq ($(ROMFS),)
    export NROFLAGS += --romfsdir=$(CURDIR)/$(ROMFS)
endif

DEPENDS    :=    $(OFILES:.o=.d)

.PHONY: $(BUILD) clean all

#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
all    :    $(OUTPUT).pfs0 $(OUTPUT).nro

$(OUTPUT).pfs0    :    $(OUTPUT).nso

$(OUTPUT).nso    :    $(OUTPUT).elf

ifeq ($(strip $(NO_NACP)),)
$(OUTPUT).nro    :    $(OUTPUT).elf $(OUTPUT).nacp
else
$(OUTPUT).nro    :    $(OUTPUT).elf
endif

$(OUTPUT).elf    :    $(OBJ)

clean:
    rm -f $(OBJ) $(OUTPUT).pfs0 $(OUTPUT).nro $(OUTPUT).elf

#---------------------------------------------------------------------------------
# you need a rule like this for each extension you use as binary data
#---------------------------------------------------------------------------------
%.bin.o    %_bin.h :    %.bin
#---------------------------------------------------------------------------------
    @echo $(notdir $<)
    @$(bin2o)

#---------------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------------
 
Last edited by CatmanFan,

Fadi5555

Well-Known Member
Member
Joined
Jan 3, 2018
Messages
442
Trophies
0
Age
33
XP
1,793
Country
United States
So, over the weekend I've been working to port Retroarch to libnx.
This is WIP, it crashes on every version but 5x after gfx gets initialized.

The one core I've build is the snes9x core (not 2010), it crashes after ROM load too, but I didn't try any other cores.

So if people on 4x could maybe look into the switch_gfx.c and play around and report back, it would help alot.

Audio isn't finished yet either (needs a blocking implemention in _write), joycon work fine.

Some extra functions need clean up, some should be exported to libnx once cleaned up.

Since I am sick and I won't have much time for the rest of the week, anyone who could just try some cores (look at the snes9x repo makefile from my git) and maybe one works, or pin down the gfx Issue, it would help a lot (maybe don't swapbuffers or different gfx init?)

Github Mirror (recommended for forking): https://github.com/m4xw/RetroArch_LibNX https://github.com/m4xw/snes9x_libNX
Private Git Repo (most updated, r/o): https://git.m4xw.net/Switch/RetroArch

Anyone who want write access, write me a PM.

jrjJkeP.jpg


I'm still on 3.0.0 with LibNX support can I try it?
Also please can you compile it for me as a nro extension?
To could give you my report.

I have also two questions please:

1- is it support xmb?
2- can we run games with fullscreen? Because all current emulators lack of that.
 
Last edited by Fadi5555,

CatmanFan

Anxious and regretful
Member
Joined
Aug 14, 2016
Messages
1,952
Trophies
0
Website
www.youtube.com
XP
1,811
Country
Morocco
I'm still on 3.0.0 with LibNX support can I try it?
Also please can you compile it for me as a nro extension?
To could give you my report.

I have also two questions please:

1- is it support xmb?
2- can we run games with fullscreen? Because all current emulators lack of that.
  1. I don't think so. RetroArch on Switch is still at a very early stage of development, which brings us to
  2. Likely not possible AFAIK.
 

m4xw

Ancient Deity
OP
Developer
Joined
May 25, 2018
Messages
2,433
Trophies
1
Age
117
XP
6,792
Country
Germany
For whatever reason here is a (kind of) filler post with the code of the current Makefile files in case, so anyone can probably spot mistakes in here:
Code:
#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------

TARGET := retroarch_switch

DEBUG                  ?= 0
WHOLE_ARCHIVE_LINK      = 0
GRIFFIN_BUILD           = 0

OBJ :=

DEFINES := -DSWITCH=1 -U__linux__ -U__linux -DRARCH_INTERNAL

TOPDIR ?= $(CURDIR)
export TOPDIR    := $(CURDIR)
export DEPSDIR    := $(CURDIR)

HAVE_CC_RESAMPLER = 1
HAVE_MENU_COMMON = 1
HAVE_RTGA = 1
HAVE_RPNG = 1
HAVE_RJPEG = 1
HAVE_RBMP = 1
HAVE_RGUI = 1
HAVE_ZLIB = 1
HAVE_BUILTINZLIB = 1
HAVE_LIBRETRODB = 1
HAVE_ZARCH = 0
HAVE_MATERIALUI = 0 # enable later?
HAVE_XMB = 0
HAVE_STATIC_VIDEO_FILTERS = 1
HAVE_STATIC_AUDIO_FILTERS = 1
HAVE_MENU = 1
HAVE_RUNAHEAD = 1

include Makefile.common
BLACKLIST :=
BLACKLIST += input/input_overlay.o
BLACKLIST += tasks/task_overlay.o
OBJ := $(filter-out $(BLACKLIST),$(OBJ))

INCDIRS := -Ideps -Ideps/libz -Ilibretro-common/include -Ideps/stb -I$(DEVKITPRO)/libnx/include/

include $(DEVKITPRO)/libnx/switch_rules

APP_ICON := icon.jpg
APP_VERSION := RetroArch SNES9x libNX
APP_AUTHOR := Maintainer: M4xw, Credit: Reswitched, libretro

ARCH := -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE
LDFLAGS += -g $(ARCH) -specs=$(DEVKITPRO)/libnx/switch.specs
CFLAGS    +=     $(DEFINES) -g \
                -O2 \
                -fomit-frame-pointer \
                -ffunction-sections \
                -fdata-sections
CFLAGS    +=    $(INCLUDE)  -D__SWITCH__=1
CXXFLAGS    := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11
ASFLAGS    := -g $(ARCH)
ARFLAGS := rcs
LIBDIRS    := $(PORTLIBS) $(LIBNX) -L.

TARGETS := $(TARGET).nro.so

CFLAGS += $(INCDIRS)

BUILD_DIR = $(CURDIR)

ifeq ($(strip $(ICON)),)
    icons := $(wildcard *.jpg)
    ifneq (,$(findstring $(TARGET).jpg,$(icons)))
        export APP_ICON := $(TOPDIR)/$(TARGET).jpg
    else
        ifneq (,$(findstring icon.jpg,$(icons)))
            export APP_ICON := $(TOPDIR)/icon.jpg
        endif
    endif
else
    export APP_ICON := $(TOPDIR)/$(ICON)
endif

ifeq ($(strip $(NO_ICON)),)
    export NROFLAGS += --icon=$(APP_ICON)
endif

ifeq ($(strip $(NO_NACP)),)
    export NROFLAGS += --nacp=$(CURDIR)/$(TARGET).nacp
endif

ifneq ($(APP_TITLEID),)
    export NACPFLAGS += --titleid=$(APP_TITLEID)
endif

ifneq ($(ROMFS),)
    export NROFLAGS += --romfsdir=$(CURDIR)/$(ROMFS)
endif

all: $(TARGETS)

%.nro.so: $(OBJ) libretro_switch.a %.nacp
    @[ -d [email protected] ] || mkdir -p [email protected]
    @$(LD) $(LDFLAGS) -T $(DEVKITPRO)/libnx/switch.ld --allow-multiple-definition -o [email protected] $(OBJ) -l$(DEVKITPRO)/libnx/lib/libnx.a libretro_switch.a -lm

clean:
    rm -f $(OBJ) $(TARGET).nro.so $(TARGET).nro

.PHONY: clean all
Code:
#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------

ifeq ($(strip $(DEVKITPRO)),)
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>/devkitpro")
endif

TOPDIR ?= $(CURDIR)
include $(DEVKITPRO)/libnx/switch_rules

TARGET := retroarch_switch

DEBUG                  ?= 0
WHOLE_ARCHIVE_LINK      = 0
GRIFFIN_BUILD           = 0

OBJ :=

DEFINES := -DSWITCH=1 -U__linux__ -U__linux -DRARCH_INTERNAL

HAVE_CC_RESAMPLER = 1
HAVE_MENU_COMMON = 1
HAVE_RTGA = 1
HAVE_RPNG = 1
HAVE_RJPEG = 1
HAVE_RBMP = 1
HAVE_RGUI = 1
HAVE_ZLIB = 1
HAVE_BUILTINZLIB = 1
HAVE_LIBRETRODB = 1
HAVE_ZARCH = 0
HAVE_MATERIALUI = 0 # enable later?
HAVE_XMB = 0
HAVE_STATIC_VIDEO_FILTERS = 1
HAVE_STATIC_AUDIO_FILTERS = 1
HAVE_MENU = 1
HAVE_RUNAHEAD = 1

include Makefile.common
BLACKLIST :=
BLACKLIST += input/input_overlay.o
BLACKLIST += tasks/task_overlay.o

OBJ := $(filter-out $(BLACKLIST),$(OBJ))

#---------------------------------------------------------------------------------
# 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
# EXEFS_SRC is the optional input directory containing data copied into exefs, if anything this normally should only contain "main.npdm".
# ROMFS is the directory containing data to be added to RomFS, relative to the Makefile (Optional)
#
# NO_ICON: if set to anything, do not use icon.
# NO_NACP: if set to anything, no .nacp file is generated.
# APP_TITLE is the name of the app stored in the .nacp file (Optional)
# APP_AUTHOR is the author of the app stored in the .nacp file (Optional)
# APP_VERSION is the version of the app stored in the .nacp file (Optional)
# APP_TITLEID is the titleID of the app stored in the .nacp file (Optional)
# ICON is the filename of the icon (.jpg), relative to the project folder.
#   If not set, it attempts to use one of the following (in this order):
#     - <Project name>.jpg
#     - icon.jpg
#     - <libnx folder>/default_icon.jpg
#---------------------------------------------------------------------------------
BUILD        :=    build
SOURCES        :=    $(CURDIR)/source
DATA        :=    data
INCLUDES    :=    include
EXEFS_SRC    :=    exefs_src
#ROMFS    :=    romfs

APP_ICON := icon.jpg
APP_TITLE := RetroArch SNES9x libNX
APP_VERSION := 0.1
APP_AUTHOR := M4xw, Credit: Reswitched, libretro

#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
ARCH    :=    -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE

CFLAGS    :=    -g -Wall -O2 -ffunction-sections \
            $(ARCH) $(DEFINES) -Ideps -Ideps/libz -Ilibretro-common/include -Ideps/stb -I$(LIBNX)/include

CFLAGS    +=    $(INCLUDE) -D__SWITCH__

CXXFLAGS    := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11

ASFLAGS    :=    -g $(ARCH)
LDFLAGS    =    -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,--allow-multiple-definition -Wl,-Map,$(notdir $*.map)

LIBS    := -lnx -lc -lm -lstdc++

#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS := $(PORTLIBS) $(LIBNX)

#---------------------------------------------------------------------------------
# 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 OUTPUT    :=    $(TARGET)
export TOPDIR    :=    $(CURDIR)

export VPATH    :=    $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
            $(foreach dir,$(DATA),$(CURDIR)/$(dir))

export DEPSDIR    :=    $(CURDIR)/

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     :=    $(OBJ) libretro_switch.a
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)

export BUILD_EXEFS_SRC := $(TOPDIR)/$(EXEFS_SRC)

ifeq ($(strip $(ICON)),)
    icons := $(wildcard *.jpg)
    ifneq (,$(findstring $(TARGET).jpg,$(icons)))
        export APP_ICON := $(TOPDIR)/$(TARGET).jpg
    else
        ifneq (,$(findstring icon.jpg,$(icons)))
            export APP_ICON := $(TOPDIR)/icon.jpg
        endif
    endif
else
    export APP_ICON := $(TOPDIR)/$(ICON)
endif

ifeq ($(strip $(NO_ICON)),)
    export NROFLAGS += --icon=$(APP_ICON)
endif

ifeq ($(strip $(NO_NACP)),)
    export NROFLAGS += --nacp=$(CURDIR)/$(TARGET).nacp
endif

ifneq ($(APP_TITLEID),)
    export NACPFLAGS += --titleid=$(APP_TITLEID)
endif

ifneq ($(ROMFS),)
    export NROFLAGS += --romfsdir=$(CURDIR)/$(ROMFS)
endif

DEPENDS    :=    $(OFILES:.o=.d)

.PHONY: $(BUILD) clean all

#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
all    :    $(OUTPUT).pfs0 $(OUTPUT).nro

$(OUTPUT).pfs0    :    $(OUTPUT).nso

$(OUTPUT).nso    :    $(OUTPUT).elf

ifeq ($(strip $(NO_NACP)),)
$(OUTPUT).nro    :    $(OUTPUT).elf $(OUTPUT).nacp
else
$(OUTPUT).nro    :    $(OUTPUT).elf
endif

$(OUTPUT).elf    :    $(OBJ)

clean:
    rm -f $(OBJ) $(OUTPUT).pfs0 $(OUTPUT).nro $(OUTPUT).elf

#---------------------------------------------------------------------------------
# you need a rule like this for each extension you use as binary data
#---------------------------------------------------------------------------------
%.bin.o    %_bin.h :    %.bin
#---------------------------------------------------------------------------------
    @echo $(notdir $<)
    @$(bin2o)

#---------------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------------

The newest Makefile works fine. On 4x etc the version does actually load as well, so code is being executed.

Edit: Use the develop branch, master is outdated af

Actually I just nuked the master on Github.
 
Last edited by m4xw,

m4xw

Ancient Deity
OP
Developer
Joined
May 25, 2018
Messages
2,433
Trophies
1
Age
117
XP
6,792
Country
Germany
Last edited by m4xw,

Phenj

Well-Known Member
Member
Joined
May 22, 2018
Messages
486
Trophies
0
XP
1,803
Country
Italy
Turns out all the other versions not launching was my unfinished audio code. Thanks to @Phenj and all the other testers

Anyway weird that 5.0.2 is the only one that just doesn't care. One of THOSE bugs... Code will be upstream soon

But I won't find time to finish the audio stuff today
Thanks to you for your huge work!
 

Admiral-Purple

Well-Known Member
Newcomer
Joined
May 25, 2018
Messages
48
Trophies
0
Age
28
XP
398
Country
United States
Turns out all the other versions not launching was my unfinished audio code. Thanks to @Phenj and all the other testers

Anyway weird that 5.0.2 is the only one that just doesn't care. One of THOSE bugs... Code will be upstream soon

But I won't find time to finish the audio stuff today

new link: https://mega.nz/#!HsVFgDyR!90-UUaSFLy2fbK8tahe_bkyjuCHfgXkYyK_JMVOsV4k
Is this one expected to load roms? I'm on 4.1.0, it loads the menu but crashes when I go to load a game. A link to the past is the only game I've tried so far.
 

m4xw

Ancient Deity
OP
Developer
Joined
May 25, 2018
Messages
2,433
Trophies
1
Age
117
XP
6,792
Country
Germany
Its expected to do what you say.

I suspect some cores should work. But I am done for today!

Audio needs to be fixed too, but thats something really small, I did most stuff, but its too fcking hot
 
Last edited by m4xw,

Admiral-Purple

Well-Known Member
Newcomer
Joined
May 25, 2018
Messages
48
Trophies
0
Age
28
XP
398
Country
United States
Its expected to do what you say.

I suspect some cores should work. But I am done for today!
Okay, still great progress considering before it wouldn't even load. Thank you for your work on this, I'm looking forward to your next updates :)
 

m4xw

Ancient Deity
OP
Developer
Joined
May 25, 2018
Messages
2,433
Trophies
1
Age
117
XP
6,792
Country
Germany
did someone managed to run roms?

The furthest I've gotten is "not crash on rom launch", but not like it did run the ROM's :P

Btw the bug where it would crash with lots of files is fixed too. I can display 800+ Roms in a Folder on the nx version, so thats a transistor bug
 

Phenj

Well-Known Member
Member
Joined
May 22, 2018
Messages
486
Trophies
0
XP
1,803
Country
Italy
The furthest I've gotten is "not crash on rom launch", but not like it did run the ROM's :P

Btw the bug where it would crash with lots of files is fixed too. I can display 800+ Roms in a Folder on the nx version, so thats a transistor bug
Well that's something :P
 

Darth Oeron

Active Member
Newcomer
Joined
Oct 27, 2015
Messages
25
Trophies
0
Age
41
XP
122
Country
The only homebrew I managed to work is FBA, every other program crashes which makes me to start the whole hacking injection process again and again. After a while it becomes frustrating. For now, payload.bin is far from being stable and it needs some revision. Despite the early stage beta problems it's exiting to see what's possible and what's comming up. I gave up trying and wanna wait for a more stable version just like Vita's Henkaku.


Signed on Sega Mega Drive via Tapatalk
 

m4xw

Ancient Deity
OP
Developer
Joined
May 25, 2018
Messages
2,433
Trophies
1
Age
117
XP
6,792
Country
Germany
The only homebrew I managed to work is FBA, every other program crashes which makes me to start the whole hacking injection process again and again. After a while it becomes frustrating. For now, payload.bin is far from being stable and it needs some revision. Despite the early stage beta problems it's exiting to see what's possible and what's comming up. I gave up trying and wanna wait for a more stable version just like Vita's Henkaku.


Signed on Sega Mega Drive via Tapatalk

You mean FBA with the libnx port? Else its unrelated.

This thread is exclusive for this Port, as it is very specific.

Edit: Your post really makes little sense lol
 
Last edited by m4xw,
  • Like
Reactions: Samus20XX
Status
Not open for further replies.
General chit-chat
Help Users
  • No one is chatting at the moment.
    T @ TheRealDeanMeTn: ok