From 577b731299fae848ce0561879f0c687aa98816c4 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sat, 21 Mar 2026 10:11:22 -0700 Subject: [PATCH] imgui: build static lib --- imgui/build.sh | 53 ++++++++++++++++++++--------------------- imgui/imgui/__init__.py | 3 +-- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/imgui/build.sh b/imgui/build.sh index c1497f9..5c3b93a 100755 --- a/imgui/build.sh +++ b/imgui/build.sh @@ -11,8 +11,7 @@ NJOBS="$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 2)" IMGUI_COMMIT="934c6a5f5ef2355d6df25395d555cb71f790c4e9" # ImPlot IMPLOT_COMMIT="93c801b4bb801c5c11031d880b6af1d1f70bd79d" -# rlImGui -RLIMGUI_COMMIT="286e11acd6c785004c9550c7ed3762add2ae3d47" + # GLFW 3.4 GLFW_COMMIT="7b6aead9fb88b3623e3b3725ebb42670cbe4c579" @@ -32,14 +31,6 @@ fi git -C implot-src fetch --depth 1 origin "$IMPLOT_COMMIT" git -C implot-src checkout --force "$IMPLOT_COMMIT" -# Clone/update rlimgui -if [ ! -d "rlimgui-src/.git" ]; then - rm -rf rlimgui-src - git clone --depth 1 https://github.com/raylib-extras/rlImGui.git rlimgui-src -fi -git -C rlimgui-src fetch --depth 1 origin "$RLIMGUI_COMMIT" -git -C rlimgui-src checkout --force "$RLIMGUI_COMMIT" - # Clone/update GLFW if [ ! -d "glfw-src/.git" ]; then rm -rf glfw-src @@ -73,38 +64,46 @@ cmake -B glfw-src/build -S glfw-src \ -DGLFW_BUILD_DOCS=OFF cmake --build glfw-src/build --parallel "$NJOBS" -# Install +# Install headers rm -rf "$INSTALL_DIR" -mkdir -p "$INSTALL_DIR/include/extras" "$INSTALL_DIR/src" "$INSTALL_DIR/lib" +mkdir -p "$INSTALL_DIR/include" "$INSTALL_DIR/lib" -# imgui +# imgui headers cp imgui-src/imgui.h imgui-src/imgui_internal.h imgui-src/imconfig.h \ imgui-src/imstb_rectpack.h imgui-src/imstb_textedit.h imgui-src/imstb_truetype.h \ "$INSTALL_DIR/include/" -cp imgui-src/imgui.cpp imgui-src/imgui_draw.cpp imgui-src/imgui_tables.cpp \ - imgui-src/imgui_widgets.cpp imgui-src/imgui_demo.cpp \ - "$INSTALL_DIR/src/" cp imgui-src/backends/imgui_impl_opengl3.h imgui-src/backends/imgui_impl_opengl3_loader.h \ imgui-src/backends/imgui_impl_glfw.h \ "$INSTALL_DIR/include/" -cp imgui-src/backends/imgui_impl_opengl3.cpp imgui-src/backends/imgui_impl_glfw.cpp \ - "$INSTALL_DIR/src/" -# implot +# implot headers cp implot-src/implot.h implot-src/implot_internal.h "$INSTALL_DIR/include/" -cp implot-src/implot.cpp implot-src/implot_items.cpp "$INSTALL_DIR/src/" - -# rlimgui -cp rlimgui-src/rlImGui.h rlimgui-src/rlImGuiColors.h rlimgui-src/imgui_impl_raylib.h \ - "$INSTALL_DIR/include/" -cp rlimgui-src/extras/FA6FreeSolidFontData.h rlimgui-src/extras/IconsFontAwesome6.h \ - "$INSTALL_DIR/include/extras/" -cp rlimgui-src/rlImGui.cpp "$INSTALL_DIR/src/" # glfw cp glfw-src/build/src/libglfw3.a "$INSTALL_DIR/lib/" cp -r glfw-src/include/GLFW "$INSTALL_DIR/include/" +# Build libimgui.a (imgui core + backends + implot) +IMGUI_SRCS=( + imgui-src/imgui.cpp + imgui-src/imgui_draw.cpp + imgui-src/imgui_tables.cpp + imgui-src/imgui_widgets.cpp + imgui-src/imgui_demo.cpp + imgui-src/backends/imgui_impl_opengl3.cpp + imgui-src/backends/imgui_impl_glfw.cpp + implot-src/implot.cpp + implot-src/implot_items.cpp +) +OBJ_DIR="$(mktemp -d)" +for src in "${IMGUI_SRCS[@]}"; do + obj="$OBJ_DIR/$(basename "${src%.cpp}.o")" + c++ -c -O2 -fPIC -I"$INSTALL_DIR/include" "$src" -o "$obj" & +done +wait +ar rcs "$INSTALL_DIR/lib/libimgui.a" "$OBJ_DIR"/*.o +rm -rf "$OBJ_DIR" + # Bundle GLVND dispatchers so Linux users don't need system libGL if [[ "$(uname)" == "Linux" ]]; then MESA_DIR="$INSTALL_DIR/lib/mesa" diff --git a/imgui/imgui/__init__.py b/imgui/imgui/__init__.py index 9603aa5..18fd87a 100644 --- a/imgui/imgui/__init__.py +++ b/imgui/imgui/__init__.py @@ -3,14 +3,13 @@ import platform as _platform DIR = os.path.join(os.path.dirname(__file__), "install") INCLUDE_DIR = os.path.join(DIR, "include") -SRC_DIR = os.path.join(DIR, "src") LIB_DIR = os.path.join(DIR, "lib") MESA_DIR = os.path.join(DIR, "lib", "mesa") def smoketest(): assert os.path.isfile(os.path.join(INCLUDE_DIR, "imgui.h")), "imgui.h not found" - assert os.path.isfile(os.path.join(SRC_DIR, "imgui.cpp")), "imgui.cpp not found" + assert os.path.isfile(os.path.join(LIB_DIR, "libimgui.a")), "libimgui.a not found" assert os.path.isfile(os.path.join(LIB_DIR, "libglfw3.a")), "libglfw3.a not found" assert os.path.isfile(os.path.join(INCLUDE_DIR, "GLFW", "glfw3.h")), "GLFW/glfw3.h not found" if _platform.system() == "Linux":