CMakeLists.txt 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. cmake_minimum_required(VERSION 3.18)
  2. project(UIDefEdit LANGUAGES C CXX)
  3. set(CMAKE_CXX_STANDARD 17)
  4. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  5. set(CMAKE_CXX_EXTENSIONS OFF)
  6. # ImGui sources
  7. set(IMGUI_DIR ${CMAKE_SOURCE_DIR}/third_party/imgui)
  8. set(IMGUI_SOURCES
  9. ${IMGUI_DIR}/imgui.cpp
  10. ${IMGUI_DIR}/imgui_demo.cpp
  11. ${IMGUI_DIR}/imgui_draw.cpp
  12. ${IMGUI_DIR}/imgui_tables.cpp
  13. ${IMGUI_DIR}/imgui_widgets.cpp
  14. ${IMGUI_DIR}/backends/imgui_impl_android.cpp
  15. ${IMGUI_DIR}/backends/imgui_impl_opengl3.cpp
  16. )
  17. # pugixml
  18. set(PUGIXML_DIR ${CMAKE_SOURCE_DIR}/third_party/pugixml)
  19. set(PUGIXML_SOURCES ${PUGIXML_DIR}/pugixml.cpp)
  20. # Application sources
  21. set(APP_SOURCES
  22. src/main.cpp
  23. src/app.cpp
  24. src/canvas/canvas.cpp
  25. src/canvas/grid.cpp
  26. src/canvas/selection.cpp
  27. src/model/control_registry.cpp
  28. src/model/control_instance.cpp
  29. src/util/undo_redo.cpp
  30. src/ui/toolbar.cpp
  31. src/ui/toolbox.cpp
  32. src/ui/doc_tree.cpp
  33. src/ui/properties.cpp
  34. src/ui/file_dialog.cpp
  35. src/xml/xml_writer.cpp
  36. src/xml/xml_reader.cpp
  37. src/xml/xsd_validator.cpp
  38. src/ui/validation_panel.cpp
  39. src/util/platform.cpp
  40. )
  41. add_library(uidef-tool SHARED
  42. ${APP_SOURCES}
  43. ${IMGUI_SOURCES}
  44. ${PUGIXML_SOURCES}
  45. )
  46. target_include_directories(uidef-tool PRIVATE
  47. ${CMAKE_SOURCE_DIR}/src
  48. ${IMGUI_DIR}
  49. ${IMGUI_DIR}/backends
  50. ${CMAKE_SOURCE_DIR}/third_party/pugixml
  51. )
  52. target_compile_definitions(uidef-tool PRIVATE
  53. IMGUI_IMPL_OPENGL_ES3
  54. )
  55. # Force export ANativeActivity_onCreate (needed by NativeActivity)
  56. # Clear RPATH/RUNPATH — Termux's clang sets RUNPATH to its own lib dir
  57. # which is inaccessible from the installed APK's app context
  58. set(CMAKE_SKIP_BUILD_RPATH TRUE)
  59. set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
  60. set(CMAKE_INSTALL_RPATH "")
  61. target_link_options(uidef-tool PRIVATE
  62. "LINKER:-u,ANativeActivity_onCreate"
  63. "LINKER:--disable-new-dtags"
  64. "LINKER:-rpath,"
  65. )
  66. # Link system libraries
  67. target_link_libraries(uidef-tool PRIVATE
  68. android
  69. log
  70. EGL
  71. GLESv3
  72. )
  73. # libxml2 — built from source as static library (no ICU/iconv dependencies)
  74. set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
  75. set(LIBXML2_WITH_ICONV OFF CACHE BOOL "" FORCE)
  76. set(LIBXML2_WITH_ICU OFF CACHE BOOL "" FORCE)
  77. set(LIBXML2_WITH_LZMA OFF CACHE BOOL "" FORCE)
  78. set(LIBXML2_WITH_ZLIB OFF CACHE BOOL "" FORCE)
  79. set(LIBXML2_WITH_PYTHON OFF CACHE BOOL "" FORCE)
  80. set(LIBXML2_WITH_PROGRAMS OFF CACHE BOOL "" FORCE)
  81. set(LIBXML2_WITH_TESTS OFF CACHE BOOL "" FORCE)
  82. set(LIBXML2_WITH_HTTP OFF CACHE BOOL "" FORCE)
  83. set(LIBXML2_WITH_FTP OFF CACHE BOOL "" FORCE)
  84. set(LIBXML2_WITH_LEGACY OFF CACHE BOOL "" FORCE)
  85. set(LIBXML2_WITH_MODULES OFF CACHE BOOL "" FORCE)
  86. set(LIBXML2_WITH_CATALOG OFF CACHE BOOL "" FORCE)
  87. set(LIBXML2_WITH_DEBUG OFF CACHE BOOL "" FORCE)
  88. set(LIBXML2_WITH_SCHEMAS ON CACHE BOOL "" FORCE)
  89. set(LIBXML2_WITH_THREADS ON CACHE BOOL "" FORCE)
  90. add_subdirectory(third_party/libxml2)
  91. target_link_libraries(uidef-tool PRIVATE LibXml2)
  92. target_include_directories(uidef-tool PRIVATE
  93. ${CMAKE_BINARY_DIR}/third_party/libxml2
  94. ${CMAKE_SOURCE_DIR}/third_party/libxml2/include
  95. )