summaryrefslogblamecommitdiffstats
path: root/src/common/CMakeLists.txt
blob: 8c57d47c6fb1ad19e94cfd51787cd298cb506d8d (plain) (tree)
1
2
3
4
5
6


                                                    

                                         
       








                                                           
 
                       
 
                         

                     
               
               
                               
              
            
                    
                
              
               
             
              
                              

                
                  
                                
                  
              
                    
                
              

                      
              

                       
         

             
              

             
                 
                         









                    
          

                    

                

                   
           
                              
              



                       
                       
                 
                       

                              
                   

                       
                               
               

                     


                    

                              

                    
              

                  

                     
                      
           
                         
                
               
                         
                 
                                           

                
                    

                
                       
                     
                    

                      
                      
                  

                 

           

                    

              


                   




                       
                   
                      

                 
             
          
                   
             
                     

            
                 

                      

                  

                        
 
 



                                                 







                                             






                               







                             
                       




                               
                                                         

       
                       

                         
                              
                            

                            

                                

                         

                            
     
                                                      

       
            






                                  






                                                                          
                                                                                     

                                                                                                         
   

                                                                                                                                                       


                                           
                                       



                                           
                                                                                      
                                                                               


       
                                      
 
                                                                                                                      
                                                                        
 




                                                 

                                                                   
       
# 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
    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
    $<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,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()