aboutsummaryrefslogtreecommitdiff
path: root/src/common/CMakeLists.txt
blob: 76c50197880f874e507c8def89584385d87fa8b8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
# 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
    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
    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
    spin_recursive_mutex.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
    sparse_large_vector.cpp
    sparse_large_vector.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
    zbic_compression.cpp
    zbic_compression.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
    container/unordered_map.h container/unordered_set.h)

set_source_files_properties(zbic_compression.cpp PROPERTIES
    INCLUDE_DIRECTORIES "${ZBIC_INCLUDE_DIR}"
    COMPILE_OPTIONS "$<$<CXX_COMPILER_ID:AppleClang,Clang,GNU>:-Wno-unused-function;-Wno-missing-declarations;-Wno-shadow>;$<$<CXX_COMPILER_ID:MSVC>:/wd4505;/wd5245>")

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>:-Wunreachable-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)
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)