project(ImGui LANGUAGES CXX)

option(FORCE_BACKEND_GL2  "Forces the OpenGL 2 graphics backend on Windows.")
option(FORCE_BACKEND_GLFW "Forces the GLFW window backend on Windows.")

add_library(ImGui)

target_sources(
	ImGui PRIVATE
		../../thirdparty/imgui/imgui_demo.cpp
		../../thirdparty/imgui/imgui_draw.cpp
		../../thirdparty/imgui/imgui_internal.h
		../../thirdparty/imgui/imgui_tables.cpp
		../../thirdparty/imgui/imgui_widgets.cpp
		../../thirdparty/imgui/imgui.cpp
		../../thirdparty/imgui/imgui.h
		../../thirdparty/imgui/misc/cpp/imgui_stdlib.cpp
		../../thirdparty/imgui/misc/cpp/imgui_stdlib.h
		../../thirdparty/imgui/misc/freetype/imgui_freetype.cpp
		../../thirdparty/imgui/misc/freetype/imgui_freetype.h
		ImConfig.h
)

if(WIN32 AND NOT FORCE_BACKEND_GL2)
	target_sources(
		ImGui PRIVATE
			../../thirdparty/imgui/backends/imgui_impl_dx11.cpp
			../../thirdparty/imgui/backends/imgui_impl_dx11.h
	)

	target_link_libraries(ImGui PUBLIC d3d11.lib)
else()
	target_sources(
		ImGui PRIVATE
			../../thirdparty/imgui/backends/imgui_impl_opengl2.cpp
			../../thirdparty/imgui/backends/imgui_impl_opengl2.h
	)

	target_link_libraries(ImGui PUBLIC OpenGL::GL)
endif()

if(WIN32 AND NOT FORCE_BACKEND_GLFW)
	target_sources(
		ImGui PRIVATE
			../../thirdparty/imgui/backends/imgui_impl_win32.cpp
			../../thirdparty/imgui/backends/imgui_impl_win32.h
	)
else()
	target_sources(
		ImGui PRIVATE
			../../thirdparty/imgui/backends/imgui_impl_glfw.cpp
			../../thirdparty/imgui/backends/imgui_impl_glfw.h
	)

	target_link_libraries(ImGui PUBLIC glfw)
endif()

target_include_directories(ImGui SYSTEM PUBLIC ../../thirdparty/freetype/include)
target_include_directories(ImGui SYSTEM PUBLIC ../../thirdparty/imgui)
target_include_directories(ImGui SYSTEM PUBLIC ../../thirdparty/imgui/backends)
target_include_directories(ImGui SYSTEM PUBLIC ../../thirdparty/imgui/misc/cpp)
target_include_directories(ImGui SYSTEM PUBLIC ../../thirdparty/imgui/misc/freetype)

target_compile_options(
	ImGui PUBLIC
		-DIMGUI_USER_CONFIG="${CMAKE_CURRENT_SOURCE_DIR}/ImConfig.h"
)