aboutsummaryrefslogtreecommitdiff
path: root/src/common/CMakeLists.txt
blob: b07778be2812aa2fc612792fd65532795c31ec0b (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
263
264
265
266
267
268
269
270
271
272
273
274
# SPDX-FileCopyrightText: Copyright 2025 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
  detached_tasks.cpp
  detached_tasks.h
  device_power_state.cpp
  device_power_state.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
  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.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
  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
  fs/ryujinx_compat.h fs/ryujinx_compat.cpp
  fs/symlink.h fs/symlink.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)
endif()

if(LINUX 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"
  )

  # 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 -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()

if (BOOST_NO_HEADERS)
    target_link_libraries(common PUBLIC Boost::algorithm Boost::icl Boost::pool Boost::filesystem)
else()
    target_link_libraries(common PUBLIC Boost::headers)
endif()

target_link_libraries(common PUBLIC Boost::filesystem)

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 LLVM::Demangle zstd::zstd)

if(ANDROID)
  # For ASharedMemory_create
  target_link_libraries(common PRIVATE android)
endif()

create_target_directory_groups(common)