diff options
| author | Arthur LAURENT <[email protected]> | 2024-04-03 04:56:57 +0200 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2024-04-10 16:01:26 +0200 |
| commit | 5a29f4cd631037145d74ad67227c5486c9a08247 (patch) | |
| tree | b3e9cacc019ec7da8e56d36cee027c485fa2b583 | |
| parent | b559b4c1591e448b0f3faaa5928fc79e8286b8c3 (diff) | |
add support for --runtimes on autoconf, cmake, make and meson
buildsystems
| -rw-r--r-- | xmake/modules/package/tools/autoconf.lua | 10 | ||||
| -rw-r--r-- | xmake/modules/package/tools/cmake.lua | 19 | ||||
| -rw-r--r-- | xmake/modules/package/tools/make.lua | 39 | ||||
| -rw-r--r-- | xmake/modules/package/tools/meson.lua | 16 |
4 files changed, 73 insertions, 11 deletions
diff --git a/xmake/modules/package/tools/autoconf.lua b/xmake/modules/package/tools/autoconf.lua index f7a847ce0..05e968a23 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:config("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..be01d8867 100644 --- a/xmake/modules/package/tools/cmake.lua +++ b/xmake/modules/package/tools/cmake.lua @@ -184,6 +184,13 @@ 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 + table.join2(result, _map_compflags(package, "cxx", "runtime", package:config("runtimes"))) + 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_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 +240,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 +272,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..a69e738fd 100644 --- a/xmake/modules/package/tools/make.lua +++ b/xmake/modules/package/tools/make.lua @@ -31,14 +31,36 @@ 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:config("runtimes") + local runtimes = package:config("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 +71,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 +83,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 d76c36784..f293cf420 100644 --- a/xmake/modules/package/tools/meson.lua +++ b/xmake/modules/package/tools/meson.lua @@ -268,6 +268,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:config("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 @@ -316,8 +328,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 |
