Skip to content

Commit

Permalink
Merge pull request #4927 from Arthapz/improve-package-runtimes
Browse files Browse the repository at this point in the history
add support for --runtimes for autoconf, cmake, make and meson packages
  • Loading branch information
waruqi committed Apr 19, 2024
2 parents 39f3156 + 546dd2e commit 09b1a53
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 11 deletions.
10 changes: 10 additions & 0 deletions xmake/modules/package/tools/autoconf.lua
Expand Up @@ -304,6 +304,16 @@ function buildenvs(package, opt)
table.join2(cxxflags, package:_generate_lto_configs("cxx").cxxflags)
table.join2(ldflags, package:_generate_lto_configs().ldflags)
end
local runtimes = package:runtimes()
if runtimes then
local fake_target = {is_shared = function(_) return false end,
sourcekinds = function(_) return "cxx" end}
table.join2(cxxflags, _map_compflags(fake_target, "cxx", "runtime", runtimes))
table.join2(ldflags, _map_linkflags(fake_target, "binary", {"cxx"}, "runtime", runtimes))
fake_target = {is_shared = function(_) return true end,
sourcekinds = function(_) return "cxx" end}
table.join2(shflags, _map_linkflags(fake_target, "shared", {"cxx"}, "runtime", runtimes))
end
if package:config("asan") then
table.join2(cflags, package:_generate_sanitizer_configs("address", "cc").cflags)
table.join2(cxxflags, package:_generate_sanitizer_configs("address", "cxx").cxxflags)
Expand Down
18 changes: 18 additions & 0 deletions xmake/modules/package/tools/cmake.lua
Expand Up @@ -184,6 +184,12 @@ function _get_cxxflags(package, opt)
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
local runtimes = package:runtimes()
if runtimes then
local fake_target = {is_shared = function(_) return false end,
sourcekinds = function(_) return "cxx" end}
table.join2(result, _map_compflags(fake_target, "cxx", "runtime", runtimes))
end
table.join2(result, package:config("cxxflags"))
table.join2(result, package:config("cxflags"))
if opt.cxxflags then
Expand Down Expand Up @@ -233,6 +239,12 @@ function _get_ldflags(package, opt)
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
local runtimes = package:config("runtimes")
if runtimes then
local fake_target = {is_shared = function(_) return false end,
sourcekinds = function(_) return "cxx" end}
table.join2(result, _map_linkflags(fake_target, "binary", {"cxx"}, "runtime", runtimes))
end
table.join2(result, package:config("ldflags"))
if package:config("lto") then
table.join2(result, package:_generate_lto_configs().ldflags)
Expand All @@ -259,6 +271,12 @@ function _get_shflags(package, opt)
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
local runtimes = package:config("runtimes")
if runtimes then
local fake_target = {is_shared = function(_) return true end,
sourcekinds = function(_) return "cxx" end}
table.join2(result, _map_linkflags(fake_target, "shared", {"cxx"}, "runtime", runtimes))
end
table.join2(result, package:config("shflags"))
if package:config("lto") then
table.join2(result, package:_generate_lto_configs().shflags)
Expand Down
38 changes: 29 additions & 9 deletions xmake/modules/package/tools/make.lua
Expand Up @@ -31,14 +31,35 @@ 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 the build environments
function buildenvs(package)
local envs = {}
local cflags = table.join(table.wrap(package:build_getenv("cxflags")), package:build_getenv("cflags"))
local cxxflags = table.join(table.wrap(package:build_getenv("cxflags")), package:build_getenv("cxxflags"))
local asflags = table.copy(table.wrap(package:config("asflags")))
local ldflags = table.copy(table.wrap(package:config("ldflags")))
local shflags = table.copy(table.wrap(package:config("shflags")))
local runtimes = package:runtimes()
if runtimes then
local fake_target = {is_shared = function(_) return false end,
sourcekinds = function(_) return "cxx" end}
table.join2(cxxflags, _map_compflags(fake_target, "cxx", "runtime", runtimes))
table.join2(ldflags, _map_linkflags(fake_target, "binary", {"cxx"}, "runtime", runtimes))
fake_target = {is_shared = function(_) return true end,
sourcekinds = function(_) return "cxx" end}
table.join2(shflags, _map_linkflags(fake_target, "shared", {"cxx"}, "runtime", runtimes))
end
if package:is_plat(os.host()) then
local cflags = table.join(table.wrap(package:config("cxflags")), package:config("cflags"))
local cxxflags = table.join(table.wrap(package:config("cxflags")), package:config("cxxflags"))
local asflags = table.copy(table.wrap(package:config("asflags")))
local ldflags = table.copy(table.wrap(package:config("ldflags")))
if package:is_plat("linux") and package:is_arch("i386") then
table.insert(cflags, "-m32")
table.insert(cxxflags, "-m32")
Expand All @@ -49,9 +70,8 @@ function buildenvs(package)
envs.CXXFLAGS = table.concat(cxxflags, ' ')
envs.ASFLAGS = table.concat(asflags, ' ')
envs.LDFLAGS = table.concat(ldflags, ' ')
envs.SHFLAGS = table.concat(shflags, ' ')
else
local cflags = table.join(table.wrap(package:build_getenv("cxflags")), package:build_getenv("cflags"))
local cxxflags = table.join(table.wrap(package:build_getenv("cxflags")), package:build_getenv("cxxflags"))
envs.CC = _translate_bin_path(package:build_getenv("cc"))
envs.CXX = _translate_bin_path(package:build_getenv("cxx"))
envs.AS = _translate_bin_path(package:build_getenv("as"))
Expand All @@ -62,10 +82,10 @@ function buildenvs(package)
envs.RANLIB = _translate_bin_path(package:build_getenv("ranlib"))
envs.CFLAGS = table.concat(cflags, ' ')
envs.CXXFLAGS = table.concat(cxxflags, ' ')
envs.ASFLAGS = table.concat(table.wrap(package:build_getenv("asflags")), ' ')
envs.ASFLAGS = table.concat(asflags, ' ')
envs.ARFLAGS = table.concat(table.wrap(package:build_getenv("arflags")), ' ')
envs.LDFLAGS = table.concat(table.wrap(package:build_getenv("ldflags")), ' ')
envs.SHFLAGS = table.concat(table.wrap(package:build_getenv("shflags")), ' ')
envs.LDFLAGS = table.concat(ldflags, ' ')
envs.SHFLAGS = table.concat(shflags, ' ')
end
local ACLOCAL_PATH = {}
local PKG_CONFIG_PATH = {}
Expand Down
16 changes: 14 additions & 2 deletions xmake/modules/package/tools/meson.lua
Expand Up @@ -286,6 +286,18 @@ function _get_configs_file(package, opt)
table.join2(cxxflags, _get_cflags_from_packagedeps(package, opt))
table.join2(ldflags, _get_ldflags_from_packagedeps(package, opt))
table.join2(shflags, _get_ldflags_from_packagedeps(package, opt))
-- add runtimes flags
for _, runtime in ipairs(package:runtimes()) do
if not runtime:startswith("M") then
local fake_target = {is_shared = function(_) return false end,
sourcekinds = function(_) return "cxx" end}
table.join2(cxxflags, _map_compflags(fake_target, "cxx", "runtime", {runtime}))
table.join2(ldflags, _map_linkflags(fake_target, "binary", {"cxx"}, "runtime", {runtime}))
fake_target = {is_shared = function(_) return true end,
sourcekinds = function(_) return "cxx" end}
table.join2(shflags, _map_linkflags(fake_target, "shared", {"cxx"}, "runtime", {runtime}))
end
end
if #cflags > 0 then
file:print("c_args=['%s']", table.concat(cflags, "', '"))
end
Expand Down Expand Up @@ -334,8 +346,8 @@ function _get_configs(package, configs, opt)
table.insert(configs, "-Db_sanitize=address")
end

-- add runtimes flags
if package:is_plat("windows") then
-- add vs runtimes flags
if package:has_runtime("MT*", "MD*") then
if package:has_runtime("MT") then
table.insert(configs, "-Db_vscrt=mt")
elseif package:has_runtime("MTd") then
Expand Down

0 comments on commit 09b1a53

Please sign in to comment.