diff options
| author | ruki <[email protected]> | 2024-04-19 10:41:30 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-04-19 10:41:30 +0800 |
| commit | 09b1a53d283597f6c19788e8b127ce3ddeb42f31 (patch) | |
| tree | dd789ae7c09d1e9d20e2749379d7ca050ddb7f08 | |
| parent | 39f3156b82e02d6cf4514309d6887f30cc962602 (diff) | |
| parent | 546dd2ee7ec2a4bae9b8a866300313bad9bb8c7a (diff) | |
Merge pull request #4927 from Arthapz/improve-package-runtimes
add support for --runtimes for autoconf, cmake, make and meson packages
| -rw-r--r-- | xmake/modules/package/tools/autoconf.lua | 10 | ||||
| -rw-r--r-- | xmake/modules/package/tools/cmake.lua | 18 | ||||
| -rw-r--r-- | xmake/modules/package/tools/make.lua | 38 | ||||
| -rw-r--r-- | xmake/modules/package/tools/meson.lua | 16 |
4 files changed, 71 insertions, 11 deletions
diff --git a/xmake/modules/package/tools/autoconf.lua b/xmake/modules/package/tools/autoconf.lua index f7a847ce0..7ffb355e7 100644 --- a/xmake/modules/package/tools/autoconf.lua +++ b/xmake/modules/package/tools/autoconf.lua @@ -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) diff --git a/xmake/modules/package/tools/cmake.lua b/xmake/modules/package/tools/cmake.lua index 2a0a4d006..063d13cb8 100644 --- a/xmake/modules/package/tools/cmake.lua +++ b/xmake/modules/package/tools/cmake.lua @@ -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 @@ -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) @@ -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) diff --git a/xmake/modules/package/tools/make.lua b/xmake/modules/package/tools/make.lua index 055e40faf..bb7a8124f 100644 --- a/xmake/modules/package/tools/make.lua +++ b/xmake/modules/package/tools/make.lua @@ -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") @@ -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")) @@ -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 = {} diff --git a/xmake/modules/package/tools/meson.lua b/xmake/modules/package/tools/meson.lua index a0a7b47bf..6e0c27d7e 100644 --- a/xmake/modules/package/tools/meson.lua +++ b/xmake/modules/package/tools/meson.lua @@ -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 @@ -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 |
