common,yuzu-qt: Avoid explicit instantiation on old clang

Clang versions < 15 have compile issues with explicit instantiation.
Disable it for these versions.
This commit is contained in:
lat9nq 2023-06-18 19:57:14 -04:00
parent c97cbd089b
commit 3f0cc544cf
6 changed files with 22 additions and 3 deletions

View file

@ -197,10 +197,15 @@ if (MSVC)
/we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data
/we4800 # Implicit conversion from 'type' to bool. Possible information loss
)
else()
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_options(common PRIVATE
$<$<CXX_COMPILER_ID:Clang>:-fsized-deallocation>
$<$<CXX_COMPILER_ID:Clang>:-Werror=unreachable-code-aggressive>
-fsized-deallocation
-Werror=unreachable-code-aggressive
)
target_compile_definitions(common PRIVATE
$<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,15>:_CANNOT_EXPLICITLY_INSTANTIATE>
)
endif()

View file

@ -25,6 +25,7 @@
namespace Settings {
#ifndef _CANNOT_EXPLICITLY_INSTANTIATE
#define SETTING(TYPE, RANGED) template class Setting<TYPE, RANGED>
#define SWITCHABLE(TYPE, RANGED) template class SwitchableSetting<TYPE, RANGED>
@ -61,6 +62,7 @@ SWITCHABLE(u8, true);
#undef SETTING
#undef SWITCHABLE
#endif
Values values;

View file

@ -45,6 +45,7 @@ struct ResolutionScalingInfo {
}
};
#ifndef _CANNOT_EXPLICITLY_INSTANTIATE
// Instantiate the classes elsewhere (settings.cpp) to reduce compiler/linker work
#define SETTING(TYPE, RANGED) extern template class Setting<TYPE, RANGED>
#define SWITCHABLE(TYPE, RANGED) extern template class SwitchableSetting<TYPE, RANGED>
@ -84,6 +85,7 @@ SWITCHABLE(u8, true);
#undef SETTING
#undef SWITCHABLE
#endif
/**
* The InputSetting class allows for getting a reference to either the global or custom members.

View file

@ -235,6 +235,12 @@ if (WIN32 AND YUZU_CRASH_DUMPS)
target_compile_definitions(yuzu PRIVATE -DYUZU_DBGHELP)
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_definitions(yuzu PRIVATE
$<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,15>:_CANNOT_EXPLICITLY_INSTANTIATE>
)
endif()
file(GLOB COMPAT_LIST
${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.qrc
${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json)

View file

@ -3,6 +3,7 @@
#include "yuzu/uisettings.h"
#ifndef _CANNOT_EXPLICITLY_INSTANTIATE
namespace Settings {
template class Setting<bool>;
template class Setting<std::string>;
@ -12,6 +13,7 @@ template class Setting<u8, true>;
template class Setting<u8>;
template class Setting<unsigned long long>;
} // namespace Settings
#endif
namespace UISettings {

View file

@ -17,6 +17,7 @@
using Settings::Category;
using Settings::Setting;
#ifndef _CANNOT_EXPLICITLY_INSTANTIATE
namespace Settings {
extern template class Setting<bool>;
extern template class Setting<std::string>;
@ -26,6 +27,7 @@ extern template class Setting<u8, true>;
extern template class Setting<u8>;
extern template class Setting<unsigned long long>;
} // namespace Settings
#endif
namespace UISettings {