xmake.lua 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package("cppfront")
  2. set_kind("toolchain")
  3. set_homepage("https://github.com/hsutter/cppfront")
  4. set_description("A personal experimental C++ Syntax 2 -> Syntax 1 compiler")
  5. add_urls("https://github.com/hsutter/cppfront/archive/refs/tags/$(version).tar.gz")
  6. add_urls("https://github.com/hsutter/cppfront.git")
  7. add_versions("v0.7.4", "028f44cc0cad26b51829e4abf7c5aedf8a31f852ab5dfbad54bb232f0a1d7447")
  8. add_versions("v0.7.2", "fb44c6a65fa19b185ddf385dd3bfea05afe0bc8260382b7a8e3c75b3c9004cd6")
  9. add_versions("v0.7.0", "d4ffb37d19a2b7c054d005cf4687439577ef2f3d93b340a342704e064cd1d047")
  10. on_fetch(function (package, opt)
  11. if opt.system then
  12. return package:find_tool("cppfront", {check = "-h"})
  13. end
  14. end)
  15. on_check(function (package)
  16. if package:is_plat("windows") then
  17. local vs = package:toolchain("msvc"):config("vs")
  18. assert(vs and tonumber(vs) >= 2022, "package(cppfront): need vs >= 2022.")
  19. end
  20. assert(package:check_cxxsnippets({test = [[
  21. #include <compare>
  22. void test() {
  23. std::compare_three_way{};
  24. }
  25. ]]}, {configs = {languages = "c++20"}}), "package(cppfront): requires at least C++20.")
  26. end)
  27. on_install("windows", "linux", "macosx|x86_64", function (package)
  28. local configs = {}
  29. io.writefile("xmake.lua", [[
  30. add_rules("mode.release", "mode.debug")
  31. target("cppfront")
  32. set_kind("binary")
  33. add_files("source/*.cpp")
  34. add_includedirs("include")
  35. set_languages("c++20")
  36. ]])
  37. import("package.tools.xmake").install(package, configs)
  38. os.cp("include", package:installdir())
  39. end)
  40. on_test(function (package)
  41. io.writefile("main.cpp2", [[
  42. main: () -> int =
  43. println("Hello world!\n");
  44. println: (msg: _) -> int = {
  45. std::cout << "msg: " << msg;
  46. return 0;
  47. }
  48. ]])
  49. os.vrun("cppfront -o main.cpp main.cpp2")
  50. end)