From 0a475b7b83b0d205e2795594b4bb7f7e8e1e5c46 Mon Sep 17 00:00:00 2001 From: Timothy Beyer Date: Mon, 16 May 2022 20:53:46 -0700 Subject: [PATCH] fix build of emulators/xenia in poudriere --- /dev/null => emulators/xenia/Makefile | 131 +++++++++++++++ /dev/null => emulators/xenia/distinfo | 57 +++++++ .../xenia/files/patch-premake5.lua | 25 +++ .../xenia/files/patch-src_xenia_app_premake5.lua | 13 ++ .../xenia/files/patch-src_xenia_app_xenia__main.cc | 11 ++ .../xenia/files/patch-src_xenia_apu_premake5.lua | 13 ++ .../xenia/files/patch-src_xenia_base_atomic.h | 11 ++ .../files/patch-src_xenia_base_clock__posix.cc | 26 +++ .../xenia/files/patch-src_xenia_base_platform.h | 11 ++ .../files/patch-src_xenia_base_threading__posix.cc | 63 ++++++++ .../xenia/files/patch-src_xenia_config.cc | 30 ++++ .../files/patch-src_xenia_gpu_d3d12_premake5.lua | 24 +++ .../files/patch-src_xenia_gpu_vulkan_premake5.lua | 24 +++ .../files/patch-src_xenia_kernel_xam_xam__net.cc | 11 ++ ...-src_xenia_kernel_xboxkrnl_xboxkrnl__strings.cc | 179 +++++++++++++++++++++ .../xenia/files/patch-src_xenia_kernel_xsocket.cc | 39 +++++ .../xenia/files/patch-src_xenia_kernel_xsocket.h | 26 +++ .../xenia/files/patch-src_xenia_ui_vulkan_vulkan.h | 11 ++ .../patch-src_xenia_ui_vulkan_vulkan__context.cc | 20 +++ .../patch-third__party_cpptoml_include_cpptoml.h | 51 ++++++ .../files/patch-third__party_crypto_sha256.cpp | 18 +++ .../patch-third__party_microprofile_microprofile.h | 11 ++ ...tch-third__party_premake-core_src_tools_gcc.lua | 22 +++ .../patch-third__party_renderdoc_renderdoc__app.h | 11 ++ /dev/null => emulators/xenia/pkg-descr | 5 + 25 files changed, 843 insertions(+) create mode 100644 emulators/xenia/Makefile create mode 100644 emulators/xenia/distinfo create mode 100644 emulators/xenia/files/patch-premake5.lua create mode 100644 emulators/xenia/files/patch-src_xenia_app_premake5.lua create mode 100644 emulators/xenia/files/patch-src_xenia_app_xenia__main.cc create mode 100644 emulators/xenia/files/patch-src_xenia_apu_premake5.lua create mode 100644 emulators/xenia/files/patch-src_xenia_base_atomic.h create mode 100644 emulators/xenia/files/patch-src_xenia_base_clock__posix.cc create mode 100644 emulators/xenia/files/patch-src_xenia_base_platform.h create mode 100644 emulators/xenia/files/patch-src_xenia_base_threading__posix.cc create mode 100644 emulators/xenia/files/patch-src_xenia_config.cc create mode 100644 emulators/xenia/files/patch-src_xenia_gpu_d3d12_premake5.lua create mode 100644 emulators/xenia/files/patch-src_xenia_gpu_vulkan_premake5.lua create mode 100644 emulators/xenia/files/patch-src_xenia_kernel_xam_xam__net.cc create mode 100644 emulators/xenia/files/patch-src_xenia_kernel_xboxkrnl_xboxkrnl__strings.cc create mode 100644 emulators/xenia/files/patch-src_xenia_kernel_xsocket.cc create mode 100644 emulators/xenia/files/patch-src_xenia_kernel_xsocket.h create mode 100644 emulators/xenia/files/patch-src_xenia_ui_vulkan_vulkan.h create mode 100644 emulators/xenia/files/patch-src_xenia_ui_vulkan_vulkan__context.cc create mode 100644 emulators/xenia/files/patch-third__party_cpptoml_include_cpptoml.h create mode 100644 emulators/xenia/files/patch-third__party_crypto_sha256.cpp create mode 100644 emulators/xenia/files/patch-third__party_microprofile_microprofile.h create mode 100644 emulators/xenia/files/patch-third__party_premake-core_src_tools_gcc.lua create mode 100644 emulators/xenia/files/patch-third__party_renderdoc_renderdoc__app.h create mode 100644 emulators/xenia/pkg-descr diff --git a/emulators/xenia/Makefile b/emulators/xenia/Makefile new file mode 100644 index 0000000..21de47c --- /dev/null +++ b/emulators/xenia/Makefile @@ -0,0 +1,131 @@ +# Created by: Timothy Beyer + +PORTNAME= xenia +PORTVERSION= 0.20210609 +CATEGORIES= emulators games + +MAINTAINER= beyert@cs.ucr.edu +COMMENT= Xbox 360 Emulator + +LICENSE= BSD3CLAUSE +LICENSE_FILE= ${WRKSRC}/LICENSE + +ONLY_FOR_ARCHS= amd64 + +BUILD_DEPENDS= vulkan-loader>0:graphics/vulkan-loader \ + ${LOCALBASE}/include/vulkan/vulkan.hpp:graphics/vulkan-headers \ + nasm:devel/nasm +LIB_DEPENDS= libvulkan.so:graphics/vulkan-loader \ + liblz4.so:archivers/liblz4 \ + libavcodec.so:multimedia/ffmpeg \ + libavutil.so:multimedia/ffmpeg \ + libboost_atomic.so:devel/boost-libs + +USES= compiler:c++17-lang lua:build:51 gmake python:build shebangfix \ + gl xorg sdl gnome pkgconfig + +SHEBANG_FILES= ${WRKSRC}/xenia-build + +USE_LDCONFIG= yes + +USE_XORG= x11 xcb +USE_GL= gl glew glu +USE_SDL= sdl2 +USE_GNOME= gtk30 pango atk cairo gdkpixbuf2 glib20 + +OPTIONS_DEFINE= NLS + +NLS_USES= gettext-runtime + +USE_GITHUB= yes +GH_TUPLE= xenia-project:xenia:14bac72 \ + xenia-project:premake-core:7eba282:premake_core/third_party/premake-core \ + xenia-project:premake-export-compile-commands:59e3e55:premake_export_compile_commands/third_party/premake-export-compile-commands \ + Enhex:premake-cmake:c4fec3e:premake_cmake/third_party/premake-cmake \ + Tencent:rapidjson:d87b698:rapidjson/third_party/rapidjson \ + xenia-project:snappy:303cd2c:snappy/third_party/snappy \ + KhronosGroup:SPIRV-Headers:2bf91d3:spirv_headers/third_party/spirv-headers \ + xenia-project:SPIRV-Tools:27a2bbb:spirv_tools/third_party/spirv-tools \ + xenia-project:utfcpp:f295c4b:utfcpp/third_party/utfcpp \ + zeux:volk:30a851b:volk/third_party/volk \ + xenia-project:xbyak:bc70e7e:xbyak/third_party/xbyak \ + Cyan4973:xxHash:4c881f7:xxhash/third_party/xxhash \ + Triang3l:premake-androidmk:01a84c7:premake_androidmk/third_party/premake-androidmk \ + xenia-project:FFmpeg:09eac85:ffmpeg/third_party/FFmpeg \ + openluopworld:aes_128:b5b7f55:aes_128/third_party/aes_128 \ + xenia-project:capstone:f9c6a90:capstone/third_party/capstone \ + discord:discord-rpc:eff23a7:discord_rpc/third_party/discord-rpc \ + fmtlib:fmt:27e3c0f:fmt/third_party/fmt \ + ocornut:imgui:ca30ef4:imgui/third_party/imgui \ + jarro2783:cxxopts:48e265d:cxxopts/third_party/cxxopts \ + HowardHinnant:date:97246a6:date/third_party/date \ + libsdl-org:SDL:d28437d:sdl2/third_party/SDL2 \ + microsoft:DirectXShaderCompiler:6b6f402:direct_x_shader_compiler/third_party/DirectXShaderCompiler \ + benvanik:binutils-ppc-cygwin:6f3f15d:binutils_ppc_cygwin/third_party/binutils-ppc-cygwin \ + catchorg:Catch2:5c88067:catch/third_party/catch \ + skystrife:cpptoml:fededad:cpptoml/third_party/cpptoml \ + xenia-project:disruptorplus:cb83e4b:disruptorplus/third_party/disruptorplus \ + boostorg:nowide:4412f9f:nowide/third_party/nowide + +CFLAGS+= -I${LOCALBASE}/include -ferror-limit=0 +CXXFLAGS+= -I${LOCALBASE}/include -ferror-limit=0 + +.include + +CFLAGS+= -I${WRKSRC}/third_party/FFmpeg \ + -I${WRKSRC}/third_party/FFmpeg/libavutil \ + -I${WRKSRC}/third_party/fmt/include \ + -I${WRKSRC}/third_party/nowide/include +CXXFLAGS+= -I${WRKSRC}/third_party/FFmpeg \ + -I${WRKSRC}/third_party/FFmpeg/libavutil \ + -I${WRKSRC}/third_party/fmt/include \ + -I${WRKSRC}/third_party/nowide/include + +LDFLAGS+= -L${LOCALBASE}/lib +#MAKE_ARGS+= verbose=true + +CONFIGURE_ARGS= --enable-static \ + --disable-shared \ + --enable-pic \ + --disable-gpl \ + --enable-avresample \ + --cc="${CC}" \ + --cxx="${CXX}" + +pre-patch: + ${CP} -pR ${WRKSRC}/third_party/aes_128/aes.h \ + ${WRKSRC}/third_party/aes_128/unroll/ + +post-patch: + ${REINPLACE_CMD} 's|fseeko64|fseeko|g' \ + ${WRKSRC}/src/xenia/base/filesystem_posix.cc + ${REINPLACE_CMD} 's|ftello64|ftello|g' \ + ${WRKSRC}/src/xenia/base/filesystem_posix.cc + ${REINPLACE_CMD} 's|ftruncate64|ftruncate|g' \ + ${WRKSRC}/src/xenia/base/filesystem_posix.cc \ + ${WRKSRC}/src/xenia/base/memory_posix.cc + ${REINPLACE_CMD} 's|mmap64|mmap|g' \ + ${WRKSRC}/src/xenia/base/memory_posix.cc + +pre-build: + ${REINPLACE_CMD} "s|'make'|'gmake'|g" ${WRKSRC}/tools/build/premake \ + ${WRKSRC}/xenia-build + cd ${WRKSRC} && ./xenia-build setup +## necessary, but insufficient alone to build libavutil / libavcodec +.if !exists(${WRKSRC}/third_party/FFmpeg/Makefile) + test -f ${WRKSRC}/third_party/FFmpeg/config.asm && \ + echo "no configure needed" || \ + (cd ${WRKSRC}/third_party/FFmpeg && ./configure ${CONFIGURE_ARGS}) +.endif + +PLIST_FILES= bin/xenia + +do-build: +# cd ${WRKSRC} && ./xenia-build build + cd ${WRKSRC}/build && ${GMAKE} ${MAKE_ARGS} + +do-install: + ${INSTALL} ${WRKSRC}/build/bin/Linux/Checked/xenia \ + ${STAGEDIR}/${PREFIX}/bin/xenia + +.include diff --git a/emulators/xenia/distinfo b/emulators/xenia/distinfo new file mode 100644 index 0000000..9903c36 --- /dev/null +++ b/emulators/xenia/distinfo @@ -0,0 +1,57 @@ +TIMESTAMP = 1625521923 +SHA256 (xenia-project-xenia-0.20210609-14bac72_GH0.tar.gz) = 8a8e584255f052020716a6d62ff21d7489c0c0bac25598a271f8dbf02dd9de0c +SIZE (xenia-project-xenia-0.20210609-14bac72_GH0.tar.gz) = 6639921 +SHA256 (xenia-project-premake-core-7eba282_GH0.tar.gz) = 073aec18425cbe82da8b6bdcb4c0f1781549a25503c8c982aba2e48164d0a183 +SIZE (xenia-project-premake-core-7eba282_GH0.tar.gz) = 3959564 +SHA256 (xenia-project-premake-export-compile-commands-59e3e55_GH0.tar.gz) = e43ff41bb0c6ec71ec71e82272cd798e21edff8f040cf39ad089626e4625c8b8 +SIZE (xenia-project-premake-export-compile-commands-59e3e55_GH0.tar.gz) = 2196 +SHA256 (Enhex-premake-cmake-c4fec3e_GH0.tar.gz) = d9912b969712960e5b3fce0d1c8a12fcc28a31c2059ecc9e60fa60e8f53ca24f +SIZE (Enhex-premake-cmake-c4fec3e_GH0.tar.gz) = 8625 +SHA256 (Tencent-rapidjson-d87b698_GH0.tar.gz) = e1cb07a044dd6e5fef79ace426569c0b767cb3538d93526fdd0ab54a86fbadd6 +SIZE (Tencent-rapidjson-d87b698_GH0.tar.gz) = 1056587 +SHA256 (xenia-project-snappy-303cd2c_GH0.tar.gz) = 6d75d3d453466c3b58dd21a70221971d9fbd79bb3c03aa1418cbcd0fad6b3c47 +SIZE (xenia-project-snappy-303cd2c_GH0.tar.gz) = 1122975 +SHA256 (KhronosGroup-SPIRV-Headers-2bf91d3_GH0.tar.gz) = 357baf06d7f3512971e4d5cdc1f956c97a71d35c34ebe58048cb7e06afcac6f5 +SIZE (KhronosGroup-SPIRV-Headers-2bf91d3_GH0.tar.gz) = 269777 +SHA256 (xenia-project-SPIRV-Tools-27a2bbb_GH0.tar.gz) = ef4571f8fac22512fdca3fc2c6024b0046a0379321a6aeef09260c7815b6e8d9 +SIZE (xenia-project-SPIRV-Tools-27a2bbb_GH0.tar.gz) = 1126885 +SHA256 (xenia-project-utfcpp-f295c4b_GH0.tar.gz) = fbd18f3800b2c5142af34b987ea43b7e06efab5866a1e9a065871ff4773eaa98 +SIZE (xenia-project-utfcpp-f295c4b_GH0.tar.gz) = 26521 +SHA256 (zeux-volk-30a851b_GH0.tar.gz) = e0291ed4a2918a020e42cee1c89eeab82358120565af0d6d5c3f6b6af1671ddf +SIZE (zeux-volk-30a851b_GH0.tar.gz) = 18867 +SHA256 (xenia-project-xbyak-bc70e7e_GH0.tar.gz) = 0b62cb42d776138831190bc4cc58726fa8372a9ae6abf5f30e9862894df78a3d +SIZE (xenia-project-xbyak-bc70e7e_GH0.tar.gz) = 214886 +SHA256 (Cyan4973-xxHash-4c881f7_GH0.tar.gz) = 5e62180e6b0b0fea36b0c71cb056e2ef325d9719cb783f3ce597d57e5dfaf76c +SIZE (Cyan4973-xxHash-4c881f7_GH0.tar.gz) = 156911 +SHA256 (Triang3l-premake-androidmk-01a84c7_GH0.tar.gz) = 848ef95d8d2c0c8a140425a5ad3a62d58878e3424c4bbcb17bfade18626fd3bb +SIZE (Triang3l-premake-androidmk-01a84c7_GH0.tar.gz) = 6357 +SHA256 (xenia-project-FFmpeg-09eac85_GH0.tar.gz) = 778d8228335487c47394148770cd22e35c7a114327de1cb986f94b4dc40b2b9c +SIZE (xenia-project-FFmpeg-09eac85_GH0.tar.gz) = 13746426 +SHA256 (openluopworld-aes_128-b5b7f55_GH0.tar.gz) = f28a2abe08a15fedc3456ab5f6bdf9ca12ebe16ce403ace545caeda097cc5c61 +SIZE (openluopworld-aes_128-b5b7f55_GH0.tar.gz) = 23615 +SHA256 (xenia-project-capstone-f9c6a90_GH0.tar.gz) = e5ede1d0df36f723082bff8ab8269ed1b95535583e89323ff3b957861a52e843 +SIZE (xenia-project-capstone-f9c6a90_GH0.tar.gz) = 3434224 +SHA256 (discord-discord-rpc-eff23a7_GH0.tar.gz) = 0ac2f073cddb51c77959ba8b5e81efb6bfae750d5fae35322107faeb24ada937 +SIZE (discord-discord-rpc-eff23a7_GH0.tar.gz) = 2107798 +SHA256 (fmtlib-fmt-27e3c0f_GH0.tar.gz) = 98dce71ba3a092ba0ac18735f48e1769ab66d30c457b18518fd5d25631f04835 +SIZE (fmtlib-fmt-27e3c0f_GH0.tar.gz) = 733462 +SHA256 (ocornut-imgui-ca30ef4_GH0.tar.gz) = e13c13a90c22883a08d0be96346926efe9c3bbc90993747780e77a5e775f2c74 +SIZE (ocornut-imgui-ca30ef4_GH0.tar.gz) = 1222397 +SHA256 (jarro2783-cxxopts-48e265d_GH0.tar.gz) = 17b5c6fba32f17a7ae425b915d4097ab19b097d84711f2b53724a67a88d1bd62 +SIZE (jarro2783-cxxopts-48e265d_GH0.tar.gz) = 88416 +SHA256 (HowardHinnant-date-97246a6_GH0.tar.gz) = 0567ce5cc82084ca790ce315ee0b4f57f5be3c009c1682e78d14c794e5d7fc28 +SIZE (HowardHinnant-date-97246a6_GH0.tar.gz) = 824404 +SHA256 (libsdl-org-SDL-d28437d_GH0.tar.gz) = 878b79cb48ec0f959e9fe5f1998ad65693883cfdf1e0b60681d9b4ba264ec9fb +SIZE (libsdl-org-SDL-d28437d_GH0.tar.gz) = 6503674 +SHA256 (microsoft-DirectXShaderCompiler-6b6f402_GH0.tar.gz) = 95ed2f42a71ae41245bb204979fbb6a3c9421fe3aa3d557ac8188119aeff5548 +SIZE (microsoft-DirectXShaderCompiler-6b6f402_GH0.tar.gz) = 22760753 +SHA256 (benvanik-binutils-ppc-cygwin-6f3f15d_GH0.tar.gz) = 995522e41ad3a65426148ff73bda0fe4c1fed70f9985866c47277b645e84e5c4 +SIZE (benvanik-binutils-ppc-cygwin-6f3f15d_GH0.tar.gz) = 37917842 +SHA256 (catchorg-Catch2-5c88067_GH0.tar.gz) = 1d24f7db65ddbe5a7a9ff2b7d5131fb02d87c962e0229308231f7b774b25a967 +SIZE (catchorg-Catch2-5c88067_GH0.tar.gz) = 659840 +SHA256 (skystrife-cpptoml-fededad_GH0.tar.gz) = dd2d129b67f537ae7d6f8d8d084c8c0d772d0f5b4b3118c1892e67ff536e335e +SIZE (skystrife-cpptoml-fededad_GH0.tar.gz) = 47398 +SHA256 (xenia-project-disruptorplus-cb83e4b_GH0.tar.gz) = f2985a69cf721ff189de2c3fabc7f295e5d6363391bfb990469ea752fc05cd69 +SIZE (xenia-project-disruptorplus-cb83e4b_GH0.tar.gz) = 25470 +SHA256 (boostorg-nowide-4412f9f_GH0.tar.gz) = 676e1817c2ea096edc5d13bbe6967113124ace3ff898e1809f0cfdc145a554de +SIZE (boostorg-nowide-4412f9f_GH0.tar.gz) = 94878 diff --git a/emulators/xenia/files/patch-premake5.lua b/emulators/xenia/files/patch-premake5.lua new file mode 100644 index 0000000..0f7f275 --- /dev/null +++ b/emulators/xenia/files/patch-premake5.lua @@ -0,0 +1,25 @@ +--- premake5.lua.orig 2021-06-09 19:56:36 UTC ++++ premake5.lua +@@ -21,11 +21,14 @@ includedirs({ + ".", + "src", + "third_party", ++ "third_party/nowide/include", + }) + + defines({ + "_UNICODE", + "UNICODE", ++ "BOOST_NOWIDE_USE_FILEBUF_REPLACEMENT", ++ "BOOST_NOWIDE_FSTREAM_INCLUDED_HPP", + }) + + cppdialect("C++17") +@@ -102,7 +105,6 @@ filter("platforms:Linux") + }) + pkg_config.all("gtk+-x11-3.0") + links({ +- "stdc++fs", + "dl", + "lz4", + "pthread", diff --git a/emulators/xenia/files/patch-src_xenia_app_premake5.lua b/emulators/xenia/files/patch-src_xenia_app_premake5.lua new file mode 100644 index 0000000..a063897 --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_app_premake5.lua @@ -0,0 +1,13 @@ +--- src/xenia/app/premake5.lua.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/app/premake5.lua +@@ -38,8 +38,8 @@ project("xenia-app") + "discord-rpc", + "glslang-spirv", + "imgui", +- "libavcodec", +- "libavutil", ++ "avcodec", ++ "avutil", + "mspack", + "snappy", + "spirv-tools", diff --git a/emulators/xenia/files/patch-src_xenia_app_xenia__main.cc b/emulators/xenia/files/patch-src_xenia_app_xenia__main.cc new file mode 100644 index 0000000..6911c26 --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_app_xenia__main.cc @@ -0,0 +1,11 @@ +--- src/xenia/app/xenia_main.cc.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/app/xenia_main.cc +@@ -226,7 +226,7 @@ int xenia_main(const std::vector& args) { + if (!cvars::portable && + !std::filesystem::exists(storage_root / "portable.txt")) { + storage_root = xe::filesystem::GetUserFolder(); +-#if defined(XE_PLATFORM_WIN32) || defined(XE_PLATFORM_GNU_LINUX) ++#if defined(XE_PLATFORM_WIN32) || defined(XE_PLATFORM_GNU_LINUX) || defined(XE_PLATFORM_FREEBSD) + storage_root = storage_root / "Xenia"; + #else + // TODO(Triang3l): Point to the app's external storage "files" directory diff --git a/emulators/xenia/files/patch-src_xenia_apu_premake5.lua b/emulators/xenia/files/patch-src_xenia_apu_premake5.lua new file mode 100644 index 0000000..b0628ff --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_apu_premake5.lua @@ -0,0 +1,13 @@ +--- src/xenia/apu/premake5.lua.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/apu/premake5.lua +@@ -7,8 +7,8 @@ project("xenia-apu") + kind("StaticLib") + language("C++") + links({ +- "libavcodec", +- "libavutil", ++ "avcodec", ++ "avutil", + "xenia-base", + }) + defines({ diff --git a/emulators/xenia/files/patch-src_xenia_base_atomic.h b/emulators/xenia/files/patch-src_xenia_base_atomic.h new file mode 100644 index 0000000..6650679 --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_base_atomic.h @@ -0,0 +1,11 @@ +--- src/xenia/base/atomic.h.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/base/atomic.h +@@ -94,7 +94,7 @@ inline bool atomic_cas(int64_t old_value, int64_t new_ + old_value) == old_value; + } + +-#elif XE_PLATFORM_LINUX ++#elif XE_PLATFORM_LINUX || XE_PLATFORM_FREEBSD + + inline int32_t atomic_inc(volatile int32_t* value) { + return __sync_add_and_fetch(value, 1); diff --git a/emulators/xenia/files/patch-src_xenia_base_clock__posix.cc b/emulators/xenia/files/patch-src_xenia_base_clock__posix.cc new file mode 100644 index 0000000..49b7197 --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_base_clock__posix.cc @@ -0,0 +1,26 @@ +--- src/xenia/base/clock_posix.cc.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/base/clock_posix.cc +@@ -16,14 +16,14 @@ namespace xe { + + uint64_t Clock::host_tick_frequency_platform() { + timespec res; +- clock_getres(CLOCK_MONOTONIC_RAW, &res); ++ clock_getres(CLOCK_MONOTONIC, &res); + + return uint64_t(res.tv_sec) + uint64_t(res.tv_nsec) * 1000000000ull; + } + + uint64_t Clock::host_tick_count_platform() { + timespec res; +- clock_gettime(CLOCK_MONOTONIC_RAW, &res); ++ clock_gettime(CLOCK_MONOTONIC, &res); + + return uint64_t(res.tv_sec) + uint64_t(res.tv_nsec) * 1000000000ull; + } +@@ -43,4 +43,4 @@ uint64_t Clock::QueryHostUptimeMillis() { + return host_tick_count_platform() * 1000 / host_tick_frequency_platform(); + } + +-} // namespace xe +\ No newline at end of file ++} // namespace xe diff --git a/emulators/xenia/files/patch-src_xenia_base_platform.h b/emulators/xenia/files/patch-src_xenia_base_platform.h new file mode 100644 index 0000000..b0a88aa --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_base_platform.h @@ -0,0 +1,11 @@ +--- src/xenia/base/platform.h.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/base/platform.h +@@ -37,6 +37,8 @@ + #elif defined(__gnu_linux__) + #define XE_PLATFORM_GNU_LINUX 1 + #define XE_PLATFORM_LINUX 1 ++#elif defined(__FreeBSD__) ++#define XE_PLATFORM_FREEBSD 1 + #else + #error Unsupported target OS. + #endif diff --git a/emulators/xenia/files/patch-src_xenia_base_threading__posix.cc b/emulators/xenia/files/patch-src_xenia_base_threading__posix.cc new file mode 100644 index 0000000..e6054fe --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_base_threading__posix.cc @@ -0,0 +1,63 @@ +--- src/xenia/base/threading_posix.cc.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/base/threading_posix.cc +@@ -25,6 +25,11 @@ + #include + #include + ++#if XE_PLATFORM_FREEBSD ++ #include ++ #include ++#endif ++ + #if XE_PLATFORM_ANDROID + #include + +@@ -93,7 +98,11 @@ void EnableAffinityConfiguration() {} + // uint64_t ticks() { return mach_absolute_time(); } + + uint32_t current_thread_system_id() { ++#if XE_PLATFORM_FREEBSD ++ return static_cast((unsigned int)pthread_getthreadid_np()); ++#else + return static_cast(syscall(SYS_gettid)); ++#endif + } + + void MaybeYield() { +@@ -617,10 +626,17 @@ class PosixCondition : public PosixConditionBa + } + #endif + ++#if XE_PLATFORM_FREEBSD ++ uint32_t system_id() const { return static_cast((unsigned long)thread_); } ++#else + uint32_t system_id() const { return static_cast(thread_); } ++#endif + + uint64_t affinity_mask() { + WaitStarted(); ++#if XE_PLATFORM_FREEBSD ++ typedef cpuset_t cpu_set_t; ++#endif + cpu_set_t cpu_set; + #if XE_PLATFORM_ANDROID + if (sched_getaffinity(pthread_gettid_np(thread_), sizeof(cpu_set_t), +@@ -643,6 +659,9 @@ class PosixCondition : public PosixConditionBa + + void set_affinity_mask(uint64_t mask) { + WaitStarted(); ++ #if XE_PLATFORM_FREEBSD ++ typedef cpuset_t cpu_set_t; ++ #endif + cpu_set_t cpu_set; + CPU_ZERO(&cpu_set); + for (auto i = 0u; i < 64; i++) { +@@ -691,6 +710,8 @@ class PosixCondition : public PosixConditionBa + #if XE_PLATFORM_ANDROID + sigqueue(pthread_gettid_np(thread_), + GetSystemSignal(SignalType::kThreadUserCallback), value); ++#elif XE_PLATFORM_FREEBSD ++ pthread_kill(thread_, GetSystemSignal(SignalType::kThreadUserCallback)); + #else + pthread_sigqueue(thread_, GetSystemSignal(SignalType::kThreadUserCallback), + value); diff --git a/emulators/xenia/files/patch-src_xenia_config.cc b/emulators/xenia/files/patch-src_xenia_config.cc new file mode 100644 index 0000000..25a9aca --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_config.cc @@ -0,0 +1,30 @@ +--- src/xenia/config.cc.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/config.cc +@@ -8,6 +8,7 @@ + */ + + #include "config.h" ++#include + + #include "third_party/cpptoml/include/cpptoml.h" + #include "third_party/fmt/include/fmt/format.h" +@@ -18,14 +19,13 @@ + #include "xenia/base/string.h" + #include "xenia/base/string_buffer.h" + +-std::shared_ptr ParseFile( +- const std::filesystem::path& filename) { +- std::ifstream file(filename); +- if (!file.is_open()) { +- throw cpptoml::parse_exception(xe::path_to_utf8(filename) + ++std::shared_ptr ParseFile(const std::filesystem::path& fn) { ++ std::ifstream ifn(fn); ++ if (!ifn.is_open()) { ++ throw cpptoml::parse_exception(xe::path_to_utf8(fn) + + " could not be opened for parsing"); + } +- cpptoml::parser p(file); ++ cpptoml::parser p(ifn); + return p.parse(); + } + diff --git a/emulators/xenia/files/patch-src_xenia_gpu_d3d12_premake5.lua b/emulators/xenia/files/patch-src_xenia_gpu_d3d12_premake5.lua new file mode 100644 index 0000000..16fded7 --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_gpu_d3d12_premake5.lua @@ -0,0 +1,24 @@ +--- src/xenia/gpu/d3d12/premake5.lua.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/gpu/d3d12/premake5.lua +@@ -46,8 +46,8 @@ project("xenia-gpu-d3d12-trace-viewer") + "dxbc", + "fmt", + "imgui", +- "libavcodec", +- "libavutil", ++ "avcodec", ++ "avutil", + "mspack", + "snappy", + "xxhash", +@@ -93,8 +93,8 @@ project("xenia-gpu-d3d12-trace-dump") + "dxbc", + "fmt", + "imgui", +- "libavcodec", +- "libavutil", ++ "avcodec", ++ "avutil", + "mspack", + "snappy", + "xxhash", diff --git a/emulators/xenia/files/patch-src_xenia_gpu_vulkan_premake5.lua b/emulators/xenia/files/patch-src_xenia_gpu_vulkan_premake5.lua new file mode 100644 index 0000000..23043d5 --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_gpu_vulkan_premake5.lua @@ -0,0 +1,24 @@ +--- src/xenia/gpu/vulkan/premake5.lua.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/gpu/vulkan/premake5.lua +@@ -52,8 +52,8 @@ project("xenia-gpu-vulkan-trace-viewer") + "fmt", + "glslang-spirv", + "imgui", +- "libavcodec", +- "libavutil", ++ "avcodec", ++ "avutil", + "mspack", + "snappy", + "spirv-tools", +@@ -121,8 +121,8 @@ project("xenia-gpu-vulkan-trace-dump") + "fmt", + "glslang-spirv", + "imgui", +- "libavcodec", +- "libavutil", ++ "avcodec", ++ "avutil", + "mspack", + "snappy", + "spirv-tools", diff --git a/emulators/xenia/files/patch-src_xenia_kernel_xam_xam__net.cc b/emulators/xenia/files/patch-src_xenia_kernel_xam_xam__net.cc new file mode 100644 index 0000000..737bee9 --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_kernel_xam_xam__net.cc @@ -0,0 +1,11 @@ +--- src/xenia/kernel/xam/xam_net.cc.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/kernel/xam/xam_net.cc +@@ -26,7 +26,7 @@ + // NOTE: must be included last as it expects windows.h to already be included. + #define _WINSOCK_DEPRECATED_NO_WARNINGS // inet_addr + #include // NOLINT(build/include_order) +-#elif XE_PLATFORM_LINUX ++#elif XE_PLATFORM_LINUX || XE_PLATFORM_FREEBSD + #include + #include + #include diff --git a/emulators/xenia/files/patch-src_xenia_kernel_xboxkrnl_xboxkrnl__strings.cc b/emulators/xenia/files/patch-src_xenia_kernel_xboxkrnl_xboxkrnl__strings.cc new file mode 100644 index 0000000..0ceab1c --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_kernel_xboxkrnl_xboxkrnl__strings.cc @@ -0,0 +1,179 @@ +--- src/xenia/kernel/xboxkrnl/xboxkrnl_strings.cc.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/kernel/xboxkrnl/xboxkrnl_strings.cc +@@ -117,8 +117,8 @@ int32_t format_core(PPCContext* ppc_context, FormatDat + const bool wide) { + int32_t count = 0; + +- char work8[512]; +- char16_t work16[4]; ++ char work[512]; ++ wchar_t wwork[4]; + + struct { + const void* buffer; +@@ -339,13 +339,13 @@ int32_t format_core(PPCContext* ppc_context, FormatDat + auto value = args.get32(); + + if (!is_wide) { +- work8[0] = (uint8_t)value; +- text.buffer = &work8[0]; ++ work[0] = (uint8_t)value; ++ text.buffer = &work[0]; + text.length = 1; + text.is_wide = false; + } else { +- work16[0] = (uint16_t)value; +- text.buffer = &work16[0]; ++ wwork[0] = (uint16_t)value; ++ text.buffer = &wwork[0]; + text.length = 1; + text.is_wide = true; + text.swap_wide = false; +@@ -378,7 +378,7 @@ int32_t format_core(PPCContext* ppc_context, FormatDat + } + + if (precision >= 0) { +- precision = std::min(precision, (int32_t)xe::countof(work8)); ++ precision = std::min(precision, (int32_t)xe::countof(work)); + } else { + precision = 1; + } +@@ -396,7 +396,7 @@ int32_t format_core(PPCContext* ppc_context, FormatDat + prefix.length = 0; + } + +- char* end = &work8[xe::countof(work8) - 1]; ++ char* end = &work[xe::countof(work) - 1]; + char* start = end; + start[0] = '\0'; + +@@ -471,9 +471,9 @@ int32_t format_core(PPCContext* ppc_context, FormatDat + + auto s = format_double(value, precision, c, flags); + auto length = (int32_t)s.size(); +- assert_true(length < xe::countof(work8)); ++ assert_true(length < xe::countof(work)); + +- auto start = &work8[0]; ++ auto start = &work[0]; + auto end = &start[length]; + + std::memcpy(start, s.c_str(), length); +@@ -637,7 +637,7 @@ int32_t format_core(PPCContext* ppc_context, FormatDat + } + } + } else { +- // it's a const char16_t* ++ // it's a const wchar_t* + auto b = (const uint16_t*)text.buffer; + if (text.swap_wide) { + while (remaining-- > 0) { +@@ -768,15 +768,15 @@ class WideStringFormatData : public FormatData { + } + + bool put(uint16_t c) { +- output_ << (char16_t)c; ++ output_ << (wchar_t)c; + return true; + } + +- std::u16string wstr() const { return output_.str(); } ++ std::wstring wstr() const { return output_.str(); } + + private: + const uint16_t* input_; +- std::basic_stringstream output_; ++ std::wostringstream output_; + }; + + class WideCountFormatData : public FormatData { +@@ -830,7 +830,7 @@ SHIM_CALL DbgPrint_shim(PPCContext* ppc_context, Kerne + return; + } + +- XELOGD("(DbgPrint) {}", data.str()); ++ XELOGD("(DbgPrint) %s", data.str().c_str()); + + SHIM_SET_RETURN_32(X_STATUS_SUCCESS); + } +@@ -841,7 +841,7 @@ SHIM_CALL _snprintf_shim(PPCContext* ppc_context, Kern + int32_t buffer_count = SHIM_GET_ARG_32(1); + uint32_t format_ptr = SHIM_GET_ARG_32(2); + +- XELOGD("_snprintf({:08X}, {}, {:08X}, ...)", buffer_ptr, buffer_count, ++ XELOGD("_snprintf(%08X, %i, %08X, ...)", buffer_ptr, buffer_count, + format_ptr); + + if (buffer_ptr == 0 || buffer_count <= 0 || format_ptr == 0) { +@@ -877,7 +877,7 @@ SHIM_CALL sprintf_shim(PPCContext* ppc_context, Kernel + uint32_t buffer_ptr = SHIM_GET_ARG_32(0); + uint32_t format_ptr = SHIM_GET_ARG_32(1); + +- XELOGD("sprintf({:08X}, {:08X}, ...)", buffer_ptr, format_ptr); ++ XELOGD("sprintf(%08X, %08X, ...)", buffer_ptr, format_ptr); + + if (buffer_ptr == 0 || format_ptr == 0) { + SHIM_SET_RETURN_32(-1); +@@ -906,7 +906,7 @@ SHIM_CALL _snwprintf_shim(PPCContext* ppc_context, Ker + int32_t buffer_count = SHIM_GET_ARG_32(1); + uint32_t format_ptr = SHIM_GET_ARG_32(2); + +- XELOGD("_snwprintf({:08X}, {}, {:08X}, ...)", buffer_ptr, buffer_count, ++ XELOGD("_snwprintf(%08X, %i, %08X, ...)", buffer_ptr, buffer_count, + format_ptr); + + if (buffer_ptr == 0 || buffer_count <= 0 || format_ptr == 0) { +@@ -942,7 +942,7 @@ SHIM_CALL swprintf_shim(PPCContext* ppc_context, Kerne + uint32_t buffer_ptr = SHIM_GET_ARG_32(0); + uint32_t format_ptr = SHIM_GET_ARG_32(1); + +- XELOGD("swprintf({:08X}, {:08X}, ...)", buffer_ptr, format_ptr); ++ XELOGD("swprintf(%08X, %08X, ...)", buffer_ptr, format_ptr); + + if (buffer_ptr == 0 || format_ptr == 0) { + SHIM_SET_RETURN_32(-1); +@@ -972,7 +972,7 @@ SHIM_CALL _vsnprintf_shim(PPCContext* ppc_context, Ker + uint32_t format_ptr = SHIM_GET_ARG_32(2); + uint32_t arg_ptr = SHIM_GET_ARG_32(3); + +- XELOGD("_vsnprintf({:08X}, {}, {:08X}, {:08X})", buffer_ptr, buffer_count, ++ XELOGD("_vsnprintf(%08X, %i, %08X, %08X)", buffer_ptr, buffer_count, + format_ptr, arg_ptr); + + if (buffer_ptr == 0 || buffer_count <= 0 || format_ptr == 0) { +@@ -1012,7 +1012,7 @@ SHIM_CALL _vsnwprintf_shim(PPCContext* ppc_context, Ke + uint32_t format_ptr = SHIM_GET_ARG_32(2); + uint32_t arg_ptr = SHIM_GET_ARG_32(3); + +- XELOGD("_vsnwprintf({:08X}, {}, {:08X}, {:08X})", buffer_ptr, buffer_count, ++ XELOGD("_vsnwprintf(%08X, %i, %08X, %08X)", buffer_ptr, buffer_count, + format_ptr, arg_ptr); + + if (buffer_ptr == 0 || buffer_count <= 0 || format_ptr == 0) { +@@ -1051,7 +1051,7 @@ SHIM_CALL vsprintf_shim(PPCContext* ppc_context, Kerne + uint32_t format_ptr = SHIM_GET_ARG_32(1); + uint32_t arg_ptr = SHIM_GET_ARG_32(2); + +- XELOGD("vsprintf({:08X}, {:08X}, {:08X})", buffer_ptr, format_ptr, arg_ptr); ++ XELOGD("vsprintf(%08X, %08X, %08X)", buffer_ptr, format_ptr, arg_ptr); + + if (buffer_ptr == 0 || format_ptr == 0) { + SHIM_SET_RETURN_32(-1); +@@ -1079,7 +1079,7 @@ SHIM_CALL _vscwprintf_shim(PPCContext* ppc_context, Ke + uint32_t format_ptr = SHIM_GET_ARG_32(0); + uint32_t arg_ptr = SHIM_GET_ARG_32(1); + +- XELOGD("_vscwprintf({:08X}, {:08X})", format_ptr, arg_ptr); ++ XELOGD("_vscwprintf(%08X, %08X)", format_ptr, arg_ptr); + + if (format_ptr == 0) { + SHIM_SET_RETURN_32(-1); +@@ -1102,7 +1102,7 @@ SHIM_CALL vswprintf_shim(PPCContext* ppc_context, Kern + uint32_t format_ptr = SHIM_GET_ARG_32(1); + uint32_t arg_ptr = SHIM_GET_ARG_32(2); + +- XELOGD("vswprintf({:08X}, {:08X}, {:08X})", buffer_ptr, format_ptr, arg_ptr); ++ XELOGD("vswprintf(%08X, %08X, %08X)", buffer_ptr, format_ptr, arg_ptr); + + if (buffer_ptr == 0 || format_ptr == 0) { + SHIM_SET_RETURN_32(-1); diff --git a/emulators/xenia/files/patch-src_xenia_kernel_xsocket.cc b/emulators/xenia/files/patch-src_xenia_kernel_xsocket.cc new file mode 100644 index 0000000..79e455d --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_kernel_xsocket.cc @@ -0,0 +1,39 @@ +--- src/xenia/kernel/xsocket.cc.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/kernel/xsocket.cc +@@ -44,9 +44,9 @@ X_STATUS XSocket::Initialize(AddressFamily af, Type ty + type_ = type; + proto_ = proto; + +- if (proto == Protocol::IPPROTO_VDP) { ++ if (proto == Protocol::IPPROTO_VDP_CXX) { + // VDP is a layer on top of UDP. +- proto = Protocol::IPPROTO_UDP; ++ proto = Protocol::IPPROTO_UDP_CXX; + } + + native_handle_ = socket(af, type, proto); +@@ -60,7 +60,7 @@ X_STATUS XSocket::Initialize(AddressFamily af, Type ty + X_STATUS XSocket::Close() { + #if XE_PLATFORM_WIN32 + int ret = closesocket(native_handle_); +-#elif XE_PLATFORM_LINUX ++#elif XE_PLATFORM_LINUX || XE_PLATFORM_FREEBSD + int ret = close(native_handle_); + #endif + +@@ -103,7 +103,7 @@ X_STATUS XSocket::IOControl(uint32_t cmd, uint8_t* arg + } + + return X_STATUS_SUCCESS; +-#elif XE_PLATFORM_LINUX ++#elif XE_PLATFORM_LINUX || XE_PLATFORM_FREEBSD + return X_STATUS_UNSUCCESSFUL; + #endif + } +@@ -256,4 +256,4 @@ bool XSocket::QueuePacket(uint32_t src_ip, uint16_t sr + } + + } // namespace kernel +-} // namespace xe +\ No newline at end of file ++} // namespace xe diff --git a/emulators/xenia/files/patch-src_xenia_kernel_xsocket.h b/emulators/xenia/files/patch-src_xenia_kernel_xsocket.h new file mode 100644 index 0000000..87d7c4c --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_kernel_xsocket.h @@ -0,0 +1,26 @@ +--- src/xenia/kernel/xsocket.h.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/kernel/xsocket.h +@@ -78,13 +78,13 @@ class XSocket : public XObject { + }; + + enum Protocol { +- IPPROTO_TCP = 6, +- IPPROTO_UDP = 17, ++ IPPROTO_TCP_CXX = 6, ++ IPPROTO_UDP_CXX = 17, + + // LIVE Voice and Data Protocol + // https://blog.csdn.net/baozi3026/article/details/4277227 + // Format: [cbGameData][GameData(encrypted)][VoiceData(unencrypted)] +- IPPROTO_VDP = 254, ++ IPPROTO_VDP_CXX = 254, + }; + + XSocket(KernelState* kernel_state); +@@ -149,4 +149,4 @@ class XSocket : public XObject { + } // namespace kernel + } // namespace xe + +-#endif // XENIA_KERNEL_XSOCKET_H_ +\ No newline at end of file ++#endif // XENIA_KERNEL_XSOCKET_H_ diff --git a/emulators/xenia/files/patch-src_xenia_ui_vulkan_vulkan.h b/emulators/xenia/files/patch-src_xenia_ui_vulkan_vulkan.h new file mode 100644 index 0000000..9e7639c --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_ui_vulkan_vulkan.h @@ -0,0 +1,11 @@ +--- src/xenia/ui/vulkan/vulkan.h.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/ui/vulkan/vulkan.h +@@ -14,6 +14,8 @@ + + #if XE_PLATFORM_WIN32 + #define VK_USE_PLATFORM_WIN32_KHR 1 ++#elif XE_PLATFORM_FREEBSD ++#define VK_USE_PLATFORM_XCB_KHR 1 + #elif XE_PLATFORM_LINUX + #define VK_USE_PLATFORM_XCB_KHR 1 + #else diff --git a/emulators/xenia/files/patch-src_xenia_ui_vulkan_vulkan__context.cc b/emulators/xenia/files/patch-src_xenia_ui_vulkan_vulkan__context.cc new file mode 100644 index 0000000..ab19a2f --- /dev/null +++ b/emulators/xenia/files/patch-src_xenia_ui_vulkan_vulkan__context.cc @@ -0,0 +1,20 @@ +--- src/xenia/ui/vulkan/vulkan_context.cc.orig 2021-06-09 19:56:36 UTC ++++ src/xenia/ui/vulkan/vulkan_context.cc +@@ -25,7 +25,7 @@ + #include "xenia/ui/vulkan/vulkan_util.h" + #include "xenia/ui/window.h" + +-#if XE_PLATFORM_LINUX ++#if XE_PLATFORM_LINUX || XE_PLATFORM_FREEBSD + #include "xenia/ui/window_gtk.h" + + #include +@@ -69,7 +69,7 @@ bool VulkanContext::Initialize() { + status = vkCreateWin32SurfaceKHR(*provider->instance(), &create_info, + nullptr, &surface); + CheckResult(status, "vkCreateWin32SurfaceKHR"); +-#elif XE_PLATFORM_LINUX ++#elif XE_PLATFORM_LINUX || XE_PLATFORM_FREEBSD + #ifdef GDK_WINDOWING_X11 + GtkWidget* window_handle = + static_cast(target_window_->native_handle()); diff --git a/emulators/xenia/files/patch-third__party_cpptoml_include_cpptoml.h b/emulators/xenia/files/patch-third__party_cpptoml_include_cpptoml.h new file mode 100644 index 0000000..afafb2d --- /dev/null +++ b/emulators/xenia/files/patch-third__party_cpptoml_include_cpptoml.h @@ -0,0 +1,51 @@ +--- third_party/cpptoml/include/cpptoml.h.orig 2018-10-22 20:28:28 UTC ++++ third_party/cpptoml/include/cpptoml.h +@@ -12,7 +12,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +@@ -188,8 +188,7 @@ inline std::ostream& operator<<(std::ostream& os, cons + fill_guard g{os}; + os.fill('0'); + +- using std::setw; +- os << setw(4) << dt.year << "-" << setw(2) << dt.month << "-" << setw(2) ++ os << std::setw(4) << dt.year << "-" << std::setw(2) << dt.month << "-" << std::setw(2) + << dt.day; + + return os; +@@ -200,9 +199,8 @@ inline std::ostream& operator<<(std::ostream& os, cons + fill_guard g{os}; + os.fill('0'); + +- using std::setw; +- os << setw(2) << ltime.hour << ":" << setw(2) << ltime.minute << ":" +- << setw(2) << ltime.second; ++ os << std::setw(2) << ltime.hour << ":" << std::setw(2) << ltime.minute << ":" ++ << std::setw(2) << ltime.second; + + if (ltime.microsecond > 0) + { +@@ -224,8 +222,6 @@ inline std::ostream& operator<<(std::ostream& os, cons + fill_guard g{os}; + os.fill('0'); + +- using std::setw; +- + if (zo.hour_offset != 0 || zo.minute_offset != 0) + { + if (zo.hour_offset > 0) +@@ -236,7 +232,7 @@ inline std::ostream& operator<<(std::ostream& os, cons + { + os << "-"; + } +- os << setw(2) << std::abs(zo.hour_offset) << ":" << setw(2) ++ os << std::setw(2) << std::abs(zo.hour_offset) << ":" << std::setw(2) + << std::abs(zo.minute_offset); + } + else diff --git a/emulators/xenia/files/patch-third__party_crypto_sha256.cpp b/emulators/xenia/files/patch-third__party_crypto_sha256.cpp new file mode 100644 index 0000000..d279e21 --- /dev/null +++ b/emulators/xenia/files/patch-third__party_crypto_sha256.cpp @@ -0,0 +1,18 @@ +--- third_party/crypto/sha256.cpp.orig 2021-06-09 19:56:36 UTC ++++ third_party/crypto/sha256.cpp +@@ -9,7 +9,7 @@ + + // big endian architectures need #define __BYTE_ORDER __BIG_ENDIAN + #ifndef _MSC_VER +-#include ++#include + #endif + + namespace sha256 { +@@ -573,4 +573,4 @@ std::string SHA256::operator()(const std::string& text + return getHash(); + } + +-} +\ No newline at end of file ++} diff --git a/emulators/xenia/files/patch-third__party_microprofile_microprofile.h b/emulators/xenia/files/patch-third__party_microprofile_microprofile.h new file mode 100644 index 0000000..b6a3e0d --- /dev/null +++ b/emulators/xenia/files/patch-third__party_microprofile_microprofile.h @@ -0,0 +1,11 @@ +--- third_party/microprofile/microprofile.h.orig 2021-06-09 19:56:36 UTC ++++ third_party/microprofile/microprofile.h +@@ -242,7 +242,7 @@ typedef uint32_t MicroProfileThreadIdType; + #define MP_GETCURRENTPROCESSID() GetCurrentProcessId() + typedef uint32_t MicroProfileProcessIdType; + +-#elif defined(__linux__) ++#elif defined(__linux__) || defined(__FreeBSD__) + #include + #include + inline int64_t MicroProfileTicksPerSecondCpu() diff --git a/emulators/xenia/files/patch-third__party_premake-core_src_tools_gcc.lua b/emulators/xenia/files/patch-third__party_premake-core_src_tools_gcc.lua new file mode 100644 index 0000000..ba228aa --- /dev/null +++ b/emulators/xenia/files/patch-third__party_premake-core_src_tools_gcc.lua @@ -0,0 +1,22 @@ +--- third_party/premake-core/src/tools/gcc.lua.orig 2020-11-27 20:23:57 UTC ++++ third_party/premake-core/src/tools/gcc.lua +@@ -516,9 +516,17 @@ + table.insert(static_syslibs, "-l" .. name) + elseif endswith(name, ":shared") then + name = string.sub(name, 0, -8) +- table.insert(shared_syslibs, "-l" .. name) ++ if string.len(name) > 0 then ++ table.insert(shared_syslibs, "-l" .. name) ++ else ++ table.insert(shared_syslibs, "" .. name) ++ end + else +- table.insert(shared_syslibs, "-l" .. name) ++ if string.len(name) > 0 then ++ table.insert(shared_syslibs, "-l" .. name) ++ else ++ table.insert(shared_syslibs, "" .. name) ++ end + end + end + end diff --git a/emulators/xenia/files/patch-third__party_renderdoc_renderdoc__app.h b/emulators/xenia/files/patch-third__party_renderdoc_renderdoc__app.h new file mode 100644 index 0000000..c10ea33 --- /dev/null +++ b/emulators/xenia/files/patch-third__party_renderdoc_renderdoc__app.h @@ -0,0 +1,11 @@ +--- third_party/renderdoc/renderdoc_app.h.orig 2021-06-09 19:56:36 UTC ++++ third_party/renderdoc/renderdoc_app.h +@@ -30,7 +30,7 @@ + + #if defined(WIN32) + #define RENDERDOC_CC __cdecl +-#elif defined(__linux__) ++#elif defined(__linux__) || defined(__FreeBSD__) + #define RENDERDOC_CC + #else + #error "Unknown platform" diff --git a/emulators/xenia/pkg-descr b/emulators/xenia/pkg-descr new file mode 100644 index 0000000..75b5751 --- /dev/null +++ b/emulators/xenia/pkg-descr @@ -0,0 +1,5 @@ +Xenia - Xbox 360 Emulator + +Xenia is an experimental emulator for the Xbox 360. + +WWW: https://github.com/xenia-project/xenia