From 501631cfd370de631d5487bebbbc0980f0a5069b Mon Sep 17 00:00:00 2001 From: Northn Date: Tue, 18 Aug 2026 19:05:25 +0400 Subject: propagate package vector extensions to consumers --- .../packages/u/usage-requirements/src/README.md | 1 + .../repo/packages/u/usage-requirements/xmake.lua | 22 ++++++++++++++ .../package/usage_requirements/src/main.cpp | 4 +++ .../package/usage_requirements/src/usage.cpp | 8 +++++ tests/projects/package/usage_requirements/test.lua | 5 ++++ .../projects/package/usage_requirements/xmake.lua | 35 ++++++++++++++++++++++ xmake/languages/c/load.lua | 1 + 7 files changed, 76 insertions(+) create mode 100644 tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/src/README.md create mode 100644 tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/xmake.lua create mode 100644 tests/projects/package/usage_requirements/src/main.cpp create mode 100644 tests/projects/package/usage_requirements/src/usage.cpp create mode 100644 tests/projects/package/usage_requirements/test.lua create mode 100644 tests/projects/package/usage_requirements/xmake.lua diff --git a/tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/src/README.md b/tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/src/README.md new file mode 100644 index 000000000..4481fa5f7 --- /dev/null +++ b/tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/src/README.md @@ -0,0 +1 @@ +Local source fixture for the usage-requirements package tests. 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..905869dfa --- /dev/null +++ b/tests/projects/package/usage_requirements/src/main.cpp @@ -0,0 +1,4 @@ +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..acef69851 --- /dev/null +++ b/tests/projects/package/usage_requirements/src/usage.cpp @@ -0,0 +1,8 @@ +#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 -- cgit v1.3.1 From 6b329821d10803c516cb75cf0cd42d9b09e0e742 Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 21 Aug 2026 16:23:32 +0800 Subject: Update main.cpp --- tests/projects/package/usage_requirements/src/main.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/projects/package/usage_requirements/src/main.cpp b/tests/projects/package/usage_requirements/src/main.cpp index 905869dfa..33c14ce1d 100644 --- a/tests/projects/package/usage_requirements/src/main.cpp +++ b/tests/projects/package/usage_requirements/src/main.cpp @@ -1,4 +1,3 @@ -int main() -{ +int main() { return 0; } -- cgit v1.3.1 From b964455eb8dba400e03d1123414a1dc45e2a30c7 Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 21 Aug 2026 16:23:54 +0800 Subject: Fix usage function declaration syntax --- tests/projects/package/usage_requirements/src/usage.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/projects/package/usage_requirements/src/usage.cpp b/tests/projects/package/usage_requirements/src/usage.cpp index acef69851..b1fbda2b3 100644 --- a/tests/projects/package/usage_requirements/src/usage.cpp +++ b/tests/projects/package/usage_requirements/src/usage.cpp @@ -2,7 +2,6 @@ # error AVX2 is required by the package #endif -int usage() -{ +int usage() { return 0; } -- cgit v1.3.1 From 7be835ddea05e897959098a1b7766602abea31a6 Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 21 Aug 2026 16:24:31 +0800 Subject: Delete tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/src/README.md --- .../usage_requirements/repo/packages/u/usage-requirements/src/README.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/src/README.md diff --git a/tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/src/README.md b/tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/src/README.md deleted file mode 100644 index 4481fa5f7..000000000 --- a/tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/src/README.md +++ /dev/null @@ -1 +0,0 @@ -Local source fixture for the usage-requirements package tests. -- cgit v1.3.1