cmake_minimum_required(VERSION 3.18) project(UIDefEdit LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # ImGui sources set(IMGUI_DIR ${CMAKE_SOURCE_DIR}/third_party/imgui) set(IMGUI_SOURCES ${IMGUI_DIR}/imgui.cpp ${IMGUI_DIR}/imgui_demo.cpp ${IMGUI_DIR}/imgui_draw.cpp ${IMGUI_DIR}/imgui_tables.cpp ${IMGUI_DIR}/imgui_widgets.cpp ${IMGUI_DIR}/backends/imgui_impl_android.cpp ${IMGUI_DIR}/backends/imgui_impl_opengl3.cpp ) # pugixml set(PUGIXML_DIR ${CMAKE_SOURCE_DIR}/third_party/pugixml) set(PUGIXML_SOURCES ${PUGIXML_DIR}/pugixml.cpp) # Application sources set(APP_SOURCES src/main.cpp src/app.cpp src/canvas/canvas.cpp src/canvas/grid.cpp src/canvas/selection.cpp src/model/control_registry.cpp src/model/control_instance.cpp src/util/undo_redo.cpp src/ui/toolbar.cpp src/ui/toolbox.cpp src/ui/doc_tree.cpp src/ui/properties.cpp src/ui/file_dialog.cpp src/xml/xml_writer.cpp src/xml/xml_reader.cpp src/xml/xsd_validator.cpp src/ui/validation_panel.cpp src/util/platform.cpp ) add_library(uidef-tool SHARED ${APP_SOURCES} ${IMGUI_SOURCES} ${PUGIXML_SOURCES} ) target_include_directories(uidef-tool PRIVATE ${CMAKE_SOURCE_DIR}/src ${IMGUI_DIR} ${IMGUI_DIR}/backends ${CMAKE_SOURCE_DIR}/third_party/pugixml ) target_compile_definitions(uidef-tool PRIVATE IMGUI_IMPL_OPENGL_ES3 ) # Force export ANativeActivity_onCreate (needed by NativeActivity) # Clear RPATH/RUNPATH — Termux's clang sets RUNPATH to its own lib dir # which is inaccessible from the installed APK's app context set(CMAKE_SKIP_BUILD_RPATH TRUE) set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) set(CMAKE_INSTALL_RPATH "") target_link_options(uidef-tool PRIVATE "LINKER:-u,ANativeActivity_onCreate" "LINKER:--disable-new-dtags" "LINKER:-rpath," ) # Link system libraries target_link_libraries(uidef-tool PRIVATE android log EGL GLESv3 ) # libxml2 — built from source as static library (no ICU/iconv dependencies) set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_ICONV OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_ICU OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_LZMA OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_ZLIB OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_PYTHON OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_PROGRAMS OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_TESTS OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_HTTP OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_FTP OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_LEGACY OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_MODULES OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_CATALOG OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_DEBUG OFF CACHE BOOL "" FORCE) set(LIBXML2_WITH_SCHEMAS ON CACHE BOOL "" FORCE) set(LIBXML2_WITH_THREADS ON CACHE BOOL "" FORCE) add_subdirectory(third_party/libxml2) target_link_libraries(uidef-tool PRIVATE LibXml2) target_include_directories(uidef-tool PRIVATE ${CMAKE_BINARY_DIR}/third_party/libxml2 ${CMAKE_SOURCE_DIR}/third_party/libxml2/include )