vita3k: Switch to C++20 and update dynarmic submodule.

Co-authored-by: Zangetsu38 <dante38@free.fr>
This commit is contained in:
scribam 2022-05-11 06:05:02 +02:00 committed by Zangetsu
parent 9c7fdedeb3
commit 76581db7fa
11 changed files with 64 additions and 110 deletions

View File

@ -21,12 +21,9 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
os: [ubuntu-latest, windows-latest]
config: [Release]
include:
- os: macos-latest
cache_path: ~/Library/Caches/ccache
extra_cmake_args: -DCMAKE_TOOLCHAIN_FILE=./cmake/toolchain/macos-x64.cmake
- os: ubuntu-latest
cache_path: ~/.ccache
extra_cmake_args: -DCMAKE_TOOLCHAIN_FILE=./cmake/toolchain/linux-x64.cmake -DUSE_DISCORD_RICH_PRESENCE=OFF

View File

@ -5,7 +5,7 @@ project(Vita3K)
include(ProcessorCount)
ProcessorCount(CPU_COUNT)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
@ -139,14 +139,6 @@ if(NOT CI)
boost_set_paths()
endif()
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/GetStandard.cmake")
get_standard_for_build()
if(${CPP17_SUPPORTED})
set(STANDARD_NUM 17)
else()
set(STANDARD_NUM 11)
endif()
if(WIN32)
add_definitions (/D "_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS" /D "_CRT_SECURE_NO_WARNINGS" /D "NOMINMAX")
endif()

2
external/dynarmic vendored

@ -1 +1 @@
Subproject commit 66089b60cb832194d6c2ad289f164548587b9836
Subproject commit 2f1d6b3452f31d6e59c53cba4a469a413b89df61

View File

@ -48,9 +48,6 @@ macro(configure_boost)
endmacro(configure_boost)
configure_boost()
if(${STANDARD_NUM} GREATER 14)
add_definitions(-DVITA3K_CPP${STANDARD_NUM})
endif()
if (USE_DISCORD_RICH_PRESENCE)
add_definitions(-DUSE_DISCORD)
@ -104,9 +101,6 @@ endif()
if(LINUX)
target_link_libraries(vita3k PRIVATE stdc++fs)
endif()
if(${STANDARD_NUM} GREATER 14)
target_compile_features(vita3k PUBLIC cxx_std_${STANDARD_NUM})
endif()
set_target_properties(vita3k PROPERTIES OUTPUT_NAME Vita3K
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"

View File

@ -21,9 +21,10 @@
#include <config/yaml.h>
#include <util/fs.h>
#include <util/optional.h>
#include <util/vector_utils.h>
#include <optional>
// Enum based on members in Config file
// Used for easier getting of options and their names for config files
enum file_config {
@ -83,12 +84,12 @@ private:
public:
// Optional config settings
optional<fs::path> content_path;
optional<std::string> run_app_path;
optional<std::string> recompile_shader_path;
optional<std::string> delete_title_id;
optional<std::string> pkg_path;
optional<std::string> pkg_zrif;
std::optional<fs::path> content_path;
std::optional<std::string> run_app_path;
std::optional<std::string> recompile_shader_path;
std::optional<std::string> delete_title_id;
std::optional<std::string> pkg_path;
std::optional<std::string> pkg_zrif;
// Setting not present in the YAML file
fs::path config_path = {};

View File

@ -26,10 +26,6 @@
#include <CLI11.hpp>
#include <vector>
#ifndef VITA3K_CPP17
#include <boost/optional/optional_io.hpp>
#endif
#include <exception>
#include <iostream>

View File

@ -250,19 +250,19 @@ const std::vector<std::pair<SceSystemParamLang, std::string>> LIST_SYS_LANG = {
{ SCE_SYSTEM_PARAM_LANG_GERMAN, "Deutsch" },
{ SCE_SYSTEM_PARAM_LANG_ENGLISH_GB, "English (United Kingdom)" },
{ SCE_SYSTEM_PARAM_LANG_ENGLISH_US, "English (United States)" },
{ SCE_SYSTEM_PARAM_LANG_SPANISH, u8"Español" },
{ SCE_SYSTEM_PARAM_LANG_FRENCH, u8"Français" },
{ SCE_SYSTEM_PARAM_LANG_SPANISH, reinterpret_cast<const char *>(u8"Español") },
{ SCE_SYSTEM_PARAM_LANG_FRENCH, reinterpret_cast<const char *>(u8"Français") },
{ SCE_SYSTEM_PARAM_LANG_ITALIAN, "Italiano" },
{ SCE_SYSTEM_PARAM_LANG_DUTCH, "Nederlands" },
{ SCE_SYSTEM_PARAM_LANG_NORWEGIAN, "Norsk" },
{ SCE_SYSTEM_PARAM_LANG_POLISH, "Polskis" },
{ SCE_SYSTEM_PARAM_LANG_PORTUGUESE_BR, u8"Português (Brasil)" },
{ SCE_SYSTEM_PARAM_LANG_PORTUGUESE_PT, u8"Português (Portugal)" },
{ SCE_SYSTEM_PARAM_LANG_RUSSIAN, u8"Русский" },
{ SCE_SYSTEM_PARAM_LANG_PORTUGUESE_BR, reinterpret_cast<const char *>(u8"Português (Brasil)") },
{ SCE_SYSTEM_PARAM_LANG_PORTUGUESE_PT, reinterpret_cast<const char *>(u8"Português (Portugal)") },
{ SCE_SYSTEM_PARAM_LANG_RUSSIAN, reinterpret_cast<const char *>(u8"Русский") },
{ SCE_SYSTEM_PARAM_LANG_FINNISH, "Suomi" },
{ SCE_SYSTEM_PARAM_LANG_SWEDISH, "Svenska" },
{ SCE_SYSTEM_PARAM_LANG_TURKISH, u8"Türkçe" },
{ SCE_SYSTEM_PARAM_LANG_JAPANESE, u8"日本語" },
{ SCE_SYSTEM_PARAM_LANG_TURKISH, reinterpret_cast<const char *>(u8"Türkçe") },
{ SCE_SYSTEM_PARAM_LANG_JAPANESE, reinterpret_cast<const char *>(u8"日本語") },
{ SCE_SYSTEM_PARAM_LANG_KOREAN, "Korean" },
{ SCE_SYSTEM_PARAM_LANG_CHINESE_S, "Chinese - Simplified" },
{ SCE_SYSTEM_PARAM_LANG_CHINESE_T, "Chinese - Traditional" },

View File

@ -157,19 +157,19 @@ void init_ime_lang(Ime &ime, const SceImeLanguage &lang) {
break;
case SCE_IME_LANGUAGE_PORTUGUESE_BR:
case SCE_IME_LANGUAGE_PORTUGUESE_PT:
space_str = u8"Espaço";
space_str = reinterpret_cast<const char *>(u8"Espaço");
break;
case SCE_IME_LANGUAGE_RUSSIAN:
space_str = u8"П р о б е л";
space_str = reinterpret_cast<const char *>(u8"П р о б е л");
break;
case SCE_IME_LANGUAGE_FINNISH:
space_str = u8"Välilyönti";
space_str = reinterpret_cast<const char *>(u8"Välilyönti");
break;
case SCE_IME_LANGUAGE_SWEDISH:
space_str = "Blanksteg";
break;
case SCE_IME_LANGUAGE_TURKISH:
space_str = u8"Boşluk";
space_str = reinterpret_cast<const char *>(u8"Boşluk");
break;
default:
space_str = "Space";
@ -216,7 +216,7 @@ void init_ime_lang(Ime &ime, const SceImeLanguage &lang) {
};
break;
case SCE_IME_LANGUAGE_RUSSIAN:
second_keyboard = { { FIRST, "ABC" }, { SECOND, u8"РУ" } };
second_keyboard = { { FIRST, "ABC" }, { SECOND, reinterpret_cast<const char *>(u8"РУ") } };
lang_key = {
{ FIRST, { u"й", u"ц", u"у", u"к", u"е", u"н", u"г", u"ш", u"щ", u"з", u"х", u"ъ" } },
{ SECOND, { u"ё", u"ф", u"ы", u"в", u"а", u"п", u"р", u"о", u"л", u"д", u"ж", u"э" } },

View File

@ -24,7 +24,8 @@
#include <shader/usse_disasm.h>
#include <shader/usse_types.h>
#include <util/log.h>
#include <util/optional.h>
#include <optional>
using namespace shader;
using namespace usse;
@ -1267,31 +1268,31 @@ enum class DualSrcId {
typedef std::array<DualSrcId, 3> DualSrcLayout;
static optional<DualSrcLayout> get_dual_op1_src_layout(uint8_t count, Imm2 config) {
static std::optional<DualSrcLayout> get_dual_op1_src_layout(uint8_t count, Imm2 config) {
switch (count) {
case 1:
switch (config) {
case 0: return optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::NONE, DualSrcId::NONE });
case 1: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::NONE, DualSrcId::NONE });
case 2: return optional<DualSrcLayout>({ DualSrcId::INTERNAL1, DualSrcId::NONE, DualSrcId::NONE });
case 3: return optional<DualSrcLayout>({ DualSrcId::INTERAL2, DualSrcId::NONE, DualSrcId::NONE });
case 0: return std::optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::NONE, DualSrcId::NONE });
case 1: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::NONE, DualSrcId::NONE });
case 2: return std::optional<DualSrcLayout>({ DualSrcId::INTERNAL1, DualSrcId::NONE, DualSrcId::NONE });
case 3: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL2, DualSrcId::NONE, DualSrcId::NONE });
default:
return {};
}
case 2:
switch (config) {
case 0: return optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::INTERNAL1, DualSrcId::NONE });
case 1: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::UNIFIED, DualSrcId::NONE });
case 2: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERNAL1, DualSrcId::NONE });
case 0: return std::optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::INTERNAL1, DualSrcId::NONE });
case 1: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::UNIFIED, DualSrcId::NONE });
case 2: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERNAL1, DualSrcId::NONE });
default:
return {};
}
case 3:
switch (config) {
case 0: return optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::INTERNAL1, DualSrcId::INTERAL2 });
case 1: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::UNIFIED, DualSrcId::INTERAL2 });
case 2: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERNAL1, DualSrcId::UNIFIED });
case 3: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERNAL1, DualSrcId::INTERAL2 });
case 0: return std::optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::INTERNAL1, DualSrcId::INTERAL2 });
case 1: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::UNIFIED, DualSrcId::INTERAL2 });
case 2: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERNAL1, DualSrcId::UNIFIED });
case 3: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERNAL1, DualSrcId::INTERAL2 });
default:
return {};
}
@ -1303,33 +1304,33 @@ static optional<DualSrcLayout> get_dual_op1_src_layout(uint8_t count, Imm2 confi
}
// Dual op2 layout depends on op1's src layout too...
static optional<DualSrcLayout> get_dual_op2_src_layout(uint8_t op1_count, uint8_t op2_count, Imm2 src_config) {
static std::optional<DualSrcLayout> get_dual_op2_src_layout(uint8_t op1_count, uint8_t op2_count, Imm2 src_config) {
switch (op1_count) {
case 1:
switch (op2_count) {
case 1:
switch (src_config) {
case 0: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::NONE, DualSrcId::NONE });
case 0: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::NONE, DualSrcId::NONE });
case 1:
case 2:
case 3:
return optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::NONE, DualSrcId::NONE });
return std::optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::NONE, DualSrcId::NONE });
default: return {};
}
case 2:
switch (src_config) {
case 0: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERNAL1, DualSrcId::NONE });
case 1: return optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::INTERNAL1, DualSrcId::NONE });
case 2: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::UNIFIED, DualSrcId::NONE });
case 3: return optional<DualSrcLayout>({ DualSrcId::INTERNAL1, DualSrcId::UNIFIED, DualSrcId::NONE });
case 0: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERNAL1, DualSrcId::NONE });
case 1: return std::optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::INTERNAL1, DualSrcId::NONE });
case 2: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::UNIFIED, DualSrcId::NONE });
case 3: return std::optional<DualSrcLayout>({ DualSrcId::INTERNAL1, DualSrcId::UNIFIED, DualSrcId::NONE });
default: return {};
}
case 3:
switch (src_config) {
case 0: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERNAL1, DualSrcId::INTERAL2 });
case 1: return optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::INTERNAL1, DualSrcId::INTERAL2 });
case 2: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::UNIFIED, DualSrcId::INTERAL2 });
case 3: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::UNIFIED, DualSrcId::INTERNAL1 });
case 0: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERNAL1, DualSrcId::INTERAL2 });
case 1: return std::optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::INTERNAL1, DualSrcId::INTERAL2 });
case 2: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::UNIFIED, DualSrcId::INTERAL2 });
case 3: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::UNIFIED, DualSrcId::INTERNAL1 });
default: return {};
}
default: return {};
@ -1338,16 +1339,16 @@ static optional<DualSrcLayout> get_dual_op2_src_layout(uint8_t op1_count, uint8_
switch (op2_count) {
case 1:
switch (src_config) {
case 0: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::NONE, DualSrcId::NONE });
case 1: return optional<DualSrcLayout>({ DualSrcId::INTERNAL1, DualSrcId::NONE, DualSrcId::NONE });
case 2: return optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::NONE, DualSrcId::NONE });
case 0: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::NONE, DualSrcId::NONE });
case 1: return std::optional<DualSrcLayout>({ DualSrcId::INTERNAL1, DualSrcId::NONE, DualSrcId::NONE });
case 2: return std::optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::NONE, DualSrcId::NONE });
default: return {};
}
case 2:
switch (src_config) {
case 0: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERAL2, DualSrcId::NONE });
case 1: return optional<DualSrcLayout>({ DualSrcId::INTERNAL1, DualSrcId::INTERAL2, DualSrcId::NONE });
case 2: return optional<DualSrcLayout>({ DualSrcId::INTERAL2, DualSrcId::UNIFIED, DualSrcId::NONE });
case 0: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::INTERAL2, DualSrcId::NONE });
case 1: return std::optional<DualSrcLayout>({ DualSrcId::INTERNAL1, DualSrcId::INTERAL2, DualSrcId::NONE });
case 2: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL2, DualSrcId::UNIFIED, DualSrcId::NONE });
default: return {};
}
default: return {};
@ -1356,10 +1357,10 @@ static optional<DualSrcLayout> get_dual_op2_src_layout(uint8_t op1_count, uint8_
switch (op2_count) {
case 1:
switch (src_config) {
case 0: return optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::NONE, DualSrcId::NONE });
case 1: return optional<DualSrcLayout>({ DualSrcId::INTERNAL1, DualSrcId::NONE, DualSrcId::NONE });
case 2: return optional<DualSrcLayout>({ DualSrcId::INTERAL2, DualSrcId::NONE, DualSrcId::NONE });
case 3: return optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::NONE, DualSrcId::NONE });
case 0: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL0, DualSrcId::NONE, DualSrcId::NONE });
case 1: return std::optional<DualSrcLayout>({ DualSrcId::INTERNAL1, DualSrcId::NONE, DualSrcId::NONE });
case 2: return std::optional<DualSrcLayout>({ DualSrcId::INTERAL2, DualSrcId::NONE, DualSrcId::NONE });
case 3: return std::optional<DualSrcLayout>({ DualSrcId::UNIFIED, DualSrcId::NONE, DualSrcId::NONE });
default: return {};
}
default: return {};
@ -1501,8 +1502,8 @@ bool USSETranslatorVisitor::vdual(
op1.opr.dest = prim_ustore ? unified_dest : internal_dest;
op2.opr.dest = prim_ustore ? internal_dest : unified_dest;
const optional<DualSrcLayout> op1_layout = get_dual_op1_src_layout(op1_info.src_count, src_config);
const optional<DualSrcLayout> op2_layout = get_dual_op2_src_layout(op1_info.src_count, op2_info.src_count, src_config);
const std::optional<DualSrcLayout> op1_layout = get_dual_op1_src_layout(op1_info.src_count, src_config);
const std::optional<DualSrcLayout> op2_layout = get_dual_op2_src_layout(op1_info.src_count, op2_info.src_count, src_config);
if (!op1_layout) {
LOG_ERROR("Missing dual for op1 layout.");

View File

@ -24,9 +24,9 @@
#include <shader/usse_translator.h>
#include <shader/usse_translator_types.h>
#include <util/log.h>
#include <util/optional.h>
#include <map>
#include <optional>
namespace shader::usse {
@ -34,7 +34,7 @@ template <typename Visitor>
using USSEMatcher = shader::decoder::Matcher<Visitor, uint64_t>;
template <typename V>
static optional<const USSEMatcher<V>> DecodeUSSE(uint64_t instruction) {
static std::optional<const USSEMatcher<V>> DecodeUSSE(uint64_t instruction) {
static const std::vector<USSEMatcher<V>> table = {
#define INST(fn, name, bitstring) shader::decoder::detail::detail<USSEMatcher<V>>::GetMatcher(fn, name, bitstring)
// clang-format off
@ -821,12 +821,7 @@ static optional<const USSEMatcher<V>> DecodeUSSE(uint64_t instruction) {
const auto matches_instruction = [instruction](const auto &matcher) { return matcher.Matches(instruction); };
auto iter = std::find_if(table.begin(), table.end(), matches_instruction);
return iter != table.end() ? optional<const USSEMatcher<V>>(*iter) :
#ifdef VITA3K_CPP17
std::nullopt;
#else
boost::none;
#endif
return iter != table.end() ? std::optional<const USSEMatcher<V>>(*iter) : std::nullopt;
}
//

View File

@ -24,27 +24,5 @@ add_library(
src/instrset_detect.cpp
)
set(INCLUDE_BEGIN "#pragma once
/*
THIS IS AN AUTOMATICALLY GENERATED FILE. DO NOT EDIT!
*/")
if(${STANDARD_NUM} GREATER 14)
set(INCLUDE_HEADER "optional")
set(NAMESPACE "std::optional")
else()
set(INCLUDE_HEADER "boost/optional.hpp")
set(NAMESPACE "boost::optional")
endif()
set(INCLUDE_COMPLETE "${INCLUDE_BEGIN}
#include <${INCLUDE_HEADER}>
using ${NAMESPACE}\;
")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/include/util/optional.h" ${INCLUDE_COMPLETE})
target_include_directories(util PUBLIC include ${CMAKE_CURRENT_BINARY_DIR}/include)
target_include_directories(util PUBLIC include)
target_link_libraries(util PUBLIC ${Boost_LIBRARIES} fmt spdlog)