1
0
mirror of https://github.com/ocornut/imgui.git synced 2025-02-17 11:08:42 +01:00

Add CMake project

Export Dear ImGui as CMake's ImGui package.

Options:
- ImGui_USER_CONFIG;
- ImGui_EXAMPLES;
- ImGui_BACKENDS;
- ImGui_MISC;
- ImGui_3RDPARTY;
- ImGui_OPENGL_LOADER;
- ImGui_FREETYPE;
- ImGui_TOOLS;
- ImGui_PACKAGE.

Export targets:
- ImGui::Core;
- ImGui::ImplGLUT;
- ImGui::ImplSDL2;
- ImGui::ImplGlfw;
- ImGui::ImplOpenGL2;
- ImGui::ImplOpenGL3;
- ImGui::ImplVulkan;
- ImGui::FreeType;
- ImGui::StdLib;
- ImGui::BinaryToCompressedC.

Import targets from:
- build directory;
- installed package.

Examples:
- example_null;
- example_emscripten_opengl3;
- example_glut_opengl2
- example_sdl2_opengl2;
- example_sdl2_opengl3;
- example_sdl2_vulkan;
- example_glfw_opengl2;
- example_glfw_opengl3;
- example_glfw_vulkan.
This commit is contained in:
Konstantin Podsvirov 2019-04-09 18:47:06 +03:00 committed by ocornut
parent f401021d5a
commit 65e6ef1c33
13 changed files with 729 additions and 40 deletions

92
examples/CMakeLists.txt Normal file
View File

@ -0,0 +1,92 @@
cmake_minimum_required(VERSION 3.1)
# Fetching version from header file
file(STRINGS ../imgui.h ImGui_VERSION_NUM_HEADER_STRING
REGEX "#define[ \t]+IMGUI_VERSION_NUM[ \t]+([0-9]+)"
LIMIT_COUNT 1)
string(REGEX REPLACE "#define[ \t]+IMGUI_VERSION_NUM[ \t]+([0-9]+)" "\\1"
IMGUI_VERSION_NUM "${ImGui_VERSION_NUM_HEADER_STRING}")
math(EXPR IMGUI_VERSION_MAJOR "${IMGUI_VERSION_NUM} / 10000")
math(EXPR IMGUI_VERSION_MINOR "(${IMGUI_VERSION_NUM} % 10000) / 100")
math(EXPR IMGUI_VERSION_PATCH "${IMGUI_VERSION_NUM} % 100")
project(imgui_examples
VERSION "${IMGUI_VERSION_MAJOR}.${IMGUI_VERSION_MINOR}.${IMGUI_VERSION_PATCH}"
LANGUAGES CXX)
get_filename_component(ImGui_SRCDIR "${CMAKE_CURRENT_LIST_DIR}" DIRECTORY)
include("${CMAKE_CURRENT_LIST_DIR}/ImGuiModule.cmake")
set(ImGui_OPTIONS)
imgui_option(USER_CONFIG "Dear ImGui user config for include" "" STRING)
imgui_option(EXAMPLES "Dear ImGui example applications" ON)
imgui_option(BACKENDS "Dear ImGui platform and render backends" ON)
imgui_option(MISC "Dear ImGui misc features" ON)
imgui_option(3RDPARTY "Dear ImGui example dependencies" ON)
if(EMSCRIPTEN)
set(ImGui_OPENGL_LOADER_DEFAULT "GLEW")
else()
set(ImGui_OPENGL_LOADER_DEFAULT "GL3W")
endif()
imgui_option(OPENGL_LOADER
"Dear ImGui OpenGL loader (GL3W, GLEW, GLAD or custom header)"
"${ImGui_OPENGL_LOADER_DEFAULT}"
STRINGS "GL3W" "GLEW" "GLAD")
imgui_option(FREETYPE "Dear ImGui will build font atlases using FreeType instead of stb_truetype" OFF)
imgui_option(TOOLS "Dear ImGui auxiliary applications" OFF)
imgui_option(PACKAGE "Dear ImGui packaging" OFF)
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ImGuiOptions.cmake"
CONTENT "${ImGui_OPTIONS_CMAKE}")
include("${CMAKE_CURRENT_LIST_DIR}/ImGuiTargets.cmake")
set(ImGui_DIR "${CMAKE_CURRENT_LIST_DIR}")
imgui_example(example_null
TARGETS Core)
if(EMSCRIPTEN)
imgui_example(example_emscripten_opengl3
BACKENDS ImplSDL2 ImplOpenGL3)
else()
imgui_example(example_glut_opengl2
BACKENDS ImplGLUT ImplOpenGL2)
imgui_example(example_sdl2_opengl2
BACKENDS ImplSDL2 ImplOpenGL2)
imgui_example(example_sdl2_opengl3
BACKENDS ImplSDL2 ImplOpenGL3)
imgui_example(example_sdl2_vulkan
BACKENDS ImplSDL2 ImplVulkan)
imgui_example(example_glfw_opengl2
BACKENDS ImplGlfw ImplOpenGL2)
imgui_example(example_glfw_opengl3
BACKENDS ImplGlfw ImplOpenGL3)
imgui_example(example_glfw_vulkan
BACKENDS ImplGlfw ImplVulkan)
endif()
if(NOT "${CMAKE_CURRENT_LIST_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
foreach(FILE ImGuiConfig.cmake ImGuiModule.cmake ImGuiTargets.cmake)
configure_file(${FILE} ${FILE} COPYONLY)
endforeach()
endif()
install(FILES ImGuiConfig.cmake ImGuiModule.cmake ImGuiTargets.cmake
"${CMAKE_CURRENT_BINARY_DIR}/ImGuiOptions.cmake"
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/imgui)
if(ImGui_PACKAGE)
if(NOT DEFINED CPACK_PACKAGE_NAME)
set(CPACK_PACKAGE_NAME "dear-imgui")
endif()
include(CPack)
endif()

View File

@ -0,0 +1,21 @@
if(NOT DEFINED ImGui_FIND_COMPONENTS)
set(ImGui_FIND_COMPONENTS Core)
endif()
include("${CMAKE_CURRENT_LIST_DIR}/ImGuiTargets.cmake")
foreach(COMPONENT ${ImGui_FIND_COMPONENTS})
if(NOT ";${ImGui_AVAILABLE_COMPONENTS};" MATCHES ";${COMPONENT};")
set(ImGui_FOUND FALSE)
set(ImGui_NOT_FOUND_MESSAGE "Unavailable component: ${COMPONENT}.")
endif()
if(NOT ";${ImGui_SUPPORTED_COMPONENTS};" MATCHES ";${COMPONENT};")
set(ImGui_FOUND FALSE)
set(ImGui_NOT_FOUND_MESSAGE "Unsupported component: ${COMPONENT}.")
endif()
endforeach()
if(NOT ImGui_FOUND)
set(ImGui_NOT_FOUND_MESSAGE "${ImGui_NOT_FOUND_MESSAGE}\nSupported components: ${ImGui_SUPPORTED_COMPONENTS}.")
set(ImGui_NOT_FOUND_MESSAGE "${ImGui_NOT_FOUND_MESSAGE}\nAvailable components: ${ImGui_AVAILABLE_COMPONENTS}.")
endif()

325
examples/ImGuiModule.cmake Normal file
View File

@ -0,0 +1,325 @@
if(NOT DEFINED ImGuiModule_CMAKE_INCLUDED)
set(ImGuiModule_CMAKE_INCLUDED 1)
else()
return()
endif()
if(CMAKE_VERSION VERSION_LESS 3.5)
include(CMakeParseArguments)
endif()
if(EXISTS "${ImGui_SRCDIR}" AND EXISTS "${ImGui_SRCDIR}/imgui.cpp")
set(ImGui TRUE)
else()
include(${CMAKE_CURRENT_LIST_DIR}/ImGuiOptions.cmake)
endif()
function(imgui_option OPTION DESCRIPTION DEFAULT)
if(ImGui)
cmake_parse_arguments(OPTION "STRING" "" "STRINGS" ${ARGN})
if(DEFINED OPTION_STRING)
set(ImGui_${OPTION} ${DEFAULT} CACHE STRING "${DESCRIPTION}")
elseif(DEFINED OPTION_STRINGS)
set(ImGui_${OPTION} ${DEFAULT} CACHE STRING "${DESCRIPTION}")
set_property(CACHE ImGui_${OPTION}
PROPERTY STRINGS "${OPTION_STRINGS}")
else()
option(ImGui_${OPTION} "${DESCRIPTION}" ${DEFAULT})
endif()
set(ImGui_${OPTION}_DESCRIPTION "${DESCRIPTION}")
set(ImGui_${OPTION}_DEFAULT ${DEFAULT})
list(APPEND ImGui_OPTIONS ${OPTION})
set(ImGui_OPTIONS "${ImGui_OPTIONS}" PARENT_SCOPE)
set(ImGui_${OPTION}_DESCRIPTION "${DESCRIPTION}" PARENT_SCOPE)
set(ImGui_OPTIONS_CMAKE)
foreach(OPTION ${ImGui_OPTIONS})
set(ImGui_OPTIONS_CMAKE "${ImGui_OPTIONS_CMAKE}# ${ImGui_${OPTION}_DESCRIPTION}\n")
set(ImGui_OPTIONS_CMAKE "${ImGui_OPTIONS_CMAKE}set(ImGui_${OPTION} ${ImGui_${OPTION}})\n")
endforeach()
set(ImGui_OPTIONS_CMAKE "${ImGui_OPTIONS_CMAKE}" PARENT_SCOPE)
endif()
endfunction()
function(imgui_export TARGET)
if(CMAKE_VERSION VERSION_LESS 3.3)
return()
endif()
export(TARGETS ${TARGET} NAMESPACE ImGui::
FILE ImGui${TARGET}.cmake)
install(TARGETS ${TARGET} EXPORT ${TARGET}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
install(EXPORT ${TARGET} NAMESPACE ImGui::
FILE ImGui${TARGET}.cmake
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/imgui)
endfunction()
function(imgui_core)
set(TARGET Core)
list(APPEND ImGui_SUPPORTED_COMPONENTS ${TARGET})
set(ImGui_SUPPORTED_COMPONENTS "${ImGui_SUPPORTED_COMPONENTS}" PARENT_SCOPE)
list(APPEND ImGui_AVAILABLE_COMPONENTS ${TARGET})
set(ImGui_AVAILABLE_COMPONENTS "${ImGui_AVAILABLE_COMPONENTS}" PARENT_SCOPE)
if(ImGui AND "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${ImGui_SRCDIR}/examples")
cmake_parse_arguments(TARGET "" "" "HEADERS;PRIVATE_HEADERS;SOURCES;SOURCES_GLOB;DEFINITIONS;LIBRARIES" ${ARGN})
add_library(${TARGET} INTERFACE)
include(GNUInstallDirs)
target_include_directories(${TARGET} INTERFACE
$<BUILD_INTERFACE:${ImGui_SRCDIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/imgui>)
foreach(HEADER ${TARGET_HEADERS})
target_sources(${TARGET}
INTERFACE
$<BUILD_INTERFACE:${ImGui_SRCDIR}/${HEADER}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/imgui/${HEADER}>)
install(FILES ${ImGui_SRCDIR}/${HEADER}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/imgui)
endforeach()
foreach(PRIVATE_HEADER ${TARGET_PRIVATE_HEADERS})
install(FILES ${ImGui_SRCDIR}/${PRIVATE_HEADER}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/imgui)
endforeach()
foreach(GLOB ${TARGET_SOURCES_GLOB})
file(GLOB TARGET_SOURCES_BY_GLOB
LIST_DIRECTORIES FALSE
RELATIVE "${ImGui_SRCDIR}"
"${ImGui_SRCDIR}/${GLOB}")
list(APPEND TARGET_SOURCES ${TARGET_SOURCES_BY_GLOB})
endforeach()
foreach(SOURCE ${TARGET_SOURCES})
target_sources(${TARGET}
INTERFACE
$<BUILD_INTERFACE:${ImGui_SRCDIR}/${SOURCE}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_DATAROOTDIR}/imgui/${SOURCE}>)
install(FILES ${ImGui_SRCDIR}/${SOURCE}
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/imgui)
endforeach()
foreach(DEFINITION ${TARGET_DEFINITIONS})
target_compile_definitions(${TARGET} INTERFACE ${DEFINITION})
endforeach()
foreach(LIBRARY ${TARGET_LIBRARIES})
target_link_libraries(${TARGET}
INTERFACE ${LIBRARY})
endforeach()
imgui_export(${TARGET})
elseif(ImGui)
add_library(ImGui::${TARGET} ALIAS ${TARGET})
else()
include(${CMAKE_CURRENT_LIST_DIR}/ImGui${TARGET}.cmake)
endif()
endfunction()
function(imgui_library TARGET INFIX_PATH)
cmake_parse_arguments(TARGET "" "" "HEADERS;SOURCES;DEFINITIONS;PACKAGES;TARGETS;COMPILE_OPTIONS;LINK_OPTIONS" ${ARGN})
if(ImGui AND "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${ImGui_SRCDIR}/examples")
if(ImGui_3RDPARTY)
set(TARGET_DEPENDENCIES TRUE)
foreach(PACKAGE ${TARGET_PACKAGES})
find_package(${PACKAGE} QUIET)
if(NOT ${PACKAGE}_FOUND)
message(AUTHOR_WARNING "Package ${PACKAGE} not found.")
string(TOUPPER "${PACKAGE}" PACKAGE_UPPER)
if(NOT ${PACKAGE_UPPER}_FOUND)
set(TARGET_DEPENDENCIES FALSE)
break()
endif()
endif()
endforeach()
if(TARGET_DEPENDENCIES)
foreach(INTERFACE_TARGET ${TARGET_TARGETS})
if(NOT TARGET ${INTERFACE_TARGET})
if(INTERFACE_TARGET STREQUAL "OpenGL::GL"
AND CMAKE_VERSION VERSION_LESS 3.8)
list(REMOVE_ITEM TARGET_TARGETS "${INTERFACE_TARGET}")
if(IS_ABSOLUTE "${OPENGL_gl_LIBRARY}")
message(AUTHOR_WARNING "Replace target ${INTERFACE_TARGET} to ${OPENGL_gl_LIBRARY}.")
list(APPEND TARGET_LIBRARIES "${OPENGL_gl_LIBRARY}")
else()
list(APPEND TARGET_TARGETS "${OPENGL_gl_LIBRARY}")
endif()
elseif(INTERFACE_TARGET STREQUAL "Freetype::Freetype")
list(REMOVE_ITEM TARGET_TARGETS "${INTERFACE_TARGET}")
if(IS_ABSOLUTE "${FREETYPE_LIBRARIES}")
message(AUTHOR_WARNING "Replace target ${INTERFACE_TARGET} to ${FREETYPE_LIBRARIES}.")
list(APPEND TARGET_LIBRARIES "${FREETYPE_LIBRARIES}")
else()
list(APPEND TARGET_TARGETS "${FREETYPE_LIBRARIES}")
endif()
list(APPEND TARGET_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIRS}")
else()
message(WARNING "Target ${INTERFACE_TARGET} not found.")
set(TARGET_DEPENDENCIES FALSE)
endif()
endif()
endforeach()
endif()
if(NOT TARGET_DEPENDENCIES)
message(STATUS "Skip ${TARGET} library because not all dependencies found")
return()
endif()
endif()
add_library(${TARGET} INTERFACE)
target_link_libraries(${TARGET} INTERFACE Core)
foreach(HEADER ${TARGET_HEADERS})
target_sources(${TARGET}
INTERFACE
$<BUILD_INTERFACE:${ImGui_SRCDIR}/${INFIX_PATH}/${HEADER}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/imgui/${HEADER}>)
install(FILES ${ImGui_SRCDIR}/${INFIX_PATH}/${HEADER}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/imgui)
endforeach()
foreach(SOURCE ${TARGET_SOURCES})
target_sources(${TARGET}
INTERFACE
$<BUILD_INTERFACE:${ImGui_SRCDIR}/${INFIX_PATH}/${SOURCE}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_DATAROOTDIR}/imgui/${SOURCE}>)
install(FILES ${ImGui_SRCDIR}/${INFIX_PATH}/${SOURCE}
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/imgui)
endforeach()
foreach(DEFINITION ${TARGET_DEFINITIONS})
target_compile_definitions(${TARGET} INTERFACE ${DEFINITION})
endforeach()
target_include_directories(${TARGET} INTERFACE
$<BUILD_INTERFACE:${ImGui_SRCDIR}/${INFIX_PATH}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/imgui>)
if(NOT ImGui_3RDPARTY)
imgui_export(${TARGET})
return()
endif()
if(";${TARGET_TARGETS};" MATCHES ";SDL2::SDL2;")
get_target_property(SDL2_INCLUDE_DIRS SDL2::SDL2 INTERFACE_INCLUDE_DIRECTORIES)
if(NOT ";${SDL2_INCLUDE_DIRS};" MATCHES "SDL2;")
foreach(SDL2_INCLUDE_DIR ${SDL2_INCLUDE_DIRS})
if(EXISTS ${SDL2_INCLUDE_DIR}/SDL2)
target_include_directories(${TARGET} INTERFACE
$<BUILD_INTERFACE:${SDL2_INCLUDE_DIR}/SDL2>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/SDL2>)
endif()
endforeach()
endif()
endif()
foreach(INTERFACE_TARGET ${TARGET_TARGETS})
target_link_libraries(${TARGET}
INTERFACE ${INTERFACE_TARGET})
endforeach()
foreach(INTERFACE_LIBRARY ${TARGET_LIBRARIES})
target_link_libraries(${TARGET}
INTERFACE $<BUILD_INTERFACE:${INTERFACE_LIBRARY}>)
endforeach()
foreach(INTERFACE_INCLUDE_DIRECTORIES ${TARGET_INCLUDE_DIRECTORIES})
target_include_directories(${TARGET}
INTERFACE $<BUILD_INTERFACE:${INTERFACE_INCLUDE_DIRECTORIES}>)
endforeach()
foreach(INTERFACE_COMPILE_OPTION ${TARGET_COMPILE_OPTIONS})
target_compile_options(${TARGET}
INTERFACE ${INTERFACE_COMPILE_OPTION})
endforeach()
foreach(INTERFACE_LINK_OPTION ${TARGET_LINK_OPTIONS})
target_link_options(${TARGET}
INTERFACE ${INTERFACE_LINK_OPTION})
endforeach()
imgui_export(${TARGET})
elseif(ImGui)
if(TARGET ${TARGET})
list(APPEND ImGui_AVAILABLE_COMPONENTS ${TARGET})
set(ImGui_AVAILABLE_COMPONENTS "${ImGui_AVAILABLE_COMPONENTS}" PARENT_SCOPE)
if(";${ImGui_FIND_COMPONENTS};" MATCHES ";${TARGET};"
AND NOT TARGET ImGui::${TARGET})
add_library(ImGui::${TARGET} ALIAS ${TARGET})
endif()
endif()
else()
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/ImGui${TARGET}.cmake)
list(APPEND ImGui_AVAILABLE_COMPONENTS ${TARGET})
set(ImGui_AVAILABLE_COMPONENTS "${ImGui_AVAILABLE_COMPONENTS}" PARENT_SCOPE)
endif()
if(";${ImGui_FIND_COMPONENTS};" MATCHES ";${TARGET};")
include(${CMAKE_CURRENT_LIST_DIR}/ImGui${TARGET}.cmake)
if(ImGui_3RDPARTY)
include(CMakeFindDependencyMacro)
foreach(PACKAGE ${TARGET_PACKAGES})
find_dependency(${PACKAGE} REQUIRED)
endforeach()
else()
message(STATUS "Please manualy link 3-rd party dependencies for ${TARGET} library")
endif()
endif()
endif()
endfunction()
function(imgui_backend TARGET)
list(APPEND ImGui_SUPPORTED_COMPONENTS ${TARGET})
set(ImGui_SUPPORTED_COMPONENTS "${ImGui_SUPPORTED_COMPONENTS}" PARENT_SCOPE)
if(NOT ImGui_BACKENDS)
return()
endif()
imgui_library(${TARGET} backends ${ARGN})
set(ImGui_AVAILABLE_COMPONENTS "${ImGui_AVAILABLE_COMPONENTS}" PARENT_SCOPE)
endfunction()
function(imgui_misc TARGET MISC_PATH)
list(APPEND ImGui_SUPPORTED_COMPONENTS ${TARGET})
set(ImGui_SUPPORTED_COMPONENTS "${ImGui_SUPPORTED_COMPONENTS}" PARENT_SCOPE)
if(NOT ImGui_MISC)
return()
endif()
set(INFIX_PATH "misc/${MISC_PATH}")
imgui_library(${TARGET} ${INFIX_PATH} ${ARGN})
set(ImGui_AVAILABLE_COMPONENTS "${ImGui_AVAILABLE_COMPONENTS}" PARENT_SCOPE)
endfunction()
function(imgui_example SUBDIRECTORY)
if(NOT ImGui_EXAMPLES OR NOT ImGui_3RDPARTY)
return()
endif()
cmake_parse_arguments(EXAMPLE "" "" "TARGETS;BACKENDS;MISC" ${ARGN})
if(EXAMPLE_BACKENDS AND NOT ImGui_BACKENDS)
return()
endif()
if(EXAMPLE_MISC AND NOT ImGui_MISC)
return()
endif()
set(EXAMPLE_DEPENDENCIES TRUE)
foreach(TARGET ${EXAMPLE_TARGETS} ${EXAMPLE_BACKENDS} ${EXAMPLE_MISC})
if(NOT TARGET ${TARGET})
set(EXAMPLE_DEPENDENCIES FALSE)
endif()
endforeach()
if(EXAMPLE_DEPENDENCIES)
add_subdirectory(${SUBDIRECTORY})
else()
message(STATUS "Skip ${SUBDIRECTORY} because not all dependencies found")
endif()
endfunction()
function(imgui_tool TARGET)
list(APPEND ImGui_SUPPORTED_COMPONENTS ${TARGET})
set(ImGui_SUPPORTED_COMPONENTS "${ImGui_SUPPORTED_COMPONENTS}" PARENT_SCOPE)
if(NOT ImGui_TOOLS)
return()
endif()
if(ImGui AND "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${ImGui_SRCDIR}/examples")
cmake_parse_arguments(TARGET "" "OUTPUT_NAME" "SOURCES" ${ARGN})
add_executable(${TARGET})
if(TARGET_OUTPUT_NAME)
set_target_properties(${TARGET} PROPERTIES
OUTPUT_NAME ${TARGET_OUTPUT_NAME})
endif()
foreach(SOURCE ${TARGET_SOURCES})
target_sources(${TARGET}
PRIVATE ${ImGui_SRCDIR}/${SOURCE})
endforeach()
imgui_export(${TARGET})
elseif(ImGui)
add_executable(ImGui::${TARGET} ALIAS ${TARGET})
else()
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/ImGui${TARGET}.cmake)
list(APPEND ImGui_AVAILABLE_COMPONENTS ${TARGET})
set(ImGui_AVAILABLE_COMPONENTS "${ImGui_AVAILABLE_COMPONENTS}" PARENT_SCOPE)
endif()
if(";${ImGui_FIND_COMPONENTS};" MATCHES ";${TARGET};")
include(${CMAKE_CURRENT_LIST_DIR}/ImGui${TARGET}.cmake)
endif()
endif()
endfunction()

150
examples/ImGuiTargets.cmake Normal file
View File

@ -0,0 +1,150 @@
include("${CMAKE_CURRENT_LIST_DIR}/ImGuiModule.cmake")
set(ImGui_SUPPORTED_COMPONENTS)
set(ImGui_AVAILABLE_COMPONENTS)
set(_ImGui_DEFINITIONS)
set(_ImGui_LIBRARIES)
if(NOT "${ImGui_USER_CONFIG}" STREQUAL "")
list(APPEND _ImGui_DEFINITIONS "IMGUI_USER_CONFIG=${ImGui_USER_CONFIG}")
endif()
if(ImGui_FREETYPE)
list(APPEND _ImGui_DEFINITIONS "IMGUI_ENABLE_FREETYPE")
list(APPEND _ImGui_LIBRARIES FreeType)
endif()
if(MINGW)
list(APPEND _ImGui_LIBRARIES "imm32")
endif()
imgui_core(
HEADERS
imconfig.h
imgui.h
imgui_internal.h
PRIVATE_HEADERS
imstb_textedit.h
imstb_truetype.h
imstb_rectpack.h
SOURCES_GLOB
imgui*.cpp
DEFINITIONS ${_ImGui_DEFINITIONS}
LIBRARIES ${_ImGui_LIBRARIES})
unset(_ImGui_DEFINITIONS)
unset(_ImGui_LIBRARIES)
if(APPLE)
set(_ImGui_PACKAGES GLUT)
set(_ImGui_TARGETS GLUT::GLUT)
else()
set(_ImGui_PACKAGES FreeGLUT)
set(_ImGui_TARGETS FreeGLUT::freeglut)
endif()
imgui_backend(ImplGLUT
HEADERS imgui_impl_glut.h
SOURCES imgui_impl_glut.cpp
PACKAGES ${_ImGui_PACKAGES}
TARGETS ${_ImGui_TARGETS})
unset(_ImGui_PACKAGES)
unset(_ImGui_TARGETS)
if(EMSCRIPTEN)
set(_ImGui_COMPILE_OPTIONS "SHELL:-s USE_SDL=2")
set(_ImGui_LINK_OPTIONS ${_ImGui_COMPILE_OPTIONS})
else()
if(MINGW)
set(_ImGui_COMPILE_OPTIONS "-DSDL_MAIN_HANDLED")
endif()
set(_ImGui_PACKAGES SDL2)
set(_ImGui_TARGETS SDL2::SDL2main SDL2::SDL2)
endif()
imgui_backend(ImplSDL2
HEADERS imgui_impl_sdl2.h
SOURCES imgui_impl_sdl2.cpp
COMPILE_OPTIONS ${_ImGui_COMPILE_OPTIONS}
LINK_OPTIONS ${_ImGui_LINK_OPTIONS}
PACKAGES ${_ImGui_PACKAGES}
TARGETS ${_ImGui_TARGETS})
unset(_ImGui_COMPILE_OPTIONS)
unset(_ImGui_LINK_OPTIONS)
unset(_ImGui_PACKAGES)
unset(_ImGui_TARGETS)
if(EMSCRIPTEN)
set(_ImGui_COMPILE_OPTIONS "SHELL:-s USE_GLFW=3")
set(_ImGui_LINK_OPTIONS ${_ImGui_COMPILE_OPTIONS})
else()
set(_ImGui_PACKAGES glfw3)
set(_ImGui_TARGETS glfw)
endif()
imgui_backend(ImplGlfw
HEADERS imgui_impl_glfw.h
SOURCES imgui_impl_glfw.cpp
COMPILE_OPTIONS ${_ImGui_COMPILE_OPTIONS}
LINK_OPTIONS ${_ImGui_LINK_OPTIONS}
PACKAGES ${_ImGui_PACKAGES}
TARGETS ${_ImGui_TARGETS})
unset(_ImGui_COMPILE_OPTIONS)
unset(_ImGui_LINK_OPTIONS)
unset(_ImGui_PACKAGES)
unset(_ImGui_TARGETS)
imgui_backend(ImplOpenGL2
HEADERS imgui_impl_opengl2.h
SOURCES imgui_impl_opengl2.cpp
PACKAGES OpenGL
TARGETS OpenGL::GL)
if("${ImGui_OPENGL_LOADER}" STREQUAL "GL3W")
set(_ImGui_DEFINITIONS "IMGUI_IMPL_OPENGL_LOADER_GL3W=1")
set(_ImGui_PACKAGES gl3w)
set(_ImGui_TARGETS gl3w)
elseif("${ImGui_OPENGL_LOADER}" STREQUAL "GLEW")
set(_ImGui_DEFINITIONS "IMGUI_IMPL_OPENGL_LOADER_GLEW=1")
set(_ImGui_PACKAGES GLEW)
set(_ImGui_TARGETS GLEW::GLEW)
elseif("${ImGui_OPENGL_LOADER}" STREQUAL "GLAD")
set(_ImGui_DEFINITIONS "IMGUI_IMPL_OPENGL_LOADER_GLAD=1")
set(_ImGui_PACKAGES glad)
set(_ImGui_TARGETS glad::glad)
else()
set(_ImGui_DEFINITIONS "IMGUI_IMPL_OPENGL_LOADER_CUSTOM=${ImGui_OPENGL_LOADER}")
set(_ImGui_PACKAGES)
set(_ImGui_TARGETS)
endif()
if(EMSCRIPTEN)
set(_ImGui_PACKAGES)
set(_ImGui_TARGETS)
else()
list(APPEND _ImGui_PACKAGES OpenGL)
list(APPEND _ImGui_TARGETS OpenGL::GL)
endif()
imgui_backend(ImplOpenGL3
HEADERS
imgui_impl_opengl3.h
imgui_impl_opengl3_loader.h
SOURCES imgui_impl_opengl3.cpp
DEFINITIONS ${_ImGui_DEFINITIONS}
PACKAGES ${_ImGui_PACKAGES}
TARGETS ${_ImGui_TARGETS})
unset(_ImGui_DEFINITIONS)
unset(_ImGui_PACKAGES)
unset(_ImGui_TARGETS)
imgui_backend(ImplVulkan
HEADERS imgui_impl_vulkan.h
SOURCES imgui_impl_vulkan.cpp
PACKAGES Vulkan
TARGETS Vulkan::Vulkan)
imgui_misc(FreeType freetype
HEADERS imgui_freetype.h
SOURCES imgui_freetype.cpp
PACKAGES Freetype
TARGETS Freetype::Freetype)
imgui_misc(StdLib cpp
HEADERS imgui_stdlib.h
SOURCES imgui_stdlib.cpp)
imgui_tool(BinaryToCompressedC
OUTPUT_NAME binary_to_compressed_c
SOURCES misc/fonts/binary_to_compressed_c.cpp)

View File

@ -0,0 +1,18 @@
cmake_minimum_required(VERSION 3.1)
project(example_emscripten_opengl3
LANGUAGES C CXX)
find_package(ImGui CONFIG REQUIRED
COMPONENTS ImplSDL2 ImplOpenGL3)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME}
PRIVATE ImGui::ImplSDL2 ImGui::ImplOpenGL3)
target_link_options(${PROJECT_NAME} PRIVATE
"SHELL:--shell-file ${CMAKE_CURRENT_LIST_DIR}/shell_minimal.html")
set_target_properties(${PROJECT_NAME} PROPERTIES
SUFFIX .html)

View File

@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.1)
project(example_glfw_opengl2
LANGUAGES CXX)
find_package(ImGui CONFIG REQUIRED
COMPONENTS ImplGlfw ImplOpenGL2)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME}
PRIVATE ImGui::ImplGlfw ImGui::ImplOpenGL2)
include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

View File

@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.1)
project(example_glfw_opengl3
LANGUAGES C CXX)
find_package(ImGui CONFIG REQUIRED
COMPONENTS ImplGlfw ImplOpenGL3)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME}
PRIVATE ImGui::ImplGlfw ImGui::ImplOpenGL3)
include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

View File

@ -1,45 +1,16 @@
# Example usage:
# mkdir build
# cd build
# cmake -g "Visual Studio 14 2015" ..
cmake_minimum_required(VERSION 3.1)
cmake_minimum_required(VERSION 2.8)
project(imgui_example_glfw_vulkan C CXX)
project(example_glfw_vulkan
LANGUAGES CXX)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "" FORCE)
endif()
find_package(ImGui CONFIG REQUIRED
COMPONENTS ImplGlfw ImplVulkan)
set(CMAKE_CXX_STANDARD 11)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DVK_PROTOTYPES")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_PROTOTYPES")
add_executable(${PROJECT_NAME} main.cpp)
# GLFW
set(GLFW_DIR ../../../glfw) # Set this to point to an up-to-date GLFW repo
option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" OFF)
option(GLFW_BUILD_TESTS "Build the GLFW test programs" OFF)
option(GLFW_BUILD_DOCS "Build the GLFW documentation" OFF)
option(GLFW_INSTALL "Generate installation target" OFF)
option(GLFW_DOCUMENT_INTERNALS "Include internals in documentation" OFF)
add_subdirectory(${GLFW_DIR} binary_dir EXCLUDE_FROM_ALL)
include_directories(${GLFW_DIR}/include)
# Dear ImGui
set(IMGUI_DIR ../../)
include_directories(${IMGUI_DIR} ${IMGUI_DIR}/backends ..)
# Libraries
find_package(Vulkan REQUIRED)
#find_library(VULKAN_LIBRARY
#NAMES vulkan vulkan-1)
#set(LIBRARIES "glfw;${VULKAN_LIBRARY}")
set(LIBRARIES "glfw;Vulkan::Vulkan")
# Use vulkan headers from glfw:
include_directories(${GLFW_DIR}/deps)
file(GLOB sources *.cpp)
add_executable(example_glfw_vulkan ${sources} ${IMGUI_DIR}/backends/imgui_impl_glfw.cpp ${IMGUI_DIR}/backends/imgui_impl_vulkan.cpp ${IMGUI_DIR}/imgui.cpp ${IMGUI_DIR}/imgui_draw.cpp ${IMGUI_DIR}/imgui_demo.cpp ${IMGUI_DIR}/imgui_tables.cpp ${IMGUI_DIR}/imgui_widgets.cpp)
target_link_libraries(example_glfw_vulkan ${LIBRARIES})
target_link_libraries(${PROJECT_NAME}
PRIVATE ImGui::ImplGlfw ImGui::ImplVulkan)
include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

View File

@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.1)
project(example_glut_opengl2
LANGUAGES CXX)
find_package(ImGui CONFIG REQUIRED
COMPONENTS ImplGLUT ImplOpenGL2)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME}
PRIVATE ImGui::ImplGLUT ImGui::ImplOpenGL2)
include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

View File

@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.1)
project(example_null
LANGUAGES CXX)
find_package(ImGui CONFIG REQUIRED
COMPONENTS Core)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME}
PRIVATE ImGui::Core)
include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

View File

@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.1)
project(example_sdl_opengl2
LANGUAGES CXX)
find_package(ImGui CONFIG REQUIRED
COMPONENTS ImplSDL2 ImplOpenGL2)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME}
PRIVATE ImGui::ImplSDL2 ImGui::ImplOpenGL2)
include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

View File

@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.1)
project(example_sdl_opengl3
LANGUAGES C CXX)
find_package(ImGui CONFIG REQUIRED
COMPONENTS ImplSDL2 ImplOpenGL3)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME}
PRIVATE ImGui::ImplSDL2 ImGui::ImplOpenGL3)
include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

View File

@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.1)
project(example_sdl_vulkan
LANGUAGES CXX)
find_package(ImGui CONFIG REQUIRED
COMPONENTS ImplSDL2 ImplVulkan)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME}
PRIVATE ImGui::ImplSDL2 ImGui::ImplVulkan)
include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")