xmake.lua 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package("onedpl")
  2. set_kind("library", {headeronly = true})
  3. set_homepage("https://www.intel.com/content/www/us/en/developer/tools/oneapi/dpc-library.html")
  4. set_description("oneDPL is part of the UXL Foundation and is an implementation of the oneAPI specification for the oneDPL component.")
  5. add_urls("https://github.com/oneapi-src/oneDPL/archive/refs/tags/oneDPL-$(version).tar.gz")
  6. add_urls("https://github.com/oneapi-src/oneDPL/archive/refs/tags/oneDPL-$(version)-release.tar.gz")
  7. add_versions("2021.6.1", "4995fe2ed2724b89cdb52c4b6c9af22e146b48d2561abdafdaaa06262dbd67c4")
  8. add_versions("2022.5.0-rc1", "9180c60331ec5b307dd89a5d8bfcd096667985c6761c52322405d4b69193ed88")
  9. add_versions("2022.6.0-rc1", "45698e2f97de085806aa685ec1fe3ccecc28251d744b016fca112aa3ecc90c9a")
  10. add_versions("2022.7.0", "095be49a9f54633d716e82f66cc3f1e5e858f19ef47639e4c94bfc6864292990")
  11. add_versions("2022.7.1", "0e6a1bee7a4f4375091c98b0b5290edf3178bb810384e0e106bf96c03649a754")
  12. add_versions("2022.8.0", "bef761a15364ffc51a74bd99b692185e5bca518d8b6a89770eeaf17309bd66b8")
  13. add_versions("2022.9.0", "b38844878af9ecee07ca719426b90fec77f79a35c7bc55154422cb0d7f654343")
  14. add_configs("backend", {description = "Choose threading backend.", default = "tbb", type = "string", values = {"tbb", "dpcpp", "dpcpp_only", "omp", "serial"}})
  15. add_deps("cmake")
  16. on_fetch("fetch")
  17. on_load("windows", "linux", function (package)
  18. local backend = package:config("backend")
  19. if backend == "tbb" then
  20. package:add("deps", "tbb")
  21. package:add("defines", "ONEDPL_USE_TBB_BACKEND=1")
  22. package:add("ldflags", "-ltbb")
  23. elseif backend == "omp" then
  24. package:add("deps", "openmp")
  25. package:add("defines", "ONEDPL_USE_OPENMP_BACKEND=1")
  26. elseif backend == "dpcpp" then
  27. package:add("deps", "tbb")
  28. package:add("ldflags", "-ltbb")
  29. package:add("defines", "ONEDPL_USE_TBB_BACKEND=1")
  30. package:add("defines", "ONEDPL_USE_DPCPP_BACKEND=1")
  31. elseif backend == "dpcpp_only" then
  32. package:add("defines", "ONEDPL_USE_TBB_BACKEND=0")
  33. package:add("defines", "ONEDPL_USE_DPCPP_BACKEND=1")
  34. elseif backend == "serial" then
  35. package:add("defines", "ONEDPL_USE_OPENMP_BACKEND=0")
  36. package:add("defines", "ONEDPL_USE_TBB_BACKEND=0")
  37. package:add("defines", "ONEDPL_USE_DPCPP_BACKEND=0")
  38. end
  39. if package:is_plat("windows") then
  40. package:add("cxxflags", "/Zc:__cplusplus")
  41. end
  42. end)
  43. on_install("windows", "linux", function (package)
  44. io.replace("CMakeLists.txt", "add_subdirectory(test)", "", {plain = true})
  45. -- c.f. https://github.com/oneapi-src/oneDPL/issues/1602 and https://github.com/oneapi-src/oneDPL/commit/e25afef957b50536c5091ed23150fff10921b18f
  46. io.replace("include/oneapi/dpl/pstl/algorithm_impl.h", "(_PSTL_UDR_PRESENT || _ONEDPL_UDR_PRESENT)", "_ONEDPL_UDR_PRESENT // _PSTL_UDR_PRESENT", {plain = true})
  47. io.replace("include/oneapi/dpl/pstl/numeric_impl.h", "(_PSTL_UDS_PRESENT || _ONEDPL_UDS_PRESENT)", "_ONEDPL_UDS_PRESENT // PSTL_UDS_PRESENT", {plain = true})
  48. local configs = {}
  49. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
  50. table.insert(configs, "-DONEDPL_BACKEND=" .. package:config("backend"))
  51. import("package.tools.cmake").install(package, configs)
  52. end)
  53. on_test(function (package)
  54. assert(package:check_cxxsnippets({test = [[
  55. #include <oneapi/dpl/algorithm>
  56. #include <oneapi/dpl/execution>
  57. #include <oneapi/dpl/numeric>
  58. #include <vector>
  59. void test() {
  60. const size_t size = 10000000;
  61. std::vector<double> v1(size), v2(size);
  62. double res = std::transform_reduce(oneapi::dpl::execution::par_unseq,
  63. v1.cbegin(), v1.cend(), v2.cbegin(), .0);
  64. }
  65. ]]}, {configs = {languages = "c++17"}}))
  66. end)