summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorNorthn <[email protected]>2026-08-18 19:05:25 +0400
committerNorthn <[email protected]>2026-08-18 19:27:21 +0400
commit501631cfd370de631d5487bebbbc0980f0a5069b (patch)
tree6c381f5f08bcdef9860f0b802edf798bbc190cf1 /tests
parentde769d5574d92a37253d16b9617d998605bfd727 (diff)
propagate package vector extensions to consumers
Diffstat (limited to 'tests')
-rw-r--r--tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/src/README.md1
-rw-r--r--tests/projects/package/usage_requirements/repo/packages/u/usage-requirements/xmake.lua22
-rw-r--r--tests/projects/package/usage_requirements/src/main.cpp4
-rw-r--r--tests/projects/package/usage_requirements/src/usage.cpp8
-rw-r--r--tests/projects/package/usage_requirements/test.lua5
-rw-r--r--tests/projects/package/usage_requirements/xmake.lua35
6 files changed, 75 insertions, 0 deletions
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)