xmake.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package("msvc")
  2. set_kind("toolchain")
  3. set_homepage("https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/")
  4. set_description("Microsoft Visual C/C++ Compiler")
  5. if set_installtips then
  6. set_installtips("Do you accept the license agreement? https://go.microsoft.com/fwlink/?LinkId=2179911")
  7. end
  8. add_versions("14.42.17+12", "dummy")
  9. add_versions("14.41.17+11", "dummy")
  10. add_versions("14.40.17+10", "dummy")
  11. add_versions("14.39.17+9", "dummy")
  12. add_versions("14.38.17+8", "dummy")
  13. add_versions("14.37.17+7", "dummy")
  14. add_versions("14.36.17+6", "dummy")
  15. add_versions("14.35.17+5", "dummy")
  16. add_versions("14.34.17+4", "dummy")
  17. add_versions("14.33.17+3", "dummy")
  18. add_versions("14.32.17+2", "dummy")
  19. add_versions("14.31.17+1", "dummy")
  20. add_versions("14.30.17+0", "dummy")
  21. add_versions("14.29.16+11", "dummy")
  22. add_configs("preview", {description = "The Preview Version", type = "boolean"})
  23. add_configs("target", {description = "The Target architecture", type = "string", values = {"x64", "x86", "arm", "arm64"}})
  24. add_configs("sdkver", {description = "The Windows SDK Version", type = "string", values = {
  25. "10.0.26100",
  26. "10.0.22621",
  27. "10.0.22000",
  28. "10.0.20348",
  29. "10.0.19041",
  30. "10.0.18362"}})
  31. on_load(function (package)
  32. if not package:is_precompiled() then
  33. if is_host("windows") then
  34. package:add("deps", "portable_build_tools")
  35. elseif is_host("linux") then
  36. -- TODO use msvc-wine
  37. end
  38. end
  39. end)
  40. on_fetch("@windows", "@msys", function (package, opt)
  41. if opt.system then
  42. -- TODO maybe we need to improve it
  43. if not package:config("sdkver") and not package:config("target") and not package:config("preview") then
  44. local msvc = package:toolchain("msvc")
  45. if msvc and msvc:check() then
  46. return {}
  47. end
  48. end
  49. end
  50. end)
  51. on_install("@windows", "@msys", function (package)
  52. import("core.base.semver")
  53. local argv = {"accept_license"}
  54. local sdkver = semver.new(package:config("sdkver") or "10.0.26100")
  55. if package:config("preview") then
  56. table.insert(argv, "preview")
  57. end
  58. table.insert(argv, "msvc=" .. package:version_str():replace("+", ".", {plain = true}))
  59. table.insert(argv, "sdk=" .. sdkver:patch())
  60. table.insert(argv, "host=" .. os.arch())
  61. table.insert(argv, "env=none")
  62. table.insert(argv, "path=" .. package:installdir())
  63. table.insert(argv, "target=" .. (package:config("target") or os.arch()))
  64. -- @note It downloads the official binary source
  65. -- https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/
  66. -- https://github.com/Data-Oriented-House/PortableBuildTools/blob/3a2cd42b1de75da63ad30a55982d8dff3c36aa45/source.c#L724
  67. os.vrunv("PortableBuildTools.exe", argv)
  68. end)
  69. on_test(function (package)
  70. assert(os.isfile(path.join(package:installdir(), "devcmd.bat")))
  71. end)