package An official xmake package repository https://xrepo.xmake.io/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
2.5 KiB

import("lib.detect.find_tool")
import("core.project.target")
function main(package, opt)
if opt.system then
local llvm_config = "llvm-config"
if package:is_plat("macosx") then
local llvm = try {function () return os.iorunv("brew", {"--prefix", "llvm"}) end}
if llvm then
local ret = find_tool("llvm-config", {paths = path.join(llvm:trim(), "bin")})
if ret then
llvm_config = ret.program
end
end
end
local version = try {function() return os.iorunv(llvm_config, {"--version"}) end}
if version then
version = version:trim()
end
if package:is_toolchain() then
if version then
return {version = version}
end
else
local linkdir = try {function() return os.iorunv(llvm_config, {"--libdir"}) end}
local includedir = try {function() return os.iorunv(llvm_config, {"--includedir"}) end}
if linkdir and includedir then
linkdir = linkdir:trim()
includedir = includedir:trim()
local result = {version = version, links = {}, linkdirs = linkdir, includedirs = includedir}
local components = {}
for _, file in ipairs(os.files(path.join(os.scriptdir(), "components", "*.lua"))) do
local name = path.basename(file)
local links = {}
for _, link in ipairs(import("components." .. name).get_links(package)) do
local filename_static = target.filename(link, "static", {plat = package:plat(), arch = package:arch()})
local filename_shared = target.filename(link, "shared", {plat = package:plat(), arch = package:arch()})
if os.isfile(path.join(linkdir, filename_static)) or
os.isfile(path.join(linkdir, filename_shared)) then
table.insert(links, link)
table.insert(result.links, link)
end
end
if #links > 0 then
components[name] = components[name] or {}
components[name].links = links
end
end
components.__base = {linkdirs = linkdir, includedirs = includedir}
result.components = components
return result
end
end
end
end