media-libs/imgui: build with cmake

Signed-off-by: Alessandro Barbieri <lssndrbarbieri@gmail.com>
This commit is contained in:
Alessandro Barbieri
2022-04-23 02:14:10 +02:00
parent 9db887bbca
commit baad5b2e46
6 changed files with 370 additions and 320 deletions

View File

@@ -0,0 +1,80 @@
cmake_minimum_required(VERSION 3.1)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
project(cimgui)
#general settings
set(IMGUI_LIBRARIES )
set(IMGUI_COMMON_FLAGS )
set(GENERATOR_IMPL "internal")
if(IMGUI_FREETYPE)
set(GENERATOR_IMPL "${GENERATOR_IMPL} freetype")
add_definitions("-DCIMGUI_FREETYPE=1")
endif(IMGUI_FREETYPE)
add_subdirectory(imgui)
if(IMGUI_BINDINGS)
add_library(cimgui SHARED "")
target_link_libraries(cimgui PUBLIC imgui ${IMGUI_LIBRARIES})
target_compile_definitions(cimgui PUBLIC IMGUI_IMPL_API=extern\t\"C\"\t)
target_include_directories(cimgui PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/generator/output)
target_include_directories(cimgui PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/imgui)
set_target_properties(cimgui PROPERTIES LINKER_LANGUAGE CXX)
set(GENERATOR_ARGS )
if(IMGUI_ALLEGRO)
list(APPEND GENERATOR_ARGS allegro5)
endif()
if(IMGUI_GLFW)
list(APPEND GENERATOR_ARGS glfw)
endif()
if(IMGUI_GLUT)
list(APPEND GENERATOR_ARGS glut)
endif()
if(IMGUI_OPENGL)
list(APPEND GENERATOR_ARGS opengl2 opengl3)
endif()
if(IMGUI_SDL)
list(APPEND GENERATOR_ARGS sdl sdlrenderer)
endif()
if(IMGUI_VULKAN)
list(APPEND GENERATOR_ARGS vulkan)
endif()
list(APPEND GENERATOR_ARGS ${IMGUI_COMMON_FLAGS} ${CMAKE_CPP_FLAGS})
file(GLOB GENERATOR_OUTPUT_FILES "${CMAKE_SOURCE_DIR}/generator/output/*")
list(APPEND
GENERATOR_OUTPUT_FILES
${CMAKE_SOURCE_DIR}/cimgui.cpp
${CMAKE_SOURCE_DIR}/cimgui.h
${CMAKE_SOURCE_DIR}/generator/output/cimgui_nopreprocess.cpp
${CMAKE_SOURCE_DIR}/generator/output/cimgui_nopreprocess.h
)
ADD_CUSTOM_COMMAND(VERBATIM
OUTPUT ${GENERATOR_OUTPUT_FILES}
COMMAND luajit ./generator.lua gcc "${GENERATOR_IMPL}" ${GENERATOR_ARGS}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/generator"
)
set(CIMGUI_SOURCES "${CMAKE_SOURCE_DIR}/cimgui.cpp")
set(CIMGUI_INCLUDE_FILES "${CMAKE_SOURCE_DIR}/cimgui.h")
target_sources(cimgui
PUBLIC
${CIMGUI_SOURCES}
${CIMGUI_INCLUDE_FILES}
)
include(GNUInstallDirs)
#install
install(TARGETS cimgui LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES ${CIMGUI_INCLUDE_FILES} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/imgui")
#test
set(CIMGUI_TEST "no" CACHE STRING "Enable compilation of a test unit based on imgui null")
if (CIMGUI_TEST)
add_subdirectory(test)
endif ()
endif()

View File

@@ -1,69 +0,0 @@
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,21 +1,13 @@
cmake_minimum_required(VERSION 3.1)
-project(cimgui)
+project(libcimgui)
-if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui_tables.cpp)
- set(TABLES_SOURCE "imgui/imgui_tables.cpp")
-else()
set(TABLES_SOURCE "")
-endif()
#general settings
file(GLOB IMGUI_SOURCES
cimgui.cpp
- imgui/imgui.cpp
- imgui/imgui_draw.cpp
- imgui/imgui_demo.cpp
- imgui/imgui_widgets.cpp
${TABLES_SOURCE}
)
@@ -24,34 +16,30 @@
set(IMGUI_LIBRARIES )
if(IMGUI_FREETYPE)
- FIND_PACKAGE(freetype REQUIRED PATHS ${FREETYPE_PATH})
- list(APPEND IMGUI_LIBRARIES freetype)
- list(APPEND IMGUI_SOURCES imgui/misc/freetype/imgui_freetype.cpp)
+ list(APPEND IMGUI_LIBRARIES -lfreetype)
add_definitions("-DCIMGUI_FREETYPE=1")
endif(IMGUI_FREETYPE)
#add library and link
if (IMGUI_STATIC)
- add_library(cimgui STATIC ${IMGUI_SOURCES})
+ add_library(libcimgui STATIC ${IMGUI_SOURCES})
else (IMGUI_STATIC)
- add_library(cimgui SHARED ${IMGUI_SOURCES})
+ add_library(libcimgui SHARED ${IMGUI_SOURCES})
endif (IMGUI_STATIC)
-target_compile_definitions(cimgui PUBLIC IMGUI_DISABLE_OBSOLETE_FUNCTIONS=1)
if (WIN32)
- target_compile_definitions(cimgui PUBLIC IMGUI_IMPL_API=extern\t\"C\"\t__declspec\(dllexport\))
+ target_compile_definitions(libcimgui PUBLIC IMGUI_IMPL_API=extern\t\"C\"\t__declspec\(dllexport\))
list(APPEND IMGUI_LIBRARIES imm32)
else (WIN32)
- target_compile_definitions(cimgui PUBLIC IMGUI_IMPL_API=extern\t\"C\"\t)
+ target_compile_definitions(libcimgui PUBLIC IMGUI_IMPL_API=extern\t\"C\"\t)
endif (WIN32)
-target_include_directories(cimgui PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
-target_include_directories(cimgui PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/imgui)
-set_target_properties(cimgui PROPERTIES PREFIX "")
-target_link_libraries(cimgui ${IMGUI_LIBRARIES})
+target_include_directories(libcimgui PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/imgui)
+set_target_properties(libcimgui PROPERTIES PREFIX "")
+target_link_libraries(libcimgui PUBLIC -limgui)
#install
-install(TARGETS cimgui
+install(TARGETS libcimgui
RUNTIME DESTINATION .
LIBRARY DESTINATION .
ARCHIVE DESTINATION .

View File

@@ -0,0 +1,160 @@
cmake_minimum_required(VERSION 3.8.2)
project(imgui VERSION 1.73.0 LANGUAGES CXX C)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
include(GNUInstallDirs)
option(IMGUI_ALLEGRO OFF)
option(IMGUI_EXAMPLES "Build ImGui examples" OFF)
option(IMGUI_FREETYPE OFF)
option(IMGUI_GLFW OFF)
option(IMGUI_GLUT OFF)
option(IMGUI_OPENGL OFF)
option(IMGUI_SDL OFF)
option(IMGUI_VULKAN OFF)
add_library (imgui_objects
OBJECT
imgui.cpp
imgui_demo.cpp
imgui_draw.cpp
imgui_tables.cpp
imgui_widgets.cpp
)
add_library (imgui SHARED "")
target_include_directories(imgui_objects PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/backends")
#set(IMGUI_COMMON_FLAGS "-DIMGUI_USE_WCHAR32 -DIMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION -DIMGUI_STB_RECT_PACK_FILENAME=\"<stb/stb_rect_pack.h>\"")
set(IMGUI_COMMON_FLAGS "-DIMGUI_USE_WCHAR32")
if(IMGUI_ALLEGRO)
find_package(PkgConfig REQUIRED)
pkg_check_modules(ALLEGRO5 REQUIRED allegro-5 allegro_main-5 allegro_primitives-5)
target_sources(imgui_objects PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_allegro5.cpp")
target_include_directories(imgui_objects PUBLIC ${ALLEGRO5_INCLUDE_DIRS})
list(APPEND IMGUI_LIBRARIES ${ALLEGRO5_LIBRARIES})
endif()
if(IMGUI_FREETYPE)
find_package(Freetype REQUIRED)
target_sources(imgui_objects PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/misc/freetype/imgui_freetype.cpp")
target_include_directories(imgui_objects PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/misc/freetype" ${FREETYPE_INCLUDE_DIRS})
list(APPEND IMGUI_LIBRARIES ${FREETYPE_LIBRARIES})
# set(IMGUI_COMMON_FLAGS "${IMGUI_COMMON_FLAGS} -DIMGUI_ENABLE_FREETYPE -DIMGUI_ENABLE_STB_TRUETYPE -DIMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION -DIMGUI_STB_TRUETYPE_FILENAME=\"<stb/stb_truetype.h>\"")
set(IMGUI_COMMON_FLAGS "${IMGUI_COMMON_FLAGS} -DIMGUI_ENABLE_FREETYPE -DIMGUI_ENABLE_STB_TRUETYPE")
add_executable(binary_to_compressed_c "${CMAKE_CURRENT_SOURCE_DIR}/misc/fonts/binary_to_compressed_c.cpp")
target_include_directories(binary_to_compressed_c PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
target_link_libraries(binary_to_compressed_c PUBLIC imgui)
install(TARGETS binary_to_compressed_c DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/imgui")
endif()
if(IMGUI_GLFW)
find_package(glfw3 REQUIRED)
target_sources(imgui_objects PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glfw.cpp")
list(APPEND IMGUI_LIBRARIES glfw)
endif()
if(IMGUI_GLUT)
find_package(FreeGLUT REQUIRED)
target_sources(imgui_objects PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glut.cpp")
target_include_directories(imgui_objects PUBLIC ${FreeGLUT_INCLUDE_DIRS})
list(APPEND IMGUI_LIBRARIES FreeGLUT::freeglut)
endif()
if(IMGUI_OPENGL)
find_package(OpenGL REQUIRED)
target_sources(imgui_objects
PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl2.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp"
)
target_include_directories(imgui_objects PUBLIC ${OPENGL_INCLUDE_DIR})
list(APPEND IMGUI_LIBRARIES ${OPENGL_gl_LIBRARY})
endif()
if(IMGUI_SDL)
find_package(SDL2 REQUIRED)
target_sources(imgui_objects
PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdl.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdlrenderer.cpp"
)
target_include_directories(imgui_objects PUBLIC "${SDL2_INCLUDE_DIRS}")
list(APPEND IMGUI_LIBRARIES "${SDL2_LIBRARIES}")
endif()
if(IMGUI_VULKAN)
find_package(Vulkan REQUIRED)
target_sources(imgui_objects PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_vulkan.cpp")
set(IMGUI_COMMON_FLAGS "${IMGUI_COMMON_FLAGS} -DImTextureID=ImU64")
target_include_directories(imgui_objects PUBLIC ${Vulkan_INCLUDE_DIRS})
list(APPEND IMGUI_LIBRARIES Vulkan::Vulkan)
endif()
if(IMGUI_EXAMPLES)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/examples" DESTINATION "${CMAKE_INSTALL_DOCDIR}")
add_executable(example_null "${CMAKE_CURRENT_SOURCE_DIR}/examples/example_null/main.cpp")
target_include_directories(example_null PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
target_link_libraries(example_null PUBLIC imgui)
install(TARGETS example_null DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/imgui/examples" )
if(IMGUI_ALLEGRO)
add_executable(example_allegro5 "${CMAKE_CURRENT_SOURCE_DIR}/examples/example_allegro5/main.cpp")
target_include_directories(example_allegro5 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/backends")
target_link_libraries(example_allegro5 PUBLIC imgui)
install(TARGETS example_allegro5 DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/imgui/examples" )
endif()
if(IMGUI_GLFW AND IMGUI_OPENGL)
add_executable(example_glfw_opengl2 "${CMAKE_CURRENT_SOURCE_DIR}/examples/example_glfw_opengl2/main.cpp")
target_include_directories(example_glfw_opengl2 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/backends")
target_link_libraries(example_glfw_opengl2 PUBLIC imgui)
install(TARGETS example_allegro5 DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/imgui/examples" )
add_executable(example_glfw_opengl3 "${CMAKE_CURRENT_SOURCE_DIR}/examples/example_glfw_opengl3/main.cpp")
target_include_directories(example_glfw_opengl3 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/backends")
target_link_libraries(example_glfw_opengl3 PUBLIC imgui)
install(TARGETS example_glfw_opengl3 DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/imgui/examples" )
endif()
if(IMGUI_GLFW AND IMGUI_VULKAN)
add_executable(example_glfw_vulkan "${CMAKE_CURRENT_SOURCE_DIR}/examples/example_glfw_vulkan/main.cpp")
target_include_directories(example_glfw_vulkan PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/backends")
target_link_libraries(example_glfw_vulkan PUBLIC imgui)
install(TARGETS example_glfw_vulkan DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/imgui/examples" )
endif()
if(IMGUI_GLUT AND IMGUI_OPENGL)
add_executable(example_glut_opengl2 "${CMAKE_CURRENT_SOURCE_DIR}/examples/example_glut_opengl2/main.cpp")
target_include_directories(example_glut_opengl2 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/backends")
target_link_libraries(example_glut_opengl2 PUBLIC imgui)
install(TARGETS example_glut_opengl2 DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/imgui/examples" )
endif()
if(IMGUI_SDL)
add_executable(example_sdl_sdlrenderer "${CMAKE_CURRENT_SOURCE_DIR}/examples/example_sdl_sdlrenderer/main.cpp")
target_include_directories(example_sdl_sdlrenderer PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/backends" "${SDL2_INCLUDE_DIRS}")
target_link_libraries(example_sdl_sdlrenderer PUBLIC imgui)
install(TARGETS example_sdl_sdlrenderer DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/imgui/examples" )
if(IMGUI_OPENGL)
add_executable(example_sdl_opengl2 "${CMAKE_CURRENT_SOURCE_DIR}/examples/example_sdl_opengl2/main.cpp")
target_include_directories(example_sdl_opengl2 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/backends" "${SDL2_INCLUDE_DIRS}")
target_link_libraries(example_sdl_opengl2 PUBLIC imgui)
install(TARGETS example_sdl_opengl2 DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/imgui/examples" )
add_executable(example_sdl_opengl3 "${CMAKE_CURRENT_SOURCE_DIR}/examples/example_sdl_opengl3/main.cpp")
target_include_directories(example_sdl_opengl3 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/backends" "${SDL2_INCLUDE_DIRS}")
target_link_libraries(example_sdl_opengl3 PUBLIC imgui)
install(TARGETS example_sdl_opengl2 DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/imgui/examples" )
endif()
if(IMGUI_VULKAN)
add_executable(example_sdl_vulkan "${CMAKE_CURRENT_SOURCE_DIR}/examples/example_sdl_vulkan/main.cpp")
target_include_directories(example_sdl_vulkan PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/backends" "${SDL2_INCLUDE_DIRS}")
target_link_libraries(example_sdl_vulkan PUBLIC imgui)
install(TARGETS example_sdl_vulkan DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/imgui/examples" )
endif()
endif()
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IMGUI_COMMON_FLAGS} -fpermissive")
target_sources (imgui PUBLIC $<TARGET_OBJECTS:imgui_objects>)
add_library(imgui::imgui ALIAS imgui)
target_link_libraries(imgui PUBLIC ${IMGUI_LIBRARIES})
file(GLOB IMGUI_INCLUDE_FILES "*.h" "backends/*.h" "misc/freetype/*.h")
install(FILES ${IMGUI_INCLUDE_FILES} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/imgui")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/backends/vulkan" DESTINATION "${CMAKE_INSTALL_DATADIR}/imgui/backends")
file(GLOB IMGUI_DOC_FILES "docs/*")
install(FILES ${IMGUI_DOC_FILES} DESTINATION "${CMAKE_INSTALL_DOCDIR}")
install(TARGETS imgui)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/imgui.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/imgui.pc" @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/imgui.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
set(IMGUI_COMMON_FLAGS "${IMGUI_COMMON_FLAGS}" PARENT_SCOPE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" PARENT_SCOPE)

View File

@@ -0,0 +1,11 @@
prefix=@CMAKE_INSTALL_PREFIX@
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/imgui
Name: imgui
Description: Bloat-free Immediate Mode Graphical User interface for C
Version: @version@
URL: https://github.com/ocornut/imgui
Libs: -L${libdir} -limgui @IMGUI_LIBRARIES@
Libs.private: -lm
Cflags: -I${includedir}