2
0

fetch.lua 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import("lib.detect.find_tool")
  2. import("core.project.target")
  3. function main(package, opt)
  4. if opt.system then
  5. local llvm_config = "llvm-config"
  6. if package:is_plat("macosx") then
  7. local llvm = try {function () return os.iorunv("brew", {"--prefix", "llvm"}) end}
  8. if llvm then
  9. local ret = find_tool("llvm-config", {paths = path.join(llvm:trim(), "bin")})
  10. if ret then
  11. llvm_config = ret.program
  12. end
  13. end
  14. end
  15. local version = try {function() return os.iorunv(llvm_config, {"--version"}) end}
  16. if version then
  17. version = version:trim()
  18. end
  19. if package:is_toolchain() then
  20. if version then
  21. return {version = version}
  22. end
  23. else
  24. local linkdir = try {function() return os.iorunv(llvm_config, {"--libdir"}) end}
  25. local includedir = try {function() return os.iorunv(llvm_config, {"--includedir"}) end}
  26. if linkdir and includedir then
  27. linkdir = linkdir:trim()
  28. includedir = includedir:trim()
  29. local result = {version = version, links = {}, linkdirs = linkdir, includedirs = includedir}
  30. local components = {}
  31. for _, file in ipairs(os.files(path.join(os.scriptdir(), "components", "*.lua"))) do
  32. local name = path.basename(file)
  33. local links = {}
  34. for _, link in ipairs(import("components." .. name).get_links(package)) do
  35. local filename_static = target.filename(link, "static", {plat = package:plat(), arch = package:arch()})
  36. local filename_shared = target.filename(link, "shared", {plat = package:plat(), arch = package:arch()})
  37. if os.isfile(path.join(linkdir, filename_static)) or
  38. os.isfile(path.join(linkdir, filename_shared)) then
  39. table.insert(links, link)
  40. table.insert(result.links, link)
  41. end
  42. end
  43. if #links > 0 then
  44. components[name] = components[name] or {}
  45. components[name].links = links
  46. end
  47. end
  48. components.__base = {linkdirs = linkdir, includedirs = includedir}
  49. result.components = components
  50. return result
  51. end
  52. end
  53. end
  54. end