diff --git c/emulators/mesen/Makefile i/emulators/mesen/Makefile new file mode 100644 index 000000000000..0b41547e2757 --- /dev/null +++ i/emulators/mesen/Makefile @@ -0,0 +1,69 @@ +# $FreeBSD$ + +PORTNAME= mesen +DISTVERSION= 0.9.5 +CATEGORIES= emulators + +MAINTAINER= greg@unrelenting.technology +COMMENT= Cross-platform Nintendo Entertainment System (NES/Famicom) emulator + +LICENSE= GPLv3 + +# ARM/MIPS only supported on Android +ONLY_FOR_ARCHS= amd64 i386 + +LIB_DEPENDS= libevdev.so:devel/libevdev + +USES= compiler:c++14-lang gmake pkgconfig +USE_GITHUB= yes +GH_ACCOUNT= SourMesen +GH_PROJECT= Mesen +USE_SDL= sdl2 +MAKEFILE= makefile +MAKE_ARGS= MESENPLATFORM=${MESEN_ARCH} LTO=true SYSTEM_LIBEVDEV=true FSLIB=-lc++experimental +MESEN_ARCH= ${ARCH:S/amd64/x64/:S/i386/x86/} + +OPTIONS_MULTI= FRONTENDS +OPTIONS_MULTI_FRONTENDS= MONO LIBRETRO +OPTIONS_DEFAULT= MONO LIBRETRO +OPTIONS_SUB= yes + +MONO_DESC= Mono based GUI frontend +LIBRETRO_DESC= Libretro core + +MONO_ALL_TARGET= ui +MONO_BUILD_DEPENDS= mono:lang/mono +MONO_RUN_DEPENDS= mono:lang/mono +MONO_DESKTOP_ENTRIES= "Mesen" "NES/Famicom Emulator" \ + "mesen" "mesen" "emulator;Nintendo;NES;Famicom;" false + +LIBRETRO_ALL_TARGET= libretro + +.include + +do-install: +.if ${PORT_OPTIONS:MMONO} + ${MKDIR} ${STAGEDIR}${PREFIX}/libexec/mesen + ${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/64x64/apps/ + ${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/32x32/apps/ + ${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/16x16/apps/ + ${INSTALL_LIB} ${WRKSRC}/bin/${MESEN_ARCH}/Release/Dependencies/libMesenCore.${MESEN_ARCH}.dll \ + ${STAGEDIR}${PREFIX}/libexec/mesen/libMesenCore.dll + ${INSTALL_PROGRAM} ${WRKSRC}/bin/${MESEN_ARCH}/Release/Mesen.exe \ + ${STAGEDIR}${PREFIX}/libexec/mesen/ + ${INSTALL_DATA} ${WRKSRC}/GUI.NET/Resources/MesenIcon.png \ + ${STAGEDIR}${PREFIX}/share/icons/hicolor/64x64/apps/mesen.png + ${INSTALL_DATA} ${WRKSRC}/GUI.NET/Resources/MesenIconMedium.png \ + ${STAGEDIR}${PREFIX}/share/icons/hicolor/32x32/apps/mesen.png + ${INSTALL_DATA} ${WRKSRC}/GUI.NET/Resources/MesenIconSmall.png \ + ${STAGEDIR}${PREFIX}/share/icons/hicolor/16x16/apps/mesen.png + ${INSTALL_SCRIPT} ${FILESDIR}/launch.sh ${STAGEDIR}${PREFIX}/bin/mesen + ${REINPLACE_CMD} 's|%%PREFIX%%|${PREFIX}|g' ${STAGEDIR}${PREFIX}/bin/mesen +.endif +.if ${PORT_OPTIONS:MLIBRETRO} + ${MKDIR} ${STAGEDIR}${PREFIX}/lib/libretro + ${INSTALL_LIB} ${WRKSRC}/bin/mesen_libretro.${MESEN_ARCH}.so \ + ${STAGEDIR}${PREFIX}/lib/libretro/mesen_libretro.so +.endif + +.include diff --git c/emulators/mesen/distinfo i/emulators/mesen/distinfo new file mode 100644 index 000000000000..70cb6622efa2 --- /dev/null +++ i/emulators/mesen/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1523121353 +SHA256 (SourMesen-Mesen-0.9.5_GH0.tar.gz) = e05a5cb5c38ea844353d1b2ef3c86630e925b7c198b410c952acc5f2c9e8afc0 +SIZE (SourMesen-Mesen-0.9.5_GH0.tar.gz) = 16896967 diff --git c/emulators/mesen/files/launch.sh i/emulators/mesen/files/launch.sh new file mode 100755 index 000000000000..0ab0b8aa3e85 --- /dev/null +++ i/emulators/mesen/files/launch.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec mono %%PREFIX%%/libexec/mesen/Mesen.exe $* diff --git c/emulators/mesen/files/patch-compat i/emulators/mesen/files/patch-compat new file mode 100644 index 000000000000..182865fd57de --- /dev/null +++ i/emulators/mesen/files/patch-compat @@ -0,0 +1,116 @@ +Submitted upstream as: https://github.com/SourMesen/Mesen/pull/363 + +--- Linux/LinuxGameController.cpp.orig 2018-03-31 19:18:23 UTC ++++ Linux/LinuxGameController.cpp +@@ -1,6 +1,6 @@ + #include "../Core/MessageManager.h" + #include "LinuxGameController.h" +-#include "libevdev/libevdev.h" ++#include + #include + #include + #include +@@ -223,4 +223,4 @@ static int print_event(struct input_event *ev) + ev->value); + return 0; + } +-*/ +\ No newline at end of file ++*/ +--- Utilities/Scale2x/scalebit.cpp.orig 2018-03-31 19:18:23 UTC ++++ Utilities/Scale2x/scalebit.cpp +@@ -39,7 +39,7 @@ + #include + #include + +-#ifndef __MACH__ ++#if !(defined(__MACH__) || defined(__FreeBSD__)) + #include + #endif + +--- makefile.orig 2018-03-31 19:18:23 UTC ++++ makefile +@@ -50,11 +50,19 @@ RELEASEFOLDER=bin/$(MESENPLATFORM)/Release + COREOBJ=$(patsubst Core/%.cpp,Core/$(OBJFOLDER)/%.o,$(wildcard Core/*.cpp)) + UTILOBJ=$(patsubst Utilities/%.cpp,Utilities/$(OBJFOLDER)/%.o,$(wildcard Utilities/*.cpp)) $(patsubst Utilities/HQX/%.cpp,Utilities/$(OBJFOLDER)/%.o,$(wildcard Utilities/HQX/*.cpp)) $(patsubst Utilities/xBRZ/%.cpp,Utilities/$(OBJFOLDER)/%.o,$(wildcard Utilities/xBRZ/*.cpp)) $(patsubst Utilities/KreedSaiEagle/%.cpp,Utilities/$(OBJFOLDER)/%.o,$(wildcard Utilities/KreedSaiEagle/*.cpp)) $(patsubst Utilities/Scale2x/%.cpp,Utilities/$(OBJFOLDER)/%.o,$(wildcard Utilities/Scale2x/*.cpp)) + LINUXOBJ=$(patsubst Linux/%.cpp,Linux/$(OBJFOLDER)/%.o,$(wildcard Linux/*.cpp)) +-LIBEVDEVOBJ=$(patsubst Linux/libevdev/%.c,Linux/$(OBJFOLDER)/%.o,$(wildcard Linux/libevdev/*.c)) + SEVENZIPOBJ=$(patsubst SevenZip/%.c,SevenZip/$(OBJFOLDER)/%.o,$(wildcard SevenZip/*.c)) + LUAOBJ=$(patsubst Lua/%.c,Lua/$(OBJFOLDER)/%.o,$(wildcard Lua/*.c)) ++ifeq ($(SYSTEM_LIBEVDEV), true) ++ LIBEVDEVLIB=$(shell pkg-config --libs libevdev) ++ LIBEVDEVINC=$(shell pkg-config --cflags libevdev) ++else ++ LIBEVDEVOBJ=$(patsubst Linux/libevdev/%.c,Linux/$(OBJFOLDER)/%.o,$(wildcard Linux/libevdev/*.c)) ++ LIBEVDEVINC=-I../ ++endif ++SDL2LIB=$(shell sdl2-config --libs) ++SDL2INC=$(shell sdl2-config --cflags) ++FSLIB=-lstdc++fs + +- + all: ui + + ui: InteropDLL/$(OBJFOLDER)/$(SHAREDLIB) +@@ -68,6 +76,7 @@ ui: InteropDLL/$(OBJFOLDER)/$(SHAREDLIB) + cd GUI.NET && xbuild /property:Configuration="Release" /property:Platform="$(MESENPLATFORM)" /property:PreBuildEvent="" /property:DefineConstants="HIDETESTMENU,DISABLEAUTOUPDATE" + + libretro: Libretro/$(OBJFOLDER)/$(LIBRETROLIB) ++ mkdir -p ./bin + cp ./Libretro/$(OBJFOLDER)/$(LIBRETROLIB) ./bin + + core: InteropDLL/$(OBJFOLDER)/$(SHAREDLIB) +@@ -80,7 +89,7 @@ rungametests: + + testhelper: InteropDLL/$(OBJFOLDER)/$(SHAREDLIB) + mkdir -p TestHelper/$(OBJFOLDER) +- $(CPPC) $(GCCOPTIONS) -Wl,-z,defs -o testhelper TestHelper/*.cpp InteropDLL/ConsoleWrapper.cpp $(SEVENZIPOBJ) $(LUAOBJ) $(LINUXOBJ) $(LIBEVDEVOBJ) $(UTILOBJ) $(COREOBJ) -pthread -lSDL2 -lstdc++fs ++ $(CPPC) $(GCCOPTIONS) -Wl,-z,defs -o testhelper TestHelper/*.cpp InteropDLL/ConsoleWrapper.cpp $(SEVENZIPOBJ) $(LUAOBJ) $(LINUXOBJ) $(LIBEVDEVOBJ) $(UTILOBJ) $(COREOBJ) -pthread $(FSLIB) $(SDL2LIB) $(LIBEVDEVLIB) + mv testhelper TestHelper/$(OBJFOLDER) + + SevenZip/$(OBJFOLDER)/%.o: SevenZip/%.c +@@ -100,19 +109,19 @@ Utilities/$(OBJFOLDER)/%.o: Utilities/Scale2x/%.cpp + Core/$(OBJFOLDER)/%.o: Core/%.cpp + mkdir -p Core/$(OBJFOLDER) && cd Core/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -c $(patsubst Core/%, ../%, $<) + Linux/$(OBJFOLDER)/%.o: Linux/%.cpp +- mkdir -p Linux/$(OBJFOLDER) && cd Linux/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -c $(patsubst Linux/%, ../%, $<) ++ mkdir -p Linux/$(OBJFOLDER) && cd Linux/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -c $(patsubst Linux/%, ../%, $<) $(SDL2INC) $(LIBEVDEVINC) + Linux/$(OBJFOLDER)/%.o: Linux/libevdev/%.c + mkdir -p Linux/$(OBJFOLDER) && cd Linux/$(OBJFOLDER) && $(CC) $(CCOPTIONS) -c $(patsubst Linux/%, ../%, $<) + + InteropDLL/$(OBJFOLDER)/$(SHAREDLIB): $(SEVENZIPOBJ) $(LUAOBJ) $(UTILOBJ) $(COREOBJ) $(LIBEVDEVOBJ) $(LINUXOBJ) InteropDLL/ConsoleWrapper.cpp InteropDLL/DebugWrapper.cpp + mkdir -p InteropDLL/$(OBJFOLDER) +- $(CPPC) $(GCCOPTIONS) -Wl,-z,defs -shared -o $(SHAREDLIB) InteropDLL/*.cpp $(SEVENZIPOBJ) $(LUAOBJ) $(LINUXOBJ) $(LIBEVDEVOBJ) $(UTILOBJ) $(COREOBJ) -pthread -lSDL2 -lstdc++fs ++ $(CPPC) $(GCCOPTIONS) -Wl,-z,defs -shared -o $(SHAREDLIB) InteropDLL/*.cpp $(SEVENZIPOBJ) $(LUAOBJ) $(LINUXOBJ) $(LIBEVDEVOBJ) $(UTILOBJ) $(COREOBJ) $(SDL2INC) -pthread $(FSLIB) $(SDL2LIB) $(LIBEVDEVLIB) + mv $(SHAREDLIB) InteropDLL/$(OBJFOLDER) + + + Libretro/$(OBJFOLDER)/$(LIBRETROLIB): $(SEVENZIPOBJ) $(UTILOBJ) $(COREOBJ) $(LUAOBJ) Libretro/libretro.cpp + mkdir -p Libretro/$(OBJFOLDER) +- $(CPPC) $(GCCOPTIONS) -Wl,-z,defs -shared -o $(LIBRETROLIB) Libretro/*.cpp $(SEVENZIPOBJ) $(UTILOBJ) $(COREOBJ) $(LUAOBJ) -pthread ++ $(CPPC) $(GCCOPTIONS) -Wl,-z,defs -shared -o $(LIBRETROLIB) Libretro/*.cpp $(SEVENZIPOBJ) $(UTILOBJ) $(COREOBJ) $(LUAOBJ) -pthread $(FSLIB) + mv $(LIBRETROLIB) Libretro/$(OBJFOLDER) + + debug: +@@ -122,12 +131,12 @@ run: + mono $(RELEASEFOLDER)/Mesen.exe + + clean: +- rm Lua/$(OBJFOLDER) -r -f +- rm SevenZip/$(OBJFOLDER) -r -f +- rm Utilities/$(OBJFOLDER) -r -f +- rm Core/$(OBJFOLDER) -r -f +- rm Linux/$(OBJFOLDER) -r -f +- rm InteropDLL/$(OBJFOLDER) -r -f +- rm Libretro/$(OBJFOLDER) -r -f +- rm TestHelper/$(OBJFOLDER) -r -f +- rm $(RELEASEFOLDER) -r -f ++ rm -rf Lua/$(OBJFOLDER) ++ rm -rf SevenZip/$(OBJFOLDER) ++ rm -rf Utilities/$(OBJFOLDER) ++ rm -rf Core/$(OBJFOLDER) ++ rm -rf Linux/$(OBJFOLDER) ++ rm -rf InteropDLL/$(OBJFOLDER) ++ rm -rf Libretro/$(OBJFOLDER) ++ rm -rf TestHelper/$(OBJFOLDER) ++ rm -rf $(RELEASEFOLDER) diff --git c/emulators/mesen/pkg-descr i/emulators/mesen/pkg-descr new file mode 100644 index 000000000000..2d12a7317342 --- /dev/null +++ i/emulators/mesen/pkg-descr @@ -0,0 +1,3 @@ +Mesen is a high-accuracy NES and Famicom emulator and NSF player. + +WWW: https://www.mesen.ca/ diff --git c/emulators/mesen/pkg-plist i/emulators/mesen/pkg-plist new file mode 100644 index 000000000000..a2c44a11179e --- /dev/null +++ i/emulators/mesen/pkg-plist @@ -0,0 +1,7 @@ +%%LIBRETRO%%lib/libretro/mesen_libretro.so +%%MONO%%bin/mesen +%%MONO%%libexec/mesen/Mesen.exe +%%MONO%%libexec/mesen/libMesenCore.dll +%%MONO%%share/icons/hicolor/16x16/apps/mesen.png +%%MONO%%share/icons/hicolor/32x32/apps/mesen.png +%%MONO%%share/icons/hicolor/64x64/apps/mesen.png