mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2025-10-12 08:57:49 +00:00
[build, cmake] port to solaris (#96)
Co-authored-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/96 Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
parent
23c77a0d4f
commit
e1763a726e
16 changed files with 215 additions and 76 deletions
|
@ -1,8 +1,12 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include <span>
|
||||
#include <vector>
|
||||
|
||||
#include <SDL.h>
|
||||
|
||||
#include "audio_core/common/common.h"
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
/*
|
||||
Minimal asymmetric stackful cross-platform coroutine library in pure C.
|
||||
minicoro - v0.2.0 - 15/Nov/2023
|
||||
|
@ -467,7 +470,7 @@ extern "C" {
|
|||
#ifdef MCO_NO_MULTITHREAD
|
||||
#define MCO_THREAD_LOCAL
|
||||
#else
|
||||
#ifdef thread_local
|
||||
#if defined(thread_local) || __STDC_VERSION__ >= 202311L || defined(__sun__)
|
||||
#define MCO_THREAD_LOCAL thread_local
|
||||
#elif __STDC_VERSION__ >= 201112 && !defined(__STDC_NO_THREADS__)
|
||||
#define MCO_THREAD_LOCAL _Thread_local
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
|
@ -440,8 +443,8 @@ Result AlbumManager::SaveImage(ApplicationAlbumEntry& out_entry, std::span<const
|
|||
const auto screenshot_path =
|
||||
Common::FS::GetEdenPathString(Common::FS::EdenPath::ScreenshotsDir);
|
||||
const std::string formatted_date =
|
||||
fmt::format("{:04}-{:02}-{:02}_{:02}-{:02}-{:02}-{:03}", date.year, date.month, date.day,
|
||||
date.hour, date.minute, date.second, 0);
|
||||
fmt::format("{:04}-{:02}-{:02}_{:02}-{:02}-{:02}-{:03}", u16(date.year), u8(date.month), u8(date.day),
|
||||
u8(date.hour), u8(date.minute), u8(date.second), 0);
|
||||
const std::string file_path =
|
||||
fmt::format("{}/{:016x}_{}.png", screenshot_path, title_id, formatted_date);
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
|
@ -206,9 +209,9 @@ template <>
|
|||
struct fmt::formatter<Service::PSC::Time::CalendarTime> : fmt::formatter<fmt::string_view> {
|
||||
template <typename FormatContext>
|
||||
auto format(const Service::PSC::Time::CalendarTime& calendar, FormatContext& ctx) const {
|
||||
return fmt::format_to(ctx.out(), "[{:02}/{:02}/{:04} {:02}:{:02}:{:02}]", calendar.day,
|
||||
calendar.month, calendar.year, calendar.hour, calendar.minute,
|
||||
calendar.second);
|
||||
return fmt::format_to(ctx.out(), "[{:02}/{:02}/{:04} {:02}:{:02}:{:02}]", u8(calendar.day),
|
||||
u8(calendar.month), u16(calendar.year), u8(calendar.hour), u8(calendar.minute),
|
||||
u8(calendar.second));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ namespace Network {
|
|||
|
||||
#ifdef _WIN32
|
||||
|
||||
std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
|
||||
std::vector<Network::NetworkInterface> GetAvailableNetworkInterfaces() {
|
||||
|
||||
ULONG buf_size = 0;
|
||||
if (GetAdaptersAddresses(
|
||||
|
@ -47,7 +47,7 @@ std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
|
|||
return {};
|
||||
}
|
||||
|
||||
std::vector<NetworkInterface> result;
|
||||
std::vector<Network::NetworkInterface> result;
|
||||
|
||||
for (auto* a = addrs; a; a = a->Next) {
|
||||
|
||||
|
@ -80,7 +80,7 @@ std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
|
|||
break;
|
||||
}
|
||||
|
||||
result.emplace_back(NetworkInterface{
|
||||
result.emplace_back(Network::NetworkInterface{
|
||||
.name = Common::UTF16ToUTF8(std::wstring{a->FriendlyName}),
|
||||
.ip_address = ip,
|
||||
.subnet_mask = mask,
|
||||
|
@ -94,7 +94,7 @@ std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
|
|||
|
||||
#else
|
||||
|
||||
std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
|
||||
std::vector<Network::NetworkInterface> GetAvailableNetworkInterfaces() {
|
||||
struct ifaddrs* ifaddr = nullptr;
|
||||
|
||||
if (getifaddrs(&ifaddr) != 0) {
|
||||
|
@ -103,7 +103,7 @@ std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
|
|||
return {};
|
||||
}
|
||||
|
||||
std::vector<NetworkInterface> result;
|
||||
std::vector<Network::NetworkInterface> result;
|
||||
|
||||
for (auto ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) {
|
||||
if (ifa->ifa_addr == nullptr || ifa->ifa_netmask == nullptr) {
|
||||
|
@ -121,7 +121,7 @@ std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
|
|||
#ifdef ANDROID
|
||||
// On Android, we can't reliably get gateway info from /proc/net/route
|
||||
// Just use 0 as the gateway address
|
||||
result.emplace_back(NetworkInterface{
|
||||
result.emplace_back(Network::NetworkInterface{
|
||||
.name{ifa->ifa_name},
|
||||
.ip_address{Common::BitCast<struct sockaddr_in>(*ifa->ifa_addr).sin_addr},
|
||||
.subnet_mask{Common::BitCast<struct sockaddr_in>(*ifa->ifa_netmask).sin_addr},
|
||||
|
@ -134,11 +134,15 @@ std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
|
|||
if (!file.is_open()) {
|
||||
LOG_ERROR(Network, "Failed to open \"/proc/net/route\"");
|
||||
|
||||
result.emplace_back(NetworkInterface{
|
||||
.name{ifa->ifa_name},
|
||||
.ip_address{Common::BitCast<struct sockaddr_in>(*ifa->ifa_addr).sin_addr},
|
||||
.subnet_mask{Common::BitCast<struct sockaddr_in>(*ifa->ifa_netmask).sin_addr},
|
||||
.gateway{in_addr{.s_addr = gateway}}});
|
||||
// Solaris defines s_addr as a macro, can't use special C++ shenanigans here
|
||||
in_addr gateway_0;
|
||||
gateway_0.s_addr = gateway;
|
||||
result.emplace_back(Network::NetworkInterface{
|
||||
.name = ifa->ifa_name,
|
||||
.ip_address = Common::BitCast<struct sockaddr_in>(*ifa->ifa_addr).sin_addr,
|
||||
.subnet_mask = Common::BitCast<struct sockaddr_in>(*ifa->ifa_netmask).sin_addr,
|
||||
.gateway = gateway_0
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -183,11 +187,14 @@ std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
|
|||
gateway = 0;
|
||||
}
|
||||
|
||||
result.emplace_back(NetworkInterface{
|
||||
.name{ifa->ifa_name},
|
||||
.ip_address{Common::BitCast<struct sockaddr_in>(*ifa->ifa_addr).sin_addr},
|
||||
.subnet_mask{Common::BitCast<struct sockaddr_in>(*ifa->ifa_netmask).sin_addr},
|
||||
.gateway{in_addr{.s_addr = gateway}}});
|
||||
in_addr gateway_0;
|
||||
gateway_0.s_addr = gateway;
|
||||
result.emplace_back(Network::NetworkInterface{
|
||||
.name = ifa->ifa_name,
|
||||
.ip_address = Common::BitCast<struct sockaddr_in>(*ifa->ifa_addr).sin_addr,
|
||||
.subnet_mask = Common::BitCast<struct sockaddr_in>(*ifa->ifa_netmask).sin_addr,
|
||||
.gateway = gateway_0
|
||||
});
|
||||
#endif // ANDROID
|
||||
}
|
||||
|
||||
|
@ -197,7 +204,7 @@ std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
|
|||
|
||||
#endif // _WIN32
|
||||
|
||||
std::optional<NetworkInterface> GetSelectedNetworkInterface() {
|
||||
std::optional<Network::NetworkInterface> GetSelectedNetworkInterface() {
|
||||
|
||||
const auto& selected_network_interface = Settings::values.network_interface.GetValue();
|
||||
const auto network_interfaces = Network::GetAvailableNetworkInterfaces();
|
||||
|
|
|
@ -25,6 +25,11 @@ if (ENABLE_WEB_SERVICE)
|
|||
target_link_libraries(network PRIVATE web_service)
|
||||
endif()
|
||||
|
||||
# Solaris uses /lib/amd64/libsocket.so and /lib/amd64/libnsl.so
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
|
||||
target_link_libraries(network PRIVATE socket nsl)
|
||||
endif()
|
||||
|
||||
if (YUZU_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(network PRIVATE precompiled_headers.h)
|
||||
endif()
|
||||
|
|
|
@ -40,6 +40,11 @@ target_include_directories(yuzu-cmd PRIVATE ${RESOURCES_DIR})
|
|||
|
||||
target_link_libraries(yuzu-cmd PRIVATE SDL2::SDL2 Vulkan::Headers)
|
||||
|
||||
# In Solaris needs explicit linking for ffmpeg which links to /lib/amd64/libX11.so
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
|
||||
target_link_libraries(yuzu-cmd PRIVATE X11)
|
||||
endif()
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
install(TARGETS yuzu-cmd)
|
||||
endif()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue