set(SRCS
  Analytics.cpp
  CDUtils.cpp
  ColorUtil.cpp
  CommonFuncs.cpp
  Config/Config.cpp
  Config/Layer.cpp
  Config/Section.cpp
  Crypto/AES.cpp
  Crypto/bn.cpp
  Crypto/ec.cpp
  ENetUtil.cpp
  File.cpp
  FileSearch.cpp
  FileUtil.cpp
  GekkoDisassembler.cpp
  Hash.cpp
  HttpRequest.cpp
  IniFile.cpp
  JitRegister.cpp
  Logging/LogManager.cpp
  MathUtil.cpp
  MD5.cpp
  MemArena.cpp
  MemoryUtil.cpp
  MsgHandler.cpp
  NandPaths.cpp
  Network.cpp
  PcapFile.cpp
  PerformanceCounter.cpp
  Profiler.cpp
  SettingsHandler.cpp
  SDCardUtil.cpp
  StringUtil.cpp
  SymbolDB.cpp
  SysConf.cpp
  Thread.cpp
  Timer.cpp
  TraversalClient.cpp
  UPnP.cpp
  Version.cpp
  x64ABI.cpp
  x64Emitter.cpp
)

set(LIBS ${LIBS} ${MBEDTLS_LIBRARIES})

if(ANDROID)
  set(SRCS ${SRCS}
    Logging/ConsoleListenerDroid.cpp)
elseif(WIN32)
  set(SRCS ${SRCS}
    Logging/ConsoleListenerWin.cpp)
else()
  set(SRCS ${SRCS}
    Logging/ConsoleListenerNix.cpp)
endif()

list(APPEND LIBS enet ${CURL_LIBRARIES})
if(_M_ARM_64)
  set(SRCS ${SRCS}
    Arm64Emitter.cpp
    ArmCPUDetect.cpp
    GenericFPURoundMode.cpp
  )
else()
  if(_M_X86) #X86
    set(SRCS ${SRCS}
      x64FPURoundMode.cpp
      x64CPUDetect.cpp
    )
  else() # Generic
    set(SRCS ${SRCS}
      GenericFPURoundMode.cpp
      GenericCPUDetect.cpp
    )
  endif()
endif()

list(APPEND LIBS "${CMAKE_THREAD_LIBS_INIT}" ${VTUNE_LIBRARIES})

# OpenGL Interface
set(SRCS ${SRCS}
  GL/GLUtil.cpp
  GL/GLExtensions/GLExtensions.cpp
  GL/GLInterface/GLInterface.cpp
)

if(USE_EGL)
  set(SRCS ${SRCS} GL/GLInterface/EGL.cpp)
  if(ANDROID)
    set(SRCS ${SRCS} GL/GLInterface/EGLAndroid.cpp)
  elseif(USE_X11)
    set(SRCS ${SRCS} GL/GLInterface/EGLX11.cpp)
  endif()
  set(LIBS ${LIBS} EGL)
endif()

if(WIN32)
  set(SRCS ${SRCS} GL/GLInterface/WGL.cpp CompatPatches.cpp)
elseif(APPLE)
  set(SRCS ${SRCS} GL/GLInterface/AGL.mm)
elseif(HAIKU)
  set(SRCS ${SRCS} GL/GLInterface/BGL.cpp)
  set(LIBS ${LIBS} be GL)
elseif(USE_X11)
  if (NOT USE_EGL)
    set(SRCS ${SRCS} GL/GLInterface/GLX.cpp)
    # GLX has a hard dependency on libGL.
    # Make sure to link to it if using GLX.
    set(LIBS ${LIBS} ${OPENGL_LIBRARIES})
  endif()
  set(SRCS ${SRCS} GL/GLInterface/X11_Util.cpp)
  set(LIBS ${LIBS} ${XRANDR_LIBRARIES})
endif()

if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
  set(LIBS ${LIBS} dl)
endif()

add_dolphin_library(common "${SRCS}" "${LIBS}")

if(USE_UPNP)
  target_link_libraries(common PRIVATE Miniupnpc::miniupnpc)
endif()

if(OPROFILE_FOUND)
  target_link_libraries(common PRIVATE ${OPROFILE_LIBRARIES})
endif()

if(UNIX)
  # Posix networking code needs to be fixed for Windows
  add_executable(traversal_server TraversalServer.cpp)
  if(HAIKU)
    target_link_libraries(traversal_server network)
  endif()
elseif(WIN32)
  target_link_libraries(common PRIVATE "-INCLUDE:enableCompatPatches")
endif()