CMakeLists.txt 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. # Add a custom command to generate a new shader_cache_version hash when any of the following files change
  2. # NOTE: This is an approximation of what files affect shader generation, its possible something else
  3. # could affect the result, but much more unlikely than the following files. Keeping a list of files
  4. # like this allows for much better caching since it doesn't force the user to recompile binary shaders every update
  5. set(VIDEO_CORE "${CMAKE_SOURCE_DIR}/src/video_core")
  6. if (DEFINED ENV{AZURECIREPO})
  7. set(BUILD_REPOSITORY $ENV{AZURECIREPO})
  8. endif()
  9. if (DEFINED ENV{TITLEBARFORMATIDLE})
  10. set(TITLE_BAR_FORMAT_IDLE $ENV{TITLEBARFORMATIDLE})
  11. endif ()
  12. if (DEFINED ENV{TITLEBARFORMATRUNNING})
  13. set(TITLE_BAR_FORMAT_RUNNING $ENV{TITLEBARFORMATRUNNING})
  14. endif ()
  15. if (DEFINED ENV{DISPLAYVERSION})
  16. set(DISPLAY_VERSION $ENV{DISPLAYVERSION})
  17. endif ()
  18. # Pass the path to git to the GenerateSCMRev.cmake as well
  19. find_package(Git QUIET)
  20. add_custom_command(OUTPUT scm_rev.cpp
  21. COMMAND ${CMAKE_COMMAND}
  22. -DSRC_DIR=${CMAKE_SOURCE_DIR}
  23. -DBUILD_REPOSITORY=${BUILD_REPOSITORY}
  24. -DTITLE_BAR_FORMAT_IDLE=${TITLE_BAR_FORMAT_IDLE}
  25. -DTITLE_BAR_FORMAT_RUNNING=${TITLE_BAR_FORMAT_RUNNING}
  26. -DBUILD_TAG=${BUILD_TAG}
  27. -DBUILD_ID=${DISPLAY_VERSION}
  28. -DGIT_EXECUTABLE=${GIT_EXECUTABLE}
  29. -P ${CMAKE_SOURCE_DIR}/CMakeModules/GenerateSCMRev.cmake
  30. DEPENDS
  31. # WARNING! It was too much work to try and make a common location for this list,
  32. # so if you need to change it, please update CMakeModules/GenerateSCMRev.cmake as well
  33. "${VIDEO_CORE}/renderer_opengl/gl_arb_decompiler.cpp"
  34. "${VIDEO_CORE}/renderer_opengl/gl_arb_decompiler.h"
  35. "${VIDEO_CORE}/renderer_opengl/gl_shader_cache.cpp"
  36. "${VIDEO_CORE}/renderer_opengl/gl_shader_cache.h"
  37. "${VIDEO_CORE}/renderer_opengl/gl_shader_decompiler.cpp"
  38. "${VIDEO_CORE}/renderer_opengl/gl_shader_decompiler.h"
  39. "${VIDEO_CORE}/renderer_opengl/gl_shader_disk_cache.cpp"
  40. "${VIDEO_CORE}/renderer_opengl/gl_shader_disk_cache.h"
  41. "${VIDEO_CORE}/shader/decode/arithmetic.cpp"
  42. "${VIDEO_CORE}/shader/decode/arithmetic_half.cpp"
  43. "${VIDEO_CORE}/shader/decode/arithmetic_half_immediate.cpp"
  44. "${VIDEO_CORE}/shader/decode/arithmetic_immediate.cpp"
  45. "${VIDEO_CORE}/shader/decode/arithmetic_integer.cpp"
  46. "${VIDEO_CORE}/shader/decode/arithmetic_integer_immediate.cpp"
  47. "${VIDEO_CORE}/shader/decode/bfe.cpp"
  48. "${VIDEO_CORE}/shader/decode/bfi.cpp"
  49. "${VIDEO_CORE}/shader/decode/conversion.cpp"
  50. "${VIDEO_CORE}/shader/decode/ffma.cpp"
  51. "${VIDEO_CORE}/shader/decode/float_set.cpp"
  52. "${VIDEO_CORE}/shader/decode/float_set_predicate.cpp"
  53. "${VIDEO_CORE}/shader/decode/half_set.cpp"
  54. "${VIDEO_CORE}/shader/decode/half_set_predicate.cpp"
  55. "${VIDEO_CORE}/shader/decode/hfma2.cpp"
  56. "${VIDEO_CORE}/shader/decode/image.cpp"
  57. "${VIDEO_CORE}/shader/decode/integer_set.cpp"
  58. "${VIDEO_CORE}/shader/decode/integer_set_predicate.cpp"
  59. "${VIDEO_CORE}/shader/decode/memory.cpp"
  60. "${VIDEO_CORE}/shader/decode/texture.cpp"
  61. "${VIDEO_CORE}/shader/decode/other.cpp"
  62. "${VIDEO_CORE}/shader/decode/predicate_set_predicate.cpp"
  63. "${VIDEO_CORE}/shader/decode/predicate_set_register.cpp"
  64. "${VIDEO_CORE}/shader/decode/register_set_predicate.cpp"
  65. "${VIDEO_CORE}/shader/decode/shift.cpp"
  66. "${VIDEO_CORE}/shader/decode/video.cpp"
  67. "${VIDEO_CORE}/shader/decode/warp.cpp"
  68. "${VIDEO_CORE}/shader/decode/xmad.cpp"
  69. "${VIDEO_CORE}/shader/ast.cpp"
  70. "${VIDEO_CORE}/shader/ast.h"
  71. "${VIDEO_CORE}/shader/compiler_settings.cpp"
  72. "${VIDEO_CORE}/shader/compiler_settings.h"
  73. "${VIDEO_CORE}/shader/control_flow.cpp"
  74. "${VIDEO_CORE}/shader/control_flow.h"
  75. "${VIDEO_CORE}/shader/decode.cpp"
  76. "${VIDEO_CORE}/shader/expr.cpp"
  77. "${VIDEO_CORE}/shader/expr.h"
  78. "${VIDEO_CORE}/shader/node.h"
  79. "${VIDEO_CORE}/shader/node_helper.cpp"
  80. "${VIDEO_CORE}/shader/node_helper.h"
  81. "${VIDEO_CORE}/shader/registry.cpp"
  82. "${VIDEO_CORE}/shader/registry.h"
  83. "${VIDEO_CORE}/shader/shader_ir.cpp"
  84. "${VIDEO_CORE}/shader/shader_ir.h"
  85. "${VIDEO_CORE}/shader/track.cpp"
  86. "${VIDEO_CORE}/shader/transform_feedback.cpp"
  87. "${VIDEO_CORE}/shader/transform_feedback.h"
  88. # and also check that the scm_rev files haven't changed
  89. "${CMAKE_CURRENT_SOURCE_DIR}/scm_rev.cpp.in"
  90. "${CMAKE_CURRENT_SOURCE_DIR}/scm_rev.h"
  91. # technically we should regenerate if the git version changed, but its not worth the effort imo
  92. "${CMAKE_SOURCE_DIR}/CMakeModules/GenerateSCMRev.cmake"
  93. VERBATIM
  94. )
  95. add_library(common STATIC
  96. algorithm.h
  97. alignment.h
  98. assert.cpp
  99. assert.h
  100. atomic_ops.h
  101. detached_tasks.cpp
  102. detached_tasks.h
  103. bit_cast.h
  104. bit_field.h
  105. bit_set.h
  106. bit_util.h
  107. cityhash.cpp
  108. cityhash.h
  109. common_funcs.h
  110. common_types.h
  111. concepts.h
  112. div_ceil.h
  113. dynamic_library.cpp
  114. dynamic_library.h
  115. fiber.cpp
  116. fiber.h
  117. fs/file.cpp
  118. fs/file.h
  119. fs/fs.cpp
  120. fs/fs.h
  121. fs/fs_paths.h
  122. fs/fs_types.h
  123. fs/fs_util.cpp
  124. fs/fs_util.h
  125. fs/path_util.cpp
  126. fs/path_util.h
  127. hash.h
  128. hex_util.cpp
  129. hex_util.h
  130. host_memory.cpp
  131. host_memory.h
  132. intrusive_red_black_tree.h
  133. literals.h
  134. logging/backend.cpp
  135. logging/backend.h
  136. logging/filter.cpp
  137. logging/filter.h
  138. logging/log.h
  139. logging/text_formatter.cpp
  140. logging/text_formatter.h
  141. logging/types.h
  142. lz4_compression.cpp
  143. lz4_compression.h
  144. math_util.h
  145. memory_detect.cpp
  146. memory_detect.h
  147. microprofile.cpp
  148. microprofile.h
  149. microprofileui.h
  150. misc.cpp
  151. nvidia_flags.cpp
  152. nvidia_flags.h
  153. page_table.cpp
  154. page_table.h
  155. param_package.cpp
  156. param_package.h
  157. parent_of_member.h
  158. point.h
  159. quaternion.h
  160. ring_buffer.h
  161. scm_rev.cpp
  162. scm_rev.h
  163. scope_exit.h
  164. settings.cpp
  165. settings.h
  166. settings_input.cpp
  167. settings_input.h
  168. spin_lock.cpp
  169. spin_lock.h
  170. stream.cpp
  171. stream.h
  172. string_util.cpp
  173. string_util.h
  174. swap.h
  175. telemetry.cpp
  176. telemetry.h
  177. thread.cpp
  178. thread.h
  179. thread_queue_list.h
  180. thread_worker.h
  181. threadsafe_queue.h
  182. time_zone.cpp
  183. time_zone.h
  184. tiny_mt.h
  185. tree.h
  186. uint128.h
  187. unique_function.h
  188. uuid.cpp
  189. uuid.h
  190. vector_math.h
  191. virtual_buffer.cpp
  192. virtual_buffer.h
  193. wall_clock.cpp
  194. wall_clock.h
  195. zstd_compression.cpp
  196. zstd_compression.h
  197. )
  198. if(ARCHITECTURE_x86_64)
  199. target_sources(common
  200. PRIVATE
  201. x64/cpu_detect.cpp
  202. x64/cpu_detect.h
  203. x64/native_clock.cpp
  204. x64/native_clock.h
  205. x64/xbyak_abi.h
  206. x64/xbyak_util.h
  207. )
  208. endif()
  209. if (MSVC)
  210. target_compile_definitions(common PRIVATE
  211. # The standard library doesn't provide any replacement for codecvt yet
  212. # so we can disable this deprecation warning for the time being.
  213. _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING
  214. )
  215. target_compile_options(common PRIVATE
  216. /W4
  217. /WX
  218. )
  219. else()
  220. target_compile_options(common PRIVATE
  221. -Werror
  222. $<$<CXX_COMPILER_ID:Clang>:-fsized-deallocation>
  223. )
  224. endif()
  225. create_target_directory_groups(common)
  226. target_link_libraries(common PUBLIC ${Boost_LIBRARIES} fmt::fmt microprofile Threads::Threads)
  227. target_link_libraries(common PRIVATE lz4::lz4 xbyak)
  228. if (MSVC)
  229. target_link_libraries(common PRIVATE zstd::zstd)
  230. else()
  231. target_link_libraries(common PRIVATE zstd)
  232. endif()