add_executable(duckstation-nogui
  nogui_host.cpp
  nogui_host.h
  nogui_platform.h
)

target_precompile_headers(duckstation-nogui PRIVATE "pch.h")
target_link_libraries(duckstation-nogui PRIVATE core util common imgui scmversion)

add_core_resources(duckstation-nogui)

if(WIN32)
  message(STATUS "Building Win32 NoGUI Platform.")
  target_sources(duckstation-nogui PRIVATE
    duckstation-nogui.manifest
    resource.h
    win32_nogui_platform.cpp
    win32_nogui_platform.h
  )

  # We want a Windows subsystem application not console.
  set_target_properties(duckstation-nogui PROPERTIES
    WIN32_EXECUTABLE TRUE
    DEBUG_POSTFIX "-debug")
endif()


if(APPLE)
  message(STATUS "Building Cocoa NoGUI Platform.")
  set(COCOA_SOURCES PRIVATE
    cocoa_key_names.h
    cocoa_nogui_platform.mm
    cocoa_nogui_platform.h
  )
  target_sources(duckstation-nogui PRIVATE ${COCOA_SOURCES})
  find_library(QUARTZCORE_LIBRARY QuartzCore)
  find_library(COCOA_LIBRARY Cocoa)
  target_link_libraries(duckstation-nogui PRIVATE ${QUARTZCORE_LIBRARY} ${COCOA_LIBRARY})
  set_source_files_properties(${COCOA_SOURCES} PROPERTIES SKIP_PRECOMPILE_HEADERS TRUE)
endif()

if(ENABLE_X11)
  message(STATUS "Building X11 NoGUI Platform.")
  target_compile_definitions(duckstation-nogui PRIVATE "NOGUI_PLATFORM_X11=1")
  target_sources(duckstation-nogui PRIVATE
    x11_nogui_platform.cpp
    x11_nogui_platform.h
  )
  target_include_directories(duckstation-nogui PRIVATE "${X11_INCLUDE_DIR}" "${X11_Xrandr_INCLUDE_PATH}")
  target_link_libraries(duckstation-nogui PRIVATE "${X11_LIBRARIES}" "${X11_Xrandr_LIB}")
endif()

if(ENABLE_WAYLAND)
  message(STATUS "Building Wayland NoGUI Platform.")
  find_package(ECM REQUIRED NO_MODULE)
  list(APPEND CMAKE_MODULE_PATH "${ECM_MODULE_PATH}")
  find_package(Wayland REQUIRED Client)
  find_package(WaylandScanner REQUIRED)
  find_package(WaylandProtocols 1.15 REQUIRED)
  find_package(X11 REQUIRED)
  if (NOT X11_xkbcommon_FOUND)
    message(FATAL_ERROR "XKBCommon is required.")
  endif()

  target_compile_definitions(duckstation-nogui PRIVATE "NOGUI_PLATFORM_WAYLAND=1")
  target_sources(duckstation-nogui PRIVATE
    wayland_nogui_platform.cpp
    wayland_nogui_platform.h
  )

  # Required protocols.
  ecm_add_wayland_client_protocol(WAYLAND_PROTOCOL_SRCS
    PROTOCOL "${WaylandProtocols_DATADIR}/stable/xdg-shell/xdg-shell.xml"
    BASENAME xdg-shell)
  ecm_add_wayland_client_protocol(WAYLAND_PROTOCOL_SRCS
    PROTOCOL "${WaylandProtocols_DATADIR}/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml"
    BASENAME xdg-decoration)
  target_sources(duckstation-nogui PRIVATE ${WAYLAND_PROTOCOL_SRCS})
  target_include_directories(duckstation-nogui PUBLIC "${CMAKE_CURRENT_BINARY_DIR}")

  # Disable PCH for protocol files, because they're C, and our PCH above is C++.
  set_source_files_properties(${WAYLAND_PROTOCOL_SRCS} PROPERTIES SKIP_PRECOMPILE_HEADERS TRUE)

  target_link_libraries(duckstation-nogui PRIVATE
    Wayland::Client
    X11::xkbcommon
  )
endif()
