summaryrefslogtreecommitdiff
path: root/xmake/modules
diff options
context:
space:
mode:
authorruki <[email protected]>2021-03-22 12:41:42 +0800
committerGitHub <[email protected]>2021-03-22 12:41:42 +0800
commit131800db6dfc7447e85958a4aef887ffb3bedf7f (patch)
tree8ac6f4a7970ece5e22098b8e0a8a9e7afb2bd6b0 /xmake/modules
parentbfd116d2e53d9836fe42a6a1b13d6d6986baa8ad (diff)
parent7e37f40d47668f01b8d21255caa40b1b153f5c30 (diff)
Merge pull request #1294 from xmake-io/ndk
support to use remote ndk to build bpf program on linux
Diffstat (limited to 'xmake/modules')
-rw-r--r--xmake/modules/package/tools/autoconf.lua40
-rw-r--r--xmake/modules/package/tools/cmake.lua52
-rw-r--r--xmake/modules/private/action/require/impl/install_packages.lua12
-rw-r--r--xmake/modules/private/action/require/impl/package.lua6
4 files changed, 66 insertions, 44 deletions
diff --git a/xmake/modules/package/tools/autoconf.lua b/xmake/modules/package/tools/autoconf.lua
index 3bfa23181..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))
- 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/modules/private/action/require/impl/install_packages.lua b/xmake/modules/private/action/require/impl/install_packages.lua
index fbedc2bc9..096190945 100644
--- a/xmake/modules/private/action/require/impl/install_packages.lua
+++ b/xmake/modules/private/action/require/impl/install_packages.lua
@@ -392,14 +392,14 @@ function _get_package_installdeps(packages)
end
for _, instance in ipairs(packages) do
local deps = {}
- if instance:deps() then
- deps = table.copy(instance:deps())
+ if instance:orderdeps() then
+ deps = table.copy(instance:orderdeps())
end
-- patch toolchain/packages to installdeps, because we need install toolchain package first
- if instance:is_toplevel() then
- for _, toolchain in ipairs(instance:toolchains()) do
- for _, packagename in ipairs(toolchain:config("packages")) do
- deps[packagename] = packagesmap[packagename]
+ for _, toolchain in ipairs(instance:toolchains()) do
+ for _, packagename in ipairs(toolchain:config("packages")) do
+ if packagesmap[packagename] ~= instance then -- avoid loop recursion
+ table.insert(deps, packagesmap[packagename])
end
end
end
diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua
index dc6720eb5..cc6d43afd 100644
--- a/xmake/modules/private/action/require/impl/package.lua
+++ b/xmake/modules/private/action/require/impl/package.lua
@@ -43,6 +43,7 @@ end
--
-- semver
-- - add_requires("tbox >=1.5.1", "zlib >=1.2.11")
+-- - add_requires("tbox", {version = ">=1.5.1"})
--
-- git branch/tag
-- - add_requires("zlib master")
@@ -149,7 +150,7 @@ function _parse_require(require_str, requires_extra, parentinfo)
{
originstr = require_str,
reponame = reponame,
- version = version,
+ version = require_extra.version or version,
plat = require_extra.plat, -- require package in the given platform
arch = require_extra.arch, -- require package in the given architecture
targetos = require_extra.targetos, -- require package in the given target os
@@ -340,8 +341,9 @@ end
-- init requireinfo
function _init_requireinfo(requireinfo, package, opt)
-- pass root toolchains to top library package
- if opt.is_toplevel and package:is_plat("cross") and package:is_library() then
+ if opt.is_toplevel and package:is_cross() and package:is_library() then
requireinfo.configs = requireinfo.configs or {}
+ -- TODO get extra configs of toolchain
requireinfo.configs.toolchains = requireinfo.configs.toolchains or project.get("target.toolchains") or get_config("toolchain")
end
end