summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-03-21 14:42:43 +0800
committerruki <[email protected]>2021-03-21 14:42:43 +0800
commitf4333905bba49775a03def29e7b588246aaef4bf (patch)
tree2e3e41432dbb021527e6da2d57ff88ec83116cd7
parentefa052bcecd4203dfce0fda26a297f3ce45ed47d (diff)
improve map_flags
-rw-r--r--xmake/core/sandbox/modules/import/core/tool/linker.lua28
-rw-r--r--xmake/modules/package/tools/autoconf.lua40
-rw-r--r--xmake/modules/package/tools/cmake.lua52
-rw-r--r--xmake/toolchains/ndk/check.lua5
4 files changed, 57 insertions, 68 deletions
diff --git a/xmake/core/sandbox/modules/import/core/tool/linker.lua b/xmake/core/sandbox/modules/import/core/tool/linker.lua
index 2511d309b..015e4ab73 100644
--- a/xmake/core/sandbox/modules/import/core/tool/linker.lua
+++ b/xmake/core/sandbox/modules/import/core/tool/linker.lua
@@ -28,14 +28,10 @@ local raise = require("sandbox/modules/raise")
-- load the linker from the given target kind
function sandbox_core_tool_linker.load(targetkind, sourcekinds, opt)
-
- -- get the linker instance
local instance, errors = linker.load(targetkind, sourcekinds, opt and opt.target or nil)
if not instance then
raise(errors)
end
-
- -- ok
return instance
end
@@ -46,14 +42,8 @@ end
-- make arguments list for linking target file
function sandbox_core_tool_linker.linkargv(targetkind, sourcekinds, objectfiles, targetfile, opt)
-
- -- init options
opt = opt or {}
-
- -- get the linker instance
local instance = sandbox_core_tool_linker.load(targetkind, sourcekinds, opt)
-
- -- make arguments list
return instance:linkargv(objectfiles, targetfile, opt)
end
@@ -78,14 +68,8 @@ end
-- link target file
function sandbox_core_tool_linker.link(targetkind, sourcekinds, objectfiles, targetfile, opt)
-
- -- init options
opt = opt or {}
-
- -- get the linker instance
local instance = sandbox_core_tool_linker.load(targetkind, sourcekinds, opt)
-
- -- link it
local ok, errors = instance:link(objectfiles, targetfile, opt)
if not ok then
raise(errors)
@@ -102,14 +86,8 @@ end
-- @return the supported flags or nil
--
function sandbox_core_tool_linker.has_flags(targetkind, sourcekinds, flags, opt)
-
- -- init options
opt = opt or {}
-
- -- get the linker instance
local instance = sandbox_core_tool_linker.load(targetkind, sourcekinds, opt)
-
- -- has flags?
return instance:has_flags(flags)
end
@@ -123,14 +101,8 @@ end
-- @return flags or nil
--
function sandbox_core_tool_linker.map_flags(targetkind, sourcekinds, name, values, opt)
-
- -- init options
opt = opt or {}
-
- -- get the linker instance
local instance = sandbox_core_tool_linker.load(targetkind, sourcekinds, opt)
-
- -- map flags
return instance:map_flags(name, values, opt)
end
diff --git a/xmake/modules/package/tools/autoconf.lua b/xmake/modules/package/tools/autoconf.lua
index dbc7e2140..c40fbafda 100644
--- a/xmake/modules/package/tools/autoconf.lua
+++ b/xmake/modules/package/tools/autoconf.lua
@@ -41,6 +41,16 @@ function _translate_windows_bin_path(bin_path)
end
end
+-- map compiler flags
+function _map_compflags(package, langkind, name, values)
+ return compiler.map_flags(langkind, name, values, {target = package})
+end
+
+-- map linker flags
+function _map_linkflags(package, targetkind, sourcekinds, name, values)
+ return linker.map_flags(targetkind, sourcekinds, name, values, {target = package})
+end
+
-- get configs
function _get_configs(package, configs)
@@ -142,21 +152,21 @@ function buildenvs(package, opt)
table.join2(asflags, opt.asflags)
table.join2(ldflags, opt.ldflags)
table.join2(shflags, opt.shflags)
- table.join2(cflags, compiler.map_flags("c", "define", defines)) -- TODO we need use package/toolchains
- table.join2(cflags, compiler.map_flags("c", "includedir", includedirs))
- table.join2(cflags, compiler.map_flags("c", "sysincludedir", sysincludedirs))
- table.join2(asflags, compiler.map_flags("as", "define", defines))
- table.join2(asflags, compiler.map_flags("as", "includedir", includedirs))
- table.join2(asflags, compiler.map_flags("as", "sysincludedir", sysincludedirs))
- table.join2(cxxflags, compiler.map_flags("cxx", "define", defines))
- table.join2(cxxflags, compiler.map_flags("cxx", "includedir", includedirs))
- table.join2(cxxflags, compiler.map_flags("cxx", "sysincludedir", sysincludedirs))
- table.join2(ldflags, linker.map_flags("binary", {"cxx"}, "link", links))
- table.join2(ldflags, linker.map_flags("binary", {"cxx"}, "syslink", syslinks))
- table.join2(ldflags, linker.map_flags("binary", {"cxx"}, "linkdir", linkdirs))
- table.join2(shflags, linker.map_flags("shared", {"cxx"}, "link", links))
- table.join2(shflags, linker.map_flags("shared", {"cxx"}, "syslink", syslinks))
- table.join2(shflags, linker.map_flags("shared", {"cxx"}, "linkdir", linkdirs))
+ table.join2(cflags, _map_compflags(package, "c", "define", defines))
+ table.join2(cflags, _map_compflags(package, "c", "includedir", includedirs))
+ table.join2(cflags, _map_compflags(package, "c", "sysincludedir", sysincludedirs))
+ table.join2(asflags, _map_compflags(package, "as", "define", defines))
+ table.join2(asflags, _map_compflags(package, "as", "includedir", includedirs))
+ table.join2(asflags, _map_compflags(package, "as", "sysincludedir", sysincludedirs))
+ table.join2(cxxflags, _map_compflags(package, "cxx", "define", defines))
+ table.join2(cxxflags, _map_compflags(package, "cxx", "includedir", includedirs))
+ table.join2(cxxflags, _map_compflags(package, "cxx", "sysincludedir", sysincludedirs))
+ table.join2(ldflags, _map_linkflags(package, "binary", {"cxx"}, "link", links))
+ table.join2(ldflags, _map_linkflags(package, "binary", {"cxx"}, "syslink", syslinks))
+ table.join2(ldflags, _map_linkflags(package, "binary", {"cxx"}, "linkdir", linkdirs))
+ table.join2(shflags, _map_linkflags(package, "shared", {"cxx"}, "link", links))
+ table.join2(shflags, _map_linkflags(package, "shared", {"cxx"}, "syslink", syslinks))
+ table.join2(shflags, _map_linkflags(package, "shared", {"cxx"}, "linkdir", linkdirs))
envs.CC = package:build_getenv("cc")
envs.AS = package:build_getenv("as")
envs.AR = package:build_getenv("ar")
diff --git a/xmake/modules/package/tools/cmake.lua b/xmake/modules/package/tools/cmake.lua
index e4d77e3b2..6281372f9 100644
--- a/xmake/modules/package/tools/cmake.lua
+++ b/xmake/modules/package/tools/cmake.lua
@@ -52,6 +52,16 @@ function _translate_bin_path(bin_path)
return bin_path
end
+-- map compiler flags
+function _map_compflags(package, langkind, name, values)
+ return compiler.map_flags(langkind, name, values, {target = package})
+end
+
+-- map linker flags
+function _map_linkflags(package, targetkind, sourcekinds, name, values)
+ return linker.map_flags(targetkind, sourcekinds, name, values, {target = package})
+end
+
-- get cflags from package deps
function _get_cflags_from_packagedeps(package, opt)
local result = {}
@@ -60,9 +70,9 @@ function _get_cflags_from_packagedeps(package, opt)
if dep then
local fetchinfo = dep:fetch({external = false})
if fetchinfo then
- table.join2(result, compiler.map_flags("cxx", "define", fetchinfo.defines))
- table.join2(result, _translate_paths(compiler.map_flags("cxx", "includedir", fetchinfo.includedirs)))
- table.join2(result, _translate_paths(compiler.map_flags("cxx", "sysincludedir", fetchinfo.sysincludedirs)))
+ table.join2(result, _map_compflags(package, "cxx", "define", fetchinfo.defines))
+ table.join2(result, _translate_paths(_map_compflags(package, "cxx", "includedir", fetchinfo.includedirs)))
+ table.join2(result, _translate_paths(_map_compflags(package, "cxx", "sysincludedir", fetchinfo.sysincludedirs)))
end
end
end
@@ -77,9 +87,9 @@ function _get_ldflags_from_packagedeps(package, opt)
if dep then
local fetchinfo = dep:fetch({external = false})
if fetchinfo then
- table.join2(result, _translate_paths(linker.map_flags("binary", {"cxx"}, "linkdir", fetchinfo.linkdirs)))
- table.join2(result, linker.map_flags("binary", {"cxx"}, "link", fetchinfo.links))
- table.join2(result, _translate_paths(linker.map_flags("binary", {"cxx"}, "syslink", fetchinfo.syslinks)))
+ table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "linkdir", fetchinfo.linkdirs)))
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "link", fetchinfo.links))
+ table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "syslink", fetchinfo.syslinks)))
end
end
end
@@ -93,9 +103,9 @@ function _get_cflags(package, opt)
if opt.cross then
table.join2(result, package:build_getenv("cflags"))
table.join2(result, package:build_getenv("cxflags"))
- table.join2(result, compiler.map_flags("c", "define", package:build_getenv("defines")))
- table.join2(result, compiler.map_flags("c", "includedir", package:build_getenv("includedirs")))
- table.join2(result, compiler.map_flags("c", "sysincludedir", package:build_getenv("sysincludedirs")))
+ table.join2(result, _map_compflags(package, "c", "define", package:build_getenv("defines")))
+ table.join2(result, _map_compflags(package, "c", "includedir", package:build_getenv("includedirs")))
+ table.join2(result, _map_compflags(package, "c", "sysincludedir", package:build_getenv("sysincludedirs")))
end
table.join2(result, package:config("cflags"))
table.join2(result, package:config("cxflags"))
@@ -118,9 +128,9 @@ function _get_cxxflags(package, opt)
if opt.cross then
table.join2(result, package:build_getenv("cxxflags"))
table.join2(result, package:build_getenv("cxflags"))
- table.join2(result, compiler.map_flags("cxx", "define", package:build_getenv("defines")))
- table.join2(result, compiler.map_flags("cxx", "includedir", package:build_getenv("includedirs")))
- table.join2(result, compiler.map_flags("cxx", "sysincludedir", package:build_getenv("sysincludedirs")))
+ table.join2(result, _map_compflags(package, "cxx", "define", package:build_getenv("defines")))
+ table.join2(result, _map_compflags(package, "cxx", "includedir", package:build_getenv("includedirs")))
+ table.join2(result, _map_compflags(package, "cxx", "sysincludedir", package:build_getenv("sysincludedirs")))
end
table.join2(result, package:config("cxxflags"))
table.join2(result, package:config("cxflags"))
@@ -142,9 +152,9 @@ function _get_asflags(package, opt)
local result = {}
if opt.cross then
table.join2(result, package:build_getenv("asflags"))
- table.join2(result, compiler.map_flags("as", "define", package:build_getenv("defines")))
- table.join2(result, compiler.map_flags("as", "includedir", package:build_getenv("includedirs")))
- table.join2(result, compiler.map_flags("as", "sysincludedir", package:build_getenv("sysincludedirs")))
+ table.join2(result, _map_compflags(package, "as", "define", package:build_getenv("defines")))
+ table.join2(result, _map_compflags(package, "as", "includedir", package:build_getenv("includedirs")))
+ table.join2(result, _map_compflags(package, "as", "sysincludedir", package:build_getenv("sysincludedirs")))
end
table.join2(result, package:config("asflags"))
if opt.asflags then
@@ -161,9 +171,9 @@ function _get_ldflags(package, opt)
local result = {}
if opt.cross then
table.join2(result, package:build_getenv("ldflags"))
- table.join2(result, linker.map_flags("binary", {"cxx"}, "link", package:build_getenv("links")))
- table.join2(result, linker.map_flags("binary", {"cxx"}, "syslink", package:build_getenv("syslinks")))
- table.join2(result, linker.map_flags("binary", {"cxx"}, "linkdir", package:build_getenv("linkdirs")))
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "link", package:build_getenv("links")))
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "syslink", package:build_getenv("syslinks")))
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "linkdir", package:build_getenv("linkdirs")))
end
table.join2(result, _get_ldflags_from_packagedeps(package, opt))
if opt.ldflags then
@@ -180,9 +190,9 @@ function _get_shflags(package, opt)
local result = {}
if opt.cross then
table.join2(result, package:build_getenv("shflags"))
- table.join2(result, linker.map_flags("shared", {"cxx"}, "link", package:build_getenv("links")))
- table.join2(result, linker.map_flags("shared", {"cxx"}, "syslink", package:build_getenv("syslinks")))
- table.join2(result, linker.map_flags("shared", {"cxx"}, "linkdir", package:build_getenv("linkdirs")))
+ table.join2(result, _map_linkflags(package, "shared", {"cxx"}, "link", package:build_getenv("links")))
+ table.join2(result, _map_linkflags(package, "shared", {"cxx"}, "syslink", package:build_getenv("syslinks")))
+ table.join2(result, _map_linkflags(package, "shared", {"cxx"}, "linkdir", package:build_getenv("linkdirs")))
end
table.join2(result, _get_ldflags_from_packagedeps(package, opt))
if opt.shflags then
diff --git a/xmake/toolchains/ndk/check.lua b/xmake/toolchains/ndk/check.lua
index 605fa250a..aaf1d609a 100644
--- a/xmake/toolchains/ndk/check.lua
+++ b/xmake/toolchains/ndk/check.lua
@@ -79,8 +79,5 @@ end
-- main entry
function main(toolchain)
_check_android_sdk(toolchain)
- _check_ndk(toolchain)
- -- TODO we should return the check result, but we need support builder with package first
- -- so we need improve remote ndk toolchain
- return true
+ return _check_ndk(toolchain)
end