zengine_test/engine/xmake/rule_api/rule_api.lua
2024-08-02 22:14:00 +08:00

61 lines
2.1 KiB
Lua

import("core.project.project")
function add_define(target, name, is_static)
local api = string.upper(name) .. "_API"
if is_static then
target:add("defines", api .. "=", api .. "_VAL", {public = false})
else
target:add("defines", api.."=__declspec(dllimport)", {interface=true})
target:add("defines", api.."=__declspec(dllexport)", api .. "_VAL", {public=false})
end
end
function add_packages(target, deptarget)
local packs = deptarget:get("packages")
if packs and #packs > 0 then
local packages = {}
for _,v in ipairs(packs) do
table.insert(packages, v)
end
table.insert(packages, {public = true})
target:add("packages", unpack(packages))
end
end
function main(target)
local name = target:name()
local is_static = target:kind() == "static"
add_define(target, name, is_static)
local deps = target:get("deps")
if not deps then return end
local inherit = target:extraconf("rules", "engine.api", "inherit")
local linkdirs = {}
for _,dep in ipairs(deps) do
local deptarget = project.target(dep)
if deptarget:kind() == "static" then
add_define(target, dep, is_static)
add_packages(target, deptarget)
if inherit == false then
target:add("links", dep)
local dir = deptarget:targetdir()
if not linkdirs[dir] then
target:add("linkdirs", dir)
linkdirs[dir] = true
end
end
end
end
-- local real_deps = {}
-- local links = {}
-- for _,dep in ipairs(deps) do
-- local deptarget = project.target(dep)
-- if deptarget:kind() == "static" then
-- add_define(target, dep, is_static)
-- --add_packages(target, deptarget)
-- table.insert(links, dep)
-- elseif is_link then
-- table.insert(real_deps, dep)
-- end
-- end
-- if is_link then
-- --target:add("links", links)
-- --target:set("deps", real_deps)
-- end
end