mirror of
https://github.com/azahar-emu/azahar.git
synced 2026-06-25 04:29:28 -04:00
[CI] Add native Windows ARM64 MSYS2, MSVC and Libretro builds
This commit is contained in:
parent
91128d6625
commit
75fbbd9cbf
7 changed files with 142 additions and 18 deletions
|
|
@ -6,6 +6,16 @@ if [ "$GITHUB_REF_TYPE" == "tag" ]; then
|
||||||
export EXTRA_CMAKE_FLAGS=(-DENABLE_QT_UPDATE_CHECKER=ON)
|
export EXTRA_CMAKE_FLAGS=(-DENABLE_QT_UPDATE_CHECKER=ON)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Map the workflow ARCH (x64/arm64) onto CMake's ARCHITECTURE variable so
|
||||||
|
# Qt downloads and arch-dependent paths pick the right target even if the
|
||||||
|
# compiler-based detection gets confused (e.g. on windows-11-arm runners
|
||||||
|
# where the MSVC setup may land on an x64 host compiler).
|
||||||
|
if [ "$ARCH" = "arm64" ]; then
|
||||||
|
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DARCHITECTURE=arm64)
|
||||||
|
elif [ "$ARCH" = "x64" ]; then
|
||||||
|
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DARCHITECTURE=x86_64)
|
||||||
|
fi
|
||||||
|
|
||||||
cmake .. -G Ninja \
|
cmake .. -G Ninja \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||||
|
|
@ -15,7 +25,13 @@ cmake .. -G Ninja \
|
||||||
"${EXTRA_CMAKE_FLAGS[@]}"
|
"${EXTRA_CMAKE_FLAGS[@]}"
|
||||||
ninja
|
ninja
|
||||||
ninja bundle
|
ninja bundle
|
||||||
strip -s bundle/*.exe
|
# MSVC keeps debug info in separate PDB files, so the .exe has nothing
|
||||||
|
# to strip. The `strip` that ends up in PATH on the runner is also from
|
||||||
|
# Git-for-Windows' x86_64 mingw and can't read arm64 PE binaries.
|
||||||
|
case "$TARGET" in
|
||||||
|
msvc*) ;;
|
||||||
|
*) strip -s bundle/*.exe ;;
|
||||||
|
esac
|
||||||
|
|
||||||
ccache -s -v
|
ccache -s -v
|
||||||
|
|
||||||
|
|
|
||||||
49
.github/workflows/build.yml
vendored
49
.github/workflows/build.yml
vendored
|
|
@ -143,11 +143,35 @@ jobs:
|
||||||
path: artifacts/
|
path: artifacts/
|
||||||
|
|
||||||
windows:
|
windows:
|
||||||
runs-on: windows-latest
|
runs-on: ${{ matrix.runner }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
target: ["msvc", "msys2"]
|
include:
|
||||||
|
- target: msvc
|
||||||
|
arch: x64
|
||||||
|
runner: windows-latest
|
||||||
|
msvc_arch: x64
|
||||||
|
msys2_system: clang64
|
||||||
|
vulkan_sdk_url: https://sdk.lunarg.com/sdk/download/1.4.341.1/windows/vulkansdk-windows-X64-1.4.341.1.exe
|
||||||
|
- target: msys2
|
||||||
|
arch: x64
|
||||||
|
runner: windows-latest
|
||||||
|
msvc_arch: x64
|
||||||
|
msys2_system: clang64
|
||||||
|
vulkan_sdk_url: https://sdk.lunarg.com/sdk/download/1.4.341.1/windows/vulkansdk-windows-X64-1.4.341.1.exe
|
||||||
|
- target: msvc
|
||||||
|
arch: arm64
|
||||||
|
runner: windows-11-arm
|
||||||
|
msvc_arch: amd64_arm64
|
||||||
|
msys2_system: clangarm64
|
||||||
|
vulkan_sdk_url: https://sdk.lunarg.com/sdk/download/1.4.341.1/warm/vulkansdk-windows-ARM64-1.4.341.1.exe
|
||||||
|
- target: msys2
|
||||||
|
arch: arm64
|
||||||
|
runner: windows-11-arm
|
||||||
|
msvc_arch: amd64_arm64
|
||||||
|
msys2_system: clangarm64
|
||||||
|
vulkan_sdk_url: https://sdk.lunarg.com/sdk/download/1.4.341.1/warm/vulkansdk-windows-ARM64-1.4.341.1.exe
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: ${{ (matrix.target == 'msys2' && 'msys2') || 'bash' }} {0}
|
shell: ${{ (matrix.target == 'msys2' && 'msys2') || 'bash' }} {0}
|
||||||
|
|
@ -156,7 +180,8 @@ jobs:
|
||||||
CCACHE_COMPILERCHECK: content
|
CCACHE_COMPILERCHECK: content
|
||||||
CCACHE_SLOPPINESS: time_macros
|
CCACHE_SLOPPINESS: time_macros
|
||||||
OS: windows
|
OS: windows
|
||||||
TARGET: ${{ matrix.target }}
|
TARGET: ${{ matrix.target }}-${{ matrix.arch }}
|
||||||
|
ARCH: ${{ matrix.arch }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
|
|
@ -165,25 +190,27 @@ jobs:
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}
|
key: ${{ runner.os }}-${{ matrix.target }}-${{ matrix.arch }}-${{ github.sha }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-${{ matrix.target }}-
|
${{ runner.os }}-${{ matrix.target }}-${{ matrix.arch }}-
|
||||||
- name: Set up MSVC
|
- name: Set up MSVC
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
if: ${{ matrix.target == 'msvc' }}
|
||||||
uses: ilammy/msvc-dev-cmd@v1
|
uses: ilammy/msvc-dev-cmd@v1
|
||||||
|
with:
|
||||||
|
arch: ${{ matrix.msvc_arch }}
|
||||||
- name: Install extra tools (MSVC)
|
- name: Install extra tools (MSVC)
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
if: ${{ matrix.target == 'msvc' }}
|
||||||
run: choco install ccache ninja ptime wget
|
run: choco install ccache ninja ptime wget
|
||||||
- name: Install vulkan-sdk (MSVC)
|
- name: Install vulkan-sdk (MSVC)
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
if: ${{ matrix.target == 'msvc' }}
|
||||||
run: |
|
run: |
|
||||||
wget https://sdk.lunarg.com/sdk/download/1.4.304.1/windows/VulkanSDK-1.4.304.1-Installer.exe -O D:/a/_temp/vulkan.exe
|
wget ${{ matrix.vulkan_sdk_url }} -O "${{ runner.temp }}/vulkan.exe"
|
||||||
D:/a/_temp/vulkan.exe --accept-licenses --default-answer --confirm-command install
|
"${{ runner.temp }}/vulkan.exe" --accept-licenses --default-answer --confirm-command install
|
||||||
- name: Set up MSYS2
|
- name: Set up MSYS2
|
||||||
if: ${{ matrix.target == 'msys2' }}
|
if: ${{ matrix.target == 'msys2' }}
|
||||||
uses: msys2/setup-msys2@v2
|
uses: msys2/setup-msys2@v2
|
||||||
with:
|
with:
|
||||||
msystem: clang64
|
msystem: ${{ matrix.msys2_system }}
|
||||||
update: true
|
update: true
|
||||||
install: git make p7zip
|
install: git make p7zip
|
||||||
pacboy: >-
|
pacboy: >-
|
||||||
|
|
@ -197,8 +224,8 @@ jobs:
|
||||||
- name: Install NSIS
|
- name: Install NSIS
|
||||||
if: ${{ github.ref_type == 'tag' }}
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
run: |
|
run: |
|
||||||
wget https://download.sourceforge.net/project/nsis/NSIS%203/3.11/nsis-3.11-setup.exe -O D:/a/_temp/nsis-setup.exe
|
wget https://download.sourceforge.net/project/nsis/NSIS%203/3.11/nsis-3.11-setup.exe -O "${{ runner.temp }}/nsis-setup.exe"
|
||||||
ptime D:/a/_temp/nsis-setup.exe /S
|
ptime "${{ runner.temp }}/nsis-setup.exe" /S
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
- name: Disable line ending translation
|
- name: Disable line ending translation
|
||||||
run: git config --global core.autocrlf input
|
run: git config --global core.autocrlf input
|
||||||
|
|
@ -208,7 +235,7 @@ jobs:
|
||||||
if: ${{ github.ref_type == 'tag' }}
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
run: |
|
run: |
|
||||||
cd src\installer
|
cd src\installer
|
||||||
"C:\Program Files (x86)\NSIS\makensis.exe" /DPRODUCT_VARIANT=${{ matrix.target }} /DPRODUCT_VERSION=${{ github.ref_name }} citra.nsi
|
"C:\Program Files (x86)\NSIS\makensis.exe" /DPRODUCT_VARIANT=${{ matrix.target }}-${{ matrix.arch }} /DPRODUCT_VERSION=${{ github.ref_name }} citra.nsi
|
||||||
mkdir ..\..\artifacts 2> NUL
|
mkdir ..\..\artifacts 2> NUL
|
||||||
move /y *.exe ..\..\artifacts\
|
move /y *.exe ..\..\artifacts\
|
||||||
shell: cmd
|
shell: cmd
|
||||||
|
|
|
||||||
42
.github/workflows/libretro.yml
vendored
42
.github/workflows/libretro.yml
vendored
|
|
@ -102,6 +102,48 @@ jobs:
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
path: ./*.zip
|
path: ./*.zip
|
||||||
|
windows-arm64:
|
||||||
|
runs-on: windows-11-arm
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: msys2 {0}
|
||||||
|
env:
|
||||||
|
OS: windows
|
||||||
|
TARGET: arm64
|
||||||
|
BUILD_DIR: build/windows-arm64
|
||||||
|
# LIBRETRO_STATIC + -static fold the clangarm64 runtime (libc++,
|
||||||
|
# libunwind, libwinpthread) into the core, matching what MXE does
|
||||||
|
# for the x86_64 libretro build. Without these, the produced DLL
|
||||||
|
# imports MSYS2 runtime DLLs that aren't ABI-compatible with the
|
||||||
|
# ones a target machine has alongside RetroArch.
|
||||||
|
EXTRA_CORE_ARGS: -DENABLE_LTO=OFF -G Ninja -DLIBRETRO_STATIC=1 -DCMAKE_SHARED_LINKER_FLAGS=-static
|
||||||
|
EXTRA_PATH: bin/Release
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Disable line ending translation
|
||||||
|
shell: pwsh
|
||||||
|
run: git config --global core.autocrlf input
|
||||||
|
- name: Set up MSYS2
|
||||||
|
uses: msys2/setup-msys2@v2
|
||||||
|
with:
|
||||||
|
msystem: clangarm64
|
||||||
|
update: true
|
||||||
|
install: git make zip
|
||||||
|
pacboy: >-
|
||||||
|
toolchain:p cmake:p ninja:p spirv-tools:p
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake $CORE_ARGS $EXTRA_CORE_ARGS . -B $BUILD_DIR
|
||||||
|
cmake --build $BUILD_DIR --target azahar_libretro --config Release -j $(nproc)
|
||||||
|
- name: Pack
|
||||||
|
run: ./.ci/libretro-pack.sh
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
|
path: ./*.zip
|
||||||
macos:
|
macos:
|
||||||
runs-on: macos-26
|
runs-on: macos-26
|
||||||
strategy:
|
strategy:
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,14 @@
|
||||||
if (BUNDLE_TARGET_EXECUTE)
|
if (BUNDLE_TARGET_EXECUTE)
|
||||||
# --- Bundling method logic ---
|
# --- Bundling method logic ---
|
||||||
|
|
||||||
|
# Opt into CMP0207's NEW behavior so file(GET_RUNTIME_DEPENDENCIES)
|
||||||
|
# normalizes paths before regex matching. The exclude pattern below
|
||||||
|
# ('.*system32.*') already matches either slash style, so this is
|
||||||
|
# purely about silencing the dev-mode warning.
|
||||||
|
if (POLICY CMP0207)
|
||||||
|
cmake_policy(SET CMP0207 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
function(symlink_safe_copy from to)
|
function(symlink_safe_copy from to)
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
# Use cmake copy for maximum compatibility.
|
# Use cmake copy for maximum compatibility.
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
set(CURRENT_MODULE_DIR ${CMAKE_CURRENT_LIST_DIR})
|
set(CURRENT_MODULE_DIR ${CMAKE_CURRENT_LIST_DIR})
|
||||||
|
|
||||||
# Determines parameters based on the host and target for downloading the right Qt binaries.
|
# Determines parameters based on the host and target for downloading the right Qt binaries.
|
||||||
function(determine_qt_parameters target host_out type_out arch_out arch_path_out host_type_out host_arch_out host_arch_path_out)
|
function(determine_qt_parameters target host_out type_out arch_out arch_path_out tools_host_out host_type_out host_arch_out host_arch_path_out)
|
||||||
if (target MATCHES "tools_.*")
|
if (target MATCHES "tools_.*")
|
||||||
set(tool ON)
|
set(tool ON)
|
||||||
else()
|
else()
|
||||||
|
|
@ -21,6 +21,10 @@ function(determine_qt_parameters target host_out type_out arch_out arch_path_out
|
||||||
elseif (MSVC)
|
elseif (MSVC)
|
||||||
if ("arm64" IN_LIST ARCHITECTURE)
|
if ("arm64" IN_LIST ARCHITECTURE)
|
||||||
set(arch_path "msvc2022_arm64")
|
set(arch_path "msvc2022_arm64")
|
||||||
|
# aqt serves Windows ARM64 Qt packages under a separate
|
||||||
|
# host namespace; using "windows" here makes aqt parse the
|
||||||
|
# x86_64 package XML and fail to find the arm64 archives.
|
||||||
|
set(host "windows_arm64")
|
||||||
elseif ("x86_64" IN_LIST ARCHITECTURE)
|
elseif ("x86_64" IN_LIST ARCHITECTURE)
|
||||||
set(arch_path "msvc2022_64")
|
set(arch_path "msvc2022_64")
|
||||||
else()
|
else()
|
||||||
|
|
@ -39,6 +43,9 @@ function(determine_qt_parameters target host_out type_out arch_out arch_path_out
|
||||||
set(host_arch_path "msvc2022_64")
|
set(host_arch_path "msvc2022_64")
|
||||||
endif()
|
endif()
|
||||||
set(host_arch "win64_${host_arch_path}")
|
set(host_arch "win64_${host_arch_path}")
|
||||||
|
# The x86_64 desktop Qt used for host tools lives under the
|
||||||
|
# regular "windows" aqt host, even when the target is arm64.
|
||||||
|
set(tools_host "windows")
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Unsupported bundled Qt toolchain. Enable USE_SYSTEM_QT and provide your own.")
|
message(FATAL_ERROR "Unsupported bundled Qt toolchain. Enable USE_SYSTEM_QT and provide your own.")
|
||||||
endif()
|
endif()
|
||||||
|
|
@ -69,6 +76,11 @@ function(determine_qt_parameters target host_out type_out arch_out arch_path_out
|
||||||
set(${type_out} "${type}" PARENT_SCOPE)
|
set(${type_out} "${type}" PARENT_SCOPE)
|
||||||
set(${arch_out} "${arch}" PARENT_SCOPE)
|
set(${arch_out} "${arch}" PARENT_SCOPE)
|
||||||
set(${arch_path_out} "${arch_path}" PARENT_SCOPE)
|
set(${arch_path_out} "${arch_path}" PARENT_SCOPE)
|
||||||
|
if (DEFINED tools_host)
|
||||||
|
set(${tools_host_out} "${tools_host}" PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
set(${tools_host_out} "${host}" PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
if (DEFINED host_type)
|
if (DEFINED host_type)
|
||||||
set(${host_type_out} "${host_type}" PARENT_SCOPE)
|
set(${host_type_out} "${host_type}" PARENT_SCOPE)
|
||||||
else()
|
else()
|
||||||
|
|
@ -100,8 +112,17 @@ function(download_qt_configuration prefix_out target host type arch arch_path ba
|
||||||
set(install_args ${install_args} install-tool --outputdir ${base_path} ${host} desktop ${target})
|
set(install_args ${install_args} install-tool --outputdir ${base_path} ${host} desktop ${target})
|
||||||
else()
|
else()
|
||||||
set(prefix "${base_path}/${target}/${arch_path}")
|
set(prefix "${base_path}/${target}/${arch_path}")
|
||||||
set(install_args ${install_args} install-qt --outputdir ${base_path} ${host} ${type} ${target} ${arch}
|
# aqt's arm64 Qt package layout differs from x86_64 — the per-module archive
|
||||||
-m qtmultimedia --archives qttranslations qttools qtsvg qtbase)
|
# names (qtbase/qtsvg/…) don't exist in its XML, so passing --archives trips
|
||||||
|
# the parser. Install the default archive set for arm64 and let --autodesktop
|
||||||
|
# pull in the matching x86_64 desktop Qt that the arm64 target depends on.
|
||||||
|
if ("${arch_path}" STREQUAL "msvc2022_arm64")
|
||||||
|
set(install_args ${install_args} install-qt --outputdir ${base_path} ${host} ${type} ${target} ${arch}
|
||||||
|
--autodesktop -m qtmultimedia)
|
||||||
|
else()
|
||||||
|
set(install_args ${install_args} install-qt --outputdir ${base_path} ${host} ${type} ${target} ${arch}
|
||||||
|
-m qtmultimedia --archives qttranslations qttools qtsvg qtbase)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT EXISTS "${prefix}")
|
if (NOT EXISTS "${prefix}")
|
||||||
|
|
@ -150,14 +171,14 @@ endfunction()
|
||||||
# Params:
|
# Params:
|
||||||
# target: Qt dependency to install. Specify a version number to download Qt, or "tools_(name)" for a specific build tool.
|
# target: Qt dependency to install. Specify a version number to download Qt, or "tools_(name)" for a specific build tool.
|
||||||
function(download_qt target)
|
function(download_qt target)
|
||||||
determine_qt_parameters("${target}" host type arch arch_path host_type host_arch host_arch_path)
|
determine_qt_parameters("${target}" host type arch arch_path tools_host host_type host_arch host_arch_path)
|
||||||
|
|
||||||
get_external_prefix(qt base_path)
|
get_external_prefix(qt base_path)
|
||||||
file(MAKE_DIRECTORY "${base_path}")
|
file(MAKE_DIRECTORY "${base_path}")
|
||||||
|
|
||||||
download_qt_configuration(prefix "${target}" "${host}" "${type}" "${arch}" "${arch_path}" "${base_path}")
|
download_qt_configuration(prefix "${target}" "${host}" "${type}" "${arch}" "${arch_path}" "${base_path}")
|
||||||
if (DEFINED host_arch_path AND NOT "${host_arch_path}" STREQUAL "${arch_path}")
|
if (DEFINED host_arch_path AND NOT "${host_arch_path}" STREQUAL "${arch_path}")
|
||||||
download_qt_configuration(host_prefix "${target}" "${host}" "${host_type}" "${host_arch}" "${host_arch_path}" "${base_path}")
|
download_qt_configuration(host_prefix "${target}" "${tools_host}" "${host_type}" "${host_arch}" "${host_arch_path}" "${base_path}")
|
||||||
else()
|
else()
|
||||||
set(host_prefix "${prefix}")
|
set(host_prefix "${prefix}")
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,9 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR
|
||||||
CMAKE_SYSTEM_NAME STREQUAL "iOS" OR
|
CMAKE_SYSTEM_NAME STREQUAL "iOS" OR
|
||||||
CMAKE_SYSTEM_NAME STREQUAL "tvOS")
|
CMAKE_SYSTEM_NAME STREQUAL "tvOS")
|
||||||
target_link_libraries(azahar_libretro PRIVATE "-Wl,-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libretro.osx.def")
|
target_link_libraries(azahar_libretro PRIVATE "-Wl,-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libretro.osx.def")
|
||||||
else()
|
elseif (NOT WIN32)
|
||||||
|
# -Bsymbolic is an ELF-only flag controlling how a shared object resolves
|
||||||
|
# its own symbols. PE/COFF has no equivalent; GNU ld silently ignored it
|
||||||
|
# on Windows MinGW, but lld (clangarm64's default linker) rejects it.
|
||||||
target_link_libraries(azahar_libretro PRIVATE "-Wl,-Bsymbolic")
|
target_link_libraries(azahar_libretro PRIVATE "-Wl,-Bsymbolic")
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,12 @@
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
#include "common/string_util.h"
|
#include "common/string_util.h"
|
||||||
|
|
||||||
|
// Pull <sys/stat.h> in here, before any fstat-redirection macros come into
|
||||||
|
// scope. MinGW's <sys/stat.h> declares fstat as a real function (not a
|
||||||
|
// macro); if our `#define fstat _fstat64` were active during its parsing,
|
||||||
|
// the declaration would be rewritten to a conflicting `_fstat64` overload.
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
// 64 bit offsets for MSVC
|
// 64 bit offsets for MSVC
|
||||||
#define fseeko _fseeki64
|
#define fseeko _fseeki64
|
||||||
|
|
@ -47,6 +53,7 @@ typedef struct _stat64 file_stat_t;
|
||||||
#define fstat _fstat64
|
#define fstat _fstat64
|
||||||
#elif defined(HAVE_LIBRETRO)
|
#elif defined(HAVE_LIBRETRO)
|
||||||
typedef struct _stat64 file_stat_t;
|
typedef struct _stat64 file_stat_t;
|
||||||
|
#define fstat _fstat64
|
||||||
#else
|
#else
|
||||||
typedef struct stat file_stat_t;
|
typedef struct stat file_stat_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue