xmake.lua 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package("cimgui")
  2. set_homepage("https://github.com/cimgui/cimgui")
  3. set_description("c-api for imgui (https://github.com/ocornut/imgui) Look at: https://github.com/cimgui for other widgets")
  4. set_license("MIT")
  5. add_urls("https://github.com/cimgui/cimgui.git")
  6. add_versions("2023.08.02", "a21e28e74027796d983f8c8d4a639a4e304251f2")
  7. add_configs("imgui", {description = "imgui version", default = "v1.89", type = "string"})
  8. add_configs("target", {description = "options as words in one string: internal for imgui_internal generation, freetype for freetype generation, comments for comments generation, nochar to skip char* function version, noimstrv to skip imstrv", default = "internal noimstrv", type = "string"})
  9. add_configs("glfw", {description = "Enable the glfw backend", default = false, type = "boolean"})
  10. add_configs("opengl2", {description = "Enable the opengl2 backend", default = false, type = "boolean"})
  11. add_configs("opengl3", {description = "Enable the opengl3 backend", default = false, type = "boolean"})
  12. add_configs("sdl2", {description = "Enable the sdl2 backend", default = false, type = "boolean"})
  13. add_configs("vulkan", {description = "Enable the vulkan backend", default = false, type = "boolean"})
  14. add_configs("freetype", {description = "Use FreeType to build and rasterize the font atlas", default = false, type = "boolean"})
  15. add_configs("wchar32", {description = "Use 32-bit for ImWchar (default is 16-bit)", default = false, type = "boolean"})
  16. if is_plat("windows") then
  17. add_syslinks("imm32")
  18. end
  19. add_defines("IMGUI_DISABLE_OBSOLETE_FUNCTIONS=1")
  20. add_deps("luajit", {private = true})
  21. on_check(function (package)
  22. if package:is_arch("arm.*") then
  23. raise("package(cimgui/arm64): unsupported arch, because it depends on luajit, we need to improve luajit first.")
  24. end
  25. end)
  26. on_load(function (package)
  27. if package:config("sdl2") then
  28. package:add("deps", "libsdl2")
  29. package:add("defines", "CIMGUI_USE_SDL2")
  30. end
  31. if package:config("opengl2") then
  32. package:add("defines", "CIMGUI_USE_OPENGL2")
  33. end
  34. if package:config("opengl3") then
  35. package:add("defines", "CIMGUI_USE_OPENGL3")
  36. end
  37. if package:config("glfw") then
  38. package:add("deps", "glfw")
  39. package:add("defines", "CIMGUI_USE_GLFW")
  40. end
  41. if package:config("vulkan") then
  42. package:add("deps", "vulkan-headers")
  43. end
  44. if package:config("freetype") then
  45. package:add("deps", "freetype")
  46. package:add("defines", "CIMGUI_FREETYPE=1")
  47. end
  48. end)
  49. on_install("windows|x64", "windows|x86", "linux", "macosx", function (package)
  50. os.vrun("git -c core.fsmonitor=false submodule foreach --recursive git checkout " .. package:config("imgui"))
  51. local envs = {}
  52. local args = {"generator.lua"}
  53. if package:is_plat("windows") then
  54. import("package.tools.msbuild")
  55. table.insert(args, "cl")
  56. table.join2(envs, msbuild.buildenvs(package))
  57. else
  58. if package:has_tool("cc", "gcc", "gxx") then
  59. table.insert(args, "gcc")
  60. elseif package:has_tool("cc", "clang", "clangxx") then
  61. table.insert(args, "clang")
  62. else
  63. raise("Compiler not found")
  64. end
  65. end
  66. table.insert(args, package:config("target"))
  67. table.join2(args, table.wrap(package:config("cflags")))
  68. table.join2(args, table.wrap(package:config("cxflags")))
  69. for _, define in ipairs(table.wrap(package:config("defines"))) do
  70. table.insert(args, "-D" .. define)
  71. end
  72. local configs = {
  73. glfw = package:config("glfw"),
  74. opengl2 = package:config("opengl2"),
  75. opengl3 = package:config("opengl3"),
  76. sdl2 = package:config("sdl2"),
  77. vulkan = package:config("vulkan"),
  78. freetype = package:config("freetype"),
  79. wchar32 = package:config("wchar32")
  80. }
  81. if configs.sdl2 then
  82. table.insert(args, "sdl")
  83. end
  84. if configs.glfw then
  85. table.insert(args, "glfw")
  86. end
  87. if configs.vulkan then
  88. table.insert(args, "vulkan")
  89. end
  90. if configs.opengl2 then
  91. table.insert(args, "opengl2")
  92. end
  93. if configs.opengl3 then
  94. table.insert(args, "opengl3")
  95. end
  96. os.vrunv("luajit", args, {envs = envs, curdir = "generator"})
  97. os.cp(path.join(package:scriptdir(), "port", "xmake.lua"), "xmake.lua")
  98. import("package.tools.xmake").install(package, configs)
  99. end)
  100. on_test(function (package)
  101. assert(package:check_csnippets({test = [[
  102. #define CIMGUI_DEFINE_ENUMS_AND_STRUCTS
  103. #include <cimgui.h>
  104. void test() {
  105. igCreateContext(NULL);
  106. }
  107. ]]}, {configs = {languages = "c99"}}))
  108. end)