# 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_helpers.h atomic_ops.h bit_cast.h bit_field.h bit_set.h bit_util.h bounded_threadsafe_queue.h cityhash.cpp cityhash.h common_funcs.h common_precompiled_headers.h common_types.h concepts.h container_hash.h demangle.cpp demangle.h detached_tasks.cpp detached_tasks.h div_ceil.h dynamic_library.cpp dynamic_library.h elf.h error.cpp error.h expected.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/backend.cpp logging/backend.h logging/filter.cpp logging/filter.h logging/formatter.h logging/log.h logging/log_entry.h logging/text_formatter.cpp logging/text_formatter.h logging/types.h lz4_compression.cpp lz4_compression.h make_unique_for_overwrite.h math_util.h memory_detect.cpp memory_detect.h microprofile.cpp microprofile.h microprofileui.h multi_level_page_table.cpp multi_level_page_table.h nvidia_flags.cpp nvidia_flags.h overflow.h page_table.cpp page_table.h param_package.cpp param_package.h parent_of_member.h point.h precompiled_headers.h quaternion.h range_map.h range_mutex.h reader_writer_queue.h 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 socket_types.h spin_lock.cpp 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 telemetry.cpp telemetry.h thread.cpp thread.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 uuid.cpp uuid.h vector_math.h virtual_buffer.cpp virtual_buffer.h wall_clock.cpp wall_clock.h zstd_compression.cpp zstd_compression.h ) if (YUZU_ENABLE_PORTABLE) add_compile_definitions(YUZU_ENABLE_PORTABLE) endif() 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 PRIVATE fs/fs_android.cpp fs/fs_android.h ) endif() if (UNIX AND NOT APPLE) target_sources(common PRIVATE linux/gamemode.cpp linux/gamemode.h ) target_link_libraries(common PRIVATE gamemode::headers) endif() if(ARCHITECTURE_x86_64) target_sources(common PRIVATE x64/cpu_detect.cpp x64/cpu_detect.h x64/cpu_wait.cpp x64/cpu_wait.h x64/native_clock.cpp x64/native_clock.h x64/rdtsc.cpp x64/rdtsc.h x64/xbyak_abi.h x64/xbyak_util.h ) target_link_libraries(common PRIVATE xbyak::xbyak) endif() if (HAS_NCE) target_sources(common PRIVATE arm64/native_clock.cpp arm64/native_clock.h ) 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") endif() if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(common PRIVATE -fsized-deallocation -Werror=unreachable-code-aggressive ) target_compile_definitions(common PRIVATE # Clang 14 and earlier have errors when explicitly instantiating Settings::Setting $<$,15>:CANNOT_EXPLICITLY_INSTANTIATE> ) endif() create_target_directory_groups(common) target_link_libraries(common PUBLIC Boost::context Boost::headers fmt::fmt microprofile stb::headers Threads::Threads) target_link_libraries(common PRIVATE lz4::lz4 zstd::zstd LLVM::Demangle) if (ANDROID) # For ASharedMemory_create target_link_libraries(common PRIVATE android) endif() if (YUZU_USE_PRECOMPILED_HEADERS) target_precompile_headers(common PRIVATE precompiled_headers.h) endif()