dolphin/Source/Core/Common/CMakeLists.txt

388 lines
7.9 KiB
CMake

add_library(common
Analytics.cpp
Analytics.h
Assembler/AssemblerShared.cpp
Assembler/AssemblerShared.h
Assembler/AssemblerTables.cpp
Assembler/AssemblerTables.h
Assembler/GekkoAssembler.cpp
Assembler/GekkoAssembler.h
Assembler/GekkoIRGen.cpp
Assembler/GekkoIRGen.h
Assembler/GekkoLexer.cpp
Assembler/GekkoLexer.h
Assembler/GekkoParser.cpp
Assembler/GekkoParser.h
Assert.h
BitField.h
BitSet.h
BitUtils.h
BlockingLoop.h
ChunkFile.h
CodeBlock.h
ColorUtil.cpp
ColorUtil.h
Common.h
CommonFuncs.cpp
CommonFuncs.h
CommonPaths.h
CommonTypes.h
Config/Config.cpp
Config/Config.h
Config/ConfigInfo.cpp
Config/ConfigInfo.h
Config/Enums.h
Config/Layer.cpp
Config/Layer.h
CPUDetect.h
Crypto/AES.cpp
Crypto/AES.h
Crypto/bn.cpp
Crypto/bn.h
Crypto/ec.cpp
Crypto/ec.h
Crypto/HMAC.cpp
Crypto/HMAC.h
Crypto/SHA1.cpp
Crypto/SHA1.h
Debug/MemoryPatches.cpp
Debug/MemoryPatches.h
Debug/Threads.h
Debug/Watches.cpp
Debug/Watches.h
DynamicLibrary.cpp
DynamicLibrary.h
ENet.cpp
ENet.h
EnumFormatter.h
EnumMap.h
EnumUtils.h
Event.h
FatFsUtil.cpp
FatFsUtil.h
FileSearch.cpp
FileSearch.h
FileUtil.cpp
FileUtil.h
FixedSizeQueue.h
Flag.h
FloatUtils.cpp
FloatUtils.h
FormatUtil.h
FPURoundMode.h
GekkoDisassembler.cpp
GekkoDisassembler.h
Hash.cpp
Hash.h
HookableEvent.h
HostDisassembler.cpp
HostDisassembler.h
HttpRequest.cpp
HttpRequest.h
Image.cpp
Image.h
IniFile.cpp
IniFile.h
Inline.h
IOFile.cpp
IOFile.h
JitRegister.cpp
JitRegister.h
JsonUtil.h
JsonUtil.cpp
Lazy.h
LinearDiskCache.h
Logging/ConsoleListener.h
Logging/Log.h
Logging/LogManager.cpp
Logging/LogManager.h
MathUtil.h
Matrix.cpp
Matrix.h
MemArena.h
MemoryUtil.cpp
MemoryUtil.h
MinizipUtil.h
MsgHandler.cpp
MsgHandler.h
NandPaths.cpp
NandPaths.h
Network.cpp
Network.h
PcapFile.cpp
PcapFile.h
Profiler.cpp
Profiler.h
QoSSession.cpp
QoSSession.h
Random.cpp
Random.h
Result.h
ScopeGuard.h
SDCardUtil.cpp
SDCardUtil.h
Semaphore.h
SettingsHandler.cpp
SettingsHandler.h
SFMLHelper.cpp
SFMLHelper.h
SmallVector.h
SocketContext.cpp
SocketContext.h
SpanUtils.h
SPSCQueue.h
StringLiteral.h
StringUtil.cpp
StringUtil.h
SymbolDB.cpp
SymbolDB.h
Thread.cpp
Thread.h
Timer.cpp
Timer.h
TimeUtil.cpp
TimeUtil.h
TraversalClient.cpp
TraversalClient.h
TraversalProto.h
TypeUtils.h
Unreachable.h
UPnP.cpp
UPnP.h
VariantUtil.h
Version.cpp
Version.h
WindowSystemInfo.h
WorkQueueThread.h
)
add_dependencies(common dolphin_scmrev)
if(NOT MSVC AND _M_ARM_64)
set_source_files_properties(
Crypto/AES.cpp
Crypto/SHA1.cpp
PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto")
endif()
target_link_libraries(common
PUBLIC
${CMAKE_THREAD_LIBS_INIT}
enet::enet
fmt::fmt
MbedTLS::mbedtls
minizip::minizip
sfml-network
PRIVATE
CURL::libcurl
FatFs
Iconv::Iconv
spng::spng
${VTUNE_LIBRARIES}
)
if ((DEFINED CMAKE_ANDROID_ARCH_ABI AND CMAKE_ANDROID_ARCH_ABI MATCHES "x86|x86_64") OR
(NOT DEFINED CMAKE_ANDROID_ARCH_ABI AND _M_X86_64))
target_link_libraries(common PRIVATE bdisasm)
endif()
if (APPLE)
target_link_libraries(common
PRIVATE
${APPKIT_LIBRARY}
${COREFOUNDATION_LIBRARY}
${IOK_LIBRARY}
)
elseif(WIN32)
target_link_libraries(common
PRIVATE
kernel32.lib
shlwapi.lib
winmm.lib
)
if (_M_X86_64)
target_link_libraries(common PRIVATE opengl32.lib)
endif()
elseif (ANDROID)
target_link_libraries(common
PRIVATE
androidcommon
)
elseif(HAIKU)
target_link_libraries(common PRIVATE be GL)
endif()
if(ANDROID)
target_sources(common PRIVATE
AndroidAnalytics.cpp
AndroidAnalytics.h
Logging/ConsoleListenerDroid.cpp
MemArenaAndroid.cpp
)
elseif(WIN32)
target_sources(common PRIVATE
LdrWatcher.cpp
LdrWatcher.h
Logging/ConsoleListenerWin.cpp
MemArenaWin.cpp
)
else()
target_sources(common PRIVATE
Logging/ConsoleListenerNix.cpp
MemArenaUnix.cpp
)
endif()
if(_M_ARM_64)
target_sources(common PRIVATE
Arm64Emitter.cpp
Arm64Emitter.h
ArmCommon.h
ArmCPUDetect.cpp
ArmFPURoundMode.cpp
)
else()
if(_M_X86_64) #X86
target_sources(common PRIVATE
x64ABI.cpp
x64ABI.h
x64Emitter.cpp
x64Emitter.h
x64FPURoundMode.cpp
x64CPUDetect.cpp
x64Reg.h
)
else() # Generic
target_sources(common PRIVATE
GenericFPURoundMode.cpp
GenericCPUDetect.cpp
)
endif()
endif()
# OpenGL Interface
target_sources(common PRIVATE
GL/GLContext.cpp
GL/GLContext.h
GL/GLUtil.cpp
GL/GLUtil.h
GL/GLExtensions/GLExtensions.cpp
GL/GLExtensions/GLExtensions.h
)
if(ENABLE_EGL AND EGL_FOUND)
target_sources(common PRIVATE
GL/GLInterface/EGL.cpp
GL/GLInterface/EGL.h
)
if(ANDROID)
target_sources(common PRIVATE
GL/GLInterface/EGLAndroid.cpp
GL/GLInterface/EGLAndroid.h
)
elseif(ENABLE_X11 AND X11_FOUND)
target_sources(common PRIVATE
GL/GLInterface/EGLX11.cpp
GL/GLInterface/EGLX11.h
)
endif()
target_include_directories(common PRIVATE ${EGL_INCLUDE_DIRS})
target_link_libraries(common PUBLIC ${EGL_LIBRARIES})
endif()
if(WIN32)
target_sources(common PRIVATE
CompatPatches.cpp
GL/GLInterface/WGL.cpp
GL/GLInterface/WGL.h
WindowsRegistry.cpp
)
elseif(APPLE)
target_sources(common PRIVATE
GL/GLInterface/AGL.h
GL/GLInterface/AGL.mm
)
elseif(HAIKU)
target_sources(common PRIVATE
GL/GLInterface/BGL.h
GL/GLInterface/BGL.cpp
)
elseif(ENABLE_X11 AND X11_FOUND)
target_sources(common PRIVATE
GL/GLX11Window.cpp
GL/GLX11Window.h
GL/GLInterface/GLX.cpp
GL/GLInterface/GLX.h
)
# GLX has a hard dependency on libGL.
# Make sure to link to it if using GLX.
target_link_libraries(common PUBLIC ${OPENGL_LIBRARIES})
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_libraries(common PUBLIC dl rt)
endif()
if(WIN32)
target_sources(common PRIVATE HRWrap.h HRWrap.cpp)
endif()
if(USE_UPNP)
target_link_libraries(common PRIVATE Miniupnpc::miniupnpc)
endif()
if(OPROFILE_FOUND)
target_link_libraries(common PRIVATE OProfile::OProfile)
endif()
if(ENABLE_LLVM)
find_package(LLVM CONFIG)
if(LLVM_FOUND)
message(STATUS "LLVM found, enabling LLVM support in disassembler")
target_compile_definitions(common PRIVATE HAVE_LLVM)
# Minimal documentation about LLVM's CMake functions is available here:
# https://releases.llvm.org/16.0.0/docs/CMake.html#embedding-llvm-in-your-project
# https://groups.google.com/g/llvm-dev/c/YeEVe7HTasQ?pli=1
#
# However, you have to read the source code in any case.
# Look for LLVM-Config.cmake in your (Unix) system:
# $ find /usr -name LLVM-Config\\.cmake 2>/dev/null
llvm_expand_pseudo_components(LLVM_EXPAND_COMPONENTS
AllTargetsInfos AllTargetsDisassemblers AllTargetsCodeGens
)
llvm_config(common USE_SHARED
mcdisassembler target ${LLVM_EXPAND_COMPONENTS}
)
target_include_directories(common PRIVATE ${LLVM_INCLUDE_DIRS})
endif()
endif()
if(UNIX)
# Posix networking code needs to be fixed for Windows
add_executable(traversal_server TraversalServer.cpp)
target_link_libraries(traversal_server PRIVATE common fmt::fmt)
if(SYSTEMD_FOUND)
target_link_libraries(traversal_server PRIVATE ${SYSTEMD_LIBRARIES})
endif()
elseif(WIN32)
find_package(PowerShell REQUIRED)
execute_process(
COMMAND ${POWERSHELL_EXE} -Command "[System.Diagnostics.FileVersionInfo]::GetVersionInfo('$ENV{VCToolsRedistDir}vc_redist.x64.exe').ProductVersion"
OUTPUT_VARIABLE VC_TOOLS_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/build_info.txt.in"
"${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/build_info.txt"
)
target_link_libraries(common PRIVATE "-INCLUDE:enableCompatPatches")
endif()
if(MSVC)
# Add precompiled header
target_link_libraries(common PRIVATE use_pch)
endif()