diff options
| author | ruki <[email protected]> | 2024-08-30 23:18:54 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-08-30 23:18:54 +0800 |
| commit | 21ae0fa4451c40b14199fdb0df8cf61c51e26de9 (patch) | |
| tree | 2868ee3cb4397251db2a40748f0875920b44051c /xmake/modules/package/tools/cmake.lua | |
| parent | 2f3f1a02d2e28f77e1da4a7291fe01a0642f2a74 (diff) | |
| parent | b7ef860d94d16822e75d56b6f48ad3416913e095 (diff) | |
Merge pull request #5543 from xmake-io/package
improve linker for package #5542
Diffstat (limited to 'xmake/modules/package/tools/cmake.lua')
| -rw-r--r-- | xmake/modules/package/tools/cmake.lua | 70 |
1 files changed, 27 insertions, 43 deletions
diff --git a/xmake/modules/package/tools/cmake.lua b/xmake/modules/package/tools/cmake.lua index 9784033b4..8e103959d 100644 --- a/xmake/modules/package/tools/cmake.lua +++ b/xmake/modules/package/tools/cmake.lua @@ -23,8 +23,6 @@ import("core.base.option") import("core.base.semver") import("core.tool.toolchain") import("core.project.config") -import("core.tool.linker") -import("core.tool.compiler") import("core.project.project") import("lib.detect.find_file") import("lib.detect.find_tool") @@ -67,16 +65,6 @@ 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 pkg-config, we need force to find it, because package install environments will be changed function _get_pkgconfig(package) -- meson need fullpath pkgconfig @@ -146,13 +134,13 @@ function _get_cflags_from_packagedeps(package, opt) local result = {} if values then if values.defines then - table.join2(result, _map_compflags(package, "cxx", "define", values.defines)) + table.join2(result, toolchain_utils.map_compflags_for_package(package, "cxx", "define", values.defines)) end if values.includedirs then - table.join2(result, _translate_paths(_map_compflags(package, "cxx", "includedir", values.includedirs))) + table.join2(result, _translate_paths(toolchain_utils.map_compflags_for_package(package, "cxx", "includedir", values.includedirs))) end if values.sysincludedirs then - table.join2(result, _translate_paths(_map_compflags(package, "cxx", "sysincludedir", values.sysincludedirs))) + table.join2(result, _translate_paths(toolchain_utils.map_compflags_for_package(package, "cxx", "sysincludedir", values.sysincludedirs))) end end return result @@ -177,16 +165,16 @@ function _get_ldflags_from_packagedeps(package, opt) local result = {} if values then if values.linkdirs then - table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "linkdir", values.linkdirs))) + table.join2(result, _translate_paths(toolchain_utils.map_linkflags_for_package(package, "binary", {"cxx"}, "linkdir", values.linkdirs))) end if values.links then - table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "link", values.links)) + table.join2(result, toolchain_utils.map_linkflags_for_package(package, "binary", {"cxx"}, "link", values.links)) end if values.syslinks then - table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "syslink", values.syslinks))) + table.join2(result, _translate_paths(toolchain_utils.map_linkflags_for_package(package, "binary", {"cxx"}, "syslink", values.syslinks))) end if values.frameworks then - table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "framework", values.frameworks)) + table.join2(result, toolchain_utils.map_linkflags_for_package(package, "binary", {"cxx"}, "framework", values.frameworks)) end end return result @@ -199,9 +187,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, _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"))) + table.join2(result, toolchain_utils.map_compflags_for_package(package, "c", "define", package:build_getenv("defines"))) + table.join2(result, toolchain_utils.map_compflags_for_package(package, "c", "includedir", package:build_getenv("includedirs"))) + table.join2(result, toolchain_utils.map_compflags_for_package(package, "c", "sysincludedir", package:build_getenv("sysincludedirs"))) end table.join2(result, package:config("cflags")) table.join2(result, package:config("cxflags")) @@ -230,9 +218,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, _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"))) + table.join2(result, toolchain_utils.map_compflags_for_package(package, "cxx", "define", package:build_getenv("defines"))) + table.join2(result, toolchain_utils.map_compflags_for_package(package, "cxx", "includedir", package:build_getenv("includedirs"))) + table.join2(result, toolchain_utils.map_compflags_for_package(package, "cxx", "sysincludedir", package:build_getenv("sysincludedirs"))) end table.join2(result, package:config("cxxflags")) table.join2(result, package:config("cxflags")) @@ -260,9 +248,9 @@ function _get_asflags(package, opt) local result = {} if opt.cross then table.join2(result, package:build_getenv("asflags")) - 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"))) + table.join2(result, toolchain_utils.map_compflags_for_package(package, "as", "define", package:build_getenv("defines"))) + table.join2(result, toolchain_utils.map_compflags_for_package(package, "as", "includedir", package:build_getenv("includedirs"))) + table.join2(result, toolchain_utils.map_compflags_for_package(package, "as", "sysincludedir", package:build_getenv("sysincludedirs"))) end table.join2(result, package:config("asflags")) if opt.asflags then @@ -279,9 +267,9 @@ function _get_ldflags(package, opt) local result = {} if opt.cross then table.join2(result, package:build_getenv("ldflags")) - 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"))) + table.join2(result, toolchain_utils.map_linkflags_for_package(package, "binary", {"cxx"}, "link", package:build_getenv("links"))) + table.join2(result, toolchain_utils.map_linkflags_for_package(package, "binary", {"cxx"}, "syslink", package:build_getenv("syslinks"))) + table.join2(result, toolchain_utils.map_linkflags_for_package(package, "binary", {"cxx"}, "linkdir", package:build_getenv("linkdirs"))) end table.join2(result, package:config("ldflags")) if package:config("lto") then @@ -305,9 +293,9 @@ function _get_shflags(package, opt) local result = {} if opt.cross then table.join2(result, package:build_getenv("shflags")) - 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"))) + table.join2(result, toolchain_utils.map_linkflags_for_package(package, "shared", {"cxx"}, "link", package:build_getenv("links"))) + table.join2(result, toolchain_utils.map_linkflags_for_package(package, "shared", {"cxx"}, "syslink", package:build_getenv("syslinks"))) + table.join2(result, toolchain_utils.map_linkflags_for_package(package, "shared", {"cxx"}, "linkdir", package:build_getenv("linkdirs"))) end table.join2(result, package:config("shflags")) if package:config("lto") then @@ -881,15 +869,11 @@ function _get_envs_for_runtime_flags(package, configs, opt) local envs = {} local runtimes = package:runtimes() if runtimes then - local fake_target = {is_shared = function(_) return false end, - sourcekinds = function(_) return "cc" end} - envs[format("CMAKE_C_FLAGS_%s", buildtype)] = _map_compflags(fake_target, "c", "runtime", runtimes) - fake_target.sourcekinds = function(_) return "cxx" end - envs[format("CMAKE_CXX_FLAGS_%s", buildtype)] = _map_compflags(fake_target, "cxx", "runtime", runtimes) - envs[format("CMAKE_EXE_LINKER_FLAGS_%s", buildtype)] = _map_linkflags(fake_target, "binary", {"cxx"}, "runtime", runtimes) - envs[format("CMAKE_STATIC_LINKER_FLAGS_%s", buildtype)] = _map_linkflags(fake_target, "static", {"cxx"}, "runtime", runtimes) - fake_target.is_shared = function(_) return true end - envs[format("CMAKE_SHARED_LINKER_FLAGS_%s", buildtype)] = _map_linkflags(fake_target, "shared", {"cxx"}, "runtime", runtimes) + envs[format("CMAKE_C_FLAGS_%s", buildtype)] = toolchain_utils.map_compflags_for_package(package, "c", "runtime", runtimes) + envs[format("CMAKE_CXX_FLAGS_%s", buildtype)] = toolchain_utils.map_compflags_for_package(package, "cxx", "runtime", runtimes) + envs[format("CMAKE_EXE_LINKER_FLAGS_%s", buildtype)] = toolchain_utils.map_linkflags_for_package(package, "binary", {"cxx"}, "runtime", runtimes) + envs[format("CMAKE_STATIC_LINKER_FLAGS_%s", buildtype)] = toolchain_utils.map_linkflags_for_package(package, "static", {"cxx"}, "runtime", runtimes) + envs[format("CMAKE_SHARED_LINKER_FLAGS_%s", buildtype)] = toolchain_utils.map_linkflags_for_package(package, "shared", {"cxx"}, "runtime", runtimes) end return envs end |
