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.
56 lines
2.5 KiB
56 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 |
|
|
|
|