diff --git a/emulators/mame/Makefile b/emulators/mame/Makefile index ffeae0127dc2..07f8578e0c3c 100644 --- a/emulators/mame/Makefile +++ b/emulators/mame/Makefile @@ -1,197 +1,200 @@ PORTNAME= mame DISTVERSION= 0.255 +PORTREVISION= 1 CATEGORIES= emulators games MAINTAINER= agh@riseup.net COMMENT= MAME: a multi-purpose emulation framework WWW= https://mamedev.org/ LICENSE= BSD2CLAUSE BSD3CLAUSE CC0-1.0 GPLv2 LGPL21 MIT ZLIB LICENSE_COMB= multi LICENSE_FILE_BSD2CLAUSE= ${WRKSRC}/docs/legal/BSD-2-Clause LICENSE_FILE_BSD3CLAUSE= ${WRKSRC}/docs/legal/BSD-3-Clause LICENSE_FILE_CC0-1.0= ${WRKSRC}/docs/legal/CC0 LICENSE_FILE_GPLv2= ${WRKSRC}/docs/legal/GPL-2.0 LICENSE_FILE_LGPL21= ${WRKSRC}/docs/legal/LGPL-2.1 LICENSE_FILE_MIT= ${WRKSRC}/docs/legal/MIT LICENSE_FILE_ZLIB= ${WRKSRC}/docs/legal/Zlib LICENSE_FILE= ${WRKSRC}/docs/LICENSE ONLY_FOR_ARCHS= aarch64 amd64 armv7 i386 powerpc powerpc64 powerpc64le ONLY_FOR_ARCHS_REASON= not yet ported to any architecture other than armv7, arm64, x86, and powerpc* BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sphinxcontrib-svg2pdfconverter>0:textproc/py-sphinxcontrib-svg2pdfconverter@${PY_FLAVOR} \ glm>0:math/glm \ rapidjson>0:devel/rapidjson LIB_DEPENDS= libexpat.so:textproc/expat2 \ libFLAC.so:audio/flac \ libfontconfig.so:x11-fonts/fontconfig \ libfreetype.so:print/freetype2 \ libportmidi.so:audio/portmidi \ libpugixml.so:textproc/pugixml \ libutf8proc.so:textproc/utf8proc \ libuv.so:devel/libuv RUN_DEPENDS= liberation-fonts-ttf>=0:x11-fonts/liberation-fonts-ttf USES= compiler:c++17-lang gl gmake jpeg localbase lua:54 pkgconfig \ python:3.9,build sdl shebangfix sqlite:3 xorg USE_GITHUB= yes GH_ACCOUNT= mamedev GH_TAGNAME= mame${DISTVERSION:S/.//} USE_GL= gl USE_SDL= sdl2 ttf2 USE_XORG= x11 xext xi xinerama xrender MAKEFILE= makefile MAKE_ARGS= TARGETOS=freebsd \ VERBOSE="1" MAKE_ENV= LDOPTS="${LDFLAGS}" \ NO_USE_PORTAUDIO=1 \ NO_USE_PULSEAUDIO=1 \ NOWERROR=1 \ OPT_FLAGS="${CXXFLAGS}" \ PRECOMPILE=0 \ PYTHON_EXECUTABLE="${PYTHON_CMD}" \ USE_PCAP=1 \ USE_SYSTEM_LIB_EXPAT=1 \ USE_SYSTEM_LIB_FLAC=1 \ USE_SYSTEM_LIB_GLM=1 \ USE_SYSTEM_LIB_JPEG=1 \ USE_SYSTEM_LIB_PORTMIDI=1 \ USE_SYSTEM_LIB_PUGIXML=1 \ USE_SYSTEM_LIB_RAPIDJSON=1 \ USE_SYSTEM_LIB_SQLITE3=1 \ USE_SYSTEM_LIB_UTF8PROC=1 \ USE_SYSTEM_LIB_UV=1 \ USE_SYSTEM_LIB_ZLIB=1 \ USE_TAPTUN=1 +CFLAGS_aarch64= -march=armv8-a+crc+crypto + SUB_FILES= pkg-message mame.ini plugin.ini ui.ini PORTDOCS= html/* OPTIONS_DEFINE= DEBUG DOCS QTDEBUGGER TOOLS OPTIONS_SUB= yes DEBUG_DESC= Build with debug profiling and symbols DOCS_DESC= Install extensive online MAME documentation QTDEBUGGER_DESC= Install Qt interactive low-level machine debugger TOOLS_DESC= Install tools for machine archiving and development DEBUG_MAKE_ENV= DEBUG=1 \ OPTIMIZE=0 \ PROFILER=1 \ SYMBOLS=1 DEBUG_MAKE_ENV_OFF= OPTIMIZE=2 \ STRIP_SYMBOLS=1 # Attempt to avoid address space exhaustion during linking, specifically # on armv7, and possibly other architectures: DEBUG_LDFLAGS_OFF= -s QTDEBUGGER_USES= qt:5 QTDEBUGGER_USE= QT=core,gui,widgets,buildtools:build,qmake:build QTDEBUGGER_MAKE_ENV= USE_QTDEBUG=1 QTDEBUGGER_MAKE_ENV_OFF= USE_QTDEBUG=0 TOOLS_MAKE_ENV= TOOLS=1 TOOLS_MAKE_ENV_OFF= TOOLS=0 _GENIE= ${WRKSRC}/3rdparty/genie .include .if ${PORT_OPTIONS:MDEBUG} WITH_DEBUG= yes .endif .if ${OPSYS} == FreeBSD && ${OSVERSION} > 1400000 .if ${ARCH:Mpowerpc*} USES+= llvm:min=16,build .else USES+= llvm:15,build .endif MAKE_ENV+= OVERRIDE_AR="llvm-ar${LLVM_VERSION}" \ OVERRIDE_CC="clang${LLVM_VERSION}" \ OVERRIDE_CXX="clang++${LLVM_VERSION}" \ OVERRIDE_LD="lld${LLVM_VERSION}" .else MAKE_ENV+= OVERRIDE_AR="${AR}" \ OVERRIDE_CC="${CC}" \ OVERRIDE_CXX="${CXX}" \ OVERRIDE_LD="${LD}" .endif .if ${ARCH:Maarch64} || ${ARCH:Mamd64} || ${ARCH:Mpowerpc64*} MAKE_ARGS+= PTR64=1 .endif post-extract: @${MV} ${WRKSRC}/src/lib/util/png.h \ ${WRKSRC}/src/lib/util/localpng.h post-patch: # Prefer some system headers over bundled. @${RM} ${WRKSRC}/3rdparty/bx/include/compat/freebsd/dirent.h @${RM} ${WRKSRC}/3rdparty/bx/include/compat/freebsd/signal.h # Accommodate GENie conception of BSD. @${MV} ${_GENIE}/build/gmake.freebsd \ ${_GENIE}/build/gmake.bsd # Patch build to use bundled PNG. @${GREP} -rl '"png.h"' ${WRKSRC}/src | \ ${XARGS} ${REINPLACE_CMD} -e 's|"png.h"|"localpng.h"|' @${REINPLACE_CMD} -e 's|"util/png.h"|"util/localpng.h"|' \ ${WRKSRC}/src/frontend/mame/ui/icorender.cpp do-build-DOCS-on: (cd ${WRKSRC}/docs && \ ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} html SPHINXBUILD=sphinx-build-${PYTHON_VER}) @${RM} ${WRKSRC}/docs/build/html/.buildinfo post-build: (cd ${WRKSRC}/docs && \ ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} man SPHINXBUILD=sphinx-build-${PYTHON_VER}) do-install: .for DATA in artwork bgfx ctrlr ini hash language plugins samples (cd ${WRKSRC} && \ ${COPYTREE_SHARE} ${DATA} ${STAGEDIR}${DATADIR}) .endfor ${MKDIR} ${STAGEDIR}${DOCSDIR} ${INSTALL_MAN} ${WRKSRC}/docs/build/man/MAME.1 \ ${STAGEDIR}${MANPREFIX}/man/man1 ${INSTALL_MAN} ${WRKSRC}/docs/man/mame.6 \ ${STAGEDIR}${MANPREFIX}/man/man6 ${MKDIR} ${STAGEDIR}${ETCDIR} .for INI in mame plugin ui ${INSTALL_DATA} ${WRKDIR}/${INI}.ini \ ${STAGEDIR}${ETCDIR}/${INI}.ini.sample .endfor do-install-DEBUG-on: ${INSTALL_PROGRAM} ${WRKSRC}/mamed \ ${STAGEDIR}${PREFIX}/bin/mame do-install-DEBUG-off: ${INSTALL_PROGRAM} ${WRKSRC}/mame \ ${STAGEDIR}${PREFIX}/bin/ do-install-DOCS-on: ${MKDIR} ${STAGEDIR}${DOCSDIR} (cd ${WRKSRC}/docs/build && \ ${COPYTREE_SHARE} html ${STAGEDIR}${DOCSDIR}) do-install-TOOLS-on: .for PROGRAM in castool chdman floptool imgtool jedutil ldresample ldverify \ nltool nlwav pngcmp regrep romcmp split srcclean testkeys unidasm ${INSTALL_PROGRAM} ${WRKSRC}/${PROGRAM} \ ${STAGEDIR}${PREFIX}/bin .endfor .for MANUAL in castool chdman floptool imgtool jedutil ldplayer ldresample \ ldverify romcmp ${INSTALL_MAN} ${WRKSRC}/docs/man/${MANUAL}.1 \ ${STAGEDIR}${MANPREFIX}/man/man1 .endfor .include diff --git a/emulators/mame/files/patch-3rdparty_lzma_CPP_7zip_7zip__gcc.mak b/emulators/mame/files/patch-3rdparty_lzma_CPP_7zip_7zip__gcc.mak new file mode 100644 index 000000000000..3949c6e06167 --- /dev/null +++ b/emulators/mame/files/patch-3rdparty_lzma_CPP_7zip_7zip__gcc.mak @@ -0,0 +1,27 @@ +--- 3rdparty/lzma/CPP/7zip/7zip_gcc.mak.orig 2023-05-30 17:50:57 UTC ++++ 3rdparty/lzma/CPP/7zip/7zip_gcc.mak +@@ -18,13 +18,13 @@ PROGPATH_STATIC = $(O)/$(PROG)s + + + ifneq ($(CC), xlc) +-CFLAGS_WARN_WALL = -Wall -Werror -Wextra ++CFLAGS_WARN_WALL = + endif + + # for object file + CFLAGS_BASE_LIST = -c + # CFLAGS_BASE_LIST = -S +-CFLAGS_BASE = -O2 $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \ ++CFLAGS_BASE = $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \ + -DNDEBUG -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \ + -fPIC + +@@ -131,7 +131,7 @@ DEL_OBJ_EXE = -$(RM) $(PROGPATH) $(PROGPATH_STATIC) $( + + # LOCAL_LIBS=-lpthread + # LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl +-LIB2 = -lpthread -ldl ++LIB2 = $(LOCAL_LIBS) -lpthread + + + endif diff --git a/emulators/mame/files/patch-3rdparty_lzma_CPP_7zip_var__gcc.mak b/emulators/mame/files/patch-3rdparty_lzma_CPP_7zip_var__gcc.mak new file mode 100644 index 000000000000..cfd83c3c7213 --- /dev/null +++ b/emulators/mame/files/patch-3rdparty_lzma_CPP_7zip_var__gcc.mak @@ -0,0 +1,12 @@ +--- 3rdparty/lzma/CPP/7zip/var_gcc.mak.orig 2023-05-30 17:50:57 UTC ++++ 3rdparty/lzma/CPP/7zip/var_gcc.mak +@@ -6,7 +6,7 @@ IS_ARM64= + CROSS_COMPILE= + MY_ARCH= + USE_ASM= +-CC=$(CROSS_COMPILE)gcc +-CXX=$(CROSS_COMPILE)g++ ++CC=$(CC) ++CXX=$(CXX) + + # -march=armv8-a+crc+crypto diff --git a/emulators/mame/files/patch-3rdparty_lzma_CPP_Windows_SystemInfo.cpp b/emulators/mame/files/patch-3rdparty_lzma_CPP_Windows_SystemInfo.cpp new file mode 100644 index 000000000000..25e855008237 --- /dev/null +++ b/emulators/mame/files/patch-3rdparty_lzma_CPP_Windows_SystemInfo.cpp @@ -0,0 +1,27 @@ +--- 3rdparty/lzma/CPP/Windows/SystemInfo.cpp.orig 2023-05-30 17:50:57 UTC ++++ 3rdparty/lzma/CPP/Windows/SystemInfo.cpp +@@ -20,6 +20,15 @@ + + #include + ++#if defined(__FreeBSD__) ++unsigned long getauxval(unsigned long type) ++{ ++ unsigned long aux = 0; ++ elf_aux_info(type, &aux, sizeof(aux)); ++ return aux; ++} ++#endif ++ + // #undef AT_HWCAP // to debug + // #undef AT_HWCAP2 // to debug + +@@ -36,7 +45,7 @@ + #endif + */ + +-#ifdef MY_CPU_ARM_OR_ARM64 ++#if defined(MY_CPU_ARM_OR_ARM64) && !defined(__FreeBSD__) + #include + #endif + #endif diff --git a/emulators/mame/files/patch-3rdparty_lzma_C_7zCrc.c b/emulators/mame/files/patch-3rdparty_lzma_C_7zCrc.c new file mode 100644 index 000000000000..5047b6809214 --- /dev/null +++ b/emulators/mame/files/patch-3rdparty_lzma_C_7zCrc.c @@ -0,0 +1,11 @@ +--- 3rdparty/lzma/C/7zCrc.c.orig 2023-05-30 17:50:57 UTC ++++ 3rdparty/lzma/C/7zCrc.c +@@ -71,7 +71,7 @@ UInt32 MY_FAST_CALL CrcUpdateT1(UInt32 v, const void * + + #ifdef MY_CPU_LE + +-#if defined(MY_CPU_ARM_OR_ARM64) ++#if defined(MY_CPU_ARM64) + + // #pragma message("ARM*") + diff --git a/emulators/mame/files/patch-3rdparty_lzma_C_Aes.c b/emulators/mame/files/patch-3rdparty_lzma_C_Aes.c new file mode 100644 index 000000000000..8c66c80c974f --- /dev/null +++ b/emulators/mame/files/patch-3rdparty_lzma_C_Aes.c @@ -0,0 +1,11 @@ +--- 3rdparty/lzma/C/Aes.c.orig 2023-05-30 17:50:57 UTC ++++ 3rdparty/lzma/C/Aes.c +@@ -55,7 +55,7 @@ static Byte InvS[256]; + + #ifdef MY_CPU_X86_OR_AMD64 + #define USE_HW_AES +-#elif defined(MY_CPU_ARM_OR_ARM64) && defined(MY_CPU_LE) ++#elif defined(MY_CPU_ARM) && defined(MY_CPU_LE) + #if defined(__clang__) + #if (__clang_major__ >= 8) // fix that check + #define USE_HW_AES diff --git a/emulators/mame/files/patch-3rdparty_lzma_C_AesOpt.c b/emulators/mame/files/patch-3rdparty_lzma_C_AesOpt.c new file mode 100644 index 000000000000..d9c7100bbe30 --- /dev/null +++ b/emulators/mame/files/patch-3rdparty_lzma_C_AesOpt.c @@ -0,0 +1,38 @@ +--- 3rdparty/lzma/C/AesOpt.c.orig 2023-05-30 17:50:57 UTC ++++ 3rdparty/lzma/C/AesOpt.c +@@ -506,7 +506,7 @@ VAES_COMPAT_STUB (AesCtr_Code_HW) + #endif // ! USE_INTEL_VAES + + +-#elif defined(MY_CPU_ARM_OR_ARM64) && defined(MY_CPU_LE) ++#elif defined(MY_CPU_ARM64) && defined(MY_CPU_LE) + + #if defined(__clang__) + #if (__clang_major__ >= 8) // fix that check +@@ -773,4 +773,25 @@ AES_FUNC_START2 (AesCtr_Code_HW) + + #endif // USE_HW_AES + +-#endif // MY_CPU_ARM_OR_ARM64 ++#else ++ ++/* no USE_HW_AES */ ++ ++#pragma message("AES HW_SW stub was used") ++ ++#define AES_TYPE_keys UInt32 ++#define AES_TYPE_data Byte ++ ++#define AES_FUNC_START(name) \ ++ void MY_FAST_CALL name(UInt32 *p, Byte *data, size_t numBlocks) \ ++ ++#define AES_COMPAT_STUB(name) \ ++ AES_FUNC_START(name); \ ++ AES_FUNC_START(name ## _HW) \ ++ { name(p, data, numBlocks); } ++ ++AES_COMPAT_STUB (AesCbc_Encode) ++AES_COMPAT_STUB (AesCbc_Decode) ++AES_COMPAT_STUB (AesCtr_Code) ++ ++#endif diff --git a/emulators/mame/files/patch-3rdparty_lzma_C_CpuArch.c b/emulators/mame/files/patch-3rdparty_lzma_C_CpuArch.c new file mode 100644 index 000000000000..0845a73832cb --- /dev/null +++ b/emulators/mame/files/patch-3rdparty_lzma_C_CpuArch.c @@ -0,0 +1,42 @@ +--- 3rdparty/lzma/C/CpuArch.c.orig 2023-05-30 17:50:57 UTC ++++ 3rdparty/lzma/C/CpuArch.c +@@ -417,6 +417,31 @@ BoolInt CPU_IsSupported_AES (void) { return APPLE_CRYP + + #include + ++#if defined(__FreeBSD__) ++static unsigned long get_hwcap(int aux) { ++ unsigned long hwcap; ++ if (elf_aux_info(aux, &hwcap, sizeof hwcap) != 0) { ++ return 0; ++ } ++ return hwcap; ++} ++ ++#ifdef MY_CPU_ARM64 ++BoolInt CPU_IsSupported_CRC32(void) { return get_hwcap(AT_HWCAP) & HWCAP_CRC32; } ++BoolInt CPU_IsSupported_NEON(void) { return 1; } ++BoolInt CPU_IsSupported_SHA1(void){ return get_hwcap(AT_HWCAP) & HWCAP_SHA1; } ++BoolInt CPU_IsSupported_SHA2(void) { return get_hwcap(AT_HWCAP) & HWCAP_SHA2; } ++BoolInt CPU_IsSupported_AES(void) { return get_hwcap(AT_HWCAP) & HWCAP_AES; } ++#else /* MY_CPU_ARM */ ++BoolInt CPU_IsSupported_CRC32(void) { return get_hwcap(AT_HWCAP2) & HWCAP2_CRC32; } ++BoolInt CPU_IsSupported_NEON(void) { return get_hwcap(AT_HWCAP) & HWCAP_NEON; } ++BoolInt CPU_IsSupported_SHA1(void){ return get_hwcap(AT_HWCAP2) & HWCAP2_SHA1; } ++BoolInt CPU_IsSupported_SHA2(void) { return get_hwcap(AT_HWCAP2) & HWCAP2_SHA2; } ++BoolInt CPU_IsSupported_AES(void) { return get_hwcap(AT_HWCAP2) & HWCAP2_AES; } ++#endif ++ ++#else // __FreeBSD__ ++ + #define USE_HWCAP + + #ifdef USE_HWCAP +@@ -450,6 +475,7 @@ MY_HWCAP_CHECK_FUNC (SHA1) + MY_HWCAP_CHECK_FUNC (SHA2) + MY_HWCAP_CHECK_FUNC (AES) + ++#endif // FreeBSD + #endif // __APPLE__ + #endif // _WIN32 + diff --git a/emulators/mame/files/patch-3rdparty_lzma_C_Sha256Opt.c b/emulators/mame/files/patch-3rdparty_lzma_C_Sha256Opt.c new file mode 100644 index 000000000000..525d4f9e96e0 --- /dev/null +++ b/emulators/mame/files/patch-3rdparty_lzma_C_Sha256Opt.c @@ -0,0 +1,11 @@ +--- 3rdparty/lzma/C/Sha256Opt.c.orig 2023-05-30 17:50:57 UTC ++++ 3rdparty/lzma/C/Sha256Opt.c +@@ -212,7 +212,7 @@ void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[ + + #endif // USE_HW_SHA + +-#elif defined(MY_CPU_ARM_OR_ARM64) ++#elif defined(MY_CPU_ARM64) + + #if defined(__clang__) + #if (__clang_major__ >= 8) // fix that check