Files
ppsspp/GPU/CMakeLists.txt
Henrik RydgårdandClaude Sonnet 5 abe6786ae1 Rename core to Core and extract it and GPU into their own CMakeLists.txt
Mirrors the earlier Common extraction. The old "core" target folded in
all of GPU/ (~200 files) plus a few ext/ files wholesale; Windows
already treats GPU as its own project (GPU.vcxproj), so GPU/CMakeLists.txt
splits that out too. GPU has a genuine two-way dependency with Core
(Core/System.cpp calls GPU_Init(), GPU/* calls back into Core for
Memory/Config/CoreTiming/etc), so GPU is a CMake OBJECT library: its
object files are always included wherever consumed instead of being
lazily pulled from an archive, avoiding the GNU ld single-pass
archive-ordering problem a two-way STATIC dependency would hit.

Also fixed a few library misattributions discovered while tracing what
each file actually uses:
- GlslangLibs (glslang/spirv-cross) moved from Core to Common, since
  it's Common/GPU/ShaderTranslation.cpp and VulkanContext.cpp that
  call into it directly. It only worked before because Core happened
  to always be linked after Common.
- ZSTD and OPENGL_LIBRARIES/X11_LIBRARIES moved from Core to GPU,
  matching where they're actually called (GPU/Debugger/Record.cpp and
  Playback.cpp for ZSTD, GPU/GLES for raw gl*() calls).
- GPU also needs Ext::Snappy directly (Playback.cpp calls
  snappy_uncompress) and the libretro-common include dir under
  LIBRETRO, both previously inherited for free by accident.

Also fixed USE_DISCORD's add_compile_definitions ordering: it was
being defined after ppsspp_ui's add_library call, so the UI target
never actually saw it on non-MSVC platforms.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PSNaZnHCjmryS3ziVN9gZU
2026-07-24 20:16:07 +02:00

218 lines
5.7 KiB
CMake

set(GPUArch)
list(APPEND GPUArch
Common/VertexDecoderArm.cpp
Common/VertexDecoderArm64.cpp
Common/VertexDecoderX86.cpp
Software/DrawPixelX86.cpp
Software/SamplerX86.cpp
Common/VertexDecoderRiscV.cpp
Common/VertexDecoderLoongArch64.cpp
)
set(GPU_GLES
GLES/StencilBufferGLES.cpp
GLES/GPU_GLES.cpp
GLES/GPU_GLES.h
GLES/FragmentTestCacheGLES.cpp
GLES/FragmentTestCacheGLES.h
GLES/FramebufferManagerGLES.cpp
GLES/FramebufferManagerGLES.h
GLES/ShaderManagerGLES.cpp
GLES/ShaderManagerGLES.h
GLES/StateMappingGLES.cpp
GLES/StateMappingGLES.h
GLES/TextureCacheGLES.cpp
GLES/TextureCacheGLES.h
GLES/DrawEngineGLES.cpp
GLES/DrawEngineGLES.h
)
set(GPU_VULKAN
Vulkan/DebugVisVulkan.cpp
Vulkan/DebugVisVulkan.h
Vulkan/DrawEngineVulkan.cpp
Vulkan/DrawEngineVulkan.h
Vulkan/FramebufferManagerVulkan.cpp
Vulkan/FramebufferManagerVulkan.h
Vulkan/GPU_Vulkan.cpp
Vulkan/GPU_Vulkan.h
Vulkan/PipelineManagerVulkan.cpp
Vulkan/PipelineManagerVulkan.h
Vulkan/ShaderManagerVulkan.cpp
Vulkan/ShaderManagerVulkan.h
Vulkan/StateMappingVulkan.cpp
Vulkan/StateMappingVulkan.h
Vulkan/TextureCacheVulkan.cpp
Vulkan/TextureCacheVulkan.h
Vulkan/VulkanUtil.cpp
Vulkan/VulkanUtil.h
)
set(GPU_D3D11
D3D11/DrawEngineD3D11.cpp
D3D11/DrawEngineD3D11.h
D3D11/FramebufferManagerD3D11.cpp
D3D11/FramebufferManagerD3D11.h
D3D11/GPU_D3D11.cpp
D3D11/GPU_D3D11.h
D3D11/D3D11Util.cpp
D3D11/D3D11Util.h
D3D11/ShaderManagerD3D11.cpp
D3D11/ShaderManagerD3D11.h
D3D11/StateMappingD3D11.cpp
D3D11/StateMappingD3D11.h
D3D11/TextureCacheD3D11.cpp
D3D11/TextureCacheD3D11.h
)
# We build Vulkan even on Apple to avoid annoying build differences.
set(GPU_IMPLS ${GPU_GLES} ${GPU_VULKAN})
if(WIN32)
list(APPEND GPU_IMPLS ${GPU_D3D11})
endif()
set(GPU_SOURCES
${GPUArch}
${GPU_IMPLS}
${GPU_NEON}
Common/Draw2D.cpp
Common/Draw2D.h
Common/DepthBufferCommon.cpp
Common/DepthRaster.cpp
Common/DepthRaster.h
Common/TextureShaderCommon.cpp
Common/TextureShaderCommon.h
Common/DepalettizeShaderCommon.cpp
Common/DepalettizeShaderCommon.h
Common/FragmentShaderGenerator.cpp
Common/FragmentShaderGenerator.h
Common/VertexShaderGenerator.cpp
Common/VertexShaderGenerator.h
Common/FramebufferManagerCommon.cpp
Common/FramebufferManagerCommon.h
Common/GPUDebugInterface.cpp
Common/GPUDebugInterface.h
Common/GPUStateUtils.cpp
Common/GPUStateUtils.h
Common/DrawEngineCommon.cpp
Common/DrawEngineCommon.h
Common/PresentationCommon.cpp
Common/PresentationCommon.h
Common/ReinterpretFramebuffer.cpp
Common/ReinterpretFramebuffer.h
Common/ShaderId.cpp
Common/ShaderId.h
Common/ShaderUniforms.cpp
Common/ShaderUniforms.h
Common/ShaderCommon.cpp
Common/ShaderCommon.h
Common/SplineCommon.cpp
Common/SplineCommon.h
Common/StencilCommon.cpp
Common/StencilCommon.h
Common/SoftwareTransformCommon.cpp
Common/SoftwareTransformCommon.h
Common/VertexDecoderCommon.cpp
Common/VertexDecoderCommon.h
Common/VertexDecoderHandwritten.cpp
Common/VertexDecoderHandwritten.h
Common/VertexReader.h
Common/TransformCommon.cpp
Common/TransformCommon.h
Common/IndexGenerator.cpp
Common/IndexGenerator.h
Common/ImageCommon.h
Common/TextureDecoder.cpp
Common/TextureDecoder.h
Common/TextureCacheCommon.cpp
Common/TextureCacheCommon.h
Common/TextureScalerCommon.cpp
Common/TextureScalerCommon.h
Common/PostShader.cpp
Common/PostShader.h
Common/TextureReplacer.cpp
Common/TextureReplacer.h
Common/ReplacedTexture.cpp
Common/ReplacedTexture.h
Debugger/Breakpoints.cpp
Debugger/Breakpoints.h
Debugger/Debugger.cpp
Debugger/Debugger.h
Debugger/GECommandTable.cpp
Debugger/GECommandTable.h
Debugger/Playback.cpp
Debugger/Playback.h
Debugger/Record.cpp
Debugger/Record.h
Debugger/RecordFormat.h
Debugger/State.cpp
Debugger/State.h
Debugger/Stepping.cpp
Debugger/Stepping.h
ge_constants.h
GeConstants.cpp
GPUDefinitions.h
GeDisasm.cpp
GeDisasm.h
GPU.cpp
GPU.h
GPUCommon.cpp
GPUCommon.h
GPUCommonHW.cpp
GPUCommonHW.h
GPUState.cpp
GPUState.h
GPUStateSIMDUtil.h
Math3D.cpp
Math3D.h
Software/BinManager.cpp
Software/BinManager.h
Software/Clipper.cpp
Software/Clipper.h
Software/DrawPixel.cpp
Software/DrawPixel.h
Software/FuncId.cpp
Software/FuncId.h
Software/Lighting.cpp
Software/Lighting.h
Software/Rasterizer.cpp
Software/Rasterizer.h
Software/RasterizerRectangle.cpp
Software/RasterizerRectangle.h
Software/RasterizerRegCache.cpp
Software/RasterizerRegCache.h
Software/Sampler.cpp
Software/Sampler.h
Software/SoftGpu.cpp
Software/SoftGpu.h
Software/TransformUnit.cpp
Software/TransformUnit.h
)
# GPU has a genuine two-way dependency with Core (Core/System.cpp calls GPU_Init(), while
# all of GPU/ calls back into Core for Memory/Config/CoreTiming/etc). An OBJECT library's
# object files are always included wherever it's consumed rather than being lazily pulled
# from an archive, which sidesteps the GNU ld single-pass archive-ordering problem a normal
# two-way STATIC dependency would hit. Core links this PUBLICLY so consumers of Core get it.
add_library(GPU OBJECT ${GPU_SOURCES})
target_compile_features(GPU PUBLIC cxx_std_17)
if(LIBRETRO)
target_include_directories(GPU PRIVATE ${CMAKE_SOURCE_DIR}/libretro/libretro-common/include)
endif()
setup_target_project(GPU GPU)
# The only direct external dependencies of GPU/ itself (as opposed to Common/GPU/*, which
# already carries its own GL/Vulkan loader abstractions): raw gl*() calls in GPU/GLES, direct
# ZSTD_compress/decompress calls in GPU/Debugger/Record.cpp and Playback.cpp, and Playback.cpp
# also calls snappy_uncompress() directly.
target_link_libraries(GPU PUBLIC ${OPENGL_LIBRARIES} ${X11_LIBRARIES} Ext::Snappy)
if(USE_SYSTEM_ZSTD)
target_include_directories(GPU PRIVATE ${ZSTD_INCLUDE_DIR})
target_link_libraries(GPU PUBLIC ${ZSTD_LIBRARY})
else()
target_link_libraries(GPU PUBLIC libzstd_static)
endif()