summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2019-03-09 22:25:39 +0800
committerruki <[email protected]>2019-03-09 22:25:39 +0800
commitccad5dc61f0798b0c96303ddca2848fdbce9a113 (patch)
treeba60800b16a5409f1f8c8c80219efc2ff20a2b84
parent24de4d027e54752ef54803df5c283f480ed04f60 (diff)
inherit dep flags for target
-rw-r--r--tests/apis/add_deps/xmake.lua2
-rw-r--r--xmake/core/tool/builder.lua60
2 files changed, 46 insertions, 16 deletions
diff --git a/tests/apis/add_deps/xmake.lua b/tests/apis/add_deps/xmake.lua
index c19821bb6..566da01f9 100644
--- a/tests/apis/add_deps/xmake.lua
+++ b/tests/apis/add_deps/xmake.lua
@@ -2,6 +2,8 @@
target("dep1")
set_kind("static")
add_files("src/*.c")
+ add_cflags("-DFLAG1")
+ add_cflags("-DFLAG2", {interface = true})
add_includedirs("inc1", {public = true})
add_defines("TEST1", {public = true})
diff --git a/xmake/core/tool/builder.lua b/xmake/core/tool/builder.lua
index 8e80f8ada..a08f7226f 100644
--- a/xmake/core/tool/builder.lua
+++ b/xmake/core/tool/builder.lua
@@ -186,6 +186,26 @@ function builder:_inherit_links_from_targetdeps(results, target, flagname)
end
end
+-- inherit flags (only for public/interface) from target deps
+--
+-- e.g.
+-- add_cflags("", {public = true})
+-- add_cflags("", {interface = true})
+--
+function builder:_inherit_flags_from_targetdeps(flags, target)
+ local orderdeps = target:orderdeps()
+ local total = #orderdeps
+ for idx, _ in ipairs(orderdeps) do
+ local dep = orderdeps[total + 1 - idx]
+ local depinherit = target:extraconf("deps", dep:name(), "inherit")
+ if depinherit == nil or depinherit then
+ for _, flagkind in ipairs(self:_flagkinds()) do
+ self:_add_flags_from_flagkind(flags, dep, flagkind, {interface = true})
+ end
+ end
+ end
+end
+
-- inherit values (only for public/interface) from target deps
--
-- e.g.
@@ -235,6 +255,25 @@ function builder:_add_values_from_targetpkgs(values, target, name)
end
end
+-- add flags from the flagkind
+function builder:_add_flags_from_flagkind(flags, target, flagkind, opt)
+ local targetflags = target:get(flagkind, opt)
+ local extraconf = target:extraconf(flagkind)
+ if extraconf then
+ for _, flag in ipairs(table.wrap(targetflags)) do
+ -- force to add flags?
+ local flagconf = extraconf[flag]
+ if flagconf and flagconf.force then
+ table.join2(flags, flag)
+ else
+ table.join2(flags, self:_mapflags(flag, flagkind))
+ end
+ end
+ else
+ table.join2(flags, self:_mapflags(targetflags, flagkind))
+ end
+end
+
-- add flags from the configure
function builder:_add_flags_from_config(flags)
for _, flagkind in ipairs(self:_flagkinds()) do
@@ -245,7 +284,7 @@ end
-- add flags from the option
function builder:_add_flags_from_option(flags, opt)
for _, flagkind in ipairs(self:_flagkinds()) do
- table.join2(flags, self:_mapflags(opt:get(flagkind), flagkind))
+ self:_add_flags_from_flagkind(targetflags, opt, flagkind)
end
end
@@ -289,25 +328,14 @@ function builder:_add_flags_from_target(flags, target)
for _, pkg in ipairs(target:orderpkgs()) do
self:_add_flags_from_package(targetflags, pkg)
end
+
+ -- inherit flags (public/interface) from all dependent targets
+ self:_inherit_flags_from_targetdeps(targetflags, target)
end
-- add the target flags
for _, flagkind in ipairs(self:_flagkinds()) do
- local flags = target:get(flagkind)
- local extraconf = target:extraconf(flagkind)
- if extraconf then
- for _, flag in ipairs(table.wrap(flags)) do
- -- force to add flags?
- local flagconf = extraconf[flag]
- if flagconf and flagconf.force then
- table.join2(targetflags, flag)
- else
- table.join2(targetflags, self:_mapflags(flag, flagkind))
- end
- end
- else
- table.join2(targetflags, self:_mapflags(flags, flagkind))
- end
+ self:_add_flags_from_flagkind(targetflags, target, flagkind)
end
-- cache it