Thread Status:
Not open for further replies.
  1. m4xw

    OP m4xw Ancient Deity
    Developer

    Joined:
    May 25, 2018
    Messages:
    2,391
    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, Oct 2, 2018
  2. CatmanFan

    CatmanFan Anxious and regretful
    Member

    Joined:
    Aug 14, 2016
    Messages:
    1,951
    Country:
    Morocco
    First of all, do you have a compiled version of your Snes9x core for testing plz?
     
  3. m4xw

    OP m4xw Ancient Deity
    Developer

    Joined:
    May 25, 2018
    Messages:
    2,391
    Country:
    Germany
    <Please look main post for Download Links>
     
    Last edited by m4xw, Jun 7, 2018
    Leonidas87 likes this.
  4. Leonidas87

    Leonidas87 GBAtemp Advanced Fan
    Member

    Joined:
    Jul 15, 2014
    Messages:
    652
    Country:
    Canada
  5. CatmanFan

    CatmanFan Anxious and regretful
    Member

    Joined:
    Aug 14, 2016
    Messages:
    1,951
    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, May 30, 2018
  6. worm28

    worm28 GBAtemp Advanced Fan
    Member

    Joined:
    Jun 2, 2013
    Messages:
    779
    Country:
    United States
    It might help to try a known working core.
     
  7. Fadi5555

    Fadi5555 GBAtemp Fan
    Member

    Joined:
    Jan 3, 2018
    Messages:
    308
    Country:
    United States

    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, May 30, 2018
  8. CatmanFan

    CatmanFan Anxious and regretful
    Member

    Joined:
    Aug 14, 2016
    Messages:
    1,951
    Country:
    Morocco
    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.
     
  9. m4xw

    OP m4xw Ancient Deity
    Developer

    Joined:
    May 25, 2018
    Messages:
    2,391
    Country:
    Germany
    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, May 30, 2018
  10. m4xw

    OP m4xw Ancient Deity
    Developer

    Joined:
    May 25, 2018
    Messages:
    2,391
    Country:
    Germany
    Last edited by m4xw, May 30, 2018
  11. Phenj

    Phenj GBAtemp Fan
    Member

    Joined:
    May 22, 2018
    Messages:
    441
    Country:
    Italy
    Thanks to you for your huge work!
     
  12. Admiral-Purple

    Newcomer

    Joined:
    May 25, 2018
    Messages:
    48
    Country:
    United States
    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.
     
  13. m4xw

    OP m4xw Ancient Deity
    Developer

    Joined:
    May 25, 2018
    Messages:
    2,391
    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, May 30, 2018
    Centergaming and hippy dave like this.
  14. Admiral-Purple

    Newcomer

    Joined:
    May 25, 2018
    Messages:
    48
    Country:
    United States
    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 :)
     
  15. Ty_

    Ty_ GBAtemp Fan
    Member

    Joined:
    May 22, 2018
    Messages:
    380
    Country:
    United Kingdom
    Awesome work dude, looking forward to the next version
     
    Centergaming likes this.
  16. Phenj

    Phenj GBAtemp Fan
    Member

    Joined:
    May 22, 2018
    Messages:
    441
    Country:
    Italy
    did someone managed to run roms?
     
  17. m4xw

    OP m4xw Ancient Deity
    Developer

    Joined:
    May 25, 2018
    Messages:
    2,391
    Country:
    Germany
    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
     
  18. Phenj

    Phenj GBAtemp Fan
    Member

    Joined:
    May 22, 2018
    Messages:
    441
    Country:
    Italy
    Well that's something :P
     
  19. Darth Oeron

    Darth Oeron Member
    Newcomer

    Joined:
    Oct 27, 2015
    Messages:
    25
    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
     
  20. m4xw

    OP m4xw Ancient Deity
    Developer

    Joined:
    May 25, 2018
    Messages:
    2,391
    Country:
    Germany
    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, May 31, 2018
    Samus20XX likes this.
Loading...

Hide similar threads Similar threads with keywords - Development, RetroArch, Thread

Thread Status:
Not open for further replies.