xmake.lua 4.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package("libcoro")
  2. set_homepage("https://github.com/jbaldwin/libcoro")
  3. set_description("C++20 coroutine library")
  4. set_license("Apache-2.0")
  5. add_urls("https://github.com/jbaldwin/libcoro/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/jbaldwin/libcoro.git", {submodules = false})
  7. add_versions("v0.15.0", "9538281c742ca59c028052ad150d0e7ff688b8a724532dea95e74966b90d70c2")
  8. add_versions("v0.14.1", "0a18058fe17826237a868e3d266960e839db8c7aeeb2beba9b596c84124afe0e")
  9. add_versions("v0.14.0", "baf4b1535dee94bf47d3901b7e4842cedead5828ce7583e9a30ff8c5a8e0eb6e")
  10. add_versions("v0.13.0", "aea5e4f4c04ef01269cc4e40ce9e693f71e324574ea0a933d908783ef385f9f5")
  11. add_versions("v0.12.1", "2cb6f45fc73dad6008cc930d92939785684835e03b12df422b98fcab9e393add")
  12. add_patches("v0.14.1", "patches/v0.14.1.patch", "bd5892560831ec322409ed9af82466ae523d967c1c80ca77c66bc9b64a4b54c7")
  13. add_patches("v0.14.0", "patches/v0.14.0.patch", "bd5892560831ec322409ed9af82466ae523d967c1c80ca77c66bc9b64a4b54c7")
  14. add_patches("v0.13.0", "patches/v0.13.0.patch", "bd5892560831ec322409ed9af82466ae523d967c1c80ca77c66bc9b64a4b54c7")
  15. if not is_plat("windows", "wasm") then
  16. add_configs("networking", {description = "Include networking features", default = false, type = "boolean"})
  17. add_configs("tls", {description = "Include TLS encryption features", default = false, type = "boolean"})
  18. end
  19. add_deps("cmake")
  20. on_check(function (package)
  21. assert(package:check_cxxsnippets({test = [[
  22. #if defined(__clang__)
  23. # if __clang_major__ < 16
  24. # error "package(libcoro): Clang version too low, need at least 16.0.0"
  25. # endif
  26. #endif
  27. ]]}, {configs = {languages = "c++20"}}), "package(libcoro): Clang version too low, need at least 16.0.0")
  28. assert(package:check_cxxsnippets({test = [[
  29. #if defined(__GNUC__) && !defined(__clang__)
  30. # if (__GNUC__ < 10) || (__GNUC__ == 10 && (__GNUC_MINOR__ < 2))
  31. # error "package(libcoro): GCC version too low, need at least 10.2.0"
  32. # endif
  33. #endif
  34. ]]}, {configs = {languages = "c++20"}}), "package(libcoro): GCC version too low, need at least 10.2.0")
  35. assert(package:check_cxxsnippets({test = [[
  36. #if __has_include(<version>)
  37. #include <version>
  38. # ifndef __cpp_lib_jthread
  39. # error "package(libcoro): Feature-test macro for jthread missing in <version>"
  40. # endif
  41. #endif
  42. ]]}, {configs = {languages = "c++20"}}), "package(libcoro): Feature-test macro for jthread missing in <version>")
  43. end)
  44. on_load(function (package)
  45. if package:config("networking") then
  46. package:add("deps", "c-ares")
  47. end
  48. if package:config("tls") then
  49. package:add("deps", "openssl")
  50. end
  51. if not package:config("shared") then
  52. package:add("defines", "CORO_STATIC_DEFINE")
  53. end
  54. end)
  55. on_install("!android", function (package)
  56. if package:has_tool("cxx", "gcc", "gxx") then
  57. package:add("cxxflags", "-fcoroutines")
  58. package:add("cxxflags", "-fconcepts")
  59. package:add("cxxflags", "-fexceptions")
  60. elseif package:has_tool("cxx", "clang", "clangxx") then
  61. package:add("cxxflags", "-fexceptions")
  62. end
  63. local configs = {
  64. "-DLIBCORO_EXTERNAL_DEPENDENCIES=ON",
  65. "-DLIBCORO_BUILD_TESTS=OFF",
  66. "-DLIBCORO_BUILD_EXAMPLES=OFF",
  67. }
  68. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
  69. table.insert(configs, "-DLIBCORO_BUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
  70. table.insert(configs, "-DLIBCORO_FEATURE_NETWORKING=" .. (package:config("networking") and "ON" or "OFF"))
  71. table.insert(configs, "-DLIBCORO_FEATURE_TLS=" .. (package:config("tls") and "ON" or "OFF"))
  72. local opt = {}
  73. if package:is_plat("mingw") and package:config("shared") then
  74. opt.shflags = "-Wl,--export-all-symbols"
  75. end
  76. import("package.tools.cmake").install(package, configs, opt)
  77. end)
  78. on_test(function (package)
  79. assert(package:check_cxxsnippets({test = [[
  80. void test() {
  81. auto make_task_inline = [](uint64_t x) -> coro::task<uint64_t> { co_return x + x; };
  82. auto result = coro::sync_wait(make_task_inline(5));
  83. }
  84. ]]}, {configs = {languages = "c++20"}, includes = "coro/coro.hpp"}))
  85. end)