mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-08-25 16:54:41 +00:00
3f52bf4b4b
This insufferable work tries to cover some holes on previous threading implementation from yuzu's team, starting with Windows and Linux reordering of priorities (NICE), reworks previous Android's threading and cpu affinity with adpf, adjust emulated clocks/gpu for better "accuracy" with their work, bumps android minSDK for all flavors, legacy will now work with AP 29 to cover A10 - A12, standard will reach A13 as base and finally the optimized build will come with API 35, mostly targeted on devices with A15 support and newer, NDK and AGP wasn't upgraded yet. The performance cost efficiency have been improved based on device power configuration; preventing overheating if certain devices tended to fall into NICE0 (not allocated threads priority, all task ran with higher priority, 11 tasks running within the limited 2 - 7 threads available on the most common configuration 1x3x4 or 1x4x3). Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4254
258 lines
6.2 KiB
CMake
258 lines
6.2 KiB
CMake
# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project SPDX-License-Identifier:
|
|
# GPL-2.0-or-later
|
|
|
|
if(DEFINED ENV{AZURECIREPO})
|
|
set(BUILD_REPOSITORY $ENV{AZURECIREPO})
|
|
endif()
|
|
if(DEFINED ENV{TITLEBARFORMATIDLE})
|
|
set(TITLE_BAR_FORMAT_IDLE $ENV{TITLEBARFORMATIDLE})
|
|
endif()
|
|
if(DEFINED ENV{TITLEBARFORMATRUNNING})
|
|
set(TITLE_BAR_FORMAT_RUNNING $ENV{TITLEBARFORMATRUNNING})
|
|
endif()
|
|
if(DEFINED ENV{DISPLAYVERSION})
|
|
set(DISPLAY_VERSION $ENV{DISPLAYVERSION})
|
|
endif()
|
|
|
|
include(GenerateSCMRev)
|
|
|
|
add_library(
|
|
common STATIC
|
|
address_space.cpp
|
|
address_space.h
|
|
algorithm.h
|
|
alignment.h
|
|
announce_multiplayer_room.h
|
|
assert.cpp
|
|
assert.h
|
|
atomic_ops.h
|
|
bit_field.h
|
|
bit_util.h
|
|
bounded_threadsafe_queue.h
|
|
cityhash.cpp
|
|
cityhash.h
|
|
common_funcs.h
|
|
common_types.h
|
|
concepts.h
|
|
container_hash.h
|
|
demangle.cpp
|
|
demangle.h
|
|
device_power_state.cpp
|
|
device_power_state.h
|
|
div_ceil.h
|
|
dynamic_library.cpp
|
|
dynamic_library.h
|
|
elf.h
|
|
error.cpp
|
|
error.h
|
|
fiber.cpp
|
|
fiber.h
|
|
fixed_point.h
|
|
free_region_manager.h
|
|
fs/file.cpp
|
|
fs/file.h
|
|
fs/fs.cpp
|
|
fs/fs.h
|
|
fs/fs_paths.h
|
|
fs/fs_types.h
|
|
fs/fs_util.cpp
|
|
fs/fs_util.h
|
|
fs/path_util.cpp
|
|
fs/path_util.h
|
|
hash.h
|
|
heap_tracker.cpp
|
|
heap_tracker.h
|
|
hex_util.cpp
|
|
hex_util.h
|
|
host_memory.cpp
|
|
host_memory.h
|
|
input.h
|
|
intrusive_red_black_tree.h
|
|
literals.h
|
|
logging.cpp
|
|
logging.h
|
|
lz4_compression.cpp
|
|
lz4_compression.h
|
|
make_unique_for_overwrite.h
|
|
math_util.h
|
|
memory_detect.cpp
|
|
memory_detect.h
|
|
multi_level_page_table.cpp
|
|
multi_level_page_table.h
|
|
overflow.h
|
|
page_table.cpp
|
|
page_table.h
|
|
param_package.cpp
|
|
param_package.h
|
|
parent_of_member.h
|
|
point.h
|
|
quaternion.h
|
|
range_map.h
|
|
range_mutex.h
|
|
range_sets.h
|
|
range_sets.inc
|
|
ring_buffer.h
|
|
${CMAKE_CURRENT_BINARY_DIR}/scm_rev.cpp
|
|
scm_rev.h
|
|
scope_exit.h
|
|
scratch_buffer.h
|
|
settings.cpp
|
|
settings.h
|
|
settings_common.cpp
|
|
settings_common.h
|
|
settings_enums.h
|
|
settings_input.cpp
|
|
settings_input.h
|
|
settings_setting.h
|
|
slot_vector.h
|
|
socket_types.h
|
|
spin_lock.h
|
|
stb.cpp
|
|
stb.h
|
|
steady_clock.cpp
|
|
steady_clock.h
|
|
stream.cpp
|
|
stream.h
|
|
string_util.cpp
|
|
string_util.h
|
|
swap.h
|
|
thread.cpp
|
|
thread.h
|
|
adpf.cpp
|
|
adpf.h
|
|
thread_queue_list.h
|
|
thread_worker.h
|
|
threadsafe_queue.h
|
|
time_zone.cpp
|
|
time_zone.h
|
|
tiny_mt.h
|
|
tree.h
|
|
typed_address.h
|
|
uint128.h
|
|
unique_function.h
|
|
random.cpp
|
|
random.h
|
|
uuid.cpp
|
|
uuid.h
|
|
vector_math.h
|
|
virtual_buffer.cpp
|
|
virtual_buffer.h
|
|
zstd_compression.cpp
|
|
zstd_compression.h
|
|
fs/ryujinx_compat.h fs/ryujinx_compat.cpp
|
|
fs/symlink.h fs/symlink.cpp
|
|
cpu_features.cpp
|
|
cpu_features.h
|
|
httplib.h
|
|
net/net.h net/net.cpp)
|
|
|
|
if(WIN32)
|
|
target_sources(common PRIVATE windows/timer_resolution.cpp
|
|
windows/timer_resolution.h)
|
|
target_link_libraries(common PRIVATE ntdll)
|
|
endif()
|
|
|
|
if(NOT WIN32)
|
|
target_sources(common PRIVATE signal_chain.cpp signal_chain.h)
|
|
endif()
|
|
|
|
if(ANDROID)
|
|
target_sources(
|
|
common
|
|
PUBLIC fs/fs_android.cpp
|
|
fs/fs_android.h
|
|
android/android_common.cpp
|
|
android/android_common.h
|
|
android/id_cache.cpp
|
|
android/id_cache.h
|
|
android/multiplayer/multiplayer.cpp
|
|
android/multiplayer/multiplayer.h
|
|
android/applets/software_keyboard.cpp
|
|
android/applets/software_keyboard.h
|
|
android/applets/web_browser.cpp
|
|
android/applets/web_browser.h)
|
|
endif()
|
|
|
|
if(ARCHITECTURE_x86_64)
|
|
target_sources(
|
|
common
|
|
PRIVATE
|
|
x64/rdtsc.cpp
|
|
x64/rdtsc.h
|
|
x64/xbyak.h)
|
|
target_link_libraries(common PRIVATE xbyak::xbyak)
|
|
endif()
|
|
|
|
if(MSVC)
|
|
target_compile_definitions(
|
|
common
|
|
PRIVATE # The standard library doesn't provide any replacement for codecvt
|
|
# yet so we can disable this deprecation warning for the time being.
|
|
_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING)
|
|
target_compile_options(
|
|
common
|
|
PRIVATE /we4242 # 'identifier': conversion from 'type1' to 'type2', possible
|
|
# loss of data
|
|
/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()
|
|
set_source_files_properties(
|
|
stb.cpp
|
|
PROPERTIES
|
|
COMPILE_OPTIONS
|
|
"-Wno-implicit-fallthrough;-Wno-missing-declarations;-Wno-missing-field-initializers")
|
|
|
|
# Get around GCC failing with intrinsics in Debug
|
|
if(CXX_GCC AND CMAKE_BUILD_TYPE MATCHES "Debug")
|
|
set_property(
|
|
SOURCE stb.cpp
|
|
APPEND
|
|
PROPERTY COMPILE_OPTIONS ";-O2")
|
|
endif()
|
|
endif()
|
|
|
|
if(CXX_CLANG)
|
|
target_compile_options(common PRIVATE
|
|
$<$<COMPILE_LANGUAGE:C,CXX>:-fsized-deallocation>
|
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=unreachable-code-aggressive>)
|
|
target_compile_definitions(
|
|
common
|
|
PRIVATE
|
|
# Clang 14 and earlier have errors when explicitly instantiating
|
|
# Settings::Setting
|
|
$<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,15>:CANNOT_EXPLICITLY_INSTANTIATE>)
|
|
endif()
|
|
|
|
if (BOOST_NO_HEADERS)
|
|
target_link_libraries(common PUBLIC Boost::algorithm Boost::heap Boost::icl Boost::pool)
|
|
else()
|
|
target_link_libraries(common PUBLIC Boost::headers)
|
|
endif()
|
|
target_link_libraries(common PRIVATE OpenSSL::SSL)
|
|
target_link_libraries(common PUBLIC Boost::filesystem Boost::context httplib::httplib nlohmann_json::nlohmann_json)
|
|
|
|
if (lz4_ADDED)
|
|
target_include_directories(common PRIVATE ${lz4_SOURCE_DIR}/lib)
|
|
endif()
|
|
|
|
target_link_libraries(common PUBLIC fmt::fmt stb::headers Threads::Threads unordered_dense::unordered_dense)
|
|
target_link_libraries(common PRIVATE lz4::lz4 zstd::zstd)
|
|
|
|
# Please refer to src/common/demangle.cpp
|
|
if (WIN32)
|
|
target_link_libraries(common PRIVATE LLVM::Demangle)
|
|
endif()
|
|
|
|
if(ANDROID)
|
|
# For ASharedMemory_create
|
|
target_link_libraries(common PRIVATE android)
|
|
endif()
|
|
|
|
create_target_directory_groups(common)
|