set(SRCS InputConfig.cpp
  ControllerEmu/ControllerEmu.cpp
  ControllerEmu/Control/Control.cpp
  ControllerEmu/Control/Input.cpp
  ControllerEmu/Control/Output.cpp
  ControllerEmu/ControlGroup/AnalogStick.cpp
  ControllerEmu/ControlGroup/Buttons.cpp
  ControllerEmu/ControlGroup/ControlGroup.cpp
  ControllerEmu/ControlGroup/Cursor.cpp
  ControllerEmu/ControlGroup/Extension.cpp
  ControllerEmu/ControlGroup/Force.cpp
  ControllerEmu/ControlGroup/MixedTriggers.cpp
  ControllerEmu/ControlGroup/ModifySettingsButton.cpp
  ControllerEmu/ControlGroup/Slider.cpp
  ControllerEmu/ControlGroup/Tilt.cpp
  ControllerEmu/ControlGroup/Triggers.cpp
  ControllerInterface/ControllerInterface.cpp
  ControllerInterface/Device.cpp
  ControlReference/ControlReference.cpp
  ControlReference/ExpressionParser.cpp
)
set(LIBS common)

if(WIN32)
  set(SRCS ${SRCS}
    ControllerInterface/DInput/DInput.cpp
    ControllerInterface/DInput/DInputJoystick.cpp
    ControllerInterface/DInput/DInputKeyboardMouse.cpp
    ControllerInterface/DInput/XInputFilter.cpp
    ControllerInterface/XInput/XInput.cpp
    ControllerInterface/ForceFeedback/ForceFeedbackDevice.cpp
  )
elseif(APPLE)
  find_library(COREFOUNDATION_LIBRARY CoreFoundation)
  find_library(CARBON_LIBRARY Carbon)
  find_library(COCOA_LIBRARY Cocoa)
  set(SRCS ${SRCS}
    ControllerInterface/OSX/OSX.mm
    ControllerInterface/OSX/OSXKeyboard.mm
    ControllerInterface/OSX/OSXJoystick.mm
    ControllerInterface/Quartz/Quartz.mm
    ControllerInterface/Quartz/QuartzKeyboardAndMouse.mm
    ControllerInterface/ForceFeedback/ForceFeedbackDevice.cpp
  )
  set(LIBS ${LIBS} ${COREFOUNDATION_LIBRARY} ${CARBON_LIBRARY} ${COCOA_LIBRARY})
elseif(X11_FOUND)
  set(SRCS ${SRCS}
    ControllerInterface/Xlib/XInput2.cpp
  )
  set(LIBS ${LIBS} ${X11_LIBRARIES} ${X11_INPUT_LIBRARIES})
elseif(ANDROID)
  add_definitions(-DCIFACE_USE_ANDROID)
  set(SRCS ${SRCS}
    ControllerInterface/Android/Android.cpp
  )
endif()

if(ANDROID)
  set(SRCS ${SRCS} GCAdapter_Android.cpp)
else()
  set(SRCS ${SRCS} GCAdapter.cpp)
  set(LIBS ${LIBS} ${LIBUSB_LIBRARIES})
endif()

if(LIBEVDEV_FOUND AND LIBUDEV_FOUND)
  set(SRCS ${SRCS} ControllerInterface/evdev/evdev.cpp)
  set(LIBS ${LIBS} ${LIBEVDEV_LIBRARY} ${LIBUDEV_LIBRARY})
endif()

if(UNIX)
  set(SRCS ${SRCS} ControllerInterface/Pipes/Pipes.cpp)
endif()

if(ENABLE_SDL)
  find_package(SDL2)
  if(SDL2_FOUND)
    message(STATUS "Using shared SDL2")
    set(SDL_TARGET SDL2::SDL2)
  else()
    # SDL2 not found, try SDL
    find_package(SDL)
    if(SDL_FOUND)
      message(STATUS "Using shared SDL")
      add_library(System_SDL INTERFACE)
      target_include_directories(System_SDL INTERFACE ${SDL_INCLUDE_DIR})
      target_link_libraries(System_SDL INTERFACE ${SDL_LIBRARY})
      set(SDL_TARGET System_SDL)
    endif()
  endif()
  if(SDL_TARGET AND TARGET ${SDL_TARGET})
    set(SRCS ${SRCS} ControllerInterface/SDL/SDL.cpp)
    set(LIBS ${LIBS} ${SDL_TARGET})
    add_definitions(-DHAVE_SDL=1)
  else()
    message(STATUS "SDL NOT found, disabling SDL input")
  endif()
endif()

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