diff options
| author | ruki <[email protected]> | 2026-08-21 16:25:24 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-08-21 16:25:24 +0800 |
| commit | 9923d9d165bfc54bb91690750c9a35efc4bd6cea (patch) | |
| tree | 4e2340245cf0420f1f800144c86579567c1718cb | |
| parent | de769d5574d92a37253d16b9617d998605bfd727 (diff) | |
| parent | 7be835ddea05e897959098a1b7766602abea31a6 (diff) | |
Merge pull request #7719 from Northn/features/issue-7718
Propagate package vector extensions to consumers
6 files changed, 73 insertions, 0 deletions
diff --git a/tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/xmake.lua b/tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/xmake.lua new file mode 100644 index 000000000..c62605e3c --- /dev/null +++ b/tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/xmake.lua @@ -0,0 +1,22 @@ +package("usage-requirements") + set_kind("library", {headeronly = true}) + set_sourcedir(path.join(os.scriptdir(), "src")) + + add_components("enabled") + add_components("disabled") + + on_load(function (package) + package:add("vectorexts", "avx") + end) + + on_component("enabled", function (package, component) + component:add("vectorexts", "avx2") + end) + + on_component("disabled", function (package, component) + component:add("vectorexts", "avx512") + end) + + on_install(function (package) + os.cp("README.md", package:installdir()) + end) diff --git a/tests/projects/package/usage_requirements/src/main.cpp b/tests/projects/package/usage_requirements/src/main.cpp new file mode 100644 index 000000000..33c14ce1d --- /dev/null +++ b/tests/projects/package/usage_requirements/src/main.cpp @@ -0,0 +1,3 @@ +int main() { + return 0; +} diff --git a/tests/projects/package/usage_requirements/src/usage.cpp b/tests/projects/package/usage_requirements/src/usage.cpp new file mode 100644 index 000000000..b1fbda2b3 --- /dev/null +++ b/tests/projects/package/usage_requirements/src/usage.cpp @@ -0,0 +1,7 @@ +#if !defined(__AVX2__) && !defined(_M_AVX2) && !defined(__AVX2) +# error AVX2 is required by the package +#endif + +int usage() { + return 0; +} diff --git a/tests/projects/package/usage_requirements/test.lua b/tests/projects/package/usage_requirements/test.lua new file mode 100644 index 000000000..ca225630a --- /dev/null +++ b/tests/projects/package/usage_requirements/test.lua @@ -0,0 +1,5 @@ +function main(t) + if os.subarch():startswith("x") or os.subarch() == "i386" then + t:build() + end +end diff --git a/tests/projects/package/usage_requirements/xmake.lua b/tests/projects/package/usage_requirements/xmake.lua new file mode 100644 index 000000000..7f9eb9107 --- /dev/null +++ b/tests/projects/package/usage_requirements/xmake.lua @@ -0,0 +1,35 @@ +add_rules("mode.debug", "mode.release") + +add_repositories("usage-requirements-repo repo") +add_requires("usage-requirements", {system = false}) + +local function _has_value_from(target, name, source, expected) + local values = target:get_from(name, source, {interface = true}) + for _, source_values in ipairs(values or {}) do + if table.contains(table.wrap(source_values), expected) then + return true + end + end +end + +target("usage") + set_kind("static") + add_files("src/usage.cpp") + add_packages("usage-requirements", {components = "enabled", public = true}) + before_build(function (target) + local package = assert(target:pkg("usage-requirements")) + assert(table.contains(package:get("vectorexts"), "avx")) + assert(_has_value_from(target, "vectorexts", "package::*", "avx")) + assert(_has_value_from(target, "vectorexts", "package::*", "avx2")) + assert(not _has_value_from(target, "vectorexts", "package::*", "avx512")) + end) + +target("consumer") + set_kind("binary") + add_deps("usage") + add_files("src/main.cpp") + before_build(function (target) + assert(_has_value_from(target, "vectorexts", "dep::usage/package::*", "avx")) + assert(_has_value_from(target, "vectorexts", "dep::usage/package::*", "avx2")) + assert(not _has_value_from(target, "vectorexts", "dep::usage/package::*", "avx512")) + end) diff --git a/xmake/languages/c/load.lua b/xmake/languages/c/load.lua index a265f0dbd..7497cc004 100644 --- a/xmake/languages/c/load.lua +++ b/xmake/languages/c/load.lua @@ -61,6 +61,7 @@ function _get_apis() , "package.add_defines" , "package.add_undefines" , "package.add_frameworks" + , "package.add_vectorexts" , "package.add_rpathdirs" , "package.add_linkdirs" , "package.add_includedirs" --@note we need not uses paths for package, see https://github.com/xmake-io/xmake/issues/717 |
