UsdLayerManager/cmake/modules/FindImgui.cmake

84 lines
2.1 KiB
CMake

# FindImgui.cmake
# Finds ImGui library and sets up compilation
#
# This module defines:
# Imgui_FOUND - System has ImGui
# Imgui_INCLUDE_DIRS - ImGui include directories
# Imgui_SOURCES - ImGui source files to compile
# Imgui::Imgui - Imported target for ImGui
# Find ImGui directory
find_path(Imgui_DIR
NAMES imgui.h
PATHS
${IMGUI_DIR}
${CMAKE_SOURCE_DIR}/third_party/imgui-1.92.7
${CMAKE_SOURCE_DIR}/third_party/imgui
DOC "ImGui root directory"
)
if(Imgui_DIR)
set(Imgui_INCLUDE_DIRS
${Imgui_DIR}
${Imgui_DIR}/backends
)
# Core ImGui source files
set(Imgui_SOURCES
${Imgui_DIR}/imgui.cpp
${Imgui_DIR}/imgui_draw.cpp
${Imgui_DIR}/imgui_tables.cpp
${Imgui_DIR}/imgui_widgets.cpp
${Imgui_DIR}/imgui_demo.cpp
)
# Backend source files for Win32 + OpenGL3
list(APPEND Imgui_SOURCES
${Imgui_DIR}/backends/imgui_impl_win32.cpp
${Imgui_DIR}/backends/imgui_impl_opengl3.cpp
)
set(Imgui_FOUND TRUE)
endif()
# Handle standard find_package arguments
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Imgui
REQUIRED_VARS
Imgui_DIR
Imgui_INCLUDE_DIRS
Imgui_SOURCES
)
if(Imgui_FOUND)
# Create imported target
if(NOT TARGET Imgui::Imgui)
# Create the actual library target first
add_library(imgui_lib STATIC ${Imgui_SOURCES})
target_include_directories(imgui_lib PUBLIC ${Imgui_INCLUDE_DIRS})
# Link against Windows libraries for Win32 backend and OpenGL
target_link_libraries(imgui_lib PUBLIC
opengl32
gdi32
dwmapi
imm32
)
# Enable docking support
# target_compile_definitions(imgui_lib PUBLIC IMGUI_HAS_DOCK)
# Set C++ standard
target_compile_features(imgui_lib PUBLIC cxx_std_17)
# Create an alias with the :: namespace
add_library(Imgui::Imgui ALIAS imgui_lib)
endif()
message(STATUS "Found ImGui: ${Imgui_DIR}")
endif()
mark_as_advanced(
Imgui_DIR
)