##################
# borealis dependency
##################

# do not include
# borealis/library/lib/switch_wrapper.c
# switch functions are in switch/src/main.cpp
set(BOREALIS_SOURCE
    borealis/library/lib/extern/libretro-common/features/features_cpu.c
    borealis/library/lib/extern/libretro-common/encodings/encoding_utf.c
    borealis/library/lib/extern/libretro-common/compat/compat_strl.c
    borealis/library/lib/extern/nxfmtwrapper/format.cpp
    borealis/library/lib/extern/nanovg/nanovg.c
    borealis/library/lib/extern/glad/glad.c
    borealis/library/lib/scroll_view.cpp
    borealis/library/lib/style.cpp
    borealis/library/lib/table.cpp
    borealis/library/lib/task_manager.cpp
    borealis/library/lib/progress_display.cpp
    borealis/library/lib/staged_applet_frame.cpp
    borealis/library/lib/applet_frame.cpp
    borealis/library/lib/hint.cpp
    borealis/library/lib/image.cpp
    borealis/library/lib/logger.cpp
    borealis/library/lib/swkbd.cpp
    borealis/library/lib/crash_frame.cpp
    borealis/library/lib/header.cpp
    borealis/library/lib/progress_spinner.cpp
    borealis/library/lib/layer_view.cpp
    borealis/library/lib/notification_manager.cpp
    borealis/library/lib/rectangle.cpp
    borealis/library/lib/application.cpp
    borealis/library/lib/box_layout.cpp
    borealis/library/lib/sidebar.cpp
    borealis/library/lib/dropdown.cpp
    borealis/library/lib/popup_frame.cpp
    borealis/library/lib/repeating_task.cpp
    borealis/library/lib/absolute_layout.cpp
    borealis/library/lib/i18n.cpp
    borealis/library/lib/tab_frame.cpp
    borealis/library/lib/thumbnail_frame.cpp
    borealis/library/lib/animations.cpp
    borealis/library/lib/dialog.cpp
    borealis/library/lib/view.cpp
    borealis/library/lib/list.cpp
    borealis/library/lib/button.cpp
    borealis/library/lib/label.cpp
    borealis/library/lib/theme.cpp
    borealis/library/lib/material_icon.cpp)

add_library(borealis STATIC ${BOREALIS_SOURCE})
set_property(TARGET borealis PROPERTY CXX_STANDARD 17)
target_include_directories(borealis PUBLIC
	borealis/library/include
    borealis/library/include/borealis/extern
	borealis/library/include/borealis/extern/glad
	borealis/library/include/borealis/extern/nanovg
	borealis/library/include/borealis/extern/libretro-common
	borealis/library/lib/extern/fmt/include)

find_package(glfw3 REQUIRED)
find_library(EGL EGL)
find_library(GLAPI glapi)
find_library(DRM_NOUVEAU drm_nouveau)
target_link_libraries(borealis
	glfw
	${EGL}
	${GLAPI}
	${DRM_NOUVEAU})

if(CHIAKI_IS_SWITCH)
	target_compile_definitions(borealis PUBLIC
		BOREALIS_RESOURCES="romfs:/")
else()
	target_compile_definitions(borealis PUBLIC
		BOREALIS_RESOURCES="./switch/res/")
endif()


##################
# chiaki with borealis
##################

find_package(FFMPEG REQUIRED COMPONENTS avcodec avutil swscale)
find_library(SDL2 SDL2)
find_library(SWRESAMPLE swresample)

# find -type f | grep -P '\.(h|cpp)$' | sed 's#\./#\t\t#g'
add_executable(chiaki-borealis WIN32
	src/discoverymanager.cpp
	src/settings.cpp
	src/io.cpp
	src/host.cpp
	src/main.cpp
	src/gui.cpp)

set_target_properties(chiaki-borealis PROPERTIES
	CXX_STANDARD 17
	OUTPUT_NAME chiaki)

target_include_directories(chiaki-borealis PRIVATE include)

target_link_libraries(chiaki-borealis
	chiaki-lib
	borealis
	${SDL2}
	FFMPEG::avcodec
	FFMPEG::avutil
	FFMPEG::swscale
	${SWRESAMPLE}
	${SWSCALE})

if(CHIAKI_IS_SWITCH)
	# libnx is forced by the switch toolchain
	find_library(Z z)
	find_library(GLAPI glapi) # TODO: make it transitive from borealis
	find_library(DRM_NOUVEAU drm_nouveau) # TODO: make it transitive from borealis
	target_link_libraries(chiaki-borealis ${Z} ${GLAPI} ${DRM_NOUVEAU})
endif()

install(TARGETS chiaki-borealis
	RUNTIME DESTINATION bin
	BUNDLE DESTINATION bin)

if(CHIAKI_IS_SWITCH)
	add_nro_target(chiaki
		chiaki-borealis
		"Chiaki"
		"H0neyBadger and thestr4ng3r"
		"${CHIAKI_VERSION}"
		"${CMAKE_CURRENT_SOURCE_DIR}/nro_icon.jpg"
		"${CMAKE_CURRENT_SOURCE_DIR}/res")
endif()