xmake.lua 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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_load(function (package)
  22. if package:config("sdl2") then
  23. package:add("deps", "libsdl")
  24. package:add("defines", "CIMGUI_USE_SDL2")
  25. end
  26. if package:config("opengl2") then
  27. package:add("defines", "CIMGUI_USE_OPENGL2")
  28. end
  29. if package:config("opengl3") then
  30. package:add("defines", "CIMGUI_USE_OPENGL3")
  31. end
  32. if package:config("glfw") then
  33. package:add("deps", "glfw")
  34. package:add("defines", "CIMGUI_USE_GLFW")
  35. end
  36. if package:config("vulkan") then
  37. package:add("deps", "vulkansdk")
  38. end
  39. if package:config("freetype") then
  40. package:add("deps", "freetype")
  41. package:add("defines", "CIMGUI_FREETYPE=1")
  42. end
  43. end)
  44. on_install("windows|x64", "windows|x86", "linux", "macosx", function (package)
  45. os.vrun("git -c core.fsmonitor=false submodule foreach --recursive git checkout " .. package:config("imgui"))
  46. local envs = {}
  47. local args = {"generator.lua"}
  48. if package:is_plat("windows") then
  49. import("package.tools.msbuild")
  50. table.insert(args, "cl")
  51. table.join2(envs, msbuild.buildenvs(package))
  52. else
  53. if package:has_tool("cc", "gcc", "gxx") then
  54. table.insert(args, "gcc")
  55. elseif package:has_tool("cc", "clang", "clangxx") then
  56. table.insert(args, "clang")
  57. else
  58. raise("Compiler not found")
  59. end
  60. end
  61. table.insert(args, package:config("target"))
  62. table.join2(args, table.wrap(package:config("cflags")))
  63. table.join2(args, table.wrap(package:config("cxflags")))
  64. for _, define in ipairs(table.wrap(package:config("defines"))) do
  65. table.insert(args, "-D" .. define)
  66. end
  67. local configs = {
  68. glfw = package:config("glfw"),
  69. opengl2 = package:config("opengl2"),
  70. opengl3 = package:config("opengl3"),
  71. sdl2 = package:config("sdl2"),
  72. vulkan = package:config("vulkan"),
  73. freetype = package:config("freetype"),
  74. wchar32 = package:config("wchar32")
  75. }
  76. if configs.sdl2 then
  77. table.insert(args, "sdl")
  78. end
  79. if configs.glfw then
  80. table.insert(args, "glfw")
  81. end
  82. if configs.vulkan then
  83. table.insert(args, "vulkan")
  84. end
  85. if configs.opengl2 then
  86. table.insert(args, "opengl2")
  87. end
  88. if configs.opengl3 then
  89. table.insert(args, "opengl3")
  90. end
  91. os.vrunv("luajit", args, {envs = envs, curdir = "generator"})
  92. os.cp(path.join(package:scriptdir(), "port", "xmake.lua"), "xmake.lua")
  93. import("package.tools.xmake").install(package, configs)
  94. end)
  95. on_test(function (package)
  96. assert(package:check_csnippets({test = [[
  97. #define CIMGUI_DEFINE_ENUMS_AND_STRUCTS
  98. #include <cimgui.h>
  99. void test() {
  100. igCreateContext(NULL);
  101. }
  102. ]]}, {configs = {languages = "c99"}}))
  103. end)