diff options
| author | Northn <[email protected]> | 2026-08-18 19:05:25 +0400 |
|---|---|---|
| committer | Northn <[email protected]> | 2026-08-18 19:27:21 +0400 |
| commit | 501631cfd370de631d5487bebbbc0980f0a5069b (patch) | |
| tree | 6c381f5f08bcdef9860f0b802edf798bbc190cf1 | |
| parent | de769d5574d92a37253d16b9617d998605bfd727 (diff) | |
propagate package vector extensions to consumers
7 files changed, 76 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) 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 |
